Parsowanie prostych obiektów na wycinkach
Jednostka HPDFParser parsuje samodzielne słowniki i tablice PDF bez kopiowania podciągów tokenów ani zagnieżdżonych kontenerów
Punkty wejścia
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;
Zwrócony słownik lub tablica należy do wywołującego i zawiera zwykłe trwałe obiekty HotPDF bez zależności od czasu życia ciągu źródłowego
Statystyki widoku
THPDFParserViewStatistics wystawia SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount i Valid
Widoki tokenów liczą ograniczone zakresy źródła, a liczniki zmaterializowanych ciągów obejmują bajty skopiowane do trwałych nazw, kluczy i ciągów PDF
Obsługiwane obiekty
Parser rozpoznaje nazwy, liczby całkowite, rzeczywiste, logiczne, null, referencje pośrednie, ciągi literałowe, ciągi szesnastkowe, tablice i słowniki
Ciągi literałowe zachowują zagnieżdżone nawiasy, escapowane ograniczniki, escape'y ósemkowe i escapowane kontynuacje linii, a biały znak i komentarze PDF są ignorowane
Nieescapowane końce linii CR, CRLF i LF wewnątrz ciągów literałowych dekodują do jednego LF na koniec linii; escapowane powroty karetki, takie jak \r albo \015, pozostają bajtami CR, a kontynuacje linii przez backslash nie dodają żadnych bajtów
Zagnieżdżone kontenery współdzielą jeden kursor po niemodyfikowalnym wejściu, rekurencja jest ograniczona, a zduplikowane klucze słowników zastępują wcześniejsze wartości przy dopasowaniu z rozróżnianiem wielkości liter
Zniekształcone ograniczniki przesuwają kursor odzyskiwania bez pomijania sąsiednich poprawnych tokenów; treść tablicy podana bez nawiasu otwierającego dochodzi też do siebie po zabłąkanych nawiasach zamykających i raportuje je w ErrorCount
Charakterystyka wydajności
Nazwy i ciągi materializują się raz, na granicy swojego trwałego obiektu, konwersja liczb czyta bajty źródła bezpośrednio, a lokalny dla operacji indeks z adresowaniem otwartym zapobiega kwadratowym skanom duplikatów przy budowie dużych słowników
Fixture regresji Win32 o 30 000 par zmniejszył bajty alokacji w pięciu przebiegach z 50 866 510 do 17 936 800, a czas wykonania z 3 656 ms do 46 ms
Zobacz też: Skalowalne ładowanie z dostępem losowym, Ograniczone budżety parsera PDF