Parseo de objetos simples basado en spans

La unidad HPDFParser parsea diccionarios y arreglos PDF independientes sin copiar subcadenas de tokens ni de contenedores anidados

Puntos de entrada

function HPDFParserParseSimpleDictionary(
  const Data: AnsiString;
  RecursionLevel: Integer = 0): THPDFDictionaryObject;

function HPDFParserParseSimpleDictionaryWithStatistics(
  const Data: AnsiString;
  out Statistics: THPDFParserViewStatistics;
  RecursionLevel: Integer = 0): THPDFDictionaryObject;

function HPDFParserParseSimpleArray(
  const Data: AnsiString): THPDFArrayObject;

function HPDFParserParseSimpleArrayWithStatistics(
  const Data: AnsiString;
  out Statistics: THPDFParserViewStatistics): THPDFArrayObject;

El diccionario o arreglo devuelto es propiedad del llamador y contiene objetos persistentes normales de HotPDF, sin dependencia del lifetime del string de origen

Estadísticas de vistas

THPDFParserViewStatistics expone SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount y Valid

Las vistas de tokens cuentan rangos de origen acotados, mientras que los contadores de strings materializados cubren los bytes copiados en nombres, claves y strings PDF duraderos

Objetos soportados

El parser reconoce nombres, enteros, números reales, booleanos, nulls, referencias indirectas, literal strings, hexadecimal strings, arreglos y diccionarios

Las literal strings preservan paréntesis anidados, delimitadores escapados, escapes octales y continuaciones de línea escapadas, mientras que el whitespace PDF y los comentarios se ignoran

Los finales de línea CR, CRLF y LF sin escapar dentro de las literal strings se decodifican a un LF por final de línea; los retornos de carro escapados como \r o \015 permanecen como bytes CR, y las continuaciones de línea con barra invertida no añaden bytes

Los contenedores anidados comparten un único cursor sobre la entrada inmutable, la recursión queda acotada, y las claves duplicadas de diccionarios reemplazan los valores anteriores con matching sensible a mayúsculas y minúsculas

Los delimitadores malformados hacen avanzar el cursor de recuperación sin saltarse los tokens válidos adyacentes; los cuerpos de arreglo suministrados sin corchete de apertura también se recuperan de los corchetes de cierre sueltos y los reportan en ErrorCount

Características de rendimiento

Los nombres y strings se materializan una sola vez en su frontera de objeto persistente, la conversión numérica lee los bytes de origen directamente, y un índice open-addressed local a la operación evita escaneos cuadráticos de duplicados mientras se construyen diccionarios grandes

Un fixture de regresión Win32 de 30,000 pares redujo los bytes de asignación de cinco pasadas de 50,866,510 a 17,936,800 y el tiempo transcurrido de 3,656 ms a 46 ms

Vea también: Scalable and Random-Access PDF Loading, Bounded PDF Parser Budgets