ネイティブリッチテキストのメディアクエリ
ネイティブ XHTML デコーダは、style 要素の media 属性とネストした @media グループを評価してから、サポートされる宣言を実際のリッチテキスト run にカスケードします
メディア評価は明示的なネイティブホストプロファイルを使い、デスクトップ、ブラウザ、表示デバイスを検査しません
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>
条件とカスケード
クエリは all、print、screen のメディアタイプ、only と not 修飾子、カンマ区切りの代替、括弧で囲まれた not・and・or 条件をサポートします
数値機能はコロン等価、min-/max- 形式、=、<、<=、>、>= を使う順方向・逆方向・連鎖レンジ比較を受け付けます
ネストしたグループはソース順、宣言の重要度、セレクタ詳細度、継承された名前空間宣言を保持します。style の media 属性とすべての外側メディアグループが一致しなければなりません
CSS 識別子エスケープ、コメント、指数表記、バランスの取れた関数トークンは、同じ上限付きパーサでスキャンされます
未知の機能、未サポートの値、general-enclosed 条件は、否定と Boolean 評価を通じて未知の真理値を保持します。最終的に true のクエリだけがその宣言を有効化します
将来の機能にホストエントリを供給しても、その機能がサポートされるクエリ語彙の一部にはなりません
ホストプロファイル
サポートされる数値機能は width、height、device-width、device-height、resolution、aspect-ratio、device-aspect-ratio、color、color-index、monochrome、grid です
離散機能は orientation、scan、update、overflow-block、overflow-inline、color-gamut、pointer、any-pointer、hover、any-hover です
長さ単位は pt、px、in、pc、cm、mm、q、em、rem です。解像度単位は dpi、dpcm、dppx、x で、比率はスラッシュ表記を使います
メディアの em と rem は、カスケードされた要素フォントサイズではなく MediaInitialFontSize を使います。デフォルトは 12 ポイントで、ゼロはゼロ初期化の legacy レコードに対して同じ 12 ポイントの初期値を保持します
省略された orientation や aspect-ratio は、供給された width と height から導出され得ます。高さゼロは比率を不明のままにし、幅と高さが等しければ portrait の向きを使います
any-pointer は coarse と fine を両方含められます。none は他の pointer 値と組み合わせられず、color-gamut は下位のサポート済みガマットランクを含みます
既定のメディアは print で、色 8 ビット、indexed・monochrome カラーなし、grid 0、ガマットは sRGB です。update、overflow-inline、pointer、hover、scan の能力は欠落し、overflow-block は paged です
寸法と解像度には発明されたデバイスデフォルトがありません。共有のカラーデフォルト以外の screen 能力は、関連する場合、明示的なホスト値を要求します
MediaFeatures は、ASCII 大文字小文字を区別しない最大 32 の一意な名前を許可します。各名前は 1〜64 の ASCII 英数字・ハイフン、値は 1〜256 UTF-16 コード単位です。認識されたエントリは、有効な非負数値またはサポートされる離散値を使わなければなりません
MediaInitialFontSize は有限で、ゼロまたは 0.000001〜1000000 ポイントでなければなりません。無効なホストプロファイルは run を返す前に EHPDFHeadlessRichTextCodecError を送出します
明示的な設定とアクセシビリティ
設定は MediaFeatures エントリとして供給します。これらは呼び出し側のレンダリング環境を記述するもので、OS、ブラウザ、アクティブなデスクトップを検査しません
| 機能 | 受け付ける値 | false になる Boolean 値 |
|---|---|---|
| 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 }
}
8 機能はすべて離散的です。等価または Boolean 条件を使い、min-/max- や順序付きレンジ比較は使わないでください
light は Boolean クエリでのアクティブな color-scheme 値で、less と custom はアクティブなコントラスト設定です。custom は more を含意しません
省略された設定は、not の下も含め、print でも screen でも不明のままです。デコーダは no-preference、light、none などのフォールバック値を捏造しません
認識されたホスト機能の無効な値は、run を返す前にプロファイルを拒否します。CSS 識別子エスケープとコメントは既存の上限付きトークナイザを使い、入力末尾まで消費されるコメントも含みます
scripting 機能は、呼び出し側が供給した可用性だけを記述します。クエリの評価は JavaScript を実行しません
style の media 属性、ネストしたグループ、呼び出し側供給の外部シートは、これらの機能セマンティクスと既存のカスケード規則を共有します
保存ドキュメントと境界
ネイティブ呼び出し側は、THPDFHeadlessRichTextDecodeOptions でカスタムホストプロファイルを設定し、HPDFDecodeHeadlessRichText に直接渡せます
計算された run は、選択されたスタイルを保存された RV と埋め込み外観に保持します。通常の FDF/XFDF インポートはデフォルトの print プロファイルを使います
メディアトークン、ネストしたグループ、ホスト値パース、マッチングは、既存のスタイルシートパーサと MaxNodes、MaxTotalCodeUnits、MaxDepth、キャンセル計上を共有します
失敗したデコードは部分的な run を公開せず、失敗したインポートは周囲トランザクションの以前のドキュメント状態を保持します
インポートレイヤと supports 条件、calc とビューポート単位、さらなるメディア機能、一般的な CSS レイアウトは別の作業です
外部の link・import 条件は同じメディア評価器を使います