네이티브 리치 텍스트 CSS support 질의

네이티브 XHTML 디코더는 @supports 그룹과 supports() 가져오기 조건을 자기가 지원하는 리치 텍스트 선언과 selector 문법에 대해 평가합니다

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

네이티브 프로파일에서는 두 그룹이 모두 적용되어 호출자가 공급한 폰트로 15pt bold 텍스트가 만들어집니다

선언과 selector 인정

선언 질의는 font-size, font-weight, font-style, text-decoration, color, text-align, font-family, line-height, font shorthand, letter-spacing, word-spacing의 기존 인정 헬퍼를 씁니다

숫자 질의는 유한한 CSS 수학 프로파일, 기본 폰트 메트릭, 명시적 미디어 크기를 공유합니다. 지원되지 않는 속성이나 인정되지 않은 값은 false로 평가됩니다

Font-family 질의는 구성된 FontFamilyNames 컬렉션을 요구하고, 사용할 수 없지만 유효한 family는 기존 공급 family 폴백을 쓸 수 있습니다

유효한 !important 표기는 조건 그룹의 캐스케이드 우선순위를 바꾸지 않고 선언 질의에서 받아들여집니다. 여분의 선언, 끝의 세미콜론, 무효한 우선순위는 거부됩니다

selector()는 문서 요소와 매칭하지 않고 기존 네이티브 selector 문법과 현재 시트의 네임스페이스 선언을 검사합니다

모든 selector 분기가 지원되어야 하며, 보통 관대한 is()와 where() 목록 안의 분기도 포함입니다. 정의되지 않은 네임스페이스 접두사와 알 수 없는 유사 클래스는 false로 평가됩니다

루트 :scope와 정적 :hover, :active, :focus, :focus-visible, :focus-within 문법이 지원됩니다. 성공한 feature 질의는 파서 지원을 기술합니다. 사용자 행위 selector는 여전히 PDF appearance와 절대 매칭되지 않고, :hover() 같은 함수형 형태는 무효입니다

selector 탐색은 임시 matcher 저장소를 복원하고 이후 스타일시트 매칭을 온전히 둡니다. 그 작업도 공유 노드와 취소 예산을 소비합니다

불리언 문법과 앞선 호환 조건

조건은 not, 동질적인 and 또는 or 체인, 중첩 괄호를 받습니다. and와 or를 섞으려면 명시적 묶음이 필요합니다

주석과 CSS 식별자 이스케이프는 디코더의 기존 토크나이저를 따르고, not은 not() 함수 토큰이 아니라 뒤 항과 분리된 키워드여야 합니다

균형 잡힌 알 수 없는 함수와 괄호친 general-enclosed 조건은 false로 평가되므로, 바깥의 not이 폴백을 제공할 수 있습니다

malformed 문자열, malformed 비인용 URL 토큰, 짝이 맞지 않는 구분자는 부정 전에 바깥 조건을 무효화합니다. 숫자 크기와 인용된 함수 토큰은 서로 다른 토큰 경계를 유지합니다

그룹, 가져오기, 출력

조건 그룹은 실제 소스 위치, selector 명시도, important 우선순위를 유지하며 지원되는 미디어 그룹과 중첩될 수 있습니다

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

가져오기의 선택적 supports() 조건은 리소스 URI 뒤에 오고 선택적 미디어 조건보다 앞섭니다. 둘 다 리소스가 선언에 기여하기 전에 리소스를 인정해야 합니다

상대 URI 해석, 사이클 처리, 네임스페이스 격리, 기존 가져오기 순서 요구는 호출자 공급 스타일시트의 그것을 따릅니다

인정된 선언은 같은 디코더를 통해 실제 디코딩 run, 계산된 정규 리치 값, 저장된 필드 appearance, 기본 프로파일 리치 FDF/XFDF 가져오기에 도달합니다

경계와 acceptance

조건 파싱과 selector 탐색은 기존 MaxNodes와 MaxTotalCodeUnits 한계를 소비합니다. 중첩 조건, 블록, 그룹은 MaxDepth를 공유합니다

취소는 부분 run을 반환하지 않고 EHPDFOperationCancelled로 전파되며, 실패한 질의나 예산은 새 디코딩과 재사용 디코딩 복구를 유지합니다

Tests/Linux/RichTextSupports/Run.py는 선언, selector, 불리언, URL 토큰 동작, 중첩 캐스케이드와 가져오기, 측정된 취소, 실제 저장된 plain 및 AES-암호화 PDF 출력을 검증합니다

이 네이티브 프로파일은 위의 지원되는 선언과 selector 질의를 넘어 브라우저 레이아웃, import 레이어, custom properties, 추가 selector 문법, CSS 조건 기능을 추가하지 않습니다

조건 문법은 CSS Conditional Rules Level 3과 Level 4의 지원되는 부분을 따르며, 네이티브 인정 프로파일이 어떤 질의가 성공하는지 정의합니다

네이티브 디코더 · 디코딩 옵션 · 미디어 프로파일