Native rich-text CSS support queries

Natywny dekoder XHTML ewaluuje grupy @supports i warunki importów supports() względem swojego obsługiwanego gramatycznego zbioru deklaracji i selektorów rich textu

<body xmlns="http://www.w3.org/1999/xhtml">
  <style><![CDATA[
    @supports (font-size: calc(10pt + 5pt)) and selector(span.notice) {
      span.notice { font-size: 15pt }
    }
    @supports not (display: grid) {
      span.notice { font-weight: bold }
    }
  ]]></style>
  <p><span class="notice">Conditional text</span></p>
</body>

W profilu natywnym obie grupy obowiązują, produkując pogrubiony tekst 15 punktów z fontami dostarczonymi przez wywołującego

Dopuszczanie deklaracji i selektorów

Query deklaracji używają istniejących helperów dopuszczania dla font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, shorthandu fontu, letter-spacing i word-spacing

Query numeryczne współdzielą skończony profil math CSS, domyślne metryki fontów i jawne wymiary mediów; nieobsługiwane właściwości albo niedopuszczone wartości ewaluują się do false

Query font-family wymagają skonfigurowanej kolekcji FontFamilyNames, a niedostępna, ale poprawna rodzina może używać istniejącego fallbacku dostarczonej rodziny

Poprawna adnotacja !important jest akceptowana w query deklaracji bez zmiany priorytetu kaskady grupy warunkowej; dodatkowa deklaracja, kończący średnik albo niepoprawny priorytet są odrzucane

selector() sprawdza istniejącą natywną gramatykę selektorów i deklaracje przestrzeni nazw bieżącego arkusza bez matchowania elementu dokumentu

Każda gałąź selektora musi być obsługiwana, włącznie z gałęziami wewnątrz normalnie wybaczających list is() i where(); niezdefiniowane prefiksy przestrzeni nazw i nieznane pseudo klasy ewaluują się do false

Korzeniowe :scope i statyczna gramatyka :hover, :active, :focus, :focus-visible i :focus-within są obsługiwane. Udane query feature opisuje wsparcie parsera; selektory akcji użytkownika nadal nigdy nie matchują wyglądu PDF, a funkcjonalne formy jak :hover() są niepoprawne

Próby selektorów przywracają tymczasowy magazyn matchera i zostawiają kolejne matchowanie arkuszy nietknięte; ich praca i tak zużywa współdzielone budżety węzłów i anulowania

Składnia Boolean i warunki forward-compatible

Warunki akceptują not, homogeniczne łańcuchy and albo or i zagnieżdżone nawiasy; mieszanie and z or wymaga jawnego grupowania

Komentarze i escape'y identyfikatorów CSS podążają za istniejącym tokenizerem dekodera, a not musi być keywordem oddzielonym od następującego terminu, a nie tokenem funkcji not()

Zbalansowane nieznane funkcje i nawiasowe warunki general-enclosed ewaluują się do false, więc otaczający not może dostarczyć fallback

Zniekształcone stringi, zniekształcone niekwotowane tokeny URL i niedopasowane delimitatory unieważniają otaczający warunek przed negacją; numeryczne wymiary i kwotowane tokeny funkcji zachowują swoje odrębne granice tokenów

Grupy, importy i wyjście

Grupy warunkowe zachowują swoją rzeczywistą pozycję źródłową, specificity selektora i priorytety important, i mogą się zagnieżdżać z obsługiwanymi grupami mediów

@import "metrics.css" supports(line-height: 18pt) print;
@import "fallback.css" supports(not selector(span:future));

Opcjonalny warunek supports() importu podąża za URI zasobu i poprzedza jego opcjonalny warunek mediów; oba muszą dopuścić zasób, zanim ten wniesie deklaracje

Względne rozwiązywanie URI, obsługa cykli, izolacja przestrzeni nazw i istniejące wymagania kolejności importów pozostają takie jak w arkuszach dostarczanych przez wywołującego

Dopuszczone deklaracje docierają do rzeczywistych zdekodowanych runów, obliczonych kanonicznych wartości rich, zapisanych wyglądów pól i importów rich FDF/XFDF profilu default przez ten sam dekoder

Ograniczenia i akceptacja

Parsowanie warunków i próby selektorów zużywają istniejące limity MaxNodes i MaxTotalCodeUnits; zagnieżdżone warunki, bloki i grupy współdzielą MaxDepth

Anulowanie propaguje EHPDFOperationCancelled bez zwracania częściowych runów, a zawiedzione query albo budżety zachowują odzyskiwanie świeżego i ponownie użytego dekodowania

Tests/Linux/RichTextSupports/Run.py weryfikuje zachowanie deklaracji, selektorów, Booleanów i tokenów URL, zagnieżdżoną kaskadę i importy, mierzone anulowanie oraz rzeczywiste zapisane wyjście PDF zwykłe i szyfrowane AES

Ten profil natywny nie dodaje layoutu przeglądarki, warstw importów, custom properties, dodatkowej składni selektorów ani warunkowych feature'ów CSS ponad obsługiwane wyżej query deklaracji i selektorów

Składnia warunków podąża za obsługiwanymi częściami CSS Conditional Rules Level 3 i Level 4; natywny profil dopuszczania definiuje, które query się powodzą

Dekoder natywny · Opcje dekodowania · Profile mediów