HTML processing and layout ========================== The modules in the layout directory process and layout HTML pages. Overview -------- This is the process to render an HTML document: First the HTML is parsed to a tree of xmlNodes using the HTML parser in libxml. This happens simultaneously with the fetch [html_process_data()]. Any stylesheets which the document depends on are fetched and parsed. The tree is converted to a 'box tree' by xml_to_box(). The box tree contains a node for each block, inline element, table, etc. The aim of this stage is to determine the 'display' or 'float' CSS property of each element, and create the corresponding node in the box tree. At this stage the style for each element is also calculated (from CSS rules and element attributes). The tree is normalised so that each node only has children of permitted types (eg. TABLE_CELLs must be within TABLE_ROWs) by adding missing boxes. The box tree is passed to the layout engine [layout_document()], which finds the space required by each element and assigns coordinates to the boxes, based on the style of each element and the available width. This includes formatting inline elements into lines, laying out tables, and positioning floats. The layout engine can be invoked again on a already laid out box tree to reformat it to a new width. Coordinates in the box tree are relative to the position of the parent node. The box tree can then be rendered using each node's coordinates.