Support queries CSS nativas de rich text

O decodificador nativo de XHTML avalia grupos @supports e condições de import supports() contra sua gramática suportada de declarações e seletores de 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>

No perfil nativo ambos os grupos se aplicam, produzindo texto bold de 15 pontos com as fontes fornecidas pelo caller

Admissão de declarações e seletores

Queries de declaração usam os helpers de admissão existentes para font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, shorthand de fonte, letter-spacing e word-spacing

Queries numéricas compartilham o perfil math CSS finito, métricas de fonte default e dimensões de media explícitas; propriedades não suportadas ou valores não admitidos avaliam para false

Queries de font-family exigem a coleção FontFamilyNames configurada, e uma família válida mas indisponível pode usar o fallback existente de família fornecida

Uma anotação !important válida é aceita em uma query de declaração sem mudar a prioridade de cascata do grupo condicional; uma declaração extra, ponto e vírgula final ou prioridade inválida é recusada

selector() checa a gramática nativa de seletores existente e as declarações de namespace da folha atual sem matchear um elemento do documento

Cada branch de seletor precisa ser suportada, incluindo branches dentro de listas is() e where() normalmente tolerantes; prefixos de namespace indefinidos e pseudo classes desconhecidas avaliam para false

:scope raiz e a gramática estática :hover, :active, :focus, :focus-visible e :focus-within são suportadas. Uma query de feature bem-sucedida descreve suporte do parser; seletores de ações de usuário ainda nunca matcheiam uma appearance de PDF, e formas funcionais como :hover() são inválidas

Probes de seletores restauram o armazenamento temporário do matcher e deixam o matcheamento subsequente de folhas intacto; o trabalho deles mesmo assim consome os budgets compartilhados de nós e cancelamento

Sintaxe Boolean e condições forward-compatible

Condições aceitam not, cadeias homogêneas de and ou or e parênteses aninhados; misturar and com or exige agrupamento explícito

Comentários e escapes de identificadores CSS seguem o tokenizer existente do decodificador, e not precisa ser um keyword separado do termo seguinte em vez de um token de função not()

Funções desconhecidas balanceadas e condições general-enclosed entre parênteses avaliam para false, então um not envolvente pode fornecer fallback

Strings malformadas, tokens de URL não quotados malformados e delimitadores sem par invalidam a condição envolvente antes da negação; dimensões numéricas e tokens de funções quotados retêm suas fronteiras de token distintas

Grupos, imports e saída

Grupos condicionais retêm sua posição real na origem, specificity do seletor e prioridades important, e podem aninhar com grupos de media suportados

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

A condição supports() opcional de um import segue o URI do recurso e precede sua condição de media opcional; ambos precisam admitir o recurso antes de ele contribuir declarações

Resolução de URI relativo, tratamento de ciclos, isolamento de namespace e os requisitos existentes de ordem de imports permanecem os de folhas de estilo fornecidas pelo caller

Declarações admitidas alcançam runs decodificados reais, valores rich canônicos computados, appearances de campos salvas e imports rich FDF/XFDF de perfil default pelo mesmo decodificador

Limites e aceitação

Parsing de condições e probes de seletores consomem os limites existentes MaxNodes e MaxTotalCodeUnits; condições, blocos e grupos aninhados compartilham MaxDepth

Cancelamento propaga EHPDFOperationCancelled sem retornar runs parciais, e queries ou budgets com falha retêm a recuperação de decode novo e reutilizado

Tests/Linux/RichTextSupports/Run.py verifica comportamento de declarações, seletores, Boolean e tokens de URL, cascata aninhada e imports, cancelamento medido e saída de PDF real salva simples e criptografada com AES

Este perfil nativo não adiciona layout de browser, import layers, custom properties, sintaxe adicional de seletores nem features condicionais de CSS além das queries de declarações e seletores suportadas acima

A sintaxe de condições segue partes suportadas de CSS Conditional Rules Level 3 e Level 4; o perfil nativo de admissão define quais queries têm sucesso

Decodificador nativo · Opções de decode · Perfis de media