## Developers' Guide

## Relating XSL to GObjects

Abstract

XSL defines formatting objects and their properties. GObject -- the GLib Object System -- is an object oriented framework for C for where you define objects and their properties. This section is a summary of how formatting objects and their properties map to GOjects and their properties.

### FoObject, FoNode

The libfo object hierarchy starts at FoObject, which is an extension of GObject that adds some common debugging and logging functions.

FoNode is a subtype of FoObject that has additional properties and functions for making trees of FoNode objects. FoNode is the parent type of both FoFo and FoArea, since XSL operates in terms of FO and area trees.

### Formatting Object --> FoFo

Each XSL formatting object maps to a subtype of the FoFo GObject object type.

Each XSL property of an XSL formatting object maps to a property of the corresponding FoFo subtype.

Functions that return or use formatting object generally use FoFo objects rather than subtypes.

The GObject object type name is "Fo" and the camel-case form of the XSL formatting object name. For example, fo:page-sequence maps to FoPageSequence.

### Formatting Object property --> FoProperty

Each XSL property maps to a subtype of the FoProperty GObject object type.

An FoProperty has a value, which is a FoDatatype.

Functions that return or use XSL properties generally use FoProperty objects rather than specific subtypes.

The GObject object type name is "FoProperty" and the camel-case form of the XSL property name. For example, writing-mode maps to FoPropertyWritingMode.

### XSL datatype --> FoDatatype

Each XSL dataype maps to a subtype of the FoDatatype GObject object type.

An FoDatatype has a value. The value is set when the FoDatatype is created, and it cannot be changed.

Functions that return or use XSL datatypes generally use FoDatatype objects rather than specific subtypes.

The GObject object type name is the camel-case form of the XSL datatype name. For example, color maps to FoColor.

### Other Objects

Other parts of libfo, including FoXslFormatter, are implemented as subtypes of FoObject where it makes sense to do so.