Media queries nativas de rich text
O decoder nativo XHTML avalia o atributo media de um elemento style e grupos @media aninhados antes de colocar em cascata as declarações suportadas em runs reais de rich text
A avaliação de media usa um perfil nativo explícito do host e não inspeciona um desktop, browser nem dispositivo de exibição
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>
Condições e cascata
Queries suportam os media types all, print e screen, modificadores only e not, alternativas separadas por vírgulas, e condições not, and e or entre parênteses
Features numéricas aceitam igualdade com dois-pontos, formas min-/max- e comparações de faixas diretas, invertidas ou encadeadas usando =, <, <=, > e >=
Grupos aninhados retêm a ordem da origem, importance das declarações, especificidade de selectors e declarações herdadas de namespaces; um atributo media de estilo e todos os grupos de media envolventes precisam corresponder
Escapes de identificadores CSS, comentários, notação de expoente e tokens balanceados de funções são escaneados dentro do mesmo parser delimitado
Features desconhecidas, valores não suportados e condições general-enclosed retêm um valor de verdade desconhecido através de negação e avaliação Booleana; apenas uma query final true habilita as declarações dela
Fornecer uma entrada de host para uma feature futura não torna essa feature parte do vocabulário suportado de queries
Perfil do host
As features numéricas suportadas são width, height, device-width, device-height, resolution, aspect-ratio, device-aspect-ratio, color, color-index, monochrome e grid
As features discretas são orientation, scan, update, overflow-block, overflow-inline, color-gamut, pointer, any-pointer, hover e any-hover
Unidades de comprimento são pt, px, in, pc, cm, mm, q, em e rem; unidades de resolution são dpi, dpcm, dppx e x, e razões usam notação com barra
Media em em e rem usam MediaInitialFontSize em vez de um tamanho de fonte em cascata de elemento; o default dele é 12 pontos, e zero retém o mesmo valor inicial de 12 pontos para records legados zerados
Uma orientation ou aspect-ratio omitida pode ser derivada de width e height fornecidos; altura zero deixa a razão desconhecida, enquanto width e height iguais usam orientação portrait
any-pointer pode conter coarse e fine; none não pode ser combinado com outro valor de pointer, e color-gamut inclui os ranks inferiores suportados de gamuts
O medium default é print, com 8 bits de cor, sem cor indexada nem monochrome, grid 0 e gamut sRGB; as capabilities update, overflow-inline, pointer, hover e scan dele estão ausentes, e overflow-block é paged
Dimensões e resolution não têm defaults inventados de dispositivos; capabilities de screen além dos defaults compartilhados de cor exigem um valor explícito do host quando relevantes
MediaFeatures permite no máximo 32 nomes distintos insensíveis a maiúsculas ASCII, cada um com 1 a 64 letras ASCII, dígitos ou hífens e um valor de 1 a 256 code units UTF-16; entradas reconhecidas precisam usar um valor numérico não negativo válido ou um valor discreto suportado
MediaInitialFontSize precisa ser finito e ou zero ou entre 0.000001 e 1000000 pontos; perfis de host inválidos disparam EHPDFHeadlessRichTextCodecError antes de retornar runs
Preferências explícitas e acessibilidade
Forneça preferências como entradas de MediaFeatures; elas descrevem o ambiente de rendering do chamador e não inspecionam um sistema operacional, browser nem desktop ativo
| Feature | Valores aceitos | Valor Booleano falso |
|---|---|---|
| prefers-color-scheme | light, dark | Nenhum dos valores |
| 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 }
}
Todas as oito features são discretas: use igualdade ou uma condição Booleana, e não use comparações min-/max- nem de faixas ordenadas
Light é um valor ativo de color-scheme numa query Booleana, e less ou custom é uma preferência ativa de contraste; custom não implica more
Uma preferência omitida permanece desconhecida tanto para print quanto para screen, inclusive sob not; o decoder não inventa no-preference, light, none nem outro valor de fallback
Valores inválidos para features de host reconhecidas rejeitam o perfil antes de os runs serem retornados; escapes de identificadores CSS e comentários usam o tokenizer delimitado existente, incluindo comentários consumidos até o fim da entrada
A feature scripting descreve apenas a disponibilidade fornecida pelo chamador; avaliar a query não executa JavaScript
Atributos media de estilos, grupos aninhados e folhas externas fornecidas pelo chamador compartilham essas semânticas de features e as regras existentes de cascata
Documentos salvos e limites
Chamadores nativos podem configurar um perfil customizado de host através de THPDFHeadlessRichTextDecodeOptions e passá-lo diretamente a HPDFDecodeHeadlessRichText
Runs computados retêm os estilos escolhidos no RV salvo e nas aparências embutidas; imports comuns de FDF/XFDF usam o perfil default de print
Tokens de media, grupos aninhados, parsing de valores do host e matching compartilham a contabilidade de MaxNodes, MaxTotalCodeUnits, MaxDepth e cancelamento com o parser existente de stylesheets
Decodificação com falha não publica runs parciais, e imports com falha retêm o estado anterior do documento da transação envolvente
Import de layers e condições supports, unidades calc e viewport, features de media adicionais e layout CSS geral permanecem trabalho separado
Folhas de estilo internas · Opções nativas
Condições externas de link e import usam o mesmo avaliador de media