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