(2004.10.29) ページを分離した。
Ruby用のHTMLスキャナであるhtmlsplitと、HTML補正器であるhtmlrepairのパッチ。
htmlsplitは、簡便なHTMLスキャナ。HTMLデータを、開始タグ、終了タグ、文字データなどに区切った配列にする。扱いが容易なのと、おかしなHTMLデータであっても例外を発生させずにできるだけ読もうとする。信頼できない(不正な)HTMLデータをスキャンするのに重宝する。
次のようにして使う。HTMLテキストデータを渡すだけ。HTMLSplit#documentは、開始タグなどを表すオブジェクトの配列になっている。
require "htmlsplit" scanner = HTMLSplit.new("foobar") scanner.document.each {|tag| p tag}
実行結果は、次のようになる。
#<StartTag:0xb7f8ce7c @attr=nil, @name="html"> #<CharacterData:0xb7f8cdc8 @text="foobar"> #<EndTag:0xb7f8cb5c @name="body">
各クラスとその意味は次のとおり。
クラス | 意味 |
---|---|
StartTag | 開始タグ |
EmptyElementTag | 空要素タグ |
EndTag | 終了タグ |
CharacterData | 文字データ |
Declaration | 文書型宣言 |
Comment | コメント |
SSI | SSI |
ERuby | 埋め込みスクリプト |
PHP | 処理命令 (PI) |
HTMLテキストの文字コードがUTF-8のときに、次のように明示的に指定すると、属性値でのコードポイント0x100以上の文字参照を取り込むようになる。UTF-8でないときは、実体参照(<など)および0xff以下の文字参照のみを取り込む。
require "htmlsplit" require "htmlsplit" scanner = HTMLSplit.new("<foo bar='㈠'>", "UTF8") scanner.document.each {|tag| puts tag}
実行結果は次のとおり。
<foo bar="㈠">
htmlsplitは、簡便なHTMLスキャナなので、動作に一部制限がある。
オリジナルのとおり。オリジナルはRuby's(http://www.ruby-lang.org/ja/LICENSE.txtとGPLのデュアルライセンス)。
オリジナルはこちら; http://www.moonwolf.com/ruby/ [リンク切れ]
Gitリポジトリ: htmlsplit · master · netsphere / small bag · GitLab
scanner = HTMLSplit.new() scanner.empty_tags << "x:foo" scanner.set_html(html)
htmlrepairは、htmlsplitと組み合わせて、HTMLデータの終了タグを補う。入力されるHTMLデータがvalid(妥当)であると期待できない場合に使用する。フォントタグが開いたままになることなどを防止できる。
オリジナルのとおり。オリジナルはRuby's(http://www.ruby-lang.org/ja/LICENSE.txtとGPLのデュアルライセンス)。
オリジナルはこちら;http://www.moonwolf.com/ruby/ [リンク切れ]
Gitリポジトリ: htmlrepair · master · netsphere / small bag · GitLab