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