2009-09-15 9 views
6

Estoy buscando esta definición para hacer que mi procesador de HTML sea un poco mejor. En la actualidad se trata de adivinar qué espacios en blanco mantener, cuáles colapsar y qué arrojar. El estándar SGML es difícil de encontrar y el estándar HTML no parece tratar el tema con la profundidad requerida para mis necesidades.Definición de reglas de espacios en blanco de HTML?

Actualmente mi procesador analiza el HTML en un árbol y luego hace un pase de diseño recursivo para posicionar todos los elementos y su contenido. Estoy experimentando con tirar algunos espacios en blanco en la etapa de análisis sintáctico, es decir, no emitir espacios en blanco solo fragmentos de texto en determinadas circunstancias. Lo cual funciona un poco para la mayoría de los casos, pero hay algunos pocos casos extremos que se están volviendo difíciles de manejar.

(También estoy trabajando en una subclase de editor del control HTML, y las soluciones de tiempo de diseño están demostrando ser un problema en el editor, por lo tanto, estoy trabajando para ponerlas en la etapa de análisis. La información de diseño no es t disponible hasta el tiempo de reflujo, que es un tiempo después de haber editado el documento.)

Dispara con llamas/flames.

Respuesta

5

Creo que la sección 9.1 White space in the HTML 4 specification es lo que estás buscando.

+0

leí eso y que no tenía el detalle que necesitaba. Actualmente busca en la documentación del analizador HTML 5 para ver cómo cubre el espacio en blanco alrededor de los elementos. – fret

3

Si está escribiendo su propio analizador HTML, le recomiendo encarecidamente que utilice el algoritmo de análisis en la especificación HTML 5. http://www.whatwg.org/html5 Cubre una gran cantidad de casos de bordes y esquinas, y rarezas generales del navegador. Los navegadores no siguen las reglas SGML, pero todos se dirigen a hacer lo que dice la especificación HTML 5, o el equivalente funcional de la misma. Hay varios analizadores de código abierto disponibles que implementan el algoritmo, por lo que debe tener todo lo que necesita.

+0

Ahora que he tenido algo de tiempo para leer las especificaciones de HTML5, así como las partes que se ocupan del análisis sintáctico, no estoy más cerca de determinar qué caracteres en blanco terminan siendo renderizados y cuáles desaparecen. – fret

+0

Derecha. El espacio en blanco que se representa es una pregunta diferente a la que preguntaste, que fue el espacio en blanco que se puede arrojar en la etapa de análisis sintáctico. Recuerde que css like white-space: pre puede ser aplicado por javascript mucho después de la etapa de análisis sintáctico, por lo que la etapa de análisis no puede descartar ningún espacio en blanco que pueda estar sujeto posteriormente a dicha aplicación. – Alohci

+0

Incidentalmente, una buena herramienta para ver cómo los navegadores realmente lo hacen, es usar el Live DOM Viewer de Hixie (http://software.hixie.ch/utilities/js/live-dom-viewer/). Verá que a medida que crea espacios en blanco en el cuadro "marcar para probar", se crean nodos "#text:" en el DOM que muestran que el espacio en blanco no se lanza en la etapa de análisis sintáctico. Tenga en cuenta que los navegadores actuales/recientes no se comportan exactamente de la misma manera, pero el efecto debería ser lo suficientemente claro si está usando un gecko, un webkit o un navegador basado en presto. – Alohci

Cuestiones relacionadas