Span-baseret parsing af simple objekter

Enheden HPDFParser parser selvstændige PDF-ordbøger og arrays uden at kopiere understrenge for tokens eller indlejrede containere

Indgangspunkter

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;

Den returnerede ordbog eller array ejes af kaldende kode og indeholder normale persistente HotPDF-objekter uden afhængighed af kildestrengens levetid

Visningsstatistik

THPDFParserViewStatistics eksponerer SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount og Valid

Tokenvisninger tæller afgrænsede kildeområder, mens tællere for materialiserede strenge dækker bytes, der kopieres til varige PDF-navne, nøgler og strenge

Understøttede objekter

Parseren genkender navne, heltal, reelle tal, booleske værdier, null-værdier, indirekte referencer, literalstrenge, hexadecimale strenge, arrays og ordbøger

Literalstrenge bevarer indlejrede parenteser, escape-tegn for afgrænsere, oktale escapes og escapede linjefortsættelser, mens PDF-mellemrum og kommentarer ignoreres

Uescapede CR-, CRLF- og LF-linjeafslutninger i literalstrenge dekodes til én LF pr. linjeafslutning; escapede vognretur som \r eller \015 forbliver CR-bytes, og backslash-linjefortsættelser tilføjer ingen bytes

Indlejrede containere deler én cursor over det uforanderlige input, rekursionen er afgrænset, og dublerede ordbogsnøgler erstatter tidligere værdier med versalfølsom sammenligning

Misdannede afgrænsere rykker recovery-cursoren frem uden at springe tilstødende gyldige token over; array-kroppe uden åbnende parentes gendannes også fra løse lukkende parenteser og rapporterer dem i ErrorCount

Ydelsesegenskaber

Navne og strenge materialiseres én gang ved deres vedvarende objektgrænse, numerisk konvertering læser kildebytes direkte, og et lokalt åbent adresseret indeks for handlingen forhindrer kvadratiske dubletscanninger under opbygning af store ordbøger

En Win32-regressionsfixture med 30.000 par reducerede allocationsbytes ved fem gennemløb fra 50.866.510 til 17.936.800 og den forløbne tid fra 3.656 ms til 46 ms

Se også: Skalerbar PDF-indlæsning og indlæsning med vilkårlig adgang, Afgrænsede budgetter for PDF-parseren