html5ever
概要
html5ever
はservoで利用されいているRust製のHTMLパーサー
markup5ever
というクレートも同じリポジトリにあって、これは主にhtml5ever
(rcdom)のテストなどに使われる簡易的なDOM操作ができるユーティリティみたいな感じっぽい。
This crate is built for the express purpose of writing automated tests for the html5ever and xml5ever crates. It is not intended to be a production-quality DOM implementation, and has not been fuzzed or tested against arbitrary, malicious, or nontrivial inputs. No maintenance or support for any such issues will be provided. If you use this DOM implementation in a production, user-facing system, you do so at your own risk.
あくまでテスト用だからこれ使ってブラウザ作らないでねって書いてある。
文字列のHTMLからQuirks Modeを判定する。
HTMLをパースした結果をもとにrcdomを利用して、Quirks Modeを判定してみる。
Quirks Mode is 何?
サンプルコード
もう少しrcdomを触ってみる
DOMの生成は下記の部分で行われている。
data
はHTMLの文字列でopts
はパース設定なので省略。
let dom = parse_document(RcDom::default(), opts)
.from_utf8()
.read_from(&mut data.as_bytes())
.unwrap();
dom
はRcDom
型で
- document => DOM操作
- errors => パースエラーの配列
- quirks_mode => Quirks Modeの状態
のFieldを持っている。
dom.document
はNode
型(構造体)っぽい。
関連情報
トークナイズ処理の書き方はこれを参考にするとよさそう。