Externa nativa rich-text-stylesheets

Den nativa XHTML-avkodaren tillämpar anropartillhandahållna CSS-resurser som refereras av XHTML-länkelement och CSS @import-regler på faktiska rich-text-runs, sparade rich-värden och fältsutseenden

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>

Resursidentitet och kaskad

Relativa referenser använder RFC 3986-sammanfogning av sökvägar och borttagning av punktsegment; frågesträngar förblir del av resursidentiteten, fragment gör inte det, schema- och värd-bokstäver normaliseras medan användarinformation behåller sin skrift, och hex-bokstäver i percent-escape jämförs skriftokänsligt

Varje importerat ark löser ytterligare imports mot sin egen URI och har en oberoende CSS-namnrymdsmiljö; att importera ett ark läcker inte det arkets @namespace-deklarationer till sin förälder

Imports accepterar citerade strängar och url-tokens, inklusive CSS-eskaper, före vanliga regler eller namespace-deklarationer; den befintliga utvärderaren för print/screen-mediafrågor styr länkmedia och importvillkor

Importerade deklarationer går in i kaskaden på sin faktiska källposition med normal prioritet och specifitet; en cyklisk referens hoppas över bara medan den resursen är aktiv, så senare upprepade referenser kan bidra igen

Saknade resurser, ogiltiga skrivna referenser och innehållstyper som inte är CSS bidrar inte med några deklarationer; ogiltiga anropartillhandahållna resurssamlingar kastar EHPDFHeadlessRichTextCodecError

XHTML-referenser och valda uppsättningar

Stylesheetrelationstokens jämförs skriftokänsligt; inaktiverade länkar ignoreras, och media- och type-attribut styr om en refererad stylesheet deltar

Infogade style-element och länkade ark delar samma skriftkänsliga titeluppsättningar; namnlösa bestående ark förblir aktiverade

Utan uttrycklig StyleSheetTitle väljer det första lämpliga rubrikförsedda infogade formatet eller icke-alternativa länken den föredragna uppsättningen; avkodaren bestämmer den titeln innan deklarationer samlas, så en tidigare alternativ med den valda titeln deltar på sin ursprungliga kaskadposition

En uttrycklig StyleSheetTitle väljer matchande rubrikförsedda infogade och länkade ark, inklusive alternativ; en titel utan matchande ark lämnar bara bestående ark aktiverade

Skanningen av föredragen titel accepterar tom typ eller text/css och hoppar över inaktiverade eller alternativa länkar; resurstillgänglighet och mediavillkor ändrar inte den valda titeln, och deklarationer lyder fortfarande sina egna media-, typ- och resurskontroller

HTML- och XML-baslösning

Det första XHTML base-elementet med href inuti ett XHTML-huvud tillhandahåller dokumentbasen genom att lösa sin href mot DocumentURI; xml:base på base-elementet eller dess förfäder ändrar inte den uppslagningen

Avkodaren tillämpar därefter varje förfaders xml:base en gång, med utgångspunkt i den dokumentbasen, för att lösa länkreferenser och infogade imports; ett länkat eller importerat ark löser sina egna imports mot sin resurs-URI

Till exempel löses DocumentURI=https://example.test/docs/form.xhtml, rotens xml:base="a/", head base href="b/" och länk href="main.css" till https://example.test/docs/b/a/main.css

Ett tomt första base href använder reservens dokument-URI; ett ogiltigt första base href behåller också den reserven och förbrukar första-base-positionen, så senare base-element ersätter den inte

Denna ordning definierar den nativa avkodarens kombinerade HTML/XML-profil; XML Base definierar i sig inte hur en separat HTML-basmekanism bör kombineras med den

Formulärdata och JSON-operationer

Sätt RichTextDocumentURI, RichTextStyleSheetTitle och RichTextStyleSheets på THPDFHeadlessFormDataOptions när FDF RV eller XFDF value-richtext importeras via nativa dokumentmetoder

Windows-filjobb, Windows execute-json-v1 och den versionerade nativa Linux C-ABI:n accepterar samma valfria 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 krävs och får inte vara tom för varje JSON-resurs; css och contentType är valfria strängar, liksom documentURI och styleSheetTitle; tillhandahållna strängar får inte innehålla NUL

Resurser är Unicode-CSS-text som tillhandahålls av värden; URI-identifierare begär inte filsystemåtkomst, nätverksåtkomst eller ändringar av callback-postlayouter

Den omgivande importtransaktionen behåller sitt tidigare dokument vid felaktiga resurser, annullering, budgetfel eller publiceringsfel; exakt likvärdiga imports behåller det befintliga byteidentiska no-op-beteendet

Återanvändbar icke-GUI-acceptans

Tests/Linux/ExternalStyleSheets/Run.py kontrollerar faktiska avkodade runs, avgränsat felbeteende, sparade utseenden och oberoende PDF-geometri och pixlar; dess Callbacks-katalog övar faktiska FDF/XFDF-importer, no-op-byte och misslyckade publiceringstransaktioner

Tests/Linux/ExternalStyleSheets/Supplement/Run.py kontrollerar delade inline/länk-titeluppsättningar, kombinerad HTML/XML-baslösning, varje mätt automatisk titelannulleringsgräns samt djupfel följt av lyckat nytt försök

Komplementet accepterar en uttrycklig källkatalog och kompilatorkonfiguration, registrerar faktisk käll- och beroendeidentitet och kräver en ny utdatakatalog för varje körning

Gränser och återstående arbete

Resursantalet är högst 256, varje löst URI högst 4096 UTF-16-kodenheter och varje titel eller innehållstyp högst 256; stylesheettext lyder också under MaxCodeUnits, med aggregerade skanningar och matchning belastade på de befintliga nod-, total-kodenhet-, djup- och annulleringsgränserna

Form-data-bindningar använder MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth och operationens annulleringstoken för motsvarande avkodargränser

Importlager, ytterligare CSS-layout, tabeller, bilder och bredare HTML-resursinläsning förblir separat arbete

Selektorer och infogade stylesheets · Mediaprofiler · Form-data-options

Nativa stödfrågor antar @supports-grupper och supports()-imports med den stödda deklarations- och selectorprofilen, med delade gränser och annulleringsåterhämtning