2009-09-15 18 views
6

Poszukuję tej definicji, aby mój renderer HTML był nieco lepszy. Obecnie zgaduje, które spacje zatrzymać, które zawalić i co rzucić. Standard SGML jest trudny do znalezienia, a standard HTML nie traktuje tematu z wymaganą głębią dla moich potrzeb.Definicja reguł białych znaków HTML?

Obecnie mój mechanizm renderujący analizuje kod HTML w drzewie, a następnie przechowuje układ rekurencyjny, aby umieścić wszystkie elementy i ich zawartość. Eksperymentuję z wyrzucaniem spacji na etapie analizy, to znaczy nie emituje w pewnych okolicznościach tylko tekstowych części tekstu. Który działa w większości przypadków, ale jest kilka nielicznych przypadków, z którymi trudno sobie poradzić.

(Pracuję również nad podklasą edytora formantu HTML, a rozwiązania dotyczące czasu projektowania programów są nieco problematyczne w edytorze, dlatego też pracuję nad ich wprowadzeniem na etapie analizy. t dostępne do czasu ponownego przepływu, czyli trochę czasu po edycji dokumentu.)

Odpal z łącznikiem/płomieniami.

Odpowiedz

5

Myślę, że sekcja 9.1 White space in the HTML 4 specification jest tym, czego szukasz.

+0

czytałem, że i on nie miał szczegół potrzebne. Obecnie przeglądam dokumentację parsera HTML 5, aby zobaczyć, jak obejmuje on białe znaki wokół elementów. – fret

3

Jeśli piszesz własny analizator składni HTML, zdecydowanie zalecam użycie algorytmu parsowania w specyfikacji HTML 5. http://www.whatwg.org/html5 Obejmuje dużą liczbę skrzyń krawędzi i narożników oraz ogólną dziwność przeglądarki. Przeglądarki nie przestrzegają reguł SGML, ale wszystkie opierają się na tym, co robi specyfikacja HTML 5 lub jego funkcjonalnym odpowiednikiem. Istnieje kilka parserów open source, które implementują algorytm, więc powinien on mieć wszystko, czego potrzebujesz.

+0

Teraz, gdy miałem trochę czasu na zapoznanie się ze specyfikacją HTML5, oraz części, które zajmują się analizą, nie jestem bliżej do opracowania, które białe znaki zostaną zrenderowane i które znikną. – fret

+0

Dobrze. To, która biała przestrzeń jest renderowana, jest innym pytaniem od tego, które zadałeś, a mianowicie, która biała przestrzeń może zostać rzucona na etapie analizy. Pamiętaj, że css jak white-space: pre może być zastosowany przez javascript na długo po etapie parsowania, więc scena parsowania nie może wyrzucić żadnej białej przestrzeni, która mogłaby później podlegać takiej aplikacji. – Alohci

+0

Nawiasem mówiąc, dobrym narzędziem do sprawdzenia, w jaki sposób przeglądarki faktycznie to robią, jest użycie Live Viewer Hixie Live (http://software.hixie.ch/utilities/js/live-dom-viewer/). Zobaczysz, że gdy tworzysz białe spacje w polu "Oznacz do testu", "#text:" w DOM zostaną utworzone węzły pokazujące, że biała przestrzeń nie jest rzucana na etapie analizy. Zwróć uwagę, że obecne/najnowsze przeglądarki nie zachowują się dokładnie tak samo, ale efekt powinien być wystarczająco jasny, jeśli używasz przeglądarki gecko, webkit lub presto. – Alohci