public void ColorspaceParserError() { var parser = new CodespaceRangeParser(); var byteArrayInput = new ByteArrayInputBytes(OtherEncodings.StringAsLatin1Bytes("1 begincodespacerange\nendcodespacerange")); var tokenScanner = new CoreTokenScanner(byteArrayInput); Assert.True(tokenScanner.MoveNext()); Assert.True(tokenScanner.CurrentToken is NumericToken); var numeric = (NumericToken)tokenScanner.CurrentToken; Assert.True(tokenScanner.MoveNext()); Assert.True(tokenScanner.CurrentToken is OperatorToken); var opToken = (OperatorToken)tokenScanner.CurrentToken; Assert.Equal("begincodespacerange", opToken.Data); var cmapBuilder = new CharacterMapBuilder(); parser.Parse(numeric, tokenScanner, cmapBuilder); Assert.Empty(cmapBuilder.CodespaceRanges); }
public CMap Parse(IInputBytes inputBytes, bool isLenientParsing) { var scanner = new CoreTokenScanner(inputBytes); var builder = new CharacterMapBuilder(); IToken previousToken = null; while (scanner.MoveNext()) { var token = scanner.CurrentToken; if (token is OperatorToken operatorToken) { switch (operatorToken.Data) { case "usecmap": { if (previousToken is NameToken name) { var external = ParseExternal(name.Data); builder.UseCMap(external); } else { throw new InvalidOperationException("Unexpected token preceding external cmap call: " + previousToken); } break; } case "begincodespacerange": { if (previousToken is NumericToken numeric) { CodespaceRangeParser.Parse(numeric, scanner, builder, isLenientParsing); } else { throw new InvalidOperationException("Unexpected token preceding start of codespace range: " + previousToken); } } break; case "beginbfchar": { if (previousToken is NumericToken numeric) { BaseFontCharacterParser.Parse(numeric, scanner, builder, isLenientParsing); } else { throw new InvalidOperationException("Unexpected token preceding start of base font characters: " + previousToken); } } break; case "beginbfrange": { if (previousToken is NumericToken numeric) { BaseFontRangeParser.Parse(numeric, scanner, builder, isLenientParsing); } else { throw new InvalidOperationException("Unexpected token preceding start of base font character ranges: " + previousToken); } } break; case "begincidchar": { if (previousToken is NumericToken numeric) { CidCharacterParser.Parse(numeric, scanner, builder, isLenientParsing); } else { throw new InvalidOperationException("Unexpected token preceding start of Cid character mapping: " + previousToken); } break; } case "begincidrange": { if (previousToken is NumericToken numeric) { CidRangeParser.Parse(numeric, scanner, builder, isLenientParsing); } else { throw new InvalidOperationException("Unexpected token preceding start of Cid ranges: " + previousToken); } } break; } } else if (token is NameToken name) { CidFontNameParser.Parse(name, scanner, builder, isLenientParsing); } previousToken = token; } return(builder.Build()); }