DSSSL Online Application Profile

Last revised 1996.08.16

Recent additions: keyword feature; lambda, #!key, let (letrec, let*, named let)

Introduction

This draft describes an application profile of DSSSL designed for the formatting specification requirements of online SGML browsers and editors (including HTML browsers and editors). This subset, DSSSL Online (informally "dsssl-o"), supports the basic features needed to provide publisher-oriented formatting control of online displays and a minimum set of page-oriented features needed to provide utility printouts from browsers and editors.

Note that this draft is based on committee drafts of the full DSSSL Standard and may not accurately represent the final DSSSL Standard as published. Also, this document is not intended as an introduction to DSSSL, but rather as a description of conformance levels for users and implementors who have already read the standard. A PostScript copy of the DSSSL standard as published is available by anonymous FTP from ftp.ornl.gov in the directory /sgml/wg8/dsssl.

DSSSL Online in context

DSSSL (Document Style Semantics and Specification Language) is an International Standard, ISO/IEC 10179:1996, for specifying document transformation and formatting in a platform- and vendor-neutral manner. DSSSL can be used with any document format for which a property set can be defined according to the Property Set Definition Requirements of ISO/IEC 10744. In particular, it can be used to specify the presentation of documents marked up according to ISO 8879:1986, Standard Generalized Markup Language (SGML).

DSSSL consists of two main components: a transformation language and a style language. The transformation language is used to specify structural transformations on SGML source files. For example, a telephone directory structured as a series of entries ordered by last name could, by applying a transformation spec, be rendered as a series of entries sorted by first name instead. The transformation language can also be used to specify the merging of two or more documents, the generation of indexes and tables of contents, and other operations. While the transformation language is a powerful tool for gaining the maximum use from document databases, the focus in early DSSSL implementations will be on the style language component.

Within the style language, it is possible to identify a number of capabilities that for one reason or another should be considered optional for early implementations. Recognizing this, the designers of DSSSL designated certain features of the style language as optional and created a Core Query Language and a Core Expression Language specifically in order to make more limited implementations possible. However, they did not define any particular subset of the style language component within the standard itself, but rather left that task to industry organizations and standards bodies. This application profile is intended to be one such specification.

The current document grew out of discussions on the former DSSSL-Lite mailing list during the period from September through November 1995. These discussions culminated in a December 9, 1995 meeting of key SGML and DSSSL implementors in Boston hosted by Jon Bosak of Novell and chaired by the late Yuri Rubinsky of SoftQuad. The application profile resulting from that meeting was published on the Internet on December 12, 1995 as the document do951212.htm and announced at a workshop of the Fourth International World Wide Web Conference the same day.

In August 1996, the application profile was updated by Jon Bosak (now an employee of Sun Microsystems) to correct a number of discrepancies between the summary descriptions of flow object characteristics, which had been based on the September 1995 committee draft of the DSSSL specification, and the final DSSSL standard published in April 1996, and also to add certain optional features that are by consensus of the active DSSSL implementors now considered to be part of a minimal DSSSL implementation. These features include lambda, keywords, and let (including letrec, let*, and named let). This document is archived at sunsite.unc.edu in the directory /pub/sun-info/standards/dsssl/dssslo, from which it can be obtained by anonymous FTP.

DSSSL Online summary

This section summarizes the features and flow object classes that must be supported by a minimally conformant DSSSL Online application. Note that the appearance of a flow object class in this section does not imply that the minimal dsssl-o application supports all standard values of all characteristics associated with each flow object class; the extent of this support is detailed in the tables that appear later. The section numbers refer to sections in the DSSSL standard.

Core DSSSL components

The following items are mandatory in the DSSSL standard and therefore in DSSSL Online.

Core query language, core expression language

Basic flow object classes
12.6.1 Sequence
12.6.2 Display group
12.6.6 Paragraph
12.6.7 Paragraph break
12.6.8 Line field
12.6.9 Sideline
12.6.11 Character
12.6.12 Leader
12.6.14 Rule
12.6.15 External graphic
12.6.17 Score
12.6.18 Box
12.6.22 Alignment point
12.6.23 Aligned column

DSSSL options required in DSSSL Online

The following flow object classes and features are optional in the full DSSSL Standard but are required in DSSSL Online.

Features: table, table-auto-width, online, simple-page, alignment, keyword

Syntactic keywords: lambda, #!key, letrec, let*, let (including named let)

Simple page flow object class
12.6.3 Simple page sequence

Table flow object classes
12.6.27.1 Table
12.6.27.2 Table part
12.6.27.3 Table column
12.6.27.5 Table row
12.6.27.6 Table cell
12.6.27.7 Table border

Online display flow object classes
12.6.28.1 Scroll
12.6.28.2 Multi-mode
12.6.28.3 Link
12.6.28.4 Marginalia

DSSSL Options not required in DSSSL Online

For reference purposes, this section lists those optional components of the full DSSSL Standard that need not be supported in applications claiming to minimally conform to the DSSSL Online application profile. The categorization of features and flow object classes used here does not appear in the standard itself but is provided as a possibly useful editorial device.

Complex typography options

Features: page, multi-column, nested-column-set, combine-char, general-indirect, font-info, included-container, actual-characteristic

Complex typography flow object classes
12.6.4 Page sequence
12.6.5 Column set sequence
12.6.10 Anchor
12.6.16 Included container
12.6.19 Side-by-side
12.6.20 Side-by-side item

Bidi option

Features: bidi

Bidi flow object class
12.6.13 Embedded text

Asian language options

Features: vertical, inline-note, glyph-annotation, emphasizing-mark

Asian language flow object classes
12.6.21 Glyph annotation
12.6.24 Multi-line inline note
12.6.25 Emphasizing mark

Mathematics options

Features: math

Mathematics flow object classes
12.6.26.1 Math sequence
12.6.26.2 Unmath
12.6.26.3 Subscript
12.6.26.4 Superscript
12.6.26.5 Script
12.6.26.6 Mark
12.6.26.7 Fence
12.6.26.8 Fraction
12.6.26.9 Radical
12.6.26.10 Math operator
12.6.26.11 Grid
12.6.26.12 Grid-cell

Complex SGML options

Full expression language
Full query language (SDQL)

Features: query, keyword

DSSSL Online flow object class synopses

This section describes each flow object class in the DSSSL Online application profile and specifies minimum support for the characteristics of each flow object class.

Key to the tables of flow object characteristics

In the tables below, the column headed Inh. indicates whether the characteristic is inherited (I) or non-inherited (N); the column headed Standard Values shows the values that are defined for each class in the full DSSSL standard; the column headed Standard Init/Default shows the initial or default value, if any, specified in the DSSSL standard; and the column headed Dsssl-o shows the minimum level of support to be expected in applications purporting to follow this application profile.

Dsssl-o support in the last column of each table is described as Standard, indicating that the characteristic is to be treated exactly as specified in the DSSSL Standard; Default, indicating that a minimal DSSSL Online application can, if necessary, substitute the default value specified in the Standard for any other legal value provided in a DSSSL style specification; Ignore, indicating that any value given for the characteristic can be ignored by a minimal DSSSL Online application; or Partial, indicating that some of the standard values must be supported, but not all of them. In the case of characteristics in the Partial category, the values for which support is not required are marked with asterisks (*). A minimal DSSSL Online application is allowed to substitute the standard initial or default value for any characteristic marked with an asterisk. However, every legal value must be propagated to inheriting flow objects when support for that value is required in the inheriting context.

Sequence flow object class [12.6.1]

A sequence 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 may be inlined or displayed.

NOTE: A sequence flow object is useful for specifying inherited characteristics. For example, a sequence flow object with a specification of a font-posture: characteristic may be constructed for an emphasized phrase element in a paragraph.

A port of a flow object shall accept a sequence flow object if and only if it would accept each of the flow objects in that sequence.

Display group flow object class [12.6.2]

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.

NOTE: It will, therefore, cause a line break in a paragraph even if the display-group has no content.

Display group flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
coalesce-idN#f, string#fIgnore
position-preferenceN#f, top, bottom#fIgnore
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

Simple page sequence flow object class [12.6.3]

A simple-page-sequence flow object class is formatted to produce a sequence of page areas. A simple-page-sequence flow object has a single principal port that accepts any displayed flow object.

NOTE: The simple-page-sequence flow object is intended for systems that wish to provide a very simple page layout facility. More complex page layouts can be obtained with the page-sequence and column-set-sequence flow object classes.

A simple-page-sequence flow object shall not be allowed within the content of any other flow object class.

A simple-page-sequence may have a single line header and footer containing text that is constant except for a page number.

NOTE: A document can contain multiple simple-page-sequences. For example, each chapter of a document could be a separate simple-page-sequence; this would allow the chapter title within a header or footer line.

The page shall be filled from top to bottom. The display size for the contents of the simple-page-sequence shall be the value of the page-width: less the value of the left-margin: and right-margin: characteristics.

Simple page sequence flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
page-widthIlengthsystem-dependentStandard
page-heightIlengthsystem-dependentStandard
left-marginIlength0ptStandard
right-marginIlength0ptStandard
top-marginIlength0ptStandard
bottom-marginIlength0ptStandard
header-marginIlength0ptStandard
footer-marginIlength0ptStandard
left-headerNunlabeled sosofoempty sosofoStandard
center-headerNunlabeled sosofoempty sosofoStandard
right-headerNunlabeled sosofoempty sosofoStandard
left-footerNunlabeled sosofoempty sosofoStandard
center-footerNunlabeled sosofoempty sosofoStandard
right-footerNunlabeled sosofoempty sosofoStandard
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault

Associated procedures:

(page-number-sosofo)

Returns an indirect-sosofo whose content is a sequence of character flow objects representing the page number of the page on which the first area resulting from the indirect flow object specified by the indirect-sosofo occurs.

(current-node-page-number-sosofo)

Returns an indirect-sosofo whose content is a sequence of character flow objects representing the page number of the primary flow object of the current node.

NOTE: This is intended to handle cross references in conjunction with process-referent.

Paragraph flow object class [12.6.6]

A paragraph flow object represents a paragraph. It has a single principal port. The contents of this port may be either inlined or displayed. Inline flow objects are formatted to produce line areas. Displayed flow objects implicitly specify a break, and their areas shall be added to the resulting sequence of areas. A paragraph flow object may only be displayed.

NOTE: Typically, a break implies that a new line is to be started.

Paragraph flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
linesIwrap, asis, asis-wrap*, asis-truncate*, nonewrapPartial
asis-truncate-charI#f, char object#fIgnore
asis-wrap-charI#f, char object#fIgnore
asis-wrap-indentIlength-spec#fIgnore
first-line-alignI#f, char object#fIgnore
alignment-point-offsetI#f, number between 0 and 10050Ignore
ignore-record-end?I#f, #t#fStandard
expand-tabs?I#f, integer greater than zero8Standard
line-spacingIlength-spec12ptStandard
line-spacing-priorityIforce, integer0Default
min-pre-line-spacingI#f, length-spec#fDefault
min-post-line-spacingI#f, length-spec#fDefault
min-leadingI#f, length-spec#fStandard
first-line-start-indentIlength-spec0ptStandard
last-line-end-indentIlength-spec0ptDefault
hyphenation-charIcharacter#\- (the hyphen character)Ignore
hyphenation-methodI#f, public identifier#fDefault
hyphenation-ladder-countI#f, integer greater than zero#fDefault
hyphenation-remain-char-countIpositive integer2Ignore
hyphenation-push-char-countIpositive integer2Ignore
hyphenation-keepI#f, spread, page, column#fDefault
hyphenation-exceptionsIlist of stringsthe empty listDefault
line-breaking-methodI#f, public identifier#fDefault
line-composition-methodI#f, public identifier#fDefault
implicit-bidi-methodI#f, public identifier Default
glyph-alignment-modeIbase, center, top, bottom, fontfontDefault
font-family-nameI#f, stringiso-serifStandard
font-weightI#f, not-applicable*, ultra-light*, extra-light*, light, semi-light*, medium, semi-bold*, bold, extra-bold*, ultra-bold*mediumPartial
font-postureI#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*uprightPartial
font-structureI#f, not-applicable, solid, outlinesolidDefault
font-proportionate-widthI#f, not-applicable*, ultra-condensed*, extra-condensed*, condensed, semi-condensed*, medium, semi-expanded*, expanded, extra-expanded*, ultra-expanded*mediumPartial
font-nameI#f, public identifier#fStandard
font-sizeIlength10ptStandard
numbered-lines?I#f, #t#tIgnore
line-numberI#f, unlabeled sosofo#fIgnore
line-number-sideIstart, end, spread-inside, spread-outside, page-inside, page-outside Ignore
line-number-sepIlength-spec Ignore
quaddingIstart, end, spread-inside*, spread-outside*, page-inside*, page-outside*, center, justify*startPartial
last-line-quaddingIrelative, start, end, spread-inside, spread-outside, page-inside, page-outside, center, justifyrelativeDefault
last-line-justify-limitIlength-spec0Ignore
justify-glyph-space-max-addIlength-spec0ptIgnore
justify-glyph-space-max-removeIlength-spec0ptIgnore
hanging-punct?I#f, #t#fDefault
widow-countIpositive integer2Default
orphan-countIpositive integer2Default
languageI#f, ISO 639 language code#fStandard
countryI#f, ISO 3166 country code#fStandard
position-preferenceN#f, top, bottom#fIgnore
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard
spanIinteger greater than zero1Default
span-weak?I#f, #t#fDefault
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

Paragraph break flow object class [12.6.7]

In conjunction with the paragraph-break flow object class, a paragraph flow object can be used to represent a sequence of paragraphs. The paragraphs are separated by paragraph-break flow objects, which are atomic. Paragraph-break flow objects are allowed only in paragraph flow objects. All the characteristics that are applicable to a paragraph flow object are also applicable to a paragraph-break flow object. The characteristics of a paragraph-break flow object determine how the portion of the content of the paragraph flow object following that paragraph-break flow object up to the next paragraph-break flow object, if any, is formatted.

NOTE: The paragraph-break flow object inherits from its containing paragraph flow object in the usual way.

The first-line-start-indent: is applicable to the line following a paragraph-break flow object, and the last-line-end-indent: is applicable to the line preceding a paragraph-break flow object.

NOTE: It is recommended that paragraph-break flow objects are used only if there is no other way of specifying the desired formatting.

Characteristics: See Paragraph flow object class.

Line field flow object class [12.6.8]

The line-field flow object class is inlined and has inline content. It produces a single inline area. The width of this area is equal to the value of the field-width: characteristic. If the content of line-field area cannot fit in this width, then the area will grow to accommodate the content and, if the line-field occurs in the paragraph, there shall be a break after the line-field.

It has a single principal port.

Line field flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
field-widthIlength-spec0ptStandard
field-alignIstart, end, centerstartDefault
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
inhibit-line-breaks?I#f, #t#fStandard
break-before-priorityNinteger0Ignore
break-after-priorityNinteger0Ignore

Sideline flow object class [12.6.9]

A sideline flow object is used to contain flow objects that have an attachment area consisting of a line parallel to the placement direction. A sideline flow object has a single principal port which can contain both inlined and displayed flow objects. For each display area produced by its content, the sideline flow object adds an attachment. For each inline area produced by its content, the sideline flow object annotates that area so as to cause the paragraph in which the flow object occurs to add an attachment area to the line in which that inline area occurs.

NOTE: Sidelines are often used to mark changes.

Sidelines on consecutive areas in a single area container which have no space between them should be drawn as a single line.

Sideline flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
sideline-sideIstart, end, both, spread-inside*, spread-outside*, page-inside*, page-outside* Partial
sideline-sepIlength-spec Standard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
line-capIbutt, round, squarebuttDefault
line-dashIlist of lengthslist containing the length 0ptDefault
line-thicknessIlength1ptStandard
line-repeatIinteger1Default
line-sepIlength1ptIgnore

Character flow object class [12.6.11]

A character flow object is atomic. Flow objects of this class can only be inlined.

A character flow object is formatted to produce a single inline area. This may be merged with adjacent inline areas if the ligature?: property is true. The position point of the inline area is the position point property of the glyph specified in the font resource for the specified writing-mode. The escapement direction is the direction between the position point and escapement points as specified in the font resource for the specified writing-mode. The size of the area in the escapement direction is the distance between the position and escapement points. The size of the area before and after the placement path in the line-progression direction is the smallest that will enclose the extent of the glyph in those directions as specified in the font resource for the specified writing-mode. If the nominal alignment mode of the font resource for the character flow object's writing-mode is not the same as the paragraph's alignment mode, then the glyph area is automatically adjusted as specified by the alignment mode property in the font resource for the specified writing-mode.

Character flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
charNcharactervalue of the current node's char property, if there is one, else the value of applying the char-map characteristic, if there is oneStandard
char-mapI#f, procedure#fDefault
glyph-idN#f, glyph-idglyph-id of the nominal glyph specified using the standard-chars architectural form, else #fStandard
glyph-subst-tableI#f, glyph-subst-table, list of glyph-subst-table#fDefault
glyph-subst-methodI#f, public identifier, list of public identifiers#fDefault
glyph-reorder-methodI#f, public identifier, list of public identifiers#fDefault
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
font-family-nameI#f, stringiso-serifStandard
font-weightI#f, not-applicable*, ultra-light*, extra-light*, light, semi-light*, medium, semi-bold*, bold, extra-bold*, ultra-bold*mediumPartial
font-postureI#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*uprightPartial
math-font-postureN#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*the value of the math-font-posture character property of the char: characteristicPartial
font-structureI#f, not-applicable, solid, outlinesolidDefault
font-proportionate-widthI#f, not-applicable*, ultra-condensed*, extra-condensed*, condensed, semi-condensed*, medium, semi-expanded*, expanded, extra-expanded*, ultra-expanded*mediumPartial
font-nameI#f, public identifier#fStandard
font-sizeIlength10ptStandard
stretch-factorNnumber1Default
hyphenate?I#f, #t#fDefault
hyphenation-methodI#f, public identifier#fDefault
kern?I#f, #t#fDefault
kern-modeIloose, normal, kern, tight, touchnormalDefault
ligature?I#f, #t#fDefault
allowed-ligaturesIlist of glyph-ids or charsthe empty listDefault
space?N#f, #tthe value of the space? character property of the char: characteristicStandard
inline-space-spaceIinline-space Ignore
escapement-space-beforeIinline-spaceinline-space of 0ptIgnore
escapement-space-afterIinline-spaceinline-space of 0ptIgnore
record-end?N#f, #tthe value of the record-end? character property of the char: characteristicStandard
input-tab?N#f, #tthe value of the input-tab? character property of the char: characteristic if the char: characteristic was not explicitly specified, and otherwise #fStandard
input-whitespace-treatmentIpreserve, collapse, ignorepreserveStandard
input-whitespace?N#f, #tthe value of the input-white-space? character property of the char: characteristic if the char: characteristic was not explicitly specified, and otherwise #fDefault
punct?N#f, #tthe value of the punct? character property of the char: characteristicIgnore
break-before-priorityNintegerthe value of the break-before-priority character property of the char: characteristicIgnore
break-after-priorityNintegerthe value of the break-after-priority character property of the char: characteristicIgnore
drop-after-line-break?N#f, #tthe value of the drop-after-line-break? character property of the char: characteristicIgnore
drop-unless-before-line-break?N#f, #tthe value of the drop-unless-before-line-break? character property of the char: characteristicIgnore
math-classNordinary, operator, binary, relation, opening, closing, punctuation, inner, spacethe value of the math-class character property of the char: characteristicIgnore
scriptN#f, formal public identifierthe value of the script character property of the char: characteristicIgnore
position-point-shiftIlength-spec0ptStandard
languageI#f, ISO 639 language code#fStandard
countryI#f, ISO 3166 country code#fStandard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
inhibit-line-breaks?I#f, #t#fStandard

Leader flow object class [12.6.12]

A leader flow object can only be inlined. A leader flow object has a single principal port containing the inline flow objects to be repeated.

Leader flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
lengthNlength-specdetermined by contextStandard
truncate-leader?I#f, #t#fStandard
align-leader?I#f, #t#tStandard
min-leader-repeatIinteger greater than 01Standard
inhibit-line-breaks?I#f, #t#fStandard
break-before-priorityNinteger0Ignore
break-after-priorityNinteger0Ignore

Rule flow object class [12.6.14]

A rule is used to specify a straight line. Rules may be inlined or displayed.

Rule flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
orientationNhorizontal, vertical, escapement, line-progressionshall be specifiedStandard
lengthNlengthdetermined by contextStandard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
line-capIbutt, round, squarebuttDefault
line-dashIlist of lengthslist containing the length 0ptDefault
line-thicknessIlength1ptStandard
line-repeatIinteger1Default
line-sepIlength1ptIgnore
position-point-shiftIlength-spec0ptStandard
inhibit-line-breaks?I#f, #t#fStandard
break-before-priorityNinteger0Ignore
break-after-priorityNinteger0Ignore
position-preferenceN#f, top, bottom#fIgnore
display-alignmentIstart, center, end, inside*, outside*startPartial
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
spanIinteger greater than zero1Default
span-weak?I#f, #t#fDefault
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

External graphic flow object class [12.6.15]

The external-graphic flow object class is used for graphics contained in an external entity. Flow objects of this class may be inlined or displayed. This flow object is atomic.

External graphic flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
display?N#f, #t#fStandard
scaleNnumber, list of two numbers, max, max-uniformmax-uniformStandard
max-widthNlength-spec Standard
max-heightNlength-spec Standard
entity-system-idN#f, system identifiershall be specifiedStandard
notation-system-idNsystem identifiershall be specifiedStandard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
position-preferenceN#f, top, bottom#fIgnore
display-alignmentIstart, center, end, inside*, outside*startPartial
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
spanIinteger greater than zero1Default
span-weak?I#f, #t#fDefault
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault
position-point-xNlength-spec0 if writing-mode is left-to-right or right-to-leftStandard
position-point-yNlength-spec0 if writing-mode is top-to-bottomStandard
escapement-directionNtop-to-bottom, left-to-right, right-to-leftthe value of writing-modeDefault
inhibit-line-breaks?I#f, #t#fStandard
break-before-priorityNinteger0Ignore
break-after-priorityNinteger0Ignore

Score flow object class [12.6.17]

The score flow object has a single principal port. The content of this port is scored. The port can contain only inlined flow objects.

NOTE: Kendot scoring in Japanese is achieved using the emphasizing-mark flow object class of full DSSSL.

Score flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
typeNbefore, through, after, length-spec, charactershall be specifiedStandard
score-spaces?I#f, #t#tStandard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
line-capIbutt, round, squarebuttDefault
line-dashIlist of lengthslist containing the length 0ptDefault
line-thicknessIlength1ptStandard
line-repeatIinteger1Default
line-sepIlength1ptIgnore
inhibit-line-breaks?I#f, #t#fStandard

Box flow object class [12.6.18]

The box flow object may be used to put a box around a sequence of flow objects. The box flow object is either displayed or inlined depending on the value of the display?: characteristic. The box flow object has a single principal port. If the box is displayed, then the port shall accept any displayed flow objects. If the box is inlined, then the port shall accept any inline flow objects.

The box flow object may result in more than one area. In this case, the border of the box adjacent to the break may be omitted if the box-open-end?: characteristic is true.

If the box is inlined, then this border shall be perpendicular to the writing-mode. If the box is displayed, then this border shall be parallel to the writing-mode.

When the box is displayed, the size of the box (that is, the distance between the positions of the borders) in the direction determined by the writing-mode shall be equal to the display size of the box less the start and end indents. The display size for the content of the box shall be equal to the size of the box.

NOTE: Thus, the start-indent: and end-indent: characteristics for the content of the box shall be set to give the desired separation between the border of the box and its content. There is no automatic separation to take account of the thickness of border.

Box flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
display?N#f, #t#fStandard
box-typeIborder, background, bothborderStandard
box-open-end?I#f, #t#fStandard
background-colorIcolor#fStandard
background-layerIinteger-1Default
box-corner-roundedI#f, #t, list of corner specs#fDefault
box-corner-radiusIlength-spec3ptIgnore
box-border-alignmentIcenter, outside, insideoutsideDefault
box-size-beforeIlength8ptStandard
box-size-afterIlength4ptStandard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
line-capIbutt, round, squarebuttDefault
line-dashIlist of lengthslist containing the length 0ptDefault
line-thicknessIlength1ptStandard
line-repeatIinteger1Default
line-sepIlength1ptIgnore
line-miter-limitInumber10Default
line-joinImiter, round, bevelmiterDefault
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
position-preferenceN#f, top, bottom#fIgnore
inhibit-line-breaks?I#f, #t#fStandard
break-before-priorityNinteger0Ignore
break-after-priorityNinteger0Ignore
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard
spanIinteger greater than zero1Default
span-weak?I#f, #t#fDefault
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

Alignment point flow object class [12.6.22]

An alignment-point flow object class specifies an explicit alignment point for paragraphs with a first-line-align: characteristic equal to #t. It is atomic and inlined.

Aligned column flow object class [12.6.23]

An aligned-column flow object is used for grouping together externally aligned paragraphs. An aligned-column is displayed. It has a single principal port that may contain any displayed flow objects. Displayed flow objects in the port that are not externally aligned paragraphs shall be formatted normally. The externally aligned paragraphs in the content or in side-by-side flow objects in the content are aligned in the direction of the writing-mode so that their alignment points lie on a line in the placement direction. The resulting group of aligned lines is then positioned according to the display-alignment:, start-indent:, and end-indent: characteristics.

Aligned column flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
display-alignmentIstart, center, end, inside*, outside*startPartial
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
position-preferenceN#f, top, bottom#fIgnore
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

Table flow object class [12.6.27.1]

A table flow object has a single principal port. The contents of this port shall be either:

If it contains flow objects of class table-column, they shall occur before all flow objects of other classes. A table flow object can only be displayed.

A table has two directions associated with it, a row-progression direction and a column-progression direction. The row-progression direction is equal to the placement direction of the table flow object. The column-progression direction is given by the value of the writing-mode: characteristic of the table flow object. These are required to be perpendicular.

Table flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
table-widthN#f, length-specdisplay-size less applicable indentStandard
table-auto-width-methodI#f, public identifier#fStandard
table-borderI#f, #t, unlabeled sosofo#fStandard
before-row-borderN#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
after-row-borderN#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
before-column-borderN#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
after-column-borderN#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
table-corner-roundedI#f, #t, list of x-y pairs#fDefault
table-corner-radiusIlength-spec3ptIgnore
position-preferenceN#f, top, bottom#fIgnore
display-alignmentIstart, center, end, inside*, outside*startPartial
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
spanIinteger greater than zero1Default
span-weak?I#f, #t#fDefault
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

Table part flow object class [12.6.27.2]

A table-part flow object is allowed only within a table flow object. A table-part flow object has three ports:

The only flow objects that are allowed in the ports of a table-part flow object shall be only those explicitly specified herein. Flow objects of class table-column are allowed in the principal port; they shall occur before flow objects of any other class. All ports shall accept flow objects of class table-row and table-cell.

The result of formatting a table-part flow object is a sequence of areas. Each area consists of the content of the header port (unless omitted because of the table-part-omit-middle-header?: characteristic), followed by some portion of the content of the principal port, followed by the content of the footer port (unless omitted because of the table-part-omit-middle-footer?: characteristic). Each row in the principal port occurs exactly once and the order of the rows shall be preserved. The rows in the header and footer ports shall be replicated for each result area.

All table-parts in a table have the same width.

Table part flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
table-part-omit-middle-header?I#f, #t#fDefault
table-part-omit-middle-footer?I#f, #t#fDefault
space-beforeNdisplay spaceno space beforeStandard
space-afterNdisplay spaceno space afterStandard
keep-with-previous?N#f, #t#fStandard
keep-with-next?N#f, #t#fStandard
break-beforeN#f, page, page-region*, column*, column-set*#fPartial
break-afterN#f, page, page-region*, column*, column-set*#fPartial
keepN#f, page, column-set*, column*, #t*#fPartial
may-violate-keep-before?N#f, #t#fDefault
may-violate-keep-after?N#f, #t#fDefault

Table column flow object class [12.6.27.3]

A table-column flow object is an atomic flow object that specifies characteristics applicable to table cells that have the same column and span.

Table column flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
column-numberNinteger greater than zero1 plus the column-number of the previous table column flow object, if any, else 1Standard
n-columns-spannedNinteger greater than zero1Standard
widthNlength-specshall be specified unless table-auto-width feature is presentStandard
display-alignmentIstart, center, end, inside*, outside*startPartial
start-indentIlength-spec0ptStandard
end-indentIlength-spec0ptStandard

Associated procedure: (table-unit k)

Returns a length-spec that specifies k units of proportional measure. This can be used in the value of the width: characteristic. The value of a unit of proportional measure for a particular table is chosen so that the total width of the columns is equal to the specified width of the table.

NOTE: This allows the width of a column to be specified proportionally.

Automatic table width computation [12.6.27.4]

The width of a column for which no width is specified shall be at least as great as the maximum of the minimum possible widths of the content of any table cells that span exactly that column.

NOTE: When a table-cell includes a paragraph for which the lines: characteristic has a value of wrap, the minimum possible width of that paragraph is determined in a system-dependent manner. It might, for example, be the length of the longest word.

If a table cell spans more than one column, then the sum of the widths of the columns that it spans shall be at least as great as the width of the content of the table cell.

If a length-spec is specified for a column's width, then the column shall be exactly that wide.

If a length-spec is specified for a column-width, then that length shall be used as the display size for any table-cells which span exactly that column.

Other aspects of the width computation method can be controlled with the table-auto-width-method: characteristic.

Table row flow object class [12.6.27.5]

A table-row flow object serves to group table cells into rows: all table cells in a table-row start in the same geometric row.

A table-row has a single principal port, which accepts flow objects of class table-cell.

A table-row flow object can only occur as the child of a table-part or table flow object.

When flow objects of class table-cell occur directly in a table-part or table, then cells are grouped into rows using the starts-row?: and ends-row?: characteristics.

Table cell flow object class [12.6.27.6]

A table-cell has a single principal port. It shall accept any flow object that can be displayed. A table-cell flow object shall only occur as the child of a table-row, table-part, or table flow object.

NOTE: The alignment of the content of a table-cell in the column-progression direction (e.g., horizontal alignment for left-to-right, top-to-bottom text) shall be controlled by the display-alignment: or quadding: characteristics of the content of the table-cell.

Table cell flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
column-numberNinteger greater than zerocurrent column numberStandard
n-columns-spannedNinteger greater than zero1Standard
n-rows-spannedNinteger greater than zero1Standard
cell-before-row-marginIlength0ptStandard
cell-after-row-marginIlength0ptStandard
cell-before-column-marginIlength0ptStandard
cell-after-column-marginIlength0ptStandard
cell-row-alignmentIstart, end, centerstartStandard
cell-background?I#f, #t#fStandard
background-colorIcolor#fStandard
background-layerIinteger-1Default
cell-before-row-borderI#f, #t, unlabeled sosofo#fStandard
cell-after-row-borderI#f, #t, unlabeled sosofo#fStandard
cell-before-column-borderI#f, #t, unlabeled sosofo#fStandard
cell-after-column-borderI#f, #t, unlabeled sosofo#fStandard
starts-row?N#f, #t#fStandard
ends-row?N#f, #t#fStandard
cell-crossedI#f, with, across, both#fDefault
line-capIbutt, round, squarebuttDefault
line-dashIlist of lengthslist containing the length 0ptDefault
line-thicknessIlength1ptStandard
line-repeatIinteger1Default
line-sepIlength1ptIgnore
float-out-sidelines?I#f, #t#fDefault
float-out-marginalia?I#f, #t#fDefault
float-out-line-numbers?I#f, #t#fDefault

Table border flow object class [12.6.27.7]

A table-border flow object is an atomic flow object used to specify the border of a table cell or of the table as a whole. A table-border flow object is not allowed in the content of any flow object.

The width of borders does not affect the width of cells, nor the positioning of the contents of cells, nor the width of the table, nor the size of the area produced by the table. In particular the width of the table, as specified by the table-width: characteristic on the table, is equal to the sum of the widths of the cells.

Table-border flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
border-priorityIinteger0Default
border-alignmentIcenter, start, end, outside, insidecenterDefault
border-present?I#f, #t#tStandard
border-omit-at-break?I#f, #t#fStandard
colorIcolordefault color in Device Gray color spaceStandard
layerIinteger0Default
line-capIbutt, round, squarebuttDefault
line-dashIlist of lengthslist containing the length 0ptDefault
line-thicknessIlength1ptStandard
line-repeatIinteger1Default
line-sepIlength1ptIgnore
line-miter-limitInumber10Default
line-joinImiter, round, bevelmiterDefault

Scroll flow object class [12.6.28.1]

A scroll flow object class is used as the top-level flow object for online display that does not divide output into pages. It has a single principal port, which accepts displayed flow objects. The size of the flow object in the direction perpendicular to the filling-direction is determined by the viewing environment.

Scroll flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
filling-directionItop-to-bottom, left-to-right, right-to-lefttop-to-bottomDefault
writing-modeIleft-to-right, right-to-left, top-to-bottomleft-to-rightDefault
background-colorIcolor#fStandard
background-layerIinteger-1Default
background-tileI#f, external graphic#fStandard
start-marginIlength-spec0ptStandard
end-marginIlength-spec0ptStandard

Multi-mode flow object class [12.6.28.2]

A multi-mode flow object is a flow object with two or more modes of presentation. The flow object can be switched between these modes of presentation in a system-dependent way.

NOTE: An implementation might present a menu of the different modes. Alternatively, clicking on the formatted flow object might cycle through the modes.

This flow object is inlined or displayed according to its content and mode of presentation.

The flow object has one port for each mode. The content of that port specifies the presentation in the corresponding mode. Initially, the flow object shall be displayed using the principal mode.

NOTE: For example, an icon which when clicked causes a window to be popped up could be represented by a multi-mode flow object with two ports, the first containing an icon flow object and the second containing a vertical-scroll flow object. In this case, the principal-mode-simultaneous?: characteristic would be true.

Multi-mode flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
multi-modesNlistmust be specifiedStandard
principal-mode-simultaneous?I#f, #t#fStandard

Link flow object class [12.6.28.3]

A link flow object represents a hypertext link that can be interactively traversed typically by clicking on the areas representing the flow object and its content. A link has a single principal port, which can contain both inlined and displayed flow objects. Link flow objects can be nested and the innermost link is effective.

Link flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
destinationN#f, address, list of addressesshall be specifiedStandard

Marginalia flow object class [12.6.28.4]

The marginalia flow object class is used to contain flow objects whose resulting areas shall be attachment areas for the line in which the marginalia flow object occurs. The marginalia flow object has a single principal port which shall contain only inlined flow objects. A marginalia flow object shall have an ancestor flow object that is of class paragraph.

The behavior when there is more than one marginalia area attached to a single line is system-dependent.

Marginalia flow object class characteristics
CharacteristicInh.Standard ValuesStandard Init/DefaultDsssl-o
marginalia-sepIlength-spec0ptStandard
marginalia-sideIstart, endstartStandard
marginalia-keep-with-previous?I#f, #t#fStandard

Summary tables of characteristics

The following tables show standard values and minimum dsssl-o support for all characteristics that can be specified for the flow object classes in the DSSSL Online subset.

Inherited characteristics of dsssl-o flow object classes

Inherited characteristics
CharacteristicFlow object classesStandard ValuesStd. Initial ValueDsssl-o
align-leader?leader#f, #t#tStandard
alignment-point-offsetparagraph#f, number between 0 and 10050Ignore
allowed-ligaturescharacterlist of glyph-ids or charsthe empty listDefault
asis-truncate-charparagraph#f, char object#fIgnore
asis-wrap-charparagraph#f, char object#fIgnore
asis-wrap-indentparagraphlength-spec#fIgnore
background-colorbox
scroll
table-cell
color#fStandard
background-layerbox
scroll
table-cell
integer-1Default
background-tilescroll#f, external graphic#fStandard
border-alignmenttable-bordercenter, start, end, outside, insidecenterDefault
border-omit-at-break?table-border#f, #t#fStandard
border-present?table-border#f, #t#tStandard
border-prioritytable-borderinteger0Default
bottom-marginsimple-page-sequencelength0ptStandard
box-border-alignmentboxcenter, outside, insideoutsideDefault
box-corner-radiusboxlength-spec3ptIgnore
box-corner-roundedbox#f, #t, list of corner specs#fDefault
box-open-end?box#f, #t#fStandard
box-size-afterboxlength4ptStandard
box-size-beforeboxlength8ptStandard
box-typeboxborder, background, bothborderStandard
cell-after-column-bordertable-cell#f, #t, unlabeled sosofo#fStandard
cell-after-column-margintable-celllength0ptStandard
cell-after-row-bordertable-cell#f, #t, unlabeled sosofo#fStandard
cell-after-row-margintable-celllength0ptStandard
cell-background?table-cell#f, #t#fStandard
cell-before-column-bordertable-cell#f, #t, unlabeled sosofo#fStandard
cell-before-column-margintable-celllength0ptStandard
cell-before-row-bordertable-cell#f, #t, unlabeled sosofo#fStandard
cell-before-row-margintable-celllength0ptStandard
cell-crossedtable-cell#f, with, across, both#fDefault
cell-row-alignmenttable-cellstart, end, centerstartStandard
char-mapcharacter#f, procedure#fDefault
colorbox
character
external-graphic
rule
score
sideline
table-border
colordefault color in Device Gray color spaceStandard
countrycharacter
paragraph
#f, ISO 3166 country code#fStandard
display-alignmentaligned-column
external-graphic
rule
table
table-column
start, center, end, inside*, outside*startPartial
end-indentaligned-column
box
external-graphic
paragraph
rule
table
table-column
length-spec0ptStandard
end-marginscrolllength-spec0ptStandard
escapement-space-aftercharacterinline-spaceinline-space of 0ptIgnore
escapement-space-beforecharacterinline-spaceinline-space of 0ptIgnore
expand-tabs?paragraph#f, integer greater than zero8Standard
field-alignline-fieldstart, end, centerstartDefault
field-widthline-fieldlength-spec0ptStandard
filling-directionscrolltop-to-bottom, left-to-right, right-to-lefttop-to-bottomDefault
first-line-alignparagraph#f, char object#fIgnore
first-line-start-indentparagraphlength-spec0ptStandard
float-out-line-numbers?table-cell#f, #t#fDefault
float-out-marginalia?table-cell#f, #t#fDefault
float-out-sidelines?table-cell#f, #t#fDefault
font-family-namecharacter
paragraph
#f, stringiso-serifStandard
font-namecharacter
paragraph
#f, public identifier#fStandard
font-posturecharacter
paragraph
#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*uprightPartial
font-proportionate-widthcharacter
paragraph
#f, not-applicable*, ultra-condensed*, extra-condensed*, condensed, semi-condensed*, medium, semi-expanded*, expanded, extra-expanded*, ultra-expanded*mediumPartial
font-sizecharacter
paragraph
length10ptStandard
font-structurecharacter
paragraph
#f, not-applicable, solid, outlinesolidDefault
font-weightcharacter
paragraph
#f, not-applicable*, ultra-light*, extra-light*, light, semi-light*, medium, semi-bold*, bold, extra-bold*, ultra-bold*mediumPartial
footer-marginsimple-page-sequencelength0ptStandard
glyph-alignment-modeparagraphbase, center, top, bottom, fontfontDefault
glyph-reorder-methodcharacter#f, public identifier, list of public identifiers#fDefault
glyph-subst-methodcharacter#f, public identifier, list of public identifiers#fDefault
glyph-subst-tablecharacter#f, glyph-subst-table, list of glyph-subst-table#fDefault
hanging-punct?paragraph#f, #t#fDefault
header-marginsimple-page-sequencelength0ptStandard
hyphenate?character#f, #t#fDefault
hyphenation-charparagraphcharacter#\- (the hyphen character)Ignore
hyphenation-exceptionsparagraphlist of stringsthe empty listDefault
hyphenation-keepparagraph#f, spread, page, column#fDefault
hyphenation-ladder-countparagraph#f, integer greater than zero#fDefault
hyphenation-methodcharacter
paragraph
#f, public identifier#fDefault
hyphenation-push-char-countparagraphpositive integer2Ignore
hyphenation-remain-char-countparagraphpositive integer2Ignore
ignore-record-end?paragraph#f, #t#fStandard
implicit-bidi-methodparagraph#f, public identifier Default
inhibit-line-breaks?box
character
external-graphic
leader
line-field
rule
score
#f, #t#fStandard
inline-space-spacecharacterinline-space Ignore
input-whitespace-treatmentcharacterpreserve, collapse, ignorepreserveStandard
justify-glyph-space-max-addparagraphlength-spec0ptIgnore
justify-glyph-space-max-removeparagraphlength-spec0ptIgnore
kern-modecharacterloose, normal, kern, tight, touchnormalDefault
kern?character#f, #t#fDefault
languagecharacter
paragraph
#f, ISO 639 language code#fStandard
last-line-end-indentparagraphlength-spec0ptDefault
last-line-justify-limitparagraphlength-spec0Ignore
last-line-quaddingparagraphrelative, start, end, spread-inside, spread-outside, page-inside, page-outside, center, justifyrelativeDefault
layerbox
character
external-graphic
rule
score
sideline
table-border
integer0Default
left-marginsimple-page-sequencelength0ptStandard
ligature?character#f, #t#fDefault
line-breaking-methodparagraph#f, public identifier#fDefault
line-capbox
rule
score
sideline
table-border
table-cell
butt, round, squarebuttDefault
line-composition-methodparagraph#f, public identifier#fDefault
line-dashbox
rule
score
sideline
table-border
table-cell
list of lengthslist containing the length 0ptDefault
line-joinbox
table-border
miter, round, bevelmiterDefault
line-miter-limitbox
table-border
number10Default
line-number-sepparagraphlength-spec Ignore
line-number-sideparagraphstart, end, spread-inside, spread-outside, page-inside, page-outside Ignore
line-numberparagraph#f, unlabeled sosofo#fIgnore
line-repeatbox
rule
score
sideline
table-border
table-cell
integer1Default
line-sepbox
rule
score
sideline
table-border
table-cell
length1ptIgnore
line-spacing-priorityparagraphforce, integer0Default
line-spacingparagraphlength-spec12ptStandard
line-thicknessbox
rule
score
sideline
table-border
table-cell
length1ptStandard
linesparagraphwrap, asis, asis-wrap*, asis-truncate*, nonewrapPartial
marginalia-keep-with-previous?marginalia#f, #t#fStandard
marginalia-sepmarginalialength-spec0ptStandard
marginalia-sidemarginaliastart, endstartStandard
min-leader-repeatleaderinteger greater than 01Standard
min-leadingparagraph#f, length-spec#fStandard
min-post-line-spacingparagraph#f, length-spec#fDefault
min-pre-line-spacingparagraph#f, length-spec#fDefault
numbered-lines?paragraph#f, #t#tIgnore
orphan-countparagraphpositive integer2Default
page-heightsimple-page-sequencelengthsystem-dependentStandard
page-widthsimple-page-sequencelengthsystem-dependentStandard
position-point-shiftcharacter
rule
length-spec0ptStandard
principal-mode-simultaneous?multi-mode#f, #t#fStandard
quaddingparagraphstart, end, spread-inside*, spread-outside*, page-inside*, page-outside*, center, justify*startPartial
right-marginsimple-page-sequencelength0ptStandard
score-spaces?score#f, #t#tStandard
sideline-sepsidelinelength-spec Standard
sideline-sidesidelinestart, end, both, spread-inside*, spread-outside*, page-inside*, page-outside* Partial
span-weak?box
external-graphic
paragraph
rule
table
#f, #t#fDefault
spanbox
external-graphic
paragraph
rule
table
integer greater than zero1Default
start-indentaligned-column
box
external-graphic
paragraph
rule
table
table-column
length-spec0ptStandard
start-marginscrolllength-spec0ptStandard
table-auto-width-methodtable#f, public identifier#fStandard
table-bordertable#f, #t, unlabeled sosofo#fStandard
table-corner-radiustablelength-spec3ptIgnore
table-corner-roundedtable#f, #t, list of x-y pairs#fDefault
table-part-omit-middle-footer?table-part#f, #t#fDefault
table-part-omit-middle-header?table-part#f, #t#fDefault
top-marginsimple-page-sequencelength0ptStandard
truncate-leader?leader#f, #t#fStandard
widow-countparagraphpositive integer2Default
writing-modealigned-column
box
character
external-graphic
line-field
paragraph
rule
scroll
simple-page-sequence
table
left-to-right, right-to-left, top-to-bottomleft-to-rightDefault

Non-inherited characteristics of dsssl-o flow object classes

Non-inherited characteristics
CharacteristicFlow object classesStandard ValuesStandard DefaultDsssl-o
after-column-bordertable#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
after-row-bordertable#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
before-column-bordertable#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
before-row-bordertable#f, #t, unlabeled sosofovalue of the table-border characteristicStandard
break-after-prioritybox
external-graphic
leader
line-field
rule
integer0Ignore
break-after-prioritycharacterintegerthe value of the break-after-priority character property of the char: characteristicIgnore
break-afteraligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, page, page-region*, column*, column-set*#fPartial
break-before-prioritybox
external-graphic
leader
line-field
rule
integer0Ignore
break-before-prioritycharacterintegerthe value of the break-before-priority character property of the char: characteristicIgnore
break-beforealigned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, page, page-region*, column*, column-set*#fPartial
center-footersimple-page-sequenceunlabeled sosofoempty sosofoStandard
center-headersimple-page-sequenceunlabeled sosofoempty sosofoStandard
charcharactercharactervalue of the current node's char property, if there is one, else the value of applying the char-map characteristic, if there is oneStandard
coalesce-iddisplay-group#f, string#fIgnore
column-numbertable-cellinteger greater than zerocurrent column numberStandard
column-numbertable-columninteger greater than zero1 plus the column-number of the previous table column flow object, if any, else 1Standard
destinationlink#f, address, list of addressesshall be specifiedStandard
display?box
external-graphic
#f, #t#fStandard
drop-after-line-break?character#f, #tthe value of the drop-after-line-break? character property of the char: characteristicIgnore
drop-unless-before-line-break?character#f, #tthe value of the drop-unless-before-line-break? character property of the char: characteristicIgnore
ends-row?table-cell#f, #t#fStandard
entity-system-idexternal-graphic#f, system identifiershall be specifiedStandard
escapement-directionexternal-graphictop-to-bottom, left-to-right, right-to-leftthe value of writing-modeDefault
glyph-idcharacter#f, glyph-idglyph-id of the nominal glyph specified using the standard-chars architectural form, else #fStandard
input-tab?character#f, #tthe value of the input-tab? character property of the char: characteristic if the char: characteristic was not explicitly specified, and otherwise #fStandard
input-whitespace?character#f, #tthe value of the input-white-space? character property of the char: characteristic if the char: characteristic was not explicitly specified, and otherwise #fDefault
keep-with-next?aligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, #t#fStandard
keep-with-previous?aligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, #t#fStandard
keepaligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, page, column-set*, column*, #t*#fPartial
left-footersimple-page-sequenceunlabeled sosofoempty sosofoStandard
left-headersimple-page-sequenceunlabeled sosofoempty sosofoStandard
lengthleader
rule
length-specdetermined by contextStandard
math-classcharacterordinary, operator, binary, relation, opening, closing, punctuation, inner, spacethe value of the math-class character property of the char: characteristicIgnore
math-font-posturecharacter#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*the value of the math-font-posture character property of the char: characteristicPartial
max-heightexternal-graphiclength-spec Standard
max-widthexternal-graphiclength-spec Standard
may-violate-keep-after?aligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, #t#fDefault
may-violate-keep-before?aligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
#f, #t#fDefault
multi-modesmulti-modelistmust be specifiedStandard
n-columns-spannedtable-cell
table-column
integer greater than zero1Standard
n-rows-spannedtable-cellinteger greater than zero1Standard
notation-system-idexternal-graphicsystem identifiershall be specifiedStandard
orientationrulehorizontal, vertical, escapement, line-progressionshall be specifiedStandard
position-point-xexternal-graphiclength-spec0 if writing-mode is left-to-right or right-to-leftStandard
position-point-yexternal-graphiclength-spec0 if writing-mode is top-to-bottomStandard
position-preferencealigned-column
box
display-group
external-graphic
paragraph
rule
table
#f, top, bottom#fIgnore
punct?character#f, #tthe value of the punct? character property of the char: characteristicIgnore
record-end?character#f, #tthe value of the record-end? character property of the char: characteristicStandard
right-footersimple-page-sequenceunlabeled sosofoempty sosofoStandard
right-headersimple-page-sequenceunlabeled sosofoempty sosofoStandard
scaleexternal-graphicnumber, list of two numbers, max, max-uniformmax-uniformStandard
scriptcharacter#f, formal public identifierthe value of the script character property of the char: characteristicIgnore
space-afteraligned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
display spaceno space afterStandard
space-beforealigned-column
box
display-group
external-graphic
paragraph
rule
table
table-part
display spaceno space beforeStandard
space?character#f, #tthe value of the space? character property of the char: characteristicStandard
starts-row?table-cell#f, #t#fStandard
stretch-factorcharacternumber1Default
table-widthtable#f, length-specdisplay-size less applicable indentStandard
typescorebefore, through, after, length-spec, charactershall be specifiedStandard
widthtable-columnlength-specshall be specified unless table-auto-width feature is presentStandard

Core expression language

Syntax

[120] expression = primitive-expression | derived-expression

[121] primitive-expression = variable-reference | literal | procedure-call | conditional

[122] variable-reference = variable

[123] variable = identifier

[124] literal = quotation | self-evaluating

[125] quotation = "'"datum | "(""quote" datum")"

[126] datum = simple-datum | list

[127] simple-datum = boolean | number | character | string | symbol | keyword | glyph-identifier

[128] list = "("datum*")" | "'"datum

[129] self-evaluating = boolean | number | character | string | keyword | glyph-identifier

[130] procedure-call = "("operator operand*")"

[131] operator = expression

[132] operand = expression

[133] conditional = "(""if" test consequent alternate")"

[134] test = expression

[135] consequent = expression

[136] alternate = expression

[137] derived-expression = cond-expression | case-expression | and-expression | or-expression

[138] cond-expression = "(""cond" cond-clause+")" | "(""cond" cond-clause* "(""else" expression")"")"

[139] cond-clause = "("test expression")"

[140] case-expression = "(""case" key case-clause+")" | "(""case" key case-clause* "(""else" expression")"")"

[141] key = expression

[142] case-clause = "(""("datum*")" expression")"

[143] and-expression = "(""and" test*")"

[144] or-expression = "(""or" test*")"

[145] definition = "(""define" variable expression")"

Procedures

(not obj)

(boolean? obj)

(equal? obj1 obj2)

(null? obj)

(list? obj)

(list obj ...)

(length list)

(append list ...)

(reverse list)

(list-tail list k)

(list-ref list k)

(member obj list)

(symbol? obj)

(keyword? obj)

(quantity? obj)

(number? obj)

(real? obj)

(integer? obj)

(= q1 q2 q3 ...)

(< q1 q2 q3 ...)

(> q1 q2 q3 ...)

(<= q1 q2 q3 ...)

(>= q1 q2 q3 ...)

(max q1 q2 ...)

(min q1 q2 ...)

(+ q1 ...)

(* q1 ...)

(- q1 q2)

(- q)

(/ q1 q2)

(/ q)

(abs q)

(quotient n1 n2)

(remainder n1 n2)

(modulo n1 n2)

(floor x)

(ceiling x)

(truncate x)

(round x)

(number->string number)

(number->string number radix)

(string->number string)

(string->number string radix)

(char? obj)

(char=? char1 char2)

(char-property symbol char)

(char-property symbol char obj)

(string? obj)

(string char ...)

(string-length string)

(string-ref string k)

(string=? string1 string2)

(substring string start end)

(string-append string ...)

(procedure? obj)

(apply proc args)

(external-procedure string)

(time)

(time->string k)

(time->string k boolean)

(error string)

DSSSL Online extensions

In addition to the Core Expression Language, DSSSL Online is now considered to include lambda, #!key, and let (including letrec, let*, and named let). See the full DSSSL standard for details.

Core query language

The core query language is a subset of SDQL, the Standard Document Query Language. In addition to the procedures defined in the core query language subclause, the current-node, node-list-empty?, node-list?, parent, and node-list-error procedures are allowed in the subset. This subset is designed so that a node-list never contains more than one node, and so that any node that it does contain is always of type element.

In the following procedures, the argument that is of type node-list can be omitted, and defaults to (current-node). osnl (optional singleton node-list) denotes an argument that must be a node-list containing zero or one nodes.

Navigation

(ancestor string osnl)

Returns a node-list containing the nearest ancestor of osnl with gi equal to string, or an empty node-list if there is no such ancestor or if osnl is empty.

(gi osnl)

Returns the value of the gi property of the node contained in osnl or #f if osnl is empty or if osnl has no gi property or a null gi property.

(id osnl)

Returns the value of the id property of the node contained in osnl or #f if osnl is empty or if osnl has no id property or a null id property.

(element string snl)

Returns a singleton node-list returning the element in the same grove as snl whose unique identifier is string, if there is such an element, and otherwise returns the empty node-list. This procedures requires the random-access feature.

Counting

(child-number snl)

Returns the child number of snl. The child number of an element is the number of element siblings of the current element that are before or equal in tree order to the current element and that have the same generic identifier as the current element.

(ancestor-child-number string snl)

Returns the child number of the nearest ancestor of snl whose generic identifier is string, or #f if there is no such ancestor.

(hierarchical-number list snl)

Returns a list of non-negative integers with the same number of members as list. list shall be a list of strings. The last member is the child number of the nearest ancestor of snl whose generic identifier is equal to the last member of list; the next to last member is the child number of the nearest ancestor of that element whose generic identifier is equal to the next to last member; and so on for each member of list.

(hierarchical-number-recursive string snl)

Returns a list of non-negative integers. The last member of list is the child number of the nearest ancestor of snl element whose generic identifier is equal to string, the next to last member is the child number of the nearest ancestor of that element whose generic identifier is equal to string, and so on for each ancestor of the current element with generic identifier equal to string. Note that the length of this list is the nesting level of string.

(element-number snl)

Returns the number of elements before or equal to snl with the same gi as snl.

(element-number-list list snl)

Returns a list of non-negative integers, one for each member of list, which shall be a list of strings, where the i-th integer is the number of elements that:

NOTE: In effect the counter for each argument is reset at the start of the element referred to by the previous argument.

NOTE: An element is considered to be after its parent.

NOTE: This procedure could be used to number footnotes sequentially within a chapter (by using the last number in the list). It could also be used to number headings in a DTD which lacks container elements.

Accessing attribute values

In the following procedures attribute values are represented as strings by applying the data procedure to the attribute-assignment node.

(attribute-string string osnl)

Returns a string representation of the attribute with name equal to string of osnl, or #f if osnl has no such attribute or the attribute is implied or osnl is empty.

(inherited-attribute-string string osnl)

Returns a string representation of the attribute with name equal to string of osnl or of the nearest ancestor of osnl for which this attribute is present and not implied, or #f if there is no such element or osnl is empty.

(inherited-element-attribute-string string1 string2 osnl )

Returns a string representation of the attribute with name equal to string2 of the nearest ancestor of osnl whose generic identifier is equal to string1 and for which this attribute is present and not implied, or #f if there is no such element or osnl is empty.

Testing current location

(first-sibling? snl)

Returns #t if snl has no preceding sibling that is an element with the same generic identifier as itself, and otherwise returns #f.

(absolute-first-sibling? snl)

Returns #t if snl has no preceding sibling that is an element, and otherwise returns #f.

(last-sibling? snl)

Returns #t if snl has no following sibling that is an element with the same generic identifier as itself, and otherwise returns #f.

(absolute-last-sibling? snl)

Returns #t if snl has no following sibling that is an element, and otherwise returns #f.

(have-ancestor? obj snl)

obj shall be either a string or a list of strings. If obj is a string, then have-ancestor? returns #t if snl has an ancestor with a generic identifier that matches that string, and otherwise returns #f. If obj is a list of strings, then have-ancestor? returns #t if snl has an ancestor with generic identifier equal to the last member of obj, which itself has an ancestor with generic identifier equal to the next to last member of obj, and so on for each member, and otherwise returns #f.

Entities and notations

snl here determines the document in which to find the entity.

(entity-public-id string snl)

Returns the value of the public-id property of the value of the external-id property of the general entity whose name is string in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has a null value for the external-id property, or the external-id has a null value for the public-id property.

(entity-system-id string snl)

Returns the value of the system-id property of the value of the external-id property of the general entity whose name is string in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has a null value for the external-id property, or the external-id has a null value for the system-id property.

(entity-generated-system-id string snl)

Returns the value of the generated-system-id property of the value of the external-id property of the general entity whose name is string in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has a null value for the external-id property, or the external-id has a null value for the generated-system-id property.

(entity-text string snl)

Returns the value of the text property of the general entity whose name is string in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has a null value for the text property.

(entity-notation string snl)

Returns the value of the notation-name property of the general entity whose name is string in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has a null value for the notation-name property.

(entity-attribute-string string1 string2 snl)

Returns a string representation of the value of the attribute named string2 of the general entity whose name is string1 in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has no such attribute or the attribute is implied.

(entity-type string snl)

Returns the value of the entity-type property of the general entity whose name is string in the governing document type of the same grove as snl, or #f if there is no such entity or the entity has a null value for the entity-type property.

(notation-public-id string snl)

Returns the value of the public-id property of the value of the external-id property of the general notation whose name is string in the governing document type of the same grove as snl, or #f if there is no such notation or the external-id has a null value for the public-id property.

(notation-system-id string snl)

Returns the value of the system-id property of the value of the external-id property of the general notation whose name is string in the governing document type of the same grove as snl, or #f if there is no such notation or the external-id has a null value for the system-id property.

(notation-generated-system-id string snl)

Returns the value of the generated-system-id property of the value of the external-id property of the general notation whose name is string in the governing document type of the same grove as snl, or #f if there is no such notation or the external-id has a null value for the generated-system-id property.

Name normalization

(general-name-normalize string snl)

Returns string transformed using the general namecase substitution string normalization rule of the grove in which snl occurs. This could be defined as follows:

(define (general-name-normalize string snl)
  (named-node-list-normalize string
        (node-property 'elements (grove-root snl))))

(entity-name-normalize string snl)

Returns string transformed using the entity namecase substitution string normalization rule of the grove in which snl occurs. This could be defined as follows:

(define (entity-name-normalize string snl)
  (named-node-list-normalize string
        (node-property 'entities (grove-root snl))))

Compilation by Jon Bosak, Sun Microsystems