2009-09-15 7 views
6

Ich suche nach dieser Definition, um meinen HTML-Renderer ein bisschen besser zu machen. Derzeit rät es, welches Leerzeichen zu halten ist, welches zusammenfällt und was zu werfen ist. Der SGML-Standard ist schwer zu finden und der HTML-Standard scheint das Thema nicht mit der erforderlichen Tiefe für meine Bedürfnisse zu behandeln.Definition von HTML-Whitespace-Regeln?

Derzeit analysiert mein Renderer den HTML-Code in einen Baum und führt dann einen rekursiven Layout-Durchlauf durch, um alle Elemente und deren Inhalt zu positionieren. Ich experimentiere mit dem Auswerfen einiger Leerräume in der Analysephase, d. H. Das Unterdrücken von Leerraum nur Textabschnitte unter bestimmten Umständen. Was für die meisten Fälle funktioniert, aber es gibt eine Reihe von Randfällen, die schwer zu bewältigen sind.

(Ich arbeite auch an einer Editor-Unterklasse des HTML-Steuerelements, und Layout-Zeit-Lösungen erweisen sich als ein kleines Problem im Editor, daher arbeite ich daran, sie in die Analyse-Phase zu bekommen. t verfügbar bis zur Reflow-Zeit, die einige Zeit nach der Bearbeitung des Dokuments liegt.)

Feuer weg mit Verbindung/Flammen.

Antwort

5

Ich denke, der Abschnitt 9.1 White space in the HTML 4 specification ist, was Sie suchen.

+0

ich das gelesen und es hatte nicht das Detail, das ich brauchte. Derzeit wird die HTML 5-Parser-Dokumentation durchgesehen, um zu sehen, wie sie Leerzeichen um Elemente herum abdeckt. – fret

3

Wenn Sie Ihren eigenen HTML-Parser schreiben, dann empfehle ich Ihnen dringend, den Parsing-Algorithmus in der HTML 5-Spezifikation zu verwenden. http://www.whatwg.org/html5 Es deckt eine große Anzahl von Edge und Corner Fällen und allgemeine Browser-Seltsamkeit. Browser folgen nicht den SGML-Regeln, aber sie zielen alle darauf ab, entweder das zu tun, was die HTML 5-Spezifikation sagt, oder das funktionale Äquivalent davon. Es gibt mehrere Open-Source-Parser, die den Algorithmus implementieren, also sollten Sie alles haben, was Sie brauchen.

+0

Nun, da ich etwas Zeit hatte, die HTML5-Spezifikation zu lesen, also die Teile, die sich mit dem Parsing beschäftigen, bin ich nicht näher daran, herauszufinden, welche Leerzeichen am Ende gerendert werden und welche verschwinden. – fret

+0

Rechts. Welcher Leerraum gerendert wird, ist eine andere Frage als der, die Sie gefragt haben. Welcher Leerraum kann in der Analysephase geworfen werden? Denken Sie daran, dass css wie "white-space: pre" lange nach der Analysephase von JavaScript angewendet werden kann, sodass die Analysephase keinen Leerraum wegwerfen kann, der später einer solchen Anwendung unterliegen könnte. – Alohci

+0

Übrigens, ein gutes Werkzeug, um zu sehen, wie Browser es tatsächlich tun, ist die Verwendung von Hixies Live DOM Viewer (http://software.hixie.ch/utilities/js/live-dom-viewer/). Sie sehen, dass beim Erstellen von Leerraum im Feld "Zum Testen markieren" die Knoten "#text:" im DOM erstellt werden, die anzeigen, dass der Leerraum nicht auf der Analyseebene ausgelöst wird. Beachten Sie, dass aktuelle/aktuelle Browser sich nicht genau gleich verhalten, aber der Effekt sollte deutlich genug sein, wenn Sie einen Gecko-, Webkit- oder Presto-basierten Browser verwenden. – Alohci