2009-09-15 3 views
6

Я ищу это определение, чтобы сделать мой визуализатор HTML немного лучше. В настоящее время он догадывается, какие пробелы держать, чтобы рухнуть и что бросить. Стандарт SGML трудно найти, и стандарт HTML, похоже, не относится к предмету с необходимой глубиной для моих нужд.Определение правил HTML-пробелов?

В настоящее время мой рендеринг анализирует HTML в дереве, а затем рекурсивный макет передает позиции всех элементов и их содержимого. Я экспериментирую с тем, что вы бросаете некоторые пробелы в стадии анализа, т. Е. Не выделяя пробелы только текстовые фрагменты в определенных обстоятельствах. Какой вид работы работает в большинстве случаев, но есть несколько редких случаев, с которыми сложно справиться.

(Я также работаю над подклассом редактора элемента управления HTML, а временные решения макета оказываются немного сложными в редакторе, поэтому я работаю над тем, чтобы получить их на этапе анализа. Информация о макете isn ' t до истечения времени перелива, что через некоторое время после того, как вы отредактировали документ.)

Огонь со связями/пламенем.

ответ

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, как white-space: pre может быть применено javascript после этапа синтаксического анализа, поэтому этап синтаксического анализа не может выбрасывать любое свободное пространство, которое впоследствии может быть подвержено такому приложению. – Alohci

+0

Кстати, хороший инструмент для просмотра того, как на самом деле делают браузеры, - использовать Live DOM Viewer от Hixie (http://software.hixie.ch/utilities/js/live-dom-viewer/). Вы увидите, что при создании пробела в поле «mark to to test» в DOM создаются узлы «#text:», показывающие, что пустое пространство не выбрасывается на этапе анализа. Обратите внимание, что текущие/недавние браузеры не ведут себя точно так же, но эффект должен быть достаточно прозрачным, если вы используете браузер 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