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