2009-09-15 17 views
6

私のHTMLレンダラーをよりよく適合させるためにこの定義を探しています。現在、どの空白を保持するか、どの空白を残すか、そして何を投げるかを推測しています。 SGML標準は見つけにくいですし、HTML標準では、私のニーズに必要な深さで対象を扱うようには見えません。HTML空白ルールの定義?

現在、私のレンダラはHTMLをツリーに解析し、すべての要素とその内容を配置するための再帰的なレイアウトを行います。私は、解析段階でいくつかの空白を投げて、つまり特定の状況では空白だけをテキストチャンクとして出力しないように実験しています。大部分のケースでどちらが機能するのかは分かりませんが、扱いにくいエッジケースはほとんどありません。

(私はHTMLコントロールのエディタサブクラスでも作業していますが、レイアウト時間のソリューションはエディタで少し問題になることが証明されています。したがって、解析段階に入ることに取り組んでいます。リフロー時間まで利用可能です。これは、文書を編集してからしばらく時間がかかります)。

リンケージ/炎で火を消す。

答えて

5

私はセクション9.1 White space in the HTML 4 specificationはあなたが探していると思います。

+0

。現在、HTML 5パーサのドキュメントを見て、要素の周りの空白をどのように扱っているかを確認します。 – fret

3

独自のHTMLパーサーを作成している場合は、HTML 5仕様の解析アルゴリズムを使用することを強くお勧めします。 http://www.whatwg.org/html5これは、多数のエッジとコーナーのケース、そして一般的なブラウザの奇妙さをカバーしています。ブラウザはSGMLの規則に従わないが、HTML 5の仕様やそれと同等の機能を実行している。アルゴリズムを実装するいくつかのオープンソースパーサーがありますので、必要なものはすべて用意しておく必要があります。

+0

私はHTML5の仕様を読む時間がありましたが、解析に関連する部分はうまくいきましたが、どの空白文字がレンダリングされて消えてしまうのか分かりません。 – fret

+0

どの空白がレンダリングされるかは、尋ねたものとは異なる質問です。これは、解析段階で空白がスローされる可能性があります。ホワイトスペースのようなCSS:preは、解析段階の後に長いjavascriptで適用できるので、解析段階では後でこのようなアプリケーションの対象となる空白を捨てることはできません。 – Alohci

+0

ちなみに、ブラウザが実際にどのように動作するかを見るための良いツールは、HixieのLive DOM Viewer(http://software.hixie.ch/utilities/js/live-dom-viewer/)を使用することです。 "マークアップテスト"ボックスに空白を作成すると、#text:ノードがDOM内に作成され、パースステージで空白がスローされないことがわかります。現在のブラウザと最新のブラウザはまったく同じように動作しませんが、gecko、webkit、またはprestoベースのブラウザを使用している場合は、その効果が十分にクリアされるはずです。 – Alohci

3

だから、私はこの上で答えを取得するつもりだ最も近いがここにあると思う:私はそれを読んで、それは私が必要な詳細を持っていなかった http://www.w3.org/TR/CSS2/text.html#white-space-model

+0

これは、より最近の、やや役立つバージョンです:http://www.w3.org/TR/css3-text/#white-space-processing – Max