タグ内の空白文字や、アトリビュートの""等の有無など、完全に復元することが出来るHTMLパーサです。パース結果は、Node配列として帰ります。メモリに溜め込むのでメモリは食います。
HTMLパーサー用タグ定義クラス
タグの開始文字
タグの終了文字
タグが名前を持つかどうかのフラグ
タグ名、アトリビュート名は大文字、小文字関係ないかどうかを示す
アトリビュートを持つかどうかを示す
タグ内にさらにタグを含むかどうかを示す
他のタグ内に入ることが出来るかどうかを示す
htmlのスクリプトタグかどうかを示す
TODO:わからないので調査して埋めること
対応する終了タグを持つときには、その定義が入る
終了タグかどうかを示す
コンストラクタ
終了タグ付き、コンストラクタ
HTMLのノードを示す親クラスです。
テキストノードを示すクラスです。
テキストノードのテキストデータです。
コンストラクタ
文字列取得
テキストノードを文字列として返します。
htmlのアトリビュートを示すクラスです。TagNode?に含まれます。
+--start |+--name || +--attr[0].space0 || |+-attr[0].name || ||+attr[0].space1 || ||| +attr[0].value || ||| | +attr[0].space2 || ||| | | +--end || ||| | | | <name a="data" b="data" > | || | || | || | |+--endspace | || | +attr[1].space2 | || +attr[1].value | |+attr[1].space1 | +-attr[1].name +-attr[1].space0
アトリビュート名の前の空白文字列を示します。
アトリビュート名を示します。
アトリビュート名の後ろの空白文字、イコール、ダブルクォーテーションの位置に入る文字列を示します。
アトリビュート値を示します。
アトリビュート値の後ろのダブルクォーテーションの位置に入る文字列を示します。
コンストラクタ
コンストラクタ
アトリビュートを作成して返します。 ここで返るアトリビュートを文字列に変換すると以下のようになります。
' name="value"'
内部データ
space0=" " name="name" space1="=\"" value="value" space2="\""
アトリビュートコピー
指定アトリビュートのコピーを返します。引数のアトリビュートのコピーを返します。 内部データは変りません?TODO:実装を調べて着実にすること。
文字列取得
アトリビュートを文字列に変換して返します。
HTMLのタグを示すクラスです。
+--start |+--name || +--attr[0].space0 || |+-attr[0].name || ||+attr[0].space1 || ||| +attr[0].value || ||| | +attr[0].space2 || ||| | | +--end || ||| | | | <name a="data" b="data" > | || | || | || | |+--endspace | || | +attr[1].space2 | || +attr[1].value | |+attr[1].space1 | +-attr[1].name +-attr[1].space0
タグの開始文字列を示します。
タグの名前を示します。
タグ内に含まれるアトリビュートの配列です。
アトリビュート後に入る空白文字を示します。
タグの終了を示す文字列を指定します。
タグの定義に使ったタグ定義クラスです。
アトリビュートの名前からアトリビュートを取得できる連想配列です。
コンストラクタ
コンストラクタ
指定XMLを元に、TagNode?を作成します。
作成に失敗した場合は、Exceptionを投げます。
文字列取得
タグを文字列に変換して返します。
アトリビュート取得
指定アトリビュート名のアトリビュート値を取得します。
アトリビュート設定
アトリビュートをタグノード内に設定します。
アトリビュート設定
指定アトリビュート名のアトリビュートに値を設定します。 指定アトリビュート名のアトリビュートがなければ、作成します。
アトリビュート削除
指定アトリビュート名のアトリビュートをタグノード内から消し去ります。
タグノードコピー
指定タグノードのコピーを返します。
XML取得
タグノードをXMLのDomに変換して返します。 この返されるXMLイメージは以下の例のように変換されます。
<name a="data" b="data" >
↓
<tag name="name" start="<" end=">" endspace=" "> <a space2=""" space1="="" value="data" space0=" "/> <b space2=""" space1="="" value="data" space0=" "/> </tag>
変換プログラムサンプル
import html; import dom; import std.string; void main() { HTMLParser p = new HTMLParser(); Node node[] = p.parse(`<name a="data" b="data" >`); printf("%.*s\n",(cast(TagNode)node[0]).toDom().toStringln()); }
タグノード作成
TagNode?のXML表現からTagNode?に変換して返します。
<tag name="name" start="<" end=">" endspace=" "> <a space2=""" space1="="" value="data" space0=" "/> <b space2=""" space1="="" value="data" space0=" "/> </tag>
↓
<name a="data" b="data" >
HTMLパーサークラスです。
タグ内の空白文字や、アトリビュートの""等の有無など、完全に復元することが出来るのが特徴です。パース結果は、Node配列として帰ります。メモリに溜め込むのでメモリは食います。
コンストラクタ
デフォルトのタグ定義を使わずに自分で定義したタグ定義を用いる場合に使います。
パース
html文字列をパースして、Node配列を返します。
パース
html文字列をパースして、Node配列を返します。タグの定義はタグ定義リストを用います。
テスト用メイン
dmd src/html src/dom -version=HTML_TEST
としてコンパイルした場合に実行されます。