17. Doc・MathのHTML生成せいせいと数式表示すうしきひょうじ
1. 生成せいせいと閲覧えつらん
Doc・MathのHTML生成せいせいは KaTeXPreferred を標準ひょうじゅんとし、検査済けんさずみ数式すうしきから忠実ちゅうじつに変換へんかんできる場合ばあいに、生成環境せいせいかんきょうでKaTeXを実行じっこうする。生成済せいせいずみ文書ぶんしょはHTML・CSS・fontで表示ひょうじし、閲覧時えつらんじにKaTeXを実行じっこうしない。独立どくりつしたNEPL3 MathML backendを残のこし、すべてのMath constructorを扱あつかうportable出力しゅつりょくとfallbackを提供ていきょうする。表示ひょうじは評価ひょうかを暗黙あんもくに呼よばない。
| 場面ばめん | 生成環境せいせいかんきょう | 渡わたす成果物せいかぶつ |
|---|---|---|
| CLI | host側がわの許可済きょかずみ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: true、trust: 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 Node.js: 生成済せいせいずみHTMLのCSS/fontと閲覧時えつらんじJavaScript不要ふようの条件じょうけん。
本章ほんしょうの追加ついかだけでは、KaTeX adapter・MathML backend・Web実行じっこうの完成かんせいを示しめさない。