htmlsplit / htmlrepair

(2004.10.29) ページを分離した。

Ruby用のHTMLスキャナであるhtmlsplitと、HTML補正器であるhtmlrepairのパッチ。

htmlsplit

概要

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でないときは、実体参照(&lt;など)および0xff以下の文字参照のみを取り込む。

require "htmlsplit"
require "htmlsplit"
scanner = HTMLSplit.new("<foo bar='&#x3220;'>", "UTF8")
scanner.document.each {|tag| puts tag}

実行結果は次のとおり。

<foo bar="㈠">

制限について

htmlsplitは、簡便なHTMLスキャナなので、動作に一部制限がある。

  • 地の文(要素の内容)の実体参照・文字参照は取り込まない。&lt;や&#41;はそのまま残る。
  • XML形式の空要素タグの書き方で書いてあっても、empty_tagsにないものは、StartTagオブジェクトを返す。
  • HTMLは、SGML宣言で"SHORTTAG YES"となっているので、属性名の省略が有効になっている。正しくは、DTDで名前字句の択一式となっている属性は、属性名(値ではない)を省略できる。HTMLSplitでは、{属性値 => true}を返す。

ライセンス

オリジナルのとおり。オリジナルはRuby's(http://www.ruby-lang.org/ja/LICENSE.txtとGPLのデュアルライセンス)。

ダウンロード

オリジナルはこちら; http://www.moonwolf.com/ruby/ [リンク切れ]

Gitリポジトリ: htmlsplit · master · netsphere / small bag · GitLab

公開日 / Release Date:
2006.11.11
ファイル / File:
主な変更点 / Changes:
  • リファクタリング。
  • スクリプトの文字コードをUTF-8に変更。
公開日
2005.01.03
内容
  • 空要素タグと判定するタグを変更できるようにした。HTMLSplit#empty_tags(配列)を変更すればいい。
  • HTMLSplit.new()でHTMLテキストを渡さなくてもいいようにした。HTMLSplit#set_html()を新設。次のようにして使う。
    scanner = HTMLSplit.new()
    scanner.empty_tags << "x:foo"
    scanner.set_html(html)
    
  • テストケースを追加。
パッチ
htmlsplit-1.0.2-q2.diff
公開日
2004.10.29
内容
  • HTMLデータの文字コードが$KCODE依存になっていたが、明示的に指定できるようにした。 HTMLSplit.new()の第2引数で指定する。UTF-8は、$KCODEに合わせて、"UTF8"
  • HTMLデータの文字コードがUTF-8のとき、コードポイント0x100以上の文字参照を取り込む ようにした。ただし、XMLを参考にし、サロゲート領域などは取り込まない。
  • XMLスタイルの空要素タグを解釈するようにした。ただし、StartTagと見なす。
  • 不正なタグに対処した。'<'のみ、'<>'、'<0'など。
  • 閉じない開始タグ、閉じない終了タグに対処した。
  • テストケースを追加した。
パッチ
htmlsplit-1.0.2-q1.diff

htmlrepair

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

内容
  • テストケースを追加。
パッチ
htmlrepair-1.0.1-q2.diff
日付
2004.10.29
内容
  • テストケースを追加。
パッチ
htmlrepair-1.0.1-q2.diff
日付
2004.10.24
内容
  • 多くの場合に要素が正しい入れ子関係になるように修正。
  • 余分な終了タグが生成される点を修正。
  • テストケースを追加。
パッチ
htmlrepair-1.0.1-q1.diff