Native rich-text eksterne style sheets

Den native XHTML-dekoder anvender kalder-leverede CSS-ressourcer, som refereres af XHTML link-elementer og CSS @import-regler, på rigtige rich text-runs, gemte rich-værdier og felt-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>

Ressource-identitet og kaskade

Relative referencer bruger RFC 3986 sti-fletning og dot-segment-fjernelse; query-strenge forbliver en del af ressource-identitet, fragmenter gør ikke, skema- og host-bogstaver normaliseres, mens brugerinformation beholder sin versalisering, og procent-escape-hexbogstaver sammenlignes uden case

Hvert importeret sheet opløser yderligere imports mod sin egen URI og har et uafhængigt CSS namespace-miljø; import af et sheet lækker ikke det sheets @namespace-erklæringer ind i dets parent

Imports accepterer quotede strenge og url-tokens, inklusive CSS-escapes, før almindelige regler eller namespace-erklæringer; den eksisterende print/screen media query-evaluator styrer link-media og importbetingelser

Importerede erklæringer kommer ind i kaskaden på deres faktiske kildeposition med normal prioritet og specificitet; en cyklisk reference springes kun over, mens den ressource er aktiv, så senere gentagne referencer kan bidrage igen

Manglende ressourcer, ugyldige authored referencer og ikke-CSS indholdstyper bidrager ikke med erklæringer; ugyldige kalder-leverede ressourcesamlinger udløser EHPDFHeadlessRichTextCodecError

XHTML-referencer og valgte sæt

Stylesheet relation-tokens sammenlignes uden ASCII-case; deaktiverede links ignoreres, og media- og type-attributter styrer, om et refereret stylesheet deltager

Inline style-elementer og linkede sheets deler de samme case-sensitive titelsæt; unavngivne persistente sheets forbliver aktiveret

Uden eksplicit StyleSheetTitle vælger det første berettigede titel-bårne inline style eller ikke-alternative link det foretrukne sæt; dekoderen bestemmer den titel, før erklæringer indsamles, så et tidligere alternativt med den valgte titel deltager på sin originale kaskadeposition

En eksplicit StyleSheetTitle vælger matchende titel-bårne inline og linkede sheets, inklusive alternativer; en titel uden matchende sheet efterlader kun persistente sheets aktiveret

Preferred-title-scanningen accepterer en tom type eller text/css og springer deaktiverede eller alternative links over; ressursetilgængelighed og mediebetingelser ændrer ikke den valgte titel, og erklæringer adlyder stadig egne media-, type- og ressourcetjek

HTML- og XML base-opløsning

Det første XHTML base-element med href inde i et XHTML head leverer dokumentbasen ved at opløse dets href mod DocumentURI; xml:base på base-elementet eller dets forfædre ændrer ikke det opslag

Dekoderen anvender derefter hver forfaders xml:base én gang, startende fra den dokumentbase, for at opløse linkreferencer og inline imports; et linket eller importeret sheet opløser egne imports mod sin ressource-URI

For eksempel opløses DocumentURI=https://example.test/docs/form.xhtml, rod xml:base="a/", head base href="b/" og link href="main.css" til https://example.test/docs/b/a/main.css

En tom første base href bruger fallback dokument-URI; en ugyldig første base href beholder også den fallback og forbruger first-base-positionen, så senere base-elementer ikke erstatter den

Denne rækkefølge definerer den native dekoders kombinerede HTML/XML-profil; XML Base definerer ikke selv, hvordan en separat HTML base-mekanisme bør kombineres med den

Form data- og JSON-operationer

Sæt RichTextDocumentURI, RichTextStyleSheetTitle og RichTextStyleSheets på THPDFHeadlessFormDataOptions ved import af FDF RV eller XFDF value-richtext gennem native dokumentmetoder

Windows file jobs, Windows execute-json-v1 og den versionerede native Linux C ABI accepterer samme valgfrie richTextResources-objekt på 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 er krævet og ikke-tom for hver JSON-ressource; css og contentType er valgfrie strenge, ligesom documentURI og styleSheetTitle; leverede strenge må ikke indeholde NUL

Ressourcer er Unicode CSS-tekst leveret af hosten; URI-identifikatorer anmoder ikke om filsystemadgang, netværksadgang eller ændringer af callback record-layouts

Den omgivende importtransaktion beholder sit tidligere dokument ved misdannede ressourcer, cancellation, budgetfejl eller publiceringsfejl; eksakte ækvivalente importer beholder den eksisterende byte-identiske no-op-adfærd

Genbrugelig ikke-GUI-accept

Tests/Linux/ExternalStyleSheets/Run.py tjekker rigtige dekodede runs, afgrænset fejladfærd, gemte appearances samt uafhængig PDF-geometri og -pixels; dets Callbacks-mappe øver rigtige FDF/XFDF-importer, no-op-bytes og mislykkede publiceringstransaktioner

Tests/Linux/ExternalStyleSheets/Supplement/Run.py tjekker delte inline/link titelsæt, kombineret HTML/XML base-opløsning, hver målt automatisk-titel cancellation-grænse samt dybdefejl efterfulgt af succesfuld retry

Til supplementet accepterer en eksplicit kildemappe og compiler-konfiguration, registrerer de faktiske kilde- og afhængighedsidentiteter og kræver en ny outputmappe

Grænser og tilbageværende arbejde

Ressourceantallet er højst 256, hver opløst URI højst 4096 UTF-16 code units, og hver titel eller indholdstype højst 256; stylesheet-tekst adlyder også MaxCodeUnits, med samlede scanninger og matching debiteret til de eksisterende node-, total-code-unit-, dybde- og cancellation-grænser

Form-data-bindinger bruger MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth og operationens cancellation-token til de tilsvarende dekodergrænser

Importlag, yderligere CSS-layout, tabeller, billeder og bredere HTML-ressourceindlæsning forbliver separat arbejde

Selektorer og interne style sheets · Medieprofiler · Form-data-options

Native support-queries tillader @supports-grupper og supports()-imports med den understøttede erklærings- og selektorprofil med delte grænser og cancellation-genopretning