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