()
| 51 | } |
| 52 | |
| 53 | parse(): CMap { |
| 54 | const result = new CMap(); |
| 55 | let previousToken: Token = null; |
| 56 | let token = this.parseNextToken(); |
| 57 | |
| 58 | while (token !== null) { |
| 59 | if (isOperator(token)) { |
| 60 | if (token.op === "endcmap") { |
| 61 | break; |
| 62 | } |
| 63 | |
| 64 | if (token.op === "usecmap" && isName(previousToken)) { |
| 65 | // usecmap not supported (would need external CMap lookup) |
| 66 | // In PDF context, the PDF reader handles this |
| 67 | } else if (typeof previousToken === "number") { |
| 68 | switch (token.op) { |
| 69 | case "begincodespacerange": |
| 70 | this.parseCodespaceRange(previousToken, result); |
| 71 | break; |
| 72 | case "beginbfchar": |
| 73 | this.parseBfChar(previousToken, result); |
| 74 | break; |
| 75 | case "beginbfrange": |
| 76 | this.parseBfRange(previousToken, result); |
| 77 | break; |
| 78 | case "begincidchar": |
| 79 | this.parseCidChar(previousToken, result); |
| 80 | break; |
| 81 | case "begincidrange": |
| 82 | this.parseCidRange(previousToken, result); |
| 83 | break; |
| 84 | } |
| 85 | } |
| 86 | } else if (isName(token)) { |
| 87 | this.parseLiteralName(token, result); |
| 88 | } |
| 89 | |
| 90 | previousToken = token; |
| 91 | token = this.parseNextToken(); |
| 92 | } |
| 93 | |
| 94 | return result; |
| 95 | } |
| 96 | |
| 97 | private parseLiteralName(literal: LiteralName, result: CMap): void { |
| 98 | switch (literal.name) { |
no test coverage detected