Span-Based Simple-Object Parsing
Jednotka HPDFParser analyzuje samostatné slovníky a pole PDF bez kopírování podřetězců tokenů nebo vnořených kontejnerů
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;
Vrácený slovník nebo pole je ve vlastnictví volajícího a obsahuje běžné trvalé objekty HotPDF bez závislosti na životnosti zdrojového řetězce
View statistics
THPDFParserViewStatistics vystavuje SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount a Valid
Pohledy tokenů počítají ohraničené rozsahy zdroje, zatímco čítače materializovaných řetězců pokrývají bajty zkopírované do trvalých jmen, klíčů a řetězců PDF
Supported objects
Analyzátor rozpoznává jména, celá čísla, reálná čísla, logické hodnoty, hodnoty null, nepřímé odkazy, literální řetězce, šestnáctkové řetězce, pole a slovníky
Literální řetězce zachovávají vnořené závorky, escapované oddělovače, osmičkové zápisy a escapovaná pokračování řádků, zatímco mezery a komentáře PDF jsou ignorovány
Neescapované konce řádků CR, CRLF a LF uvnitř literálních řetězců se dekódují na jedno LF na konec řádku; escapované návraty vozíku jako \r nebo \015 zůstávají bajty CR a pokračování řádků zpětným lomítkem nepřidají žádné bajty
Vnořené kontejnery sdílejí jeden kurzor nad neměnným vstupem, rekurze je omezena a duplicitní klíče slovníku nahrazují dřívější hodnoty s porovnáváním rozlišujícím velikost písmen
Poškozené oddělovače posunou recovery kurzor, aniž by přeskočily sousední platné tokeny; těla polí dodaná bez otvírací závorky se navíc zotaví z přebývajících zavíracích závorek a nahlásí je v ErrorCount
Performance characteristics
Jména a řetězce se materializují jednou na hranici svého trvalého objektu, převod čísel čte bajty zdroje přímo a lokální index s otevřeným adresováním zabraňuje kvadratickému prohledávání duplicit při sestavování velkých slovníků
Regresní testovací sestava Win32 s 30 000 páry snížila pětiprůchodovou alokaci bajtů z 50 866 510 na 17 936 800 a dobu běhu z 3 656 ms na 46 ms
See also: Scalable and Random-Access PDF Loading, Bounded PDF Parser Budgets