This document implements UZI source code documentation.
Before getting into specific details, please read UZI's coding conventions.
Information for new developpers
This part describe how the code is structured, and how it is made.
UZI is split in many components:
- The HTML parser, located in HTML namespace parse a HTML stream and create a DOM tree from the found document
- The DOM code is fully DOM 2.0 compliant
- The CSS parser, located in CSS namespace parse a CSS stylesheet to extract rules
- The HTML renderer then map a given DOM tree to boxes that are then displayed by UZI ContentComponent
Parser structures
Every parser in UZI code is made in a similar architecture.
- HTML Elements
- HTML's elements are declared in Element class
- The allowed and validation rules elements are declared in GenericElement structure
- This structure is refered as soon as an element is found by the parser to check the validity of the element
- This structures implement W3C HTML 4.02 standard
- The element name is converted to an identifier by the HTML::Elements::fromTag method
- HTML Attributes
- HTML's attributes are declared in Attribute class
- The allowed and validation rules attribute are declared in GenericAttribute structure
- This structure is refered as soon as an attribute is found by the parser to check the validity of the attribute
- This structures implement W3C HTML 4.02 standard
-
The attribute name is converted to an identifier by the HTML::Attributes::fromTag method
-
Attribute value validation is currently written but not used. Please refer to the Todo list
- CSS's properties
Renderer system
Currently, the mapper generate boxes (defined as such by CSS standard) to be rendered by an (unknown) external renderer.
This unknown renderer must implement the RequiredRendererImplementation interface in order to be able to use the mapper.
You'll find an implementation (which is as bug-proof as possible, at least to my own knowledge) in BrowserContent class.
Please have a look to the source file BrowserContent.cpp found in source archive for reference implementation.
You can also follow this step-by-step Juce tutorial.
Memory and specific usage documentation
Althrough UZI is carefully checked against memory leaks with the best memory tracking tools, it's still possible for a developer
to miss a memory leak.
In order to avoid such cases, we have compiled some documents like:
- The relation between DOM tree and its supporting tree storage class.
- Understanding allocators used in UZI.
Using this documentation
UZI is made in C++, and put all semantically-close code inside namespace.
The best way to browse this documentation is to use Namespaces tab
to locate the code documentation.
If you already know the class or structure you are looking for, please use the Classes tab.
Other projects involved in this project
- Juce library is used for rendering HTML documents
- Doxygen is used to generate this documentation directly from code
- Gimp is used to generate this (ugly/nice) logo
What is missing ?
Althrough we have already tested Unlimited Zooming Interface code before, the new version still miss an optimized space indexing design also known as KDTree to organize fast element visibility testing while zooming.
Concerning the HTML browser, please have a look to the General Todo list.

(C)
An X-Ryl669 project 2007
This document describes Unlimited Zooming Interface source code. UZI stands for Unlimited Zooming Interface, and source code license is