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でないときは、実体参照(<など)および0xff以下の文字参照のみを取り込む。
require "htmlsplit"
require "htmlsplit"
scanner = HTMLSplit.new("<foo bar='㈠'>", "UTF8")
scanner.document.each {|tag| puts tag}
実行結果は次のとおり。
<foo bar="㈠">
制限について
htmlsplitは、簡便なHTMLスキャナなので、動作に一部制限がある。
- 地の文(要素の内容)の実体参照・文字参照は取り込まない。<や)はそのまま残る。
- XML形式の空要素タグの書き方で書いてあっても、empty_tagsにないものは、StartTagオブジェクトを返す。
- HTMLは、SGML宣言で"SHORTTAG YES"となっているので、属性名の省略が有効になっている。正しくは、DTDで名前字句の択一式となっている属性は、属性名(値ではない)を省略できる。HTMLSplitでは、{属性値 => true}を返す。
ライセンス
オリジナルのとおり。オリジナルはRuby's(http://www.ruby-lang.org/ja/LICENSE.txtとGPLのデュアルライセンス)。
ダウンロード
オリジナルはこちら;Script/Ruby
- 公開日 / Release Date:
- 2006.11.11
- ファイル / File:
-
- パッチのみ htmlsplit-1.0.2-q3.diff.gz
- パッチ適用後 htmlsplit-1.0.2-q3.tar.gz
- 主な変更点 / 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のデュアルライセンス)。
ダウンロード
オリジナルはこちら;Script/Ruby
- テストケースを追加。
- 日付
- 2004.10.29
- 内容
-
- テストケースを追加。
- パッチ
- htmlrepair-1.0.1-q2.diff
- 日付
- 2004.10.24
- 内容
-
- 多くの場合に要素が正しい入れ子関係になるように修正。
- 余分な終了タグが生成される点を修正。
- テストケースを追加。
- パッチ
- htmlrepair-1.0.1-q1.diff