20. DocのHTML変換へんかん

nepl3-doc-html はDoc coreとmarkupへ依存いぞんする純粋じゅんすいbackendであり、ファイル・DOM・guest意味処理いみしょり実行じっこうしない。言語中立げんごちゅうりつあたいinterfaces/doc-html.json定義ていぎする。本章ほんしょうのlocal入口いりぐちは、外部要求がいぶようきゅうひとつもないArticleまたはSentenceをHTML fragmentへ変換へんかんする制約せいやくつ。Sentence単独たんどく入口いりぐちはArticleとはべつかた準備済じゅんびずみであることをあらわし、phrasing fragmentをかえす。Ruby・Anno・BreakにはArticleとおな変換規則へんかんきそくとCSSを使つかう。rootはclass nepl-sentenceのspanとし、空白くうはく保持ほじするが、Articleよう余白よはく背景はいけい・fontは設定せっていしない。単独たんどくSentenceのanchorとrefは、そのSentenceだけの名前空間なまえくうかん検査けんさする。前方参照ぜんぽうさんしょうみとめ、重複定義じゅうふくていぎ複数表示経路ふくすうひょうじけいろ未解決参照みかいけつさんしょう拒否きょひする。周囲しゅういのArticleやforeign文書ぶんしょから暗黙あんもくにlabelをまない。ArticleないのSentenceには、従来じゅうらいどおりArticle全体ぜんたい規則きそく適用てきようする。準備計画じゅんびけいかくはDocumentSyntaxのrootをふくむdigestとすべての外部要求がいぶようきゅう保持ほじする。NDF受信側じゅしんがわはrootに対応たいおうするArticleまたはSentenceの検査けんさ再実行さいじっこうし、送信側そうしんがわ計画けいかくとの一致いっち要求ようきゅうする。document shellと固定こていCSSの配布はいふは、後述こうじゅつ開発かいはつhostが担当たんとうする。一般いっぱんpage/asset/foreign解決かいけつ完全かんぜんなReport操作そうさは、このlocal入口いりぐち責務せきむふくめず、べつ統合経路とうごうけいろあつかう。

LocalHtmlRequest はDocumentSyntaxとRenderOptionsを所有しょゆうする。request codecはDocの構造こうぞう・source閉包へいほう再検査さいけんさし、optionsをrawとして復元ふくげんする。実行準備じっこうじゅんび prepare_local は、Docの要求発見ようきゅうはっけんとlabel検査けんさ実行じっこうする。外部要求がいぶようきゅうがあれば完全かんぜんなplanをNeedsResolutionとしてかえし、からfragmentへえない。この拒否きょひは、外部がいぶURIの合法性ごうほうせいやMathしき意味いみエラーを判定はんていしたものではない。要求ようきゅうがなければoptionsとlocal backend制約せいやく検査けんさし、対象たいしょうdocument/optionsを借用しゃくようする非公開ひこうかいconstructorのPreparedLocalArticleを発行はっこうする。

ParallelModeは、Rows、Columns、Single(language,fallbacks)のいずれかとする。Singleの言語げんごタグは共通きょうつうLang規則きそくしたがい、候補こうほ重複ちょうふくはASCII case-insensitiveで拒否きょひする。かくParallelは、指定していlanguageから明示めいじfallbackじゅん一致いっちするvariantをえらび、存在そんざいしなければMissingVariantとする。からSentenceは、存在そんざいするvariantとして保持ほじする。Rows/Columnsは、元順もとじゅんぜんvariantを表示ひょうじする。各表示出現かくひょうじしゅつげんのdata-nepl-groupは生成せいせいelementの番号ばんごうから決定けっていし、おなじDoc nodeを複数表示ふくすうひょうじしても出現しゅつげん区別くべつする。

Articleはclass nepl-docと言語げんごつarticle、titleはh1とする。SectionはUTF-8 byteの小文字こもじhexにn-をけたidと見出みだしをち、sectionのごとにlevelをやす。6をえる見出みだしは、role=heading/aria-levelのdivとする。Anchor/Referenceもおなじid写像しゃぞう使用しようする。Paragraphはdivとし、連続れんぞくSentence/Parallelをpへまとめ、Blockは独立どくりつdivないし、前後ぜんごのpをじる。元順もとじゅん空白くうはく保持ほじする。

Sentence/Concatはspan、Emphasis/Strongはem/strong、明示めいじBreakはbrとする。Ruby/Annoは型付かたつきspanと固定こていCSSを使つかい、base/reading/ぜんnoteを別要素べつようそとして保持ほじする。Tableはheaderのthead、順序付じゅんじょつきtbody/trとth/td、れつalignmentの固定こていclassを使つかう。空表くうひょうは、からtableのままにする。Listはul/ol、itemはliとBody、明示めいじcheckboxは状態じょうたい表示ひょうじspanとする。HTMLのol.start範囲はんいえるU64はListStartとして拒否きょひし、まるめない。RawCodeはfigureの任意にんいcaptionにlanguageHintを保持ほじし、pre/codeにはもとTextをく。hintをparser実行要求じっこうようきゅうえない。

renderはHTML arenaを反復構築はんぷくこうちくし、全生成ぜんせいせいnode・属性ぞくせい文字列もじれつ処理待しょりまち・ふかさをBudgetへ計上けいじょうする。全結果ぜんけっか共通きょうつうmarkup validatorへとおす。本文ほんぶん/属性ぞくせいのXML不適合ふてきごうやHTML内容不適合ないようふてきごうは、型付かたつきMarkup失敗しっぱいとする。これらを削除さくじょして成功せいこうにしない。出力しゅつりょくfragmentのふかさは256までとし、超過ちょうかはOutputDepthとしてもとDoc nodeをしめす。これはbrowser出力しゅつりょくprofileの限界げんかいであり、入力意味にゅうりょくいみモデルを平坦化へいたんかする規則きそくではない。文書ぶんしょshellはのこりの閲覧側深度えつらんがわしんどふくめて検査けんさし、じつbrowserで再確認さいかくにんする。

RenderedFragment はdocumentDigest、RenderOptions、HtmlRequest、ElementOrigin(element,node)れつ保持ほじする。elementは出力しゅつりょくarena、nodeは明示めいじDoc arenaの番号ばんごうで、生成せいせいしたText/elementごとにひとつの原因げんいん出力順しゅつりょくじゅん保持ほじする。もとDocのSpan/Origin/sourceひょう参照さんしょうし、架空かくう生成せいせいsource位置いちつくらない。固定こていstylesheetはcrateのassets/doc.cssであり、HtmlPolicy自己申告じこしんこくやfragment単体たんたいを、CSS配布済はいふずみの証明しょうめいとしない。

portable renderedは、prepared document/optionsを明示めいじしてる。schema・markup・32byte digestを検査けんさしたあとおなじbackendで再生成さいせいせいし、正式値せいしきちのcanonical CBORに NEPL3.Doc.Html.Fragment.v1 とゼロbyteを前置ぜんちしたdigestを比較ひかくする。改変かいへんmarkup、原因対応げんいんたいおう欠落けつらく変更へんこうべつdocument/optionsの結果けっかを、raw受信じゅしんしたproofとして採用さいようしない。これは現在げんざい純粋じゅんすいlocal変換へんかん再実行比較さいじっこうひかくであり、将来しょうらい外部がいぶrendererの授権じゅけん完全かんぜんなArtifact検査けんさ代行だいこうしない。全体ぜんたい停止ていし資源しげんUsageは、おなじBudgetで単調たんちょう保持ほじする。

local入口いりぐち要求発見ようきゅうはっけんだけで、T23やT21を完成かんせいにはしない。ページの外部がいぶリンク・画像がぞう・foreign表現ひょうげんふく正式要求せいしきようきゅうたしてから、16しょう/18しょうしたがって.nepld正本せいほんえる。

開発かいはつhostによるローカル文書ぶんしょ

nepl3-tools doc-html export <input.nepld> <new-directory> は、共通きょうつう標準ひょうじゅんDoc source処理しょりからlocal HTMLを生成せいせいし、document.htmlassets/doc.cssmanifest.jsonあたらしいディレクトリへく。既存きそん出力しゅつりょく上書うわがきしない。入力にゅうりょくはUTF-8、読取よみと上限じょうげんは10,000,000 bytesとし、上限じょうげんえた内容ないよう解析かいせきしない。生成せいせい完了かんりょうしてから出力しゅつりょくディレクトリをつくる。I/O途中とちゅう失敗しっぱいでは不完全ふかんぜんなディレクトリがのこるため、manifestは最後さいごき、失敗しっぱい成功せいこうにしない。

この入口いりぐち開発用かいはつようhostであり、検査済けんさずみbootstrap fixtureをGrammar compilerへわたしてpackageを構成こうせいする。正式せいしきCLI、生成せいせいpackage配布はいふ、suite、全資源解決ぜんしげんかいけつ完成かんせいとは区別くべつする。source読取よみとり/検査けんさ、lower、prepare/render/serializeは、それぞれ明示めいじした独立どくりつBudgetをつ。manifestのUsageはその単位たんい記録きろくし、文書全体ぶんしょぜんたいひとつのBudgetで完走かんそうした記録きろくえない。ファイルI/OとmanifestのJSON整形せいけいは、hostの責務せきむである。

shellは固定こていHTMLと検査済けんさずみfragmentだけからつくり、stylesheetはbackendのおな固定こていbyteれつ配布はいふする。CSPは既定きてい取得しゅとく・script・formを禁止きんしし、おなじoriginのstylesheetだけを許可きょかする。manifestは入力にゅうりょく、Profile、Doc schema、生成せいせいHTML/CSSのdigestと表示ひょうじoptionsを保持ほじする。現在げんざい形式けいしきはlocal exportよう記録きろくであり、17しょうのKaTeX資源しげんbundleや汎用はんようArtifactの境界検査きょうかいけんさ代行だいこうしない。HTTPのroot pathとJavaScript無効むこうじつbrowserで、生成物せいせいぶつ検査けんさする。外部がいぶpage/asset/foreignが必要ひつよう文書ぶんしょはNeedsResolutionのまま拒否きょひし、リンクやみをとしたHTMLをさない。

固定こていCSSのbaselineと対応範囲たいおうはんい

Rubyはreadingをだい1ぎょう、baseをだい2ぎょうとし、baseline-source:lastでbaseがわのbaselineをそと公開こうかいする。Annoはbaseをだい1ぎょう、notesをだい2ぎょうとし、baseline-source:first使つかう。から先頭行せんとうぎょうはさまない。これにより、のbaseも内側要素うちがわようそ公開こうかいするbaselineで整列せいれつする。明示改行めいじかいぎょうふくむbaseの場合ばあい、Rubyは最後さいごぎょう、Annoは最初さいしょぎょう整列基準せいれつきじゅんになる。たかさを仮定かていした固定こていoffsetやJavaScriptでわせない。

この指定していCSS Inline Layoutのbaseline-sourceGridのbaseline規則きそくもとづく。Inline Layoutは草案そうあんであり、仕様しよう存在そんざいだけをぜんbrowserでの実装証拠じっそうしょうこにしない。生成文書せいせいぶんしょ対応たいおうbrowserは、固定こていCSSとの実試験じつしけん確認かくにんする。はばせま場合ばあいにもRuby/Annoの内部ないぶ任意位置にんいいち分割ぶんかつせず、max-contentのひとつのinline boxとして保持ほじする。ながいbase/reading/notesやpreないcodeはよこにはみるため、hostの閲覧えつらん印刷いんさつprofileは、その表示ひょうじ移動手段いどうしゅだん別途検証べっとけんしょうする。

baseline-source:first/last両方りょうほう利用りようできないbrowserでは、おなじspan構造こうぞうにinline-tableの固定こていCSSを適用てきようする。readingは上側うえがわ、notesは下側したがわのtable-captionとし、baseを唯一ゆいいつぎょうからbaselineを公開こうかいする。Rubyのbaseはinline-blockとして最終行さいしゅうぎょうのbaselineを、Annoのbaseはtable-cellとして最初さいしょぎょうのbaselineを公開こうかいする。DOMの順序じゅんじょ注釈内容ちゅうしゃくないよう変更へんこうせず、HTMLの表要素ひょうようそやJavaScriptを追加ついかしない。この代替だいたいはWebKitで基底文字きていもじ本文ほんぶんよりがる不具合ふぐあいへの対応たいおうであり、型付かたつきmarkup・意味正規形いみせいきけい変更へんこうしない。

代替だいたい根拠こんきょCSS2のinline-block baselinetableのbaseline規則きそく である。対応たいおうpropertyの有無うむだけで合否ごうひめず、実際じっさいのproduction HTMLとCSSをChromium・Firefox・WebKitで表示ひょうじし、本文ほんぶんとのbaseline、み・注釈ちゅうしゃく上下配置じょうげはいち複数行ふくすうぎょう基準きじゅん前後行ぜんごぎょうたか予約よやく検査けんさする。文書内ぶんしょないのJavaScriptは無効むこうとする。この静的文書せいてきぶんしょ検査けんさはWasm・Playground・支援技術しえんぎじゅつによる実操作じつそうさ受入うけいれ代行だいこうしない。