An interesting aspect of the representation of layout knowledge is how to capture at least some of the manifold strategies used by human designers. Such strategies are not only a good means to specify search strategies, but are also helpful to deal with so-called dynamic layout objects, whose occurrence depends on certain dynamic criteria (e.g., the breaking of a column or a page).
To overcome with these problems, we have developed an event driven module, which enables a modification of the layout generation process from DCL.
Basic idea behind the event approach is that one can identify certain "interesting" system states during the generation process. Such states are breaking or continuing a sequence of objects, adding objects and so on. When such an event occurs, it is processed by a structure called event handler, basically a set of rules whose preconditions are system states.
When an event is processed this way, different things may be done: dynamic objects may be created like adding some text "see next page". Or font properties maybe changed, and even the layout generators state itself could be changed.
An event handler is a DCL structure which may be referred by design patterns (not necessarily of the same design command). It contains a set of event rules, which are selected by a unique key, and each key stands for a certain system state. All common DCL operations are allowed within an event rule's body.
When a state matching to an events definition is reached, automatically an event is released. It is send to the event handler of the current container (typically the current pattern's container, or the result of the last executed input node), where the event is processed. Note that certain events are propagated to further event handlers.
The execution of an event rule produces a logical container for all changes done by the rule; the logical container is connected to the container which was the event handlers source.
A simple example how to define and to use an event handler can be found here.