Parsing di oggetti semplici basato su span
L'unità HPDFParser apre dizionari e array PDF standalone senza copiare sottostringhe di token o contenitori annidati
Punti di ingresso
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;
Il dizionario o array restituito è di proprietà del chiamante e contiene normali oggetti persistenti di HotPDF, senza dipendenza dalla durata della stringa sorgente
Statistiche delle viste
THPDFParserViewStatistics espone SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount e Valid
Le viste dei token contano intervalli limitati della sorgente, mentre i contatori delle stringhe materializzate coprono i byte copiati in nomi, chiavi e stringhe PDF durevoli
Oggetti supportati
Il parser riconosce nomi, interi, numeri reali, booleani, null, riferimenti indiretti, stringhe letterali, stringhe esadecimali, array e dizionari
Le stringhe letterali preservano parentesi annidate, delimitatori con escape, escape ottali e continuazioni di riga con escape, mentre spazi bianchi e commenti PDF vengono ignorati
Le terminazioni di riga CR, CRLF e LF senza escape dentro le stringhe letterali vengono decodificate come un LF per terminazione; i carriage return con escape come \r o \015 restano byte CR, e le continuazioni di riga con backslash non aggiungono byte
I contenitori annidati condividono un unico cursore sull'input immutabile, la ricorsione è limitata, e le chiavi duplicate dei dizionari sostituiscono i valori precedenti con confronto case-sensitive
I delimitatori malformati avanzano il cursore di recupero senza saltare i token validi adiacenti; i corpi di array forniti senza una parentesi quadra di apertura recuperano anche da parentesi di chiusura vaganti e le riportano in ErrorCount
Caratteristiche di prestazione
Nomi e stringhe si materializzano una sola volta al confine del loro oggetto persistente, la conversione numerica legge i byte della sorgente direttamente, e un indice locale all'operazione ad indirizzamento aperto evita scansioni quadratiche dei duplicati durante la costruzione di dizionari grandi
Un fixture di regressione Win32 da 30.000 coppie ha ridotto i byte allocati in cinque passaggi da 50.866.510 a 17.936.800 e il tempo trascorso da 3.656 ms a 46 ms
Vedi anche: Caricamento PDF scalabile e ad accesso casuale, Budget limitati del parser PDF