DSSSL - Document Style Semantics And Specification Language             
ISO/IEC 10179:1996

 

The display-group Flow Object

By Didier PH Martin, July 24, 1999

Contents

* Home Page
* Introduction 
* The Visual Model 
* The Logical Model
* Models Synthesis
* display-group Characteristics 

Introduction

The Display-group object is a visual container It is an area that contains other areas. As its name implies, it groups other elements like for instance paragraph into a container area

DSSSL specification extract

A display-group flow object class is formatted to produce the concatenation of the areas produced by each of its children. It has a single principal port. Its children shall all be displayed, and it is itself displayed.

The display-group flow object is useful to aggregate into a single visual entity (i.e. area) several flow objects.

The Visual Model

In DSSSL, all visual objects are areas, as defined in the specifications:

"An area is a rectangular box with a fixed width and height. An area is also a specification of a set of marks that can be imaged on a presentation medium. An area may contain other areas."

More particularly, in the DSSSL specifications, the display-group object is a display area:

"Display areas are areas that are not directly parts of lines. A display area has an inherent absolute orientation.

NOTE: Informally, the box has an arrow on it saying 'this way up'.

The positioning of display areas is specified by area containers. An area container has its own coordinate system with its origin at the lower left corner, the positive x-axis extending horizontally to the right and the positive y-axis extending vertically upward."

For instance, an area container could be a page flow object. Thus, a page can contain display-group objects. This is because, a page object is a display area.
The area container imposes a direction to contained display areas. For instance, a page object (an area container) imposes a direction to a set of display-group (display areas). In the case of most occidental languages, the direction is top down.
A display-group is a display-area containing other display area objects like for instance paragraph objects. It can contains also inline objects like sequence objects.

 

The Logical Model

 
"A display-group flow object class is formatted to produce the concatenation of the areas produced by each of its children. It has a single principal port. Its children shall all be displayed, and it is itself displayed."

Several DSSSL flow objects are collection containers. Thus, a particular flow object may be perceived as a flow object collection and simultaneously as a flow object layout configuration.  In the case of the display-group flow object, this means that it contains a single flow objects collection (also called a stream), this collection is laid out within a bounded area. So, like all other DSSSL flow objects, a display-group flow object has two facets:

  • An abstract one - a single collection of flow objects.
  • A visual one - a particular flow objects layout within a bounded area.

So, the display-group object is contained in a parent's collection (i.e. a stream attached to the parent's port).  And itself, it is a flow object container having a single port (i.e. collection). For example, a simple-page-sequence flow object contains several display-group flow objects and one of these display-group flow object contains:

  1. a paragraph flow object
  2. a rule flow object
  3. a sequence flow object

A flow object collection (i.e. a stream) is ordered. Thus, in the example above, the paragraph object contains three (3) objects. The first one in the collection is to be displayed first, the last one is the last to be displayed. This is why we call these objects: flow objects. A flow has an implicit order. Thus, objects contained in a stream (i.e. collection) are placed within the container area one after the other, in the same position they have within the collection. 

Models synthesis

A display-group flow object is basically a flow object collection container. This allows to treat the collection as a single visual entity (i.e. an area).

To illustrate the usefulness of the display-group object we'll use this latter flow object to implement a bulleted list as shown in the example below

XML document:
<body>
<bullet-list>
<item>
<par> this is my first item in the bullet list</par>
</item>
<item>
<par>this is my second item in the bullet list</par>
</item>
</bullet-list>
</body>
DSSSL script:
(element bullet-list
   (make display-group
       space-before: 20pt
       space-after: 10pt
       (process-children)
   )
)
(element (bullet-list item)
   (make display-group
       space-before: 5pt
       (process-children)
   )
)
(element (item par)
   (make paragraph
       first-line-start-indent: -.25in
       (make line-field
           field-width: .25in
       )
      (literal "\U-2022")
      (process-children)
   )
)

Note:  The code \U-2022 is the Unicode specification for the bullet symbol.

The visual model for the previous DSSSL specification could be schematized in the figure below

We created a display-group to control the formatting around the bulleted list. As made explicit by the figure above, the whole construct is visually contained in a display-group, then each bullet item itself enclosed in a display-group. The former used to visually aggregate the bullets and the latter to aggregate the line-field and the paragraph.

Display-group characteristics

The display-group property set provides more information to the rendering engine on how to display the flow object. How display-group object properties are translated into a visual model is shown in the figure below

The display-group property set is composed of 11 properties as shown in the table below. Some of these properties are inherited from container objects some are not.
  
Property name
Description
coalesce-id:

is a string specifying the coalesce-id of the flow object, or #f if the flow object has no coalesce-id. This characteristic is not inherited. The default value is #f. If the areas from two or more flow objects with the same coalesce-id are flowed into the same top-float, bottom-float, or footnote zone of a column-set area, then the areas from the second and subsequent such flow objects shall be discarded. A value other than #f is allowed for this characteristic only if the flow object is flowed into a top-float, bottom-float, or footnote zone of a column-set.

position-preference:

is either #f or one of the symbols top or bottom. This applies if the flow object is directed into a port on a column-set-sequence flow object that is flowed into both the top-float and bottom-float zones of a column-subset and indicates whether the areas from this flow object may be flowed into only one of the zones. This characteristic is not inherited. The default value is #f.

space-before:

is an object of type display-space specifying space to be inserted before, in the placement direction, the areas produced by the flow object. This characteristic is not inherited. The default is for no space before to be inserted.

space-after:

is an object of type display-space specifying space to be inserted after, in the placement direction, the areas produced by the flow object. This characteristic is not inherited. The default is for no space after to be inserted.

keep-with-previous?:

is a boolean specifying whether the flow object shall be kept in the same area as the previous flow object. This characteristic is not inherited. The default value is #f.

keep-with-next?:

is a boolean specifying whether the flow object shall be kept in the same area as the next flow object. This characteristic is not inherited. The default value is #f.

break-before:

is #f or one of the symbols page, page-region, column, or column-set specifying that the flow object shall start an area of that type. This characteristic is not inherited. The default is #f.

break-after:

is #f or one of the symbols page, page-region, column, or column-set specifying that the flow object shall end an area of that type. This characteristic is not inherited. The default is #f.

keep: is one of the following:
  • #t meaning that the areas produced by this flow object shall be kept together within the smallest possible area.
  • the symbol page indicating that the areas produced by the flow object shall lie within the same page; in this case, the flow object shall have an ancestor flow object of class page-sequence.
  • the symbol column-set indicating that the areas produced by the flow object shall lie within the same column set; in this case, the flow object shall have an ancestor of class column-set-sequence.
  • the symbol column indicating that the areas produced by the flow object shall lie within the same column set, and that the first column that each area spans in the column set shall be the same.
  • #f indicating that this characteristic is to be ignored.
  • This characteristic is not inherited. The default value is #f.
may-violate-keep-before?:

is a boolean which, if true, specifies that constraints imposed by the keep: characteristics of ancestor flow objects on the relative positioning of this flow object and its previous flow object may not be respected. This characteristic is not inherited. The default value is #f.

may-violate-keep-after?:

is a boolean which, if true, specifies that constraints imposed by keep: characteristics of ancestor flow objects on the relative positioning of this flow object and its next flow object may not be respected. This characteristic is not inherited. The default value is #f.

 

 


All trademarks herein are the property of their respective owners. 
Copyright ©  1999-2003 Didier PH Martin, All rights reserved. Created by Didier PH Martin, modified: February 18, 2003