Вопрос по sgml, html, whitespace – Определение правил пробелов в HTML?

7

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

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

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

Огонь прочь со связью / огнем.

Ваш Ответ

3   ответа
3

Если ты'переписываете свой собственный анализатор HTML, тогда я настоятельно рекомендую вам использовать алгоритм синтаксического анализа в спецификации HTML 5.http://www.whatwg.org/html5 Он охватывает большое количество краевых и угловых случаев и общую странность браузера. Браузеры нене следует правилам SGML, но все они либо делают то, что говорит спецификация HTML 5, либо выполняют ее функциональный эквивалент. Есть несколько доступных анализаторов с открытым исходным кодом, которые реализуют алгоритм, поэтому он должен иметь все, что вам нужно.

Теперь, когда яУ меня было некоторое время, чтобы прочитать спецификацию HTML5, ну и те части, которые касаются парсинга, яm не ближе к выяснению, какие пробельные символы в конечном итоге оказываются, а какие исчезают. fret
Правильно. Какой пробел отображается - вопрос, отличный от того, который вы задали, какой пробел можно было выбросить на этапе разбора. Помните, что css, как white-space: pre, может быть применен javascript спустя много времени после этапа синтаксического анализа, поэтому этап синтаксического анализа не может выбросить пробелы, которые впоследствии могут быть подвержены такому приложению. Alohci
Кстати, хороший инструмент для того, чтобы увидеть, как на самом деле это делают браузеры, - это использовать Hixie 'S Live DOM Viewer (software.hixie.ch/utilities/js/live-dom-viewer). Вы'посмотрим, как вы создадите пустое пространство вразмечать, чтобы проверить " коробка "#текст:" узлы создаются в DOM, показывая, что пробел не выбрасывается на этапе разбора. Обратите внимание, что текущие / последние браузеры невести себя точно так же, но эффект должен быть достаточно ясен, если выВы используете браузер на основе геккона, webkit или presto. Alohci
5

Так что я думаю, что самый близкий яЯ собираюсь получить ответ на этот вопрос здесь:http://www.w3.org/TR/CSS2/text.html#white-space-model

Это более свежая и немного более полезная версия:w3.org/TR/css3-text/#white-space-processing Max
7

Я думаю, что раздел9.1 Пробел в спецификации HTML 4 это то, что выищу.

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

Похожие вопросы