Стилевые листы нативного rich-текста

Нативный XHTML-декодер применяет внутренние style-элементы к полям rich-текста и импортам FDF/XFDF, сохраняя фактические вычисленные стили в сохранённом RV и встроенных внешних видах виджетов

<body xmlns="http://www.w3.org/1999/xhtml">
  <style>
    .notice { color: #204080; font-size: 14pt }
    p > span.urgent { font-weight: bold !important }
  </style>
  <p class="notice">Review <span class="urgent">today</span></p>
</body>

Style-элементы используют namespace XHTML и либо опускают type, либо указывают text/css; атрибуты media и вложенные группы @media используют явный нативный профиль print/screen

Правила поддерживают универсальные и type-селекторы, имена классов и ID с учётом регистра, составные селекторы, комбинаторы потомка, потомка, соседнего и последующего соседа, и группы селекторов через запятую

Селекторы namespace

Объявления namespace CSS и квалифицированные селекторы поддерживают именованные и default URI namespace, wildcard- или пустые квалификаторы, независимые области XML-префиксов и ограниченный поиск унаследованных атрибутов

Селекторы атрибутов и структурные

Селекторы атрибутов поддерживают присутствие, равенство, слова через пробел, дефисные префиксы, обычные префиксы, суффиксы и подстроки: [name], [name="value"], [name~="word"], [name|="en"], [name^="pre"], [name$="end"] и [name*="part"]

Значения атрибутов принимают строки в кавычках или идентификаторы CSS и их экранирования; необязательный флаг i сворачивает только ASCII-буквы, тогда как s и опущенный флаг сравнивают с учётом регистра

Атрибуты без префикса и [|name] совпадают с атрибутами без URI namespace; [*|name] совпадает также с атрибутами с префиксом, имеющими это локальное имя, исключая объявления namespace

Комбинаторы соседей пропускают узлы, не являющиеся элементами, и сохраняют сопоставление предков через цепочки селекторов

Структурные псевдоклассы включают :root, :empty, :first-child, :last-child, :only-child, :first-of-type, :last-of-type и :only-of-type

:scope выбирает корневой rich-text-элемент, совпадая с :root, потому что у этого декодера нет отдельного корня scoping, заданного вызывающим

Статический профиль принимает :hover, :active, :focus, :focus-visible и :focus-within как валидные селекторы, которые никогда не совпадают при генерации внешних видов PDF. Их отрицания и логические или реляционные комбинации сохраняют обычную семантику селекторов, поэтому p:not(:hover) может применить стиль, тогда как p:hover — нет

@supports selector(:hover) и эквивалентные условные импорты проверяют поддержку грамматики селекторов и вычисляются в true; это не создаёт состояния указателя, активации или клавиатурного фокуса. Эти шесть псевдоклассов не принимают аргументов, поэтому формы вроде :focus() остаются недействительными

Четыре позиционных селектора :nth-child(), :nth-last-child(), :nth-of-type() и :nth-last-of-type() принимают odd, even, целые позиции и формулы An+B со знаковыми десятичными коэффициентами за пределами диапазонов машинных целых, в рамках настроенного бюджета сканирования

Позиции типов сравнивают и локальное имя элемента, и URI namespace; правило :empty следует Selectors3, поэтому текстовый узел из пробелов делает элемент непустым, тогда как комментарии и инструкции обработки — нет

:lang() следует ближайшему явному значению xml:lang или lang, совпадает без учёта ASCII-регистра по точному значению или дефисному префиксу и трактует явное пустое значение как остановку наследования

Логические и реляционные списки селекторов

:is() и :where() принимают сложные селекторы через запятую, включая комбинаторы потомка и соседа; неподдерживаемые ветви игнорируются, и пустой валидный список не совпадает ни с каким элементом

:is() использует наибольшую специфичность аргумента, включая валидные аргументы, не совпадающие с текущим элементом; :where() даёт нулевую специфичность

:not() принимает непустой список сложных селекторов и совпадает, когда ни один его аргумент не совпадает; недействительный аргумент делает недействительным весь список селекторов

:has() заякоривает относительные селекторы на текущем элементе и проверяет фактических потомков, глубинных потомков или следующих соседей; каждый относительный аргумент может начинаться с >, + или ~ с дальнейшими поддерживаемыми комбинаторами

Вложенный :has() и псевдоэлементы не поддерживаются; недействительный относительный аргумент делает недействительным весь список :has(), тогда как окружающий снисходительный список :is() или :where() может сохранить другие валидные аргументы

:not() и :has() используют наибольшую специфичность валидного аргумента, сравниваемую по числу ID, числу классов/атрибутов/псевдоклассов и числу типов

:nth-child(An+B of selector-list) и :nth-last-child(An+B of selector-list) считают только соседей-элементов, совпадающих с объединением непустого списка сложных селекторов; цель сама должна принадлежать этому объединению

Фильтрованные позиционные селекторы дают свою специфичность псевдокласса плюс наибольшую специфичность фильтра; ключевое слово of принимает экранирования идентификаторов CSS и границы комментариев, тогда как :nth-of-type() и :nth-last-of-type() сохраняют свою неотфильтрованную грамматику

p:has(> span.urgent) { color: red }
span:is(.notice, p > .urgent) { font-weight: bold }
span:nth-child(2 of .included, [data-status="ready"]) { color: blue }

Комментарии CSS и экранирования идентификаторов разбираются до сопоставления, включая от одной до шести шестнадцатеричных цифр, необязательный завершающий пробел CSS и дополнительные Unicode-скаляры; нулевые, суррогатные и вне диапазона шестнадцатеричные экранирования разрешаются в U+FFFD

Объявления каскадируются по importance, специфичности селектора и порядку в документе, затем встроенные стили со своей соответствующей importance; элементы наследуют вычисленные значения родителя через существующие правила, специфичные для каждого свойства

Все внутренние style-элементы участвуют до потребления текста, поэтому style-элемент, появляющийся после своей цели, всё равно применяется; текст стиля не становится видимым текстом поля

Профиль объявлений сохраняет размер, насыщенность, стиль и shorthand шрифта, настроенные списки семейств, цвет, оформление текста, выравнивание, высоту строки и letter/word spacing; преобразование длин, стойки родительских метрик и допуск предоставленных шрифтов следуют существующим нативным rich-text-API

Сохранённый RV содержит вычисленные встроенные стили и не зависит от исходных style-элементов; повторные эквивалентные импорты FDF/XFDF сохраняют точные зафиксированные байты, когда нет ожидающих изменений графа, требующих публикации

Нативные Pascal-потребители, файловые задания Windows и исходные V1-колбэки, а также колбэки Linux JSON/V1 разделяют декодер; изменения публичных раскладок колбэк-записей не требуются

MaxTotalCodeUnits ограничивает сканирование стилевого листа, извлечённый текст стиля и агрегированные развёрнутые объявления; MaxNodes ограничивает число правил, имён селекторов, агрегированные условия атрибутов/псевдоклассов, списки функциональных селекторов и работу сопоставления/сортировки, включая относительный обход и отфильтрованные сканирования соседей; MaxDepth ограничивает сбор XML, части селекторов, вложенные функции и рекурсивное сопоставление

Отмена и сбои пределов сохраняют предыдущий вывод декодера и зафиксированное состояние документа транзакции импорта; повтор использует те же исходные опции и бюджеты

Недействительные или неподдерживаемые группы селекторов верхнего уровня игнорируются целиком; снисходительные списки аргументов is/where сохраняют свои валидные ветви; недействительные объявления сохраняют существующее поведение игнорирования декодера, а неподдерживаемые at-правила пропускаются

Слои импорта, дальнейшие media-features, псевдоэлементы, дополнительные псевдоклассы состояния и заданные вызывающим корни scoping, таблицы, изображения и общая CSS-раскладка остаются активной работой

Нативный обмен данными форм · Rich-колбэки Linux · Обмен данными форм Windows · Интервалы rich-run-ов

Предоставленные вызывающим внешние стилевые листы добавляют связный и рекурсивно импортируемый CSS с разрешением URI ресурсов, media-условиями и выбранными множествами стилевых листов

Нативные запросы поддержки допускают группы @supports и импорты supports(), используя поддерживаемый профиль объявлений и селекторов, с общими границами и восстановлением отмены