private void ReadRange(string subset) { var lexer = new Lexer(); lexer.SetSource(Encoding.ASCII.GetBytes(subset)); while (lexer.Next() != null) { Expect(lexer, TokenType.HexString); PdfHexString from = new PdfHexString { Text = (string)lexer.Current.Value }; lexer.Next(); Expect(lexer, TokenType.HexString); PdfHexString to = new PdfHexString { Text = (string)lexer.Current.Value }; lexer.Next(); if (Accept(lexer, TokenType.HexString)) { int offset = (new PdfHexString { Text = (string)lexer.Current.Value }).ToInt; for (int i = from.ToInt; i <= to.ToInt; i++) { _toCode[i + offset] = i; } } else if (Accept(lexer, TokenType.Array)) { int index = from.ToInt; while (true) { lexer.Next(); if (Accept(lexer, TokenType.EndArray)) { break; } else if (Accept(lexer, TokenType.HexString)) { int glyph = (new PdfHexString { Text = (string)lexer.Current.Value }).ToInt; _toCode[glyph] = index++; } else { throw new ParserException($"Unable to parse ToUnicode CMap. Expected HexString or End Array at {lexer?.Current.Type}"); } } } else { throw new ParserException($"Unable to parse ToUnicode CMap. Expected HexString or Array at {lexer?.Current.Type}"); } } }
private void WriteHexString(PdfHexString pdfHexString) { AsciiToOutput($"<{pdfHexString.Text}>"); }