Запросы поддержки CSS нативного rich-текста

Нативный XHTML-декодер вычисляет группы @supports и условия supports() у импорта относительно своих поддерживаемых rich-text-объявлений и грамматики селекторов

<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>

В нативном профиле применяются обе группы, давая жирный текст 15 пунктов шрифтами, предоставленными вызывающим

Допуск объявлений и селекторов

Запросы объявлений используют существующие помощники допуска для font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, font shorthand, letter-spacing и word-spacing

Числовые запросы разделяют конечный профиль CSS-математики, метрики шрифта по умолчанию и явные размеры media; неподдерживаемые свойства или недопущенные значения вычисляются в false

Запросы font-family требуют настроенную коллекцию FontFamilyNames, а недоступное, но валидное семейство может использовать существующий fallback предоставленного семейства

Валидная пометка !important принимается в запросе объявления без изменения каскадного приоритета условной группы; лишнее объявление, замыкающая точка с запятой или недопустимый приоритет отклоняются

selector() проверяет существующую нативную грамматику селекторов и объявления namespace текущего листа без сопоставления с элементом документа

Каждая ветвь селектора должна поддерживаться, включая ветви внутри обычно снисходительных списков is() и where(); неопределённые префиксы namespace и неизвестные псевдоклассы вычисляются в false

Корневой :scope и статическая грамматика :hover, :active, :focus, :focus-visible и :focus-within поддерживаются. Успешный feature-запрос описывает поддержку парсером; селекторы пользовательских действий по-прежнему никогда не совпадают с внешним видом PDF, а функциональные формы вроде :hover() недопустимы

Пробы селекторов восстанавливают временное хранилище matcher-а и оставляют последующее сопоставление стилевых листов нетронутым; их работа всё равно расходует общие бюджеты узлов и отмены

Булев синтаксис и условия прямой совместимости

Условия принимают not, однородные цепочки and или or и вложенные скобки; смешение and с or требует явной группировки

Комментарии и экранирования идентификаторов CSS следуют существующему токенизатору декодера, а not должен быть ключевым словом, отделённым от следующего терма, а не токеном функции not()

Сбалансированные неизвестные функции и заключённые в скобки условия general-enclosed вычисляются в false, поэтому обрамляющий not может дать fallback

Malformed строки, malformed незакавыченные URL-токены и непарные разделители делают недействительным обрамляющее условие до отрицания; числовые размеры и закавыченные токены функций сохраняют свои различные границы токенов

Группы, импорты и вывод

Условные группы сохраняют свою фактическую позицию в источнике, специфичность селектора и приоритеты important и могут вкладываться в поддерживаемые media-группы

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

Необязательное условие supports() у импорта следует за URI ресурса и предшествует его необязательному условию media; оба должны допустить ресурс, прежде чем он внесёт объявления

Разрешение относительных URI, обработка циклов, изоляция namespace и существующие требования порядка импорта остаются таковыми у предоставленных вызывающим стилевых листов

Допущенные объявления достигают фактических декодированных run-ов, вычисленных канонических rich-значений, сохранённых внешних видов полей и rich-импортов FDF/XFDF профиля по умолчанию через тот же декодер

Границы и приёмка

Разбор условий и пробы селекторов расходуют существующие пределы MaxNodes и MaxTotalCodeUnits; вложенные условия, блоки и группы разделяют MaxDepth

Отмена распространяется как EHPDFOperationCancelled без возврата частичных run-ов, а неудавшиеся запросы или бюджеты сохраняют свежее и повторно используемое восстановление декодирования

Tests/Linux/RichTextSupports/Run.py проверяет поведение объявлений, селекторов, булевых значений и URL-токенов, вложенный каскад и импорты, измеряемую отмену и фактический сохранённый вывод plain- и AES-шифрованных PDF

Этот нативный профиль не добавляет браузерную раскладку, слои импорта, custom properties, дополнительный синтаксис селекторов или условные возможности CSS сверх поддерживаемых выше запросов объявлений и селекторов

Синтаксис условий следует поддерживаемым частям CSS Conditional Rules Level 3 и Level 4; нативный профиль допуска определяет, какие запросы успешны

Нативный декодер · Опции декодирования · Media-профили