Media-запросы нативного rich-текста
Нативный XHTML-декодер вычисляет атрибут media элемента style и вложенные группы @media прежде, чем каскадировать поддерживаемые объявления в фактические rich-text-run-ы
Вычисление media использует явный профиль нативного хоста и не осматривает рабочий стол, браузер или устройство отображения
Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.MediaType := hrmtScreen;
SetLength(Options.MediaFeatures, 2);
Options.MediaFeatures[0].Name := 'width';
Options.MediaFeatures[0].Value := '800px';
Options.MediaFeatures[1].Name := 'resolution';
Options.MediaFeatures[1].Value := '2dppx';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
<style media="screen and (width >= 600px)">
@media (resolution >= 2dppx) {
span.notice { font-size: 14pt }
}
</style>
Условия и каскадирование
Запросы поддерживают типы media all, print и screen, модификаторы only и not, альтернативы через запятую и заключённые в скобки условия not, and и or
Числовые features принимают равенство с двоеточием, формы min-/max- и сравнения диапазонов прямые, обращённые или цепочечные с =, <, <=, > и >=
Вложенные группы сохраняют порядок в источнике, importance объявлений, специфичность селектора и унаследованные объявления namespace; атрибут media у style и все обрамляющие media-группы должны совпасть
Экранирования идентификаторов CSS, комментарии, экспоненциальная запись и сбалансированные токены функций сканируются тем же ограниченным парсером
Неизвестные features, неподдерживаемые значения и условия general-enclosed сохраняют неизвестное значение истинности через отрицание и булево вычисление; только финальный запрос true включает свои объявления
Предоставление хостовой записи для будущей feature не делает эту feature частью поддерживаемого словаря запросов
Профиль хоста
Поддерживаемые числовые features — width, height, device-width, device-height, resolution, aspect-ratio, device-aspect-ratio, color, color-index, monochrome и grid
Дискретные features — orientation, scan, update, overflow-block, overflow-inline, color-gamut, pointer, any-pointer, hover и any-hover
Единицы длины — pt, px, in, pc, cm, mm, q, em, rem, vw, vh, vmin и vmax; единицы разрешения — dpi, dpcm, dppx и x, а отношения используют запись через слэш
Media em и rem используют MediaInitialFontSize, а не каскадный размер шрифта элемента; его значение по умолчанию — 12 пунктов, а ноль сохраняет те же 12 пунктов начального значения для обнулённых legacy-записей
Пропущенные orientation или aspect-ratio могут выводиться из предоставленных width и height; нулевая высота оставляет отношение неизвестным, а равные ширина и высота используют ориентацию portrait
any-pointer может содержать и coarse, и fine; none нельзя сочетать с другим значением pointer, а color-gamut включает младшие поддерживаемые ранги gamut
Среда по умолчанию — print, с 8 битами цвета, без индексированного или монохромного цвета, grid 0 и gamut sRGB; её возможности update, overflow-inline, pointer, hover и scan отсутствуют, а overflow-block — paged
У размеров и разрешения нет выдуманных устройствых значений по умолчанию; возможности screen помимо общих цветовых значений по умолчанию требуют явного хостового значения, когда они существенны
MediaFeatures допускает не более 32 различных имён без учёта ASCII-регистра, каждое из 1–64 ASCII-букв, цифр или дефисов, и значение из 1–256 кодовых единиц UTF-16; распознанные записи должны использовать валидное неотрицательное числовое или поддерживаемое дискретное значение
MediaInitialFontSize должен быть конечным и нулём либо между 0.000001 и 1000000 пунктов; недопустимые профили хоста возбуждают EHPDFHeadlessRichTextCodecError до возврата run-ов
Явные предпочтения и доступность
Предпочтения предоставляйте как записи MediaFeatures; они описывают среду rendering вызывающего и не осматривают операционную систему, браузер или активный рабочий стол
| Feature | Принимаемые значения | Ложное булево значение |
|---|---|---|
| prefers-color-scheme | light, dark | Ни то, ни другое |
| prefers-reduced-motion | no-preference, reduce | no-preference |
| prefers-reduced-transparency | no-preference, reduce | no-preference |
| prefers-contrast | no-preference, less, more, custom | no-preference |
| prefers-reduced-data | no-preference, reduce | no-preference |
| forced-colors | none, active | none |
| inverted-colors | none, inverted | none |
| scripting | none, initial-only, enabled | none |
Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.MediaType := hrmtScreen;
SetLength(Options.MediaFeatures, 2);
Options.MediaFeatures[0].Name := 'prefers-color-scheme';
Options.MediaFeatures[0].Value := 'dark';
Options.MediaFeatures[1].Name := 'prefers-contrast';
Options.MediaFeatures[1].Value := 'more';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
@media (prefers-color-scheme: dark) and (prefers-contrast: more) {
span.notice { font-size: 20pt; font-weight: bold }
}
Все восемь features дискретны: используйте равенство или булево условие и не используйте min-/max- или упорядоченные сравнения диапазонов
Light — активное значение color-scheme в булевом запросе, а less или custom — активное предпочтение контраста; custom не подразумевает more
Пропущенное предпочтение остаётся неизвестным и для print, и для screen, включая под not; декодер не выдумывает no-preference, light, none или другое резервное значение
Недопустимые значения распознанных хостовых features отклоняют профиль до возврата run-ов; экранирования идентификаторов CSS и комментарии используют существующий ограниченный токенизатор, включая комментарии, поглощаемые до конца входа
Feature scripting описывает только доступность, предоставленную вызывающим; вычисление запроса не исполняет JavaScript
Атрибуты media у style, вложенные группы и предоставленные вызывающим внешние листы разделяют эти семантики features и существующие правила каскада
Сохранённые документы и границы
Нативные вызывающие могут настроить собственный профиль хоста через THPDFHeadlessRichTextDecodeOptions и передать его напрямую в HPDFDecodeHeadlessRichText
Вычисленные run-ы сохраняют выбранные стили в сохранённом RV и встроенных внешних видах; обычные импорты FDF/XFDF используют профиль print по умолчанию
Media-токены, вложенные группы, разбор хостовых значений и сопоставление разделяют MaxNodes, MaxTotalCodeUnits, MaxDepth и учёт отмены с существующим парсером стилевых листов
Неудавшееся декодирование не публикует частичные run-ы, а неудавшиеся импорты сохраняют предыдущее состояние документа окружающей транзакции
Слои импорта и условия supports, calc и viewport-единицы, дальнейшие media-features и общая CSS-раскладка остаются отдельной работой
Внутренние стилевые листы · Нативные опции
Внешние условия link и import используют тот же вычислитель media