17. Doc・MathのHTML生成せいせい数式表示すうしきひょうじ

1. 生成せいせい閲覧えつらん

Doc・MathのHTML生成せいせいKaTeXPreferred標準ひょうじゅんとし、検査済けんさず数式すうしきから忠実ちゅうじつ変換へんかんできる場合ばあいに、生成環境せいせいかんきょうでKaTeXを実行じっこうする。生成済せいせいず文書ぶんしょはHTML・CSS・fontで表示ひょうじし、閲覧時えつらんじにKaTeXを実行じっこうしない。独立どくりつしたNEPL3 MathML backendをのこし、すべてのMath constructorをあつかうportable出力しゅつりょくとfallbackを提供ていきょうする。表示ひょうじ評価ひょうか暗黙あんもくばない。

場面ばめん生成環境せいせいかんきょうわた成果物せいかぶつ
CLIhostがわ許可済きょかずみKaTeX adapter完成かんせいHTML・CSS・font
PlaygroundブラウザWorkerないのJavaScript adapter完成かんせいした検査済けんさずみHTML artifact
preview・書出かきだ文書ぶんしょ閲覧えつらんKaTeXを実行じっこうしないおな生成結果せいせいけっかとassetを表示ひょうじ

Workerでは renderToString使用しようする。DOMへ描画びょうがする renderばない。ブラウザ利用者りようしゃに、Node.jsや専用せんようserverを要求ようきゅうしない。ユーザー編集後へんしゅうご生成せいせいかくpreview表示前ひょうじまえ書出かきだまえおこない、サイトbuild生成せいせいだけで任意にんい編集内容へんしゅうないようあつかえるとはしない。

KaTeXの取得しゅとくをoptional capabilityとして分離ぶんりし、module読込失敗よみこみしっぱいでNEPL3 WasmやMathMLまで起動不能きどうふのうにしない。数式専用すうしきせんようWorkerを優先ゆうせんし、解析済かいせきず状態じょうたいとMathMLを言語げんごWorkerがわ保持ほじする。その場合ばあい、rendererがわepochも要求ようきゅうidentityにふくめる。Wasm自体じたい利用不能りようふのう環境かんきょう新規変換しんきへんかんできるとはせず、外部がいぶserverへ原稿げんこうおくるfallbackもおこなわない。

JavaScript無効時むこうじには、Playgroundの対話的たいわてき編集へんしゅう生成せいせい利用りようできない。一方いっぽうすでした文書ぶんしょ数式表示すうしきひょうじはJavaScriptを要求ようきゅうしない。MathMLへえた文書ぶんしょ閲覧えつらんにも、閲覧環境えつらんかんきょうのMathML対応たいおう必要ひつようである。

2. 所有しょゆう境界きょうかい

math-core意味いみ表記構造ひょうきこうぞう所有しょゆうする。純粋じゅんすいnepl3-math-tex検査済けんさず構造こうぞうからTeX表現ひょうげんまたは忠実変換不能ちゅうじつへんかんふのう理由りゆうかえし、math-mathml独立どくりつしたMathMLを生成せいせいする。りょうbackendは no_std + alloc とする。KaTeX実行じっこう、module取得しゅとく、ファイル、Worker、時計とけいはhostにく。suiteは操作そうさみの接続せつぞく担当たんとうし、かくDSL coreと純粋じゅんすいUI coreへJavaScript実行じっこうまない。

TeXは構造こうぞうから生成せいせいし、Symbol/Text/Doc注記ちゅうき文字もじ適切てきせつにescapeする。入力文字にゅうりょくもじ任意にんいのTeX commandとしてとおさない。Ruby/AnnoなどのDoc注記ちゅうき忠実ちゅうじつ表現ひょうげんできない場合ばあいは、内容ないよう平坦化へいたんか削除さくじょせず、その数式全体すうしきぜんたいをMathMLへえる。

host境界きょうかいでは、生成要求せいせいようきゅう、TeX、NEPL3 MathML、KaTeX返信へんしん診断しんだん、assetれつ区別くべつする。公開前こうかいまえに、言語中立げんごちゅうりつschema・Rustがた・codec・不変条件ふへんじょうけん対応たいおうさせる。本章ほんしょう責務名せきむめいだけを、実装済じっそうずみschemaとしてあつかわない。

3. 選択せんたく失敗しっぱい停止ていし

Playgroundに KaTeXPreferred / MathMlOnly表示設定ひょうじせっていもうける。CLIは --math-renderer katex-preferred|mathml-only提供ていきょうする。後者こうしゃはKaTeX実行じっこう要求ようきゅうせず、比較ひかく障害時しょうがいじ回避かいひ検証けんしょう使つかえる。

条件じょうけん結果けっか
忠実ちゅうじつなTeX変換へんかん・KaTeX実行じっこう出力検査しゅつりょくけんさ成功せいこうKaTeX生成済せいせいずみHTMLを採用さいようする。
忠実ちゅうじつ変換不能へんかんふのう、host能力のうりょくなし、module読込失敗よみこみしっぱい理由りゆう診断しんだんとして保持ほじし、その数式すうしきをNEPL3 MathMLへえる。
KaTeX通常構文つうじょうこうぶんエラーエラーをかくさず、その数式すうしきをNEPL3 MathMLへえる。
にせidentity・未要求資源みようきゅうしげん出力安全性違反しゅつりょくあんぜんせいいはんprovider違反いはん記録きろくし、正常せいじょう能力不足のうりょくぶそくとしてあつかわず、親操作おやそうさ継続可能けいぞくかのうとする明示めいじpolicyがある場合ばあいだけMathML代替だいたいゆるす。
文書全体ぶんしょぜんたい取消とりけし・予算超過よさんちょうか期限きげん、それによるWorker強制終了きょうせいしゅうりょうもとのStopped理由りゆう保持ほじし、すで利用可能りようかのうおな要求ようきゅうのMathMLだけを表示上ひょうじじょう代替だいたいにできる。
許容きょようされたrenderer局所期限きょくしょきげんによる専用せんようWorker終了しゅうりょう親操作おやそうさ継続可能けいぞくかのう必要資源ひつようしげんのこ場合ばあいだけ、局所失敗きょくしょしっぱい診断しんだんとして正式せいしきなMathML fallbackへうつる。
CSS・fontの欠落けつらく遮断しゃだんasset診断しんだんと、明示的めいじてきなMathMlOnlyへの再生成操作さいせいせいそうさ提供ていきょうする。
もとMathまたはfallback MathMLが不正ふせい型付かたつ失敗しっぱいとし、から成功せいこうfragmentをかえさない。

fallbackもおな要求ようきゅう累積予算るいせきよさん使つかう。StoppedをCompleteへ変更へんこうしたり、あたらしいBudgetで処理しょりだまって再開さいかいしたりしない。取消とりけ代替表示だいたいひょうじは、操作そうさ保存ほぞん成功証拠せいこうしょうこではない。べつ再生成さいせいせいは、あたらしい要求ようきゅうとして開始かいしする。

htmlAndMathml視覚しかくHTMLとアクセシビリティようMathMLをふくめる出力しゅつりょくmodeであり、CSS・font障害しょうがい自動検出じどうけんしゅつ自動切替じどうきりかえではない。このMathMLと、KaTeXなしで生成せいせいするNEPL3 MathMLを区別くべつする。

4. 再現性さいげんせい非同期ひどうき資源しげん

KaTeXの実装じっそうはん・digest、TeX変換版へんかんばん、display mode、出力設定しゅつりょくせってい初期しょきmacro環境かんきょう、CSS/font資源しげん解決かいけつして、要求ようきゅうidentityにふくめる。14しょうのsessionEpoch・workerEpoch・requestId・source集合しゅうごう・Profile・operation・options/resourcesの照合しょうごうを、KaTeX返信へんしんにも適用てきようする。設定変更せっていへんこう、Worker再起動さいきどう、close、cancelふる返信へんしん採用さいようしない。

視覚しかくHTMLは output: html第一候補だいいちこうほとし、NEPL3の独立どくりつMathMLをアクセシビリティ表現ひょうげんとしてわせる。throwOnError: truetrust: false明示めいじstrict policyを使用しようする。無限むげんmaxExpand / maxSize使つかわず、入力にゅうりょくbyteすう式数しきすう出力しゅつりょくbyteすう・asset総量そうりょう・cache容量ようりょう制限せいげんする。KaTeXの上限じょうげんを、実時間じつじかん保証ほしょうとはあつかわない。停止期限ていしきげんえた同期処理どうきしょりは、hostがWorkerを終了しゅうりょうしてepochをすすめる。

KaTeXの maxExpand 超過ちょうか通常構文つうじょうこうぶんエラーとおなじParseErrorがたでも、adapterがはんごとの識別しきべつ検証けんしょうして資源停止しげんていし写像しゃぞうする。一般いっぱんcatchで、fallback成功せいこう変換へんかんしない。maxSize例外れいがいでなく寸法すんぽうをclampするため、生成せいせいする寸法すんぽう・unit変換へんかん上限内じょうげんない保証ほしょうできない入力にゅうりょくは、忠実変換不能ちゅうじつへんかんふのうとする。例外れいがいなし・Markup合法ごうほうだけで忠実成功ちゅうじつせいこう認定にんていせず、制限せいげんわる表記ひょうき成功出力せいこうしゅつりょくにしない。採用版変更時さいようばんへんこうじは、この識別しきべつ境界例きょうかいれい再検証さいけんしょうする。

KaTeX APIは、NEPL3のWork/Allocation計量けいりょうかえさない。adapterの入力にゅうりょく出力検査費用しゅつりょくけんさひよう観測かんそくできる使用量しようりょう、hostの実時間制限じつじかんせいげん区別くべつし、内部全計算ないぶぜんけいさん厳密計量げんみつけいりょう主張しゅちょうしない。Worker強制終了時きょうせいしゅうりょうじは、hostが所有しょゆうする取消とりけし/期限理由きげんりゆう最後さいご受信済じゅしんずみUsageを記録きろくし、うしなわれた未観測分みかんそくぶんを0や推計値すいけいちめた完全かんぜんReportを発行はっこうしない。外部操作がいぶそうさschemaに観測不能かんそくふのう終了原因しゅうりょうげんいん明示めいじし、共通きょうつうcoreの実測じっそくReportを偽造ぎぞうしない。

局所きょくしょrenderer期限きげんによる失敗しっぱいと、文書全体ぶんしょぜんたい期限きげん・cancel・資源停止しげんていしける。親操作おやそうさ継続可能けいぞくかのうで、予約よやく精算後せいさんごにfallback資源しげんのこ場合ばあいだけ、局所失敗きょくしょしっぱい診断付しんだんつきMathMLへえる。文書全体ぶんしょぜんたいのStoppedは、前節ぜんせつどおり維持いじする。Node/Worker入口いりぐちおなじI/O・DOM非依存ひいぞんのKaTeX呼出よびだしmoduleを共有きょうゆうし、例外れいがい警告けいこく構造化診断こうぞうかしんだん変換へんかんする。processへTeXをわたさいは、shell文字列もじれつまない。

macro環境かんきょうは、明示的めいじてき初期値しょきちからしきごとにあたらしく構築こうちくする。KaTeXがmacro objectを更新こうしんるため、まえしき再生成さいせいせい別文書べつぶんしょ変更へんこう流用りゅうようしない。将来共有しょうらいきょうゆうmacroを導入どうにゅうする場合ばあいは、共有範囲きょうゆうはんい順序じゅんじょ・identityをさき契約化けいやくかする。

5. 検査済けんさずみartifactと隔離かくりpreview

KaTeX返信へんしんを、任意にんいRawHtmlとして信用しんようしない。採用版さいようばん実出力じつしゅつりょく棚卸たなおろしし、必要ひつようなHTML/MathML/SVG要素ようそ、namespace、属性ぞくせい、ARIA、有限ゆうげん計算けいさんstyleを明示めいじした専用検査せんようけんさとおして、typed Markup artifactにする。spanだけを許可きょかしたり、未知要素みちようそ削除さくじょして成功せいこうとしたりしない。例外れいがいmessageにふくまれる入力文字にゅうりょくもじも、HTMLへ直接挿入ちょくせつそうにゅうしない。

既存きそんdesign/markup.json は、KaTeX出力全体しゅつりょくぜんたい受理じゅりする定義ていぎではない。必要ひつようなSVG path、MathML annotation、styleとう契約けいやく実装時じっそうじ追加ついかし、一般いっぱんDocに任意にんいのscript・CSS・外部がいぶURLを許可きょかするかたちひろげない。

配置はいちstyleは検査済けんさずみproperty/valueから決定的けっていてきなclassとstylesheetへうつし、style-src-attr 'none'維持いじする方式ほうしき第一候補だいいちこうほとする。CSSの適用順序てきようじゅんじょ意味いみ保存ほぞんし、文字列置換もじれつちかんだけで処理しょりしない。制限付せいげんつきinline styleをえら場合ばあいは、明示めいじsecurity profile・CSP・独立どくりつレビュー・負例ふれい視覚試験しかくしけんさきそろえる。script権限けんげんゆるめない。

KaTeX視覚しかくHTMLはげから除外じょがいし、NEPL3 MathMLは視覚的しかくてきにのみかくして、アクセシビリティじょうのこす。fallbackでは、MathMLを通常表示つうじょうひょうじする。htmlAndMathmlをえらべつprofileも二重読にじゅうよげをけ、じつアクセシビリティtreeで確認かくにんする。KaTeX内部ないぶvirtual DOMや独自どくじforkを前提ぜんていにしない。

previewはscriptを許可きょかしない隔離かくりiframeを維持いじし、KaTeXはそのそとのWorkerで実行じっこうする。srcdoc previewとexportのりょうHTMLに、HTML5 doctypeをける。必要ひつようなstyle・同梱どうこんCSS・fontとpreview/exportのCSPを対応たいおうさせ、採用さいようするKaTeXばん・bundler・Worker形式けいしきじつbrowserで試験しけんする。class/stylesheet方式ほうしきでは、その適用てきようとstyle属性ぞくせい拒否きょひ検査けんさする。inline方式ほうしきえらんだ場合ばあいだけ承認済しょうにんずみstyle属性ぞくせい適用てきよう正例せいれいとし、外部がいぶCSSの許可きょかだけで属性ぞくせい適用てきようできるとはしない。shellのworker-src、Worker自身じしんのCSP、opaque originのiframeにおけるfont取得しゅとく/CORSとroot pathも、正例せいれい遮断例しゃだんれい双方そうほう確認かくにんする。

previewと書出かきだしは、おな生成せいせいartifactをもちいる。保存要求ほぞんようきゅうでrendererを再実行さいじっこうしない。hostがpreviewようURLを束縛そくばくする場合ばあいも、fragment内容ないよう設定せっていはん意味いみ変更へんこうせず、出力しゅつりょくpathへの対応たいおう明示めいじする。保存済ほぞんず状態じょうたいは、対象たいしょうartifactの SaveFinished 成功後せいこうごだけ更新こうしんする。

KaTeX本体ほんたいおな固定こていpackageからCSS/fontをそろえ、path・MIME・byteれつ・digest・licenseをartifact依存いぞんとして保持ほじする。CSSの相対そうたいfont参照さんしょう保持ほじし、preview文書ぶんしょにも独立どくりつにCSSを適用てきようする。標準配布物ひょうじゅんはいふぶつ同一どういつsite artifactから取得しゅとくし、runtimeのCDN取得しゅとく前提ぜんていとしない。書出かきだしはHTMLと必要ひつようassetを一式いっしきとして保存ほぞんする。

previewは、検査済けんさずみartifactのCSS/font/imageを解決かいけつした自己完結じこかんけつHTMLを第一候補だいいちこうほとする。data URLは検査済けんさずみMIME・digest・予算内よさんない資源しげんから生成せいせいし、任意にんいCSS url()をみとめない。おやCSPをsrcdocで緩和かんわできるとはしない。自己完結化じこかんけつかはasset参照さんしょう束縛そくばくであり、数式再生成すうしきさいせいせいやiframe DOMからのexportではない。bundle配布時はいふじに、HTML単一たんいつファイルだけで完結かんけつするとは広告こうこくしない。

6. 受入うけいれ実装順じっそうじゅん

先行せんこうHTMLの実装順じっそうじゅん18しょうのT22〜T25で定義ていぎする。T08の表示用構造ひょうじようこうぞう再利用さいりようし、Math評価ひょうか・Circuit・汎用はんようproviderの全体完成ぜんたいかんせいを、先行せんこうHTMLの前提ぜんていにしない。後続こうぞくT10/T11/T13/T15/T18/T20はおな実装じっそうそだて、既存きそん全体責務ぜんたいせきむとMathMLの必須条件ひっすじょうけん維持いじする。

M04はぜんMathML constructorにくわえ、TeXの忠実性ちゅうじつせい・escape・macro独立性どくりつせい・KaTeX失敗しっぱい/fallback・出力検査しゅつりょくけんさ上限じょうげん要求ようきゅうする。U02/U03/U07はidentity、停止ていしどうartifactのpreview/exportと隔離かくりを、S01/S02/S03/S04/S05はroot path・asset一致いっち・オフライン資源しげん・JavaScript無効むこう書出かきだ文書表示ぶんしょひょうじ検査けんさする。ブラウザ3しゅ実行じっこうし、未実行みじっこう成功せいこうにしない。CLI/WASIでKaTeX hostがない場合ばあいの、明示診断付めいじしんだんつきMathMLも検証けんしょうする。

7. 根拠こんきょ

本章ほんしょう追加ついかだけでは、KaTeX adapter・MathML backend・Web実行じっこう完成かんせいしめさない。