Support queries CSS nativas de rich text

O descodificador nativo de XHTML avalia grupos @supports e condições de importações supports() contra a 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 os tipos de letra fornecidos pelo caller

Admissão de declarações e seletores

Queries de declarações 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 tipo de letra, letter-spacing e word-spacing

Queries numéricas partilham o perfil math CSS finito, métricas de tipos de letra 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 numa query de declaração sem mudar a prioridade de cascata do grupo condicional; uma declaração extra, um ponto e vírgula final ou uma prioridade inválida são recusados

selector() verifica a gramática nativa de seletores existente e as declarações de namespaces da folha atual sem fazer match a um elemento do documento

Cada ramo de seletor tem de ser suportado, incluindo ramos dentro de listas is() e where() normalmente tolerantes; prefixos de namespaces 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 o suporte do parser; seletores de ações de utilizador continuam a nunca fazer match a uma aparência 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 partilhados 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 descodificador, e not tem de 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, por isso 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 as suas fronteiras de token distintas

Grupos, importações e saída

Grupos condicionais retêm a sua posição real na origem, specificity do seletor e prioridades important, e podem aninhar-se 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 uma importação segue o URI do recurso e precede a sua condição de media opcional; ambos têm de admitir o recurso antes de este contribuir declarações

Resolução de URI relativo, tratamento de ciclos, isolamento de namespaces e os requisitos existentes de ordem de importações permanecem os de folhas de estilo fornecidas pelo caller

Declarações admitidas alcançam runs descodificados reais, valores rich canónicos computados, aparências de campos guardadas e importações rich FDF/XFDF de perfil default pelo mesmo descodificador

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

O cancelamento propaga EHPDFOperationCancelled sem devolver runs parciais, e queries ou budgets falhados retêm a recuperação de decode novo e reutilizado

Tests/Linux/RichTextSupports/Run.py verifica o comportamento de declarações, seletores, Boolean e tokens de URL, cascata aninhada e importações, cancelamento medido e a saída real guardada de PDF simples e cifrado 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 que queries têm sucesso

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