Span-baserad parsning av enkla objekt

Enheten HPDFParser parsar fristående PDF-ordlistor och arrayer utan att kopiera token- eller nästlade containerdelsträngar

Ingångspunkter

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 returnerade ordlistan eller arrayen ägs av anroparen och innehåller normala beständiga HotPDF-objekt utan beroende av källsträngens livslängd

Vystatistik

THPDFParserViewStatistics exponerar SourceBytes, TokenViewCount, MaterializedStringCount, MaterializedBytes, ObjectCount, ContainerCount, MaxDepth, ErrorCount och Valid

Tokenvyer räknar avgränsade källintervall, medan materialiserade strängräknare täcker byte som kopierats till beständiga PDF-namn, nycklar och strängar

Objekt som stöds

Parsern känner igen namn, heltal, reella tal, booleska värden, null-värden, indirekta referenser, litterala strängar, hexadecimala strängar, arrayer och ordlistor

Litterala strängar bevarar nästlade parenteser, escaped-avgränsare, oktala escapes och escaped radfortsättningar, medan PDF-mellanslag och kommentarer ignoreras

Oescaped CR-, CRLF- och LF-radslut inuti litterala strängar avkodas till en LF per radslut; escaped vagnretur som \r eller \015 förblir CR-byte, och radfortsättningar med omvänt snedstreck lägger till inga byte

Nästlade containrar delar en enda markör över den oföränderliga indatan, rekursionen är begränsad och duplicerade ordlistenycklar ersätter tidigare värden med skiftlägeskänslig matchning

Felformade avgränsare flyttar återställningsmarkören framåt utan att hoppa över närliggande giltiga token; arraykroppar som levereras utan inledande hakparentes återställer sig också från felaktiga avslutande hakparenteser och rapporterar dem i ErrorCount

Prestandaegenskaper

Namn och strängar materialiseras en gång vid sin beständiga objektsgräns, numerisk konvertering läser källbytes direkt och en operationslokal öppen-adresserad index förhindrar kvadratisk duplikatgenomsökning vid byggandet av stora ordlistor

En 30 000-par-Win32-regressionsfixtur minskade allokeringsbyte för fem pass från 50,866,510 till 17,936,800 och förfluten tid från 3,656 ms till 46 ms

Se även: Scalable and Random-Access PDF Loading, Bounded PDF Parser Budgets