Native rich-text external style sheets

Natywny dekoder XHTML nakłada dostarczone przez wywołującego zasoby CSS referencjonowane przez elementy link XHTML i reguły @import CSS na rzeczywiste runy rich textu, zapisane wartości rich i wyglądy pól

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>

Tożsamość zasobów i kaskada

Referencje względne używają path merging z RFC 3986 i usuwania segmentów kropek; query stringi pozostają częścią tożsamości zasobu, fragmenty nie, litery scheme i hosta są normalizowane, a information user zachowuje swoją wielkość liter, przy czym szesnastkowe litery percent-escape porównują się bez wielkości liter

Każdy zaimportowany arkusz rozwiązuje dalsze importy względem własnego URI i ma niezależne środowisko przestrzeni nazw CSS; zaimportowanie arkusza nie przecieka jego deklaracji @namespace do rodzica

Importy akceptują quoted stringi i tokeny url, włącznie z escape'ami CSS, przed zwykłymi regułami albo deklaracjami przestrzeni nazw; istniejący ewaluator media query print/screen steruje mediami linków i warunkami importów

Zaimportowane deklaracje wchodzą do kaskady na swojej rzeczywistej pozycji źródłowej z normalnymi importance i specificity; cykliczna referencja jest pomijana tylko dopóki ten zasób jest aktywny, więc późniejsze powtórzone referencje mogą znowu się wnieść

Brakujące zasoby, niepoprawne referencje autorskie i typy zawartości niebędące CSS nie wnoszą deklaracji; niepoprawne kolekcje zasobów dostarczone przez wywołującego podnoszą EHPDFHeadlessRichTextCodecError

Referencje XHTML i wybrane zestawy

Tokeny relacji arkuszy stylów porównują się bez wielkości liter ASCII; wyłączone linki są ignorowane, a atrybuty media i type decydują, czy referencjonowany arkusz uczestniczy

Elementy style inline i linkowane arkusze współdzielą te same case-sensitive zestawy tytułów; beztytułowe arkusze persistent pozostają włączone

Bez jawnego StyleSheetTitle pierwszy kwalifikujący się potytułowany styl inline albo link niealternatywny wybiera zestaw preferowany; dekoder ustala ten tytuł przed zbieraniem deklaracji, więc wcześniejszy alternatywny z wybranym tytułem uczestniczy na swojej oryginalnej pozycji kaskady

Jawny StyleSheetTitle wybiera matchujące potytułowane style inline i linkowane arkusze, włącznie z alternatywnymi; tytuł bez matchującego arkusza zostawia włączone tylko arkusze persistent

Skan preferowanego tytułu akceptuje pusty typ albo text/css i pomija wyłączone albo alternatywne linki; dostępność zasobów i warunki mediów nie zmieniają wybranego tytułu, a deklaracje nadal podlegają własnym checkom mediów, typu i zasobów

Rozwiązywanie base HTML i XML

Pierwszy element base XHTML z href wewnątrz head XHTML dostarcza bazę dokumentu przez rozwiązanie swojego href względem DocumentURI; xml:base na elemencie base albo jego przodkach nie zmienia tego lookupu

Następnie dekoder nakłada xml:base każdego przodka raz, startując od tej bazy dokumentu, by rozwiązać referencje linków i importy inline; linkowany albo importowany arkusz rozwiązuje własne importy względem swojego URI zasobu

Na przykład DocumentURI=https://example.test/docs/form.xhtml, root xml:base="a/", head base href="b/" i link href="main.css" rozwiązują się do https://example.test/docs/b/a/main.css

Pusty pierwszy base href używa fallbackowego URI dokumentu; niepoprawny pierwszy base href też zachowuje ten fallback i zużywa pozycję pierwszej bazy, więc późniejsze elementy base jej nie podmieniają

To uporządkowanie definiuje połączony profil HTML/XML natywnego dekodera; XML Base sam nie definiuje, jak łączyć z nim osobny mechanizm base HTML

Dane formularzy i operacje JSON

Ustaw RichTextDocumentURI, RichTextStyleSheetTitle i RichTextStyleSheets na THPDFHeadlessFormDataOptions, gdy importujesz FDF RV albo wartości richtext XFDF przez natywne metody dokumentu

Joby plikowe Windows, Windows execute-json-v1 i wersjonowane natywne C ABI Linuxa akceptują ten sam opcjonalny obiekt richTextResources na 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 jest wymagany i niepusty dla każdego zasobu JSON; css i contentType to opcjonalne stringi, podobnie jak documentURI i styleSheetTitle; dostarczone stringi nie mogą zawierać NUL

Zasoby to tekst CSS Unicode dostarczany przez hosta; identyfikatory URI nie żądają dostępu do filesystemu, dostępu do sieci ani zmian w layoutach rekordów callbacków

Otoczona transakcja importu zachowuje swój poprzedni dokument przy zniekształconych zasobach, anulowaniu, niepowodzeniu budżetu albo publikacji; dokładnie równoważne importy zachowują istniejące zachowanie no-op o identycznych bajtach

Wielokrotnego użytku akceptacja bez GUI

Tests/Linux/ExternalStyleSheets/Run.py sprawdza rzeczywiste zdekodowane runy, ograniczone zachowanie przy niepowodzeniu, zapisane wyglądy oraz niezależną geometrię i piksele PDF; jego katalog Callbacks ćwiczy rzeczywiste importy FDF/XFDF, bajty no-op i transakcje nieudanej publikacji

Tests/Linux/ExternalStyleSheets/Supplement/Run.py sprawdza współdzielone zestawy tytułów inline/link, połączone rozwiązywanie base HTML/XML, każdą zmierzoną granicę anulowania automatic-title i niepowodzenie głębokości zakończone udanym retryem

Supplement akceptuje jawny katalog źródłowy i konfigurację kompilatora, rejestruje rzeczywiste tożsamości źródła i zależności oraz wymaga nowego katalogu wyjścia na każdą egzekucję

Ograniczenia i pozostała praca

Liczba zasobów to co najwyżej 256, każdy rozwiązany URI co najwyżej 4096 jednostek kodowych UTF-16, a każdy tytuł albo typ zawartości co najwyżej 256; tekst arkuszy stylów podlega też MaxCodeUnits, z agregacyjnymi skanami i matchowaniem obciążanymi na istniejące limity węzłów, łącznych jednostek kodowych, głębokości i anulowania

Wiązania danych formularzy używają MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth i tokenu anulowania operacji dla odpowiadających limitów dekodera

Warstwy importów, dodatkowy layout CSS, tabele, obrazy i szersze ładowanie zasobów HTML pozostają osobną pracą

Selektory i wewnętrzne arkusze stylów · Profile mediów · Opcje danych formularzy

Natywne support queries dopuszczają grupy @supports i importy supports() przy użyciu obsługiwanego profilu deklaracji i selektorów, ze współdzielonymi ograniczeniami i odzyskiwaniem po anulowaniu