Rendering of XML documents in XPCE

Based on graphicals: --------------------

Map each element to an object. Element attributes are mapped to object methods. There is a uniform mechanism for addressing the contents of an element.

--> Easy to define new renderings and map and XML document onto an XPCE object structure and visa-versa.

--> Easy to handle general graphical objects

--> Difficult to edit plain text.

Based on editor ---------------

The document is represented by an editor. Each element is mapped to a fragment. Fragments can hold a graphical object (embedded graphical), which can be converted from an XML document using the first method described.

--> Requires many extensions to class editor and fragment:

+ Well supported word-wrapping for long paragraphs. + Well supported embedding of graphicals. + Many more options to fragments and styles. + Nested fragments might be needed for clarity and performance handling long documents. They are also a nice representation of the XML content hierarchy!

--> Embedding graphicals:

+ Represent using fragments holding 1 character.

--> Class text_image:

+ Turn into a device with height/width equal to the rendered text. Scrolling implies scrolling this device. Caching ensures only visible parts are actually painted.

--> Fragments as `stand-alone' objects:

+ We need some way to represent and element with its content model as a single object.

+ Allow fragments on strings? Or use text-buffer nevertheless. The overhead of text-buffers is very modest, as long as we do not use the `undo buffer'.

Summarising: ------------

+ text_buffer fragment list is a linear list of non-overlapping fragments.

+ Fragments can hold fragments. Positions of sub-fragments are relative to the embedded fragment.

+ Graphicals are represented using a fragment holding a single character. Such fragments should be `read-only'

+ A text_image is a graphical device rendering an entire document. Scrolling is achieved using by moving this object in a window (also realises horizontal scrolling).

Text-image caching: -------------------

+ Maintain a list holding character-start indices of each physical line as well as the height and baseline of the line. Editing updates this list from the first change to the end of the visible-area or end of the change (whichever comes first).

+ For the visible area, maintain a data-structure for each line, specifying width of each character.

Placing graphicals: -------------------

+ If a graphical is encountered in the running text

- If the current line is empty place it on the current line

- Else place it on the queue

- Update physical line descriptions (start/end)