Skip to content

Latest commit

 

History

History
68 lines (41 loc) · 4.4 KB

File metadata and controls

68 lines (41 loc) · 4.4 KB

Mayaa HTMLパーサ仕様

エレメントの扱い

MayaaのHTMLパーサは、HTMLテンプレート中のタグをHTML要素として扱いつつ、 テンプレート機能を実現するために**独自タグ(名前空間付き要素)**も同一の枠組みで扱います。

  • HTML要素と独自タグは同じ構文規則で読み取り、出力時も同じルールで属性を整形します。
  • Void Element(閉じタグを持たないタグ)はHTML仕様に従い閉じタグを補完しません。
  • HTML要素の省略可能タグ(htmlheadbody など)の自動補完は行いません。

これにより、テンプレート記述の自由度を保ちつつ、Mayaa処理後のHTMLの整合性を保ちます。

表現方針

本プロジェクトは、オープンソースとして広く利用されることを前提とし、プロダクト仕様の記述において以下の方針を採用しています:

  • 簡潔かつ明確:使用者にとって理解しやすい記述を重視します。
  • 標準準拠の明示:HTMLなどの標準仕様に準拠する部分については、その出典(仕様策定団体や該当ドキュメント)を明記します。
  • 非準拠部分の差分明示:標準仕様と異なる振る舞いや拡張仕様がある場合は、その差異を具体的に記述します。

HTMLに関する仕様記述

標準エレメントの扱い

HTMLの標準的な要素(<div><span> など)は、基本的に HTML Living Standard(WHATWG) に準拠して記述します。

名前空間の取り扱い

HTML5では名前空間の概念が正式にはサポートされていません(HTMLはXMLとは異なり、名前空間に基づく文法構造を持ちません)。

しかし、本プロジェクト(Mayaa)では HTML 構造内での柔軟な拡張を可能にするため、拡張的な記法として名前空間の指定を許容しています。たとえば:

<m:if test="condition">
  <div>条件が真のときに表示されます</div>
</m:if>

名前空間を導入することにより、エレメント名に含まれるコロン(:)が特別な意味を持ちます。

  • エレメント名のうち最初に見つかったコロンまでは、名前空間プレフィックスとして評価が試みられます。
  • ただし、そのエレメント自身、もしくは先祖エレメントで xmlns:{プレフィックス}="{名前空間URI}" の形式による名前空間の定義が存在しない場合は、
    コロンを含む元の文字列全体をローカル名として扱います(名前空間の解決を行いません)。
  • エレメント名が コロンで終わる 場合、名前空間プレフィックスとはみなされず、全体がローカル名として扱われます。

このような動作により、曖昧な構文によるパースエラーを避けつつ、柔軟なテンプレート記述を可能としています。 なお、HTML Living Standardをサポートする一般的なブラウザでもコロンを含む要素をエレメント名として扱います。

このように、m: という接頭辞を付けた独自タグを導入することで、HTML記述の中でアプリケーションロジックやテンプレート機能を表現できるようにしています。独自に xmlnsの宣言を行うことで他の接頭辞を使用することもできます。

これらの名前空間付き要素は、HTML仕様には存在しない独自拡張であり、Mayaa のテンプレート処理エンジンによって解釈されるものです。そのため、ブラウザ単体では解釈されず、事前またはサーバーサイドでの処理が必要です。

差異の明示

属性名として許容されていない文字で始まる属性

新パーサでは @attr:attr など属性の名称の先頭文字として許容されていない記号も属性名として扱いMayaa処理後のHTMLとして出力することができます。

タグの大文字小文字は変換せず開始タグに合わせる

タグ名の大文字小文字はMayaa側で変換せず、開始タグの表記に合わせて扱います。 (例: <DIV> で開始した場合、対応する閉じタグも <DIV> として出力されます)