Native rich-text external style sheets

De native XHTML-decoder past door de caller geleverde CSS-resources die via XHTML link-elements en CSS @import-rules worden gerefereerd toe op echte rich-text runs, opgeslagen rich-waarden en field-appearances

Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.DocumentURI := 'https://example.test/forms/order.xhtml';
SetLength(Options.StyleSheets, 2);
Options.StyleSheets[0].URI := 'css/main.css';
Options.StyleSheets[0].CSS := '@import "colors.css"; span.total { font-weight: bold }';
Options.StyleSheets[0].ContentType := 'text/css';
Options.StyleSheets[1].URI := 'css/colors.css';
Options.StyleSheets[1].CSS := 'span.total { color: #a02030 }';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
<body xmlns="http://www.w3.org/1999/xhtml">
  <link rel="stylesheet" href="css/main.css" />
  <span class="total">Total</span>
</body>

Resource-identiteit en cascade

Relatieve references gebruiken RFC 3986 path merging en dot-segment removal; query strings blijven deel van de resource-identiteit, fragments niet, scheme- en hostletters worden genormaliseerd terwijl user-informatie diens case behoudt, en percent-escape-hexletters vergelijken case-loos

Elke geïmporteerde sheet lost verdere imports op tegen diens eigen URI en heeft een onafhankelijke CSS-namespace-omgeving; een sheet importeren lekt diens @namespace-declaraties niet door naar de parent

Imports accepteren quoted strings en url-tokens, inclusief CSS-escapes, vóór gewone rules of namespace-declaraties; de bestaande print/screen media query-evaluator stuurt link-media en importcondities aan

Geïmporteerde declaraties komen op hun echte bronpositie in de cascade terecht met normale importance en specificity; een cyclische reference wordt alleen overgeslagen zolang die resource actief is, dus latere herhaalde references kunnen opnieuw bijdragen

Ontbrekende resources, ongeldige authored references en niet-CSS-contenttypes leveren geen declaraties; ongeldige door de caller geleverde resource-collecties raise-en EHPDFHeadlessRichTextCodecError

XHTML-references en geselecteerde sets

Stylesheet relation-tokens vergelijken ASCII-case-loos; uitgeschakelde links worden genegeerd, en media- en type-attributes bepalen of een gerefereerde stylesheet meedoet

Inline style-elements en gelinkte sheets delen dezelfde case-gevoelige title-sets; untitled persistent-sheets blijven ingeschakeld

Zonder expliciete StyleSheetTitle selecteert de eerste in aanmerking komende getitelde inline style of non-alternate link de preferred set; de decoder bepaalt die title vóór het verzamelen van declaraties, dus een eerdere alternate met de geselecteerde title doet mee op diens originele cascade-positie

Een expliciete StyleSheetTitle selecteert matchende getitelde inline en gelinkte sheets, inclusief alternates; een title zonder matchende sheet laat alleen persistent-sheets ingeschakeld

De preferred-title-scan accepteert een lege type of text/css en slaat disabled of alternate links over; resource-beschikbaarheid en mediacondities veranderen de gekozen title niet, en declaraties blijven hun eigen media-, type- en resource-checks volgen

HTML- en XML-base-resolutie

Het eerste XHTML base-element met href binnen een XHTML head levert de document-base door diens href tegen DocumentURI te resolvem; xml:base op het base-element of diens voorouders verandert die lookup niet

Daarna past de decoder elke voorouderlijke xml:base één keer toe, startend vanuit die document-base, om link-references en inline imports te resolven; een gelinkte of geïmporteerde sheet lost diens eigen imports op tegen diens resource-URI

Bijvoorbeeld, DocumentURI=https://example.test/docs/form.xhtml, root xml:base="a/", head base href="b/" en link href="main.css" resolven naar https://example.test/docs/b/a/main.css

Een lege eerste base href gebruikt de fallback-document-URI; een ongeldige eerste base href behoudt die fallback ook en verbruikt de eerste-base-positie, dus latere base-elements vervangen hem niet

Deze ordening definieert het gecombineerde HTML/XML-profiel van de native decoder; XML Base definieert zelf niet hoe een apart HTML-base-mechanisme ermee gecombineerd zou moeten worden

Formdata- en JSON-operaties

Zet RichTextDocumentURI, RichTextStyleSheetTitle en RichTextStyleSheets op THPDFHeadlessFormDataOptions wanneer je FDF RV of XFDF value-richtext via native document-methodes importeert

Windows file-jobs, Windows execute-json-v1 en de versioned native Linux C ABI accepteren hetzelfde optionele richTextResources-object op forms.import

{
  "schemaVersion": 1,
  "type": "forms.import",
  "format": "xfdf",
  "richTextResources": {
    "documentURI": "https://example.test/forms/order.xhtml",
    "styleSheetTitle": "Print",
    "styleSheets": [
      {"uri": "css/main.css", "css": "span.total { color: red }", "contentType": "text/css"}
    ]
  }
}

URI is verplicht en niet-leeg voor elke JSON-resource; css en contentType zijn optionele strings, evenals documentURI en styleSheetTitle; geleverde strings mogen geen NUL bevatten

Resources zijn Unicode-CSS-tekst die de host levert; URI-identificatoren vragen geen filesystem-toegang, netwerktoegang of wijzigingen aan callback-record-layouts

De omringende import-transactie behoudt diens eerdere document bij misvormde resources, annulering, budgetfalen of publicatiefalen; exact equivalente imports behouden het bestaande byte-identieke no-op-gedrag

Herbruikbare non-GUI-acceptatie

Tests/Linux/ExternalStyleSheets/Run.py checkt echte gedecodeerde runs, begrensd faalgedrag, opgeslagen appearances en onafhankelijke PDF-geometrie en pixels; diens Callbacks-directory oefent echte FDF/XFDF-imports, no-op-bytes en gefaalde-publicatie-transacties

Tests/Linux/ExternalStyleSheets/Supplement/Run.py checkt gedeelde inline/link-title-sets, gecombineerde HTML/XML-base-resolutie, elke gemeten automatic-title-annuleringsgrens en dieptefalen gevolgd door een geslaagde retry

De supplement accepteert een expliciete source-directory en compilerconfiguratie, legt de echte bron- en dependency-identiteiten vast, en vraagt een nieuwe output-directory per executie

Grenzen en resterend werk

Het resource-aantal is ten hoogste 256, elke opgeloste URI ten hoogste 4096 UTF-16-code units, en elke title of contenttype ten hoogste 256; stylesheet-tekst volgt ook MaxCodeUnits, met aggregate scans en matching belast op de bestaande node-, total-code-unit-, diepte- en annuleringslimieten

Formdata-bindings gebruiken MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth en het cancellation-token van de operatie voor de bijbehorende decoderlimieten

Import layers, aanvullende CSS-layout, tabellen, images en bredere HTML-resource-loading blijven apart werk

Selectors en interne style sheets · Media-profielen · Formdata-opties

Native support queries laten @supports-groepen en supports()-imports toe met het ondersteunde declaratie- en selectorprofiel, met gedeelde grenzen en annuleringsherstel