Span-Based Simple-Object Parsing

A unit HPDFParser faz o parsing de dicionários e arrays PDF autónomos sem copiar substrings de tokens nem de contentores aninhados

Entry points

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;

O dicionário ou array devolvido pertence ao chamador e contém objetos HotPDF persistentes normais, sem qualquer dependência do tempo de vida da string de origem

View statistics

THPDFParserViewStatistics exposes SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount, and Valid

Token views count bounded source ranges, while materialised-string counters cover bytes copied into durable PDF names, keys, and strings

Objetos suportados

O parser reconhece nomes, inteiros, números reais, booleanos, nulls, referências indiretas, cadeias literais, cadeias hexadecimais, arrays e dicionários

As cadeias literais preservam parênteses aninhados, delimitadores escapados, escapes octais e continuações de linha escapadas, enquanto o espaço em branco e os comentários PDF são ignorados

Fins de linha CR, CRLF e LF não escapados dentro de cadeias literais descodificam para um LF por fim de linha; retornos de carro escapados como ou mantêm-se bytes CR, e continuações de linha com barra invertida não acrescentam bytes

Os contentores aninhados partilham um único cursor sobre a entrada imutável, a recursão é limitada e as chaves de dicionário duplicadas substituem os valores anteriores, com comparação sensível a maiúsculas e minúsculas

Delimitadores malformados fazem avançar o cursor de recuperação sem saltar tokens válidos adjacentes; corpos de array fornecidos sem parêntese reta de abertura também recuperam de parênteses retas de fecho dispersas e reportam-nas em ErrorCount

Características de desempenho

Os nomes e as strings são materializados uma só vez na fronteira do respetivo objeto persistente, a conversão numérica lê diretamente os bytes de origem, e um índice de endereçamento aberto local à operação evita pesquisas de duplicados quadráticas na construção de dicionários grandes

Um fixture de regressão em Win32 com 30 000 pares reduziu os bytes alocados em cinco passagens de 50 866 510 para 17 936 800 e o tempo decorrido de 3656 ms para 46 ms

Ver também: Scalable and Random-Access PDF Loading, Orçamentos limitados do analisador PDF