# 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.

### Deprecated system

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. 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.