## High-level Classes

There is a single #CongApp object representing the entire application; this owns a collection of #CongPrimaryWindow objects, each represents one of the application's primary windows. A primary window corresponds to a particular #CongDocument.

In addition, the #CongApp owns certain global resources, including the #CongDispspecRegistry.

A CongDocument is a wrapper around the libxml2 document tree, together with a cursor location, and a selection range. It references a CongDispspec. It is a GObject, and it emits signals when things change.

There is also an earlier system, in which there are CongView structs which manually register themselves with CongDocument objects and receive all updates. This is now deprecated.

A dispspec is a "display specification"; it is a way of looking up tags in the xml document and deciding if they are "structural" and hence should appear as big blocks in the view, or "spans", in which case they can merely be rendered as an underline. But it also supports looking up icons to use, and in theory, localisation of the tag names.

The display specifications are generally loaded from ".xds" files, but can also be created at run-time.