" -- long double right arrow meaning evaluates to -->
%charics;
%miscchar;
%iso8859-1;
]>
This International Standard defines the Document Style Semantics
and Specification Language (DSSSL) used to specify the formatting and
transformation of SGML documents. The initial focus of DSSSL
is on formatting for both paper and electronic media and on the
transformation of SGML documents marked up according to different DTDs.
DSSSL may be used with any SGML documents without requiring
modifications or constraining the document type definitions.
The main objective of this International Standard is to provide a
language
for expressing formatting and other document processing specifications
in a formal and rigorous manner so that these specifications may be
processed by a broad range of formatters, either natively or using a
translation mechanism.
The DSSSL style language allows users to specify the types of
formatting to be applied to various objects during composition,
layout, and pagination. The DSSSL transformation language allows
users to specify the transformation of documents from one application of
SGML markup into another.
DSSSL is designed for specifications that apply to a class of
documents. These specifications are applicable to all possible SGML
documents for an SGML application as well as to a particular SGML
document.
The DSSSL specification languages are declarative. They are not
intended
to be complete programming languages, although they contain constructs
normally associated with such languages.
DSSSL specifications can be unambiguously
parsed and interpreted by heterogeneous systems. In addition, DSSSL
specifications may be used by existing formatting systems through the
use of The standardization of formatting semantics is provided in DSSSL
through a set of basic structures known as flow objects and an
associated set of formatting characteristics that are applied to those
objects. DSSSL provides mechanisms for defining and extending the
semantic constructs so that DSSSL application designers can construct
DSSSL applications best suited to their application environments.
The concepts behind DSSSL are associated with the development of
generic coding and specifically with SGML, the Standard Generalized
Markup Language (ISO 8879).
Historically, electronic manuscripts contained control codes or
macro calls that caused the document to be formatted in a particular
way ( While SGML provides the language for modeling classes of documents,
it does not prescribe any particular model or pre-defined tag set. A
set of rules (consisting primarily of a DTD and its supporting
documentation) that applies SGML to a class of documents is known as
an SGML application.
SGML standardizes the representation of the document structure,
leaving it to users to develop their own techniques for interfacing
with formatters and other processors, such as general purpose
translators. DSSSL is designed to support this second class of
applications by providing a standardized architecture for formatting
and other processing specifications, allowing users to interchange
such specifications within a standardized framework.
A DSSSL specification is normally
external to the SGML document to which it
applies, and thus multiple specifications may be applied to a given
SGML document to yield various presentations of the same data.
SGML provides the ability to distinguish between the intrinsic
content and structure of a document, on the one hand, and the
specifications for processing it on the other. With DSSSL, formatting
and other processing specifications may be interchanged in conjunction
with SGML documents to provide the standardized specification of
document display while preserving the essential distinction
between content and format.
This International Standard
is designed to specify the processing of valid SGML documents.
DSSSL
defines the semantics, syntax, and processing model of two
languages for the specification of document processing:
The transformation language for transforming SGML documents
marked up in accordance with one or more DTDs into other SGML
documents marked up in accordance with other DTDs. The specification
of this transformation process is fully defined by this
International Standard.
The style language, where the result
is achieved by applying a set of formatting characteristics to portions
of the data, and the specification is, therefore, as precise as the
application requires, leaving some formatting decisions, such as
line-end and column-end decisions, to the composition and layout
process.
front-end
DSSSL processors and translators. DSSSL has
no bias toward batch or interactive formatting systems and does not
prescribe any pre-defined formatting algorithms.
specific coding
). In contrast, generic coding, which began in
the late 1960s, uses descriptive tags (for example, heading
rather
than Space 3 lines; 14 point Bodoni
). Central to the concept of
generic coding is the separation of the information content of
documents from the format or appearance of the content. The generic
coding concept gained prominence in the early 1970s and came to
fruition with the development of SGML.
The DSSSL style language is intended to be used in a wide
variety of environments with typographic requirements ranging from
simple single-column layouts to complex multiple-column layouts. This
International Standard does not standardize a formatter nor does it
standardize composition or other processing algorithms. Rather, it provides
the means whereby an implementation may externalize
style characteristics
and other techniques for associating
style information with an SGML document.
DSSSL provides a mechanism for specifying the use of external
processes
to manipulate data. The nature of these processes is
outside the scope of DSSSL, but may include typical data management
functions, such as sorting and indexing; typical composition
functions, such as hyphenation algorithms; and graphics or
multimedia processes for non-SGML data.
Documents that have already been formatted or do not contain any hierarchical structural information or generic markup are not within the field of application of this International Standard.
DSSSL expresses specifications to be performed by some processor that accepts an input document and produces an output document. DSSSL is independent of the type of formatter, formatting system, or other transformation processor.
DSSSL includes
Constructs that provide access to, and control of, all possible
marked-up information in an SGML document, as well as mechanisms for
string processing to allow for the manipulation of non-marked up data.
This is provided by the Standard Document Query Language (SDQL)
component of DSSSL.
String processing is necessary so that no special markers
need be embedded in the source document to indicate
presentational changes. The display of a dropped or raised capital
letter in a larger point size at the beginning of a line or paragraph
is an example of a case where string processing may be used to
isolate the first character or group of characters in order to achieve
a desired presentational effect.
Provisions for specifying the relationship between one or more SGML documents as input to a transformation process and zero or more resulting SGML documents as the output of the process.
Provisions for specifying the relationships between the SGML document(s), as expressed in the source Document Type Definition(s), and the result of the formatting process. The output of the formatting process may be an ISO/IEC 10180 Standard Page Description Language (SPDL) document or it may be a document in some other, possibly proprietary, form.
Provisions for describing the typographic style and layout of a document.
Definitions of a machine-processable syntax for the representation of a DSSSL specification and its various components.
Provisions for creating new DSSSL characteristics and their associated values, as well as new flow object classes. These are declared in the declarations for the style language portion of the DSSSL specification.
This International Standard is intended for use in a wide variety of SGML application environments, including both electronic publishing and conventional printing.
DSSSL includes two independent languages, the transformation language and the style language, which specify processing of an SGML document. A DSSSL specification contains a number of process specifications, each of which uses either the style language or the transformation language. A process specification that uses the style language is a style-specification. A process specification that uses the transformation language is a transformation-specification.
If a style-specification complies with all the provisions of this International Standard, it is a conforming DSSSL style-specification. If a transformation-specification complies with all the provisions of this International Standard, it is a conforming DSSSL transformation-specification.
In both the style language and transformation language, some
facilities are optional. Each optional facility is associated with a
named features
element type form.
A conforming DSSSL system shall support the style language, the transformation language, or both the style language and the transformation language.
The documentation for a conforming DSSSL system shall state whether it supports the transformation language or the style language or both and, for each language that the system supports, shall state which features of the language it supports.
A conforming DSSSL system that supports the style language shall be able to process any conforming SGML document using any conforming DSSSL style-specification that enables only features of the style language that the DSSSL system is documented to support.
A conforming DSSSL system that supports the transformation language shall be able to process any conforming SGML document using any conforming DSSSL transformation-specification that enables only features of the transformation language that the DSSSL system is documented to support.
The following standards contain provisions which, through reference in this text, consititute provisions of this International Standard. At the time of publication, the editions indicated were valid. All standards are subject to revision, and parties to agreements based on this International Standard are encouraged to investigate the possibility of applying the most recent editions of the standards indicated below. Members of IEC and ISO maintain registers of currently valid International Standards.
For the purpose of this International Standard, the definitions given in ISO 8879 and the following definitions apply.
A rectangular box with a fixed width and height produced by the formatting of a flow object. An area can be imaged on a presentation medium to produce a set of marks.
A triple consisting of a query-expression, a transform-expression, and a priority-expression. The priority-expression defaults to 0. Associations are used to control the transformation process.
A flow object that has no ports.
A grove created by parsing nodes in another grove.
A named parameter of a flow object.
The grove that would be built using a grove plan that selected all the classes and properties from the property set.
A name defined in a property set with three variants: a reference concrete syntax name, an application name, and a full name.
The node relative to which the position of a node in a result grove is specified.
The union of the subtrees of the children of a node.
A possible value of an enumeration data type.
A specification of a task to be performed by the formatter. A flow object has a class, which specifies the kind of task, and characteristics which further parameterize the task.
The process partially specified by the style language.
A set of nodes connected into a graph by their nodal properties. A grove is built using a grove plan.
A set of classes and properties selected from a property set.
The unique node in a grove that has no origin.
A property that is automatically part of a property set, without being defined in the property set.
A direction associated with inline areas. The line-progression-direction is perpendicular to the inline-progression-direction of the inlined area.
A property whose value is a node or list of nodes. Nodal properties are categorized by their property set as subnode, irefnode, or urefnode.
An ordered set of property assignments. A node is a member of a grove, and belongs to a class defined in the grove plan used to build its grove.
For a node
The subnode property of the origin of a node that includes the node in its value.
A point on a flow object in a flow object tree to which an ordered list of flow objects can be attached. A port is either the principal port of the flow object or it is named.
A data type that has no super type. The primitive data type of a data type is the data type itself, if the data type has no super type, and otherwise the primitive data type of the super type of the data type.
The assignment of a property value to a property name.
A set of classes and properties with associated definitions.
The combination of the specification in a process specification element and the specifications in any other process specification elements that the process specification element is declared to use.
An instance of a transformation-specification or style-specification element type form.
A section of the process specification coming from a single process
specification element. Any process specification elements referred to
using the use
attribute are separate parts. A part of a
process specification takes precedence over any later parts of the
process specification.
The other nodes in the grove that occur in the value of the origin-to-subnode relationship property of the origin of the node.
A specification of a sequence of flow objects.
The grove parsed to create an auxiliary grove.
Consecutive back/front pair of pages in a page-sequence.
An ordered list of flow objects attached to a port of a flow object.
The union of a node and the values of the subnode properties of the node.
A node together with the subtrees of its children.
A set of flow objects in different streams whose relative positioning is constrained.
The process specified by the transformation language. It transforms one or more SGML documents into zero or more other SGML documents.
The subtree of a node that has no parent.
The grove that would be built by parsing the SGML document or subdocument generated from the result grove using a grove plan that included all classes and properties of the SGML property set.
One of four named subdivisions of a column. The four zones are: top-float, body-text, bottom-float, and footnote. The positioning of an area to be placed in a column-set area container can be controlled by labeling it with the name of a zone.
In this International Standard, formal syntax is described in a manner similar to ISO 8879 with the following exceptions.
A sequence of expressions indicates that the expressions shall occur in the order shown. The ,
operator is not used.
The occurrence indicators ?
, +
, and *
have higher precedence than sequencing, which in turn
has higher precedence than the connectors |
and &
.
For example,
is equivalent to
A syntactic-literal is indicated by a monospaced typeface as shown.
In a syntax production, double square brackets ([[
]]) can be used to surround
an
[[
means a sequence containing only
Each procedure is defined by a procedure prototype:
This indicates that the identifier foo
is bound in the
top-level environment to a procedure that has two arguments.
If the name of an argument is also the name of a type, then that argument shall be of the named type. The following naming conventions for arguments also imply type restrictions:
If the procedure also accepts keyword arguments, the
prototype is of the form:
This indicates that the procedure in addition accepts two keyword arguments. The names of the keyword arguments indicate the keywords that are used to specify them and do not constrain the type.
A key feature of generalized markup is that the formatting and other processing information associated with the document is separate from the generic tags embedded in it.
In any generalized markup scheme, there is a method for associating processing specifications with the SGML markup. This method of association allows the information to be attached to specific instances of elements as well as to general classes of element types. The primary goal of DSSSL is to provide a standardized framework and methods for associating processing information with the markup of SGML documents or portions of documents.
DSSSL is intended for use with documents structured as a hierarchy of elements. For the purpose of describing in detail the concepts of DSSSL in the subsequent clauses of this International Standard, SGML terminology is used.
DSSSL enables formatting and other processing specifications to be associated with these elements to produce a formatted document for presentation. For example, a designer may wish to specify that all chapters begin on a new recto page and that all tables begin with a page-wide rule to be positioned only at the top or bottom of the page. During the DSSSL transformation process, formatting information may be added to the result of the transformation. This information may be represented as SGML attributes. These, in turn, may be used by the style language to create formatting characteristics with specific values.
DSSSL provides four distinct areas of standardization:
A language and processing model for transforming one or more SGML documents into zero or more other SGML documents.
This is called the transformation language. This transformation is controlled by the transformation-specification. A transformation-specification contains a list of associations. An association contains up to three parts: the query-expressions, the transform-expressions, and the optional priority-expressions. Functionally, this specification allows the user to specify the creation of new structures, the replication of existing structures, and the reordering and regrouping of existing structures.
A language for specifying the application of formatting characteristics onto an SGML document.
The process that applies formatting and other formatting-related
processing characteristics to an SGML document is called the
It is important to note that for the DSSSL style
language and the associated
formatting process, DSSSL does not
standardize the process itself, but merely
standardizes the form and semantics of the style language
controlling a portion of the process. The remaining formatting
functions, such as line-breaking, column-breaking, page-breaking, and
other aspects of whitespace distribution, are not standardized and are
under control of the formatter.
A query language, Standard Document Query Language, used for identifying portions of an SGML document.
SDQL is part of both the DSSSL transformation language and the DSSSL
style language. It is used
for navigating through the hierarchical structure of the SGML
document, identifying the relevant
pieces of the SGML markup and content on which processing is to be
performed. SDQL adds additional data types to the DSSSL expression
language. In addition to the full query language, this International
Standard defines a subset called the
An expression language.
The DSSSL expression language is used in
SDQL, the DSSSL transformation language, and the DSSSL
style language. It is used to create
and manipulate objects. In addition to the full expression language,
this International Standard defines a subset called the
The DSSSL conceptual model has two distinct processes: (1) a transformation process and (2) a formatting process. The two processes may be used in conjunction with each other, or each may be used alone.
An illustration of the DSSSL conceptual model
is shown in Figure
The shaded areas indicate the parts of the processing model that are standardized by DSSSL.
Each of the DSSSL processes is controlled by the appropriate DSSSL language. The transformation language controls the transformation process. Likewise, the style language controls aspects of the formatting process.
The transformation process transforms an SGML document into another SGML document under the control of the transformation-specification. The SGML document that is the result of this transformation process may then be used as input to the formatting process.
In the transformation process, a user identifies portions of the SGML document that are to be mapped or transformed. For each node matching the specified portions of SGML content and structure, the transformation is accomplished according to the specification describing the new structures to be created.
All operations performed in this transformation process are independent of the later formatting process. Operations during the transformation process may include the following:
Combining structures
SGML structures may be reordered and regrouped to create totally new structures. For example, footnotes that are inline with footnote references according to the source DTD may be collected to place the footnotes at the end of each chapter when the document is formatted.
Creating new elements with user-specifiable relationships to other elements
New structures or attributes may be created. For example, special formatting descriptions such as the need for a 3-point rule, expressed as an SGML attribute, may be associated with every fifth row in a table to provide visual impact.
Associating new descriptions with particular sequences of content
A sequence of elements in the source document may trigger the association of different formatting characteristics. For example, a paragraph following a warning may be required to be presented differently from all other paragraphs.
Associating new descriptions with particular components of content
An association may be used to attach special formatting to
particular strings of text that may not be specially tagged in the
source document, as, for example, in the replacement of the character
string ISO
with the ISO logo.
DSSSL allows formatting information to be associated with, and dependent on, any combination of the above. Both the content and structure of the SGML document can be modified.
The transformation language can be used to facilitate the formatting
process
as indicated in the examples above, or it can be used to enhance or
modify documents created in accordance with a DTD that has changed
over time. It may also be used to transform documents using a public DTD
into a proprietary or in-house
DTD.
The importance and use of the transformation language will vary depending on the SGML application, the DSSSL application, the capabilities of the formatter, and the implementation. Many formatting applications may require no transformation process at all.
The component processes are:
Grove Building Processor
An SGML document is input to this
process. The SGML document or subdocument is parsed
and is represented by a collection of nodes called a grove. A grove is
similar to an element tree, but may include other subtrees, for
example, a subtree of attribute values. Relationships in a grove are
expressed in terms of properties. For a complete description of the
grove and SGML property definitions, see clause
Transformer
The input to the transformation process includes the SGML document as created during the grove building step and the transformation-specification.
The transformation-specification consists of a collection of associations. Each association specifies the transformation of like objects in the source document into objects in the result grove. Key to this transformation is that not only can each object be mapped to an explicit location in the result grove, but it can also be mapped to a location using the result of transforming some other source object as a reference point.
The output of the transformation process is the result grove.
The transformation process
may operate on multiple SGML documents as input to the process, and
likewise may transform them into multiple SGML documents. For
a complete description of the transformation process, see clause
SGML Generator
The transformation process produces a grove that must be
converted to an SGML document for interchange, validation, and input
to the formatting process. The SGML generator is used for
this purpose. The output of the SGML generator shall be a valid SGML
document. For a
complete description of the SGML generator, see
The model of the transformation process is illustrated in the
Figure
There are three distinct components of this model:
the coded characters in the SGML source document,
the characters in the grove,
the glyph identifiers of the final result document.
The characters in the SGML source document are typically encoded in
accordance with a particular character encoding standard, such as ISO
8859-1 (Latin 1
). The SGML declaration contains a specification of the
character set either in the form of a description or in terms of
codepoints in one or more particular, normally standardized or at
least registered, coded character sets. It is, however, permitted to
refer to a private coded character set as well as giving just a
description as a minimum literal of the coded character.
There are many character coding schemes. Some of these use
non-spacing characters together with a base character to represent a
character with a diacritic. SGML also permits the use of entity
references to represent non-keyable
characters. For example, a
lower case e with acute accent may be represented, in the same
document, as
a single character,
a non-spacing diacritic and e (2 characters),
an e and combining diacritic (2 characters),
the entity reference é.
This variation may cause problems in searching using regular expressions.
In DSSSL, the input characters are normalized
into a sequence of characters that each represents a specific
meaning
regardless of how it was originally encoded — as a
single character, as multiple characters in a particular character
set, or as an entity reference. Each DSSSL specification defines a
single character repertoire. The character repertoire shall include
all
characters used in the DSSSL specification, in the source groves, and in
the flow object tree; therefore, only these characters may be used.
The declaration of each
character also includes a set of properties that may be significant in
the formatting process, for example, that the character represents a
word space
.
The DSSSL specification, which may have been encoded using a different coded character set than the source document, is also translated into a sequence of characters belonging to the same repertoire as the characters used in the DSSSL trees. All comparisons, such as matching an element name, are performed by comparing these characters rather than using the coded characters of the original SGML document.
A sequence of characters in the input grove may be manipulated by a transformation process into another sequence under the control of a character-to-character map. This technique is typically used when parts of the source document contain transliterated text.
The characters in the input grove to the formatter are transformed into glyph identifiers during the formatting process. The transformation is controlled by character-to-glyph and ligature-to-glyph maps in which one or more characters are mapped into one or more glyph identifiers. The map to be used is not fixed for a document, but is expressed as a formatting characteristic that may be specified for an area or for a portion of the input grove. Ligatures are specified by mapping more than one character to a single glyph.
Additional properties specify the font to be used. This information, together with the glyph identifier, selects an actual shape to be used in rendering. Hyphenation points are determined based on the characters, but width calculations are based on the metrics of the actual rendering shapes (i.e., based on the glyphs).
The term formatting
when used in this International Standard
means any combination of the following:
the process that applies presentation styles to source document content and determines its position on the presentation medium,
the selection and reordering of content in the result document with respect to its position in the input document,
the inclusion of material not explicitly present in the input document, such as the generation of new material,
the exclusion of material from the input document in the result document.
DSSSL defines the visual appearance of a formatted document in
terms of formatting characteristics attached to an intermediate tree
called the
The formatting process uses the style-specification, which may include construction rules, page-model definitions, column-set-model definitions, and other general and application-defined declarations and definitions.
The conceptual processes that constitute the formatting process are as follows:
Build grove from SGML document.
Apply construction rules to the objects in the source grove to create the flow object tree.
Define page and column geometry by characteristics on the page-sequence flow object and column-set sequence flow objects referring to page-models and column-set-models, respectively.
Compose and lay out the content based on the rules specified by the semantics of the flow object classes and the values of the characteristics associated with those objects. Each flow object (an instance of a flow object class) is formatted to produce a sequence of areas having explicit dimensions and positioned by a parent in the flow object tree.
The formatting process uses the same grove building step as the
transformation process to
convert the SGML document into a grove of hierarchically structured
objects. For more information, see
clause
The grove is then further processed, using the
construction rules, to create a flow object tree consisting
of flow objects with the appropriate formatting and page-layout
characteristics. For the formal definition of the construction rules,
see
A flow object class defines a set of formatting characteristics that apply to some category of flow objects. Each flow object class also defines a set of port names. The class of a child flow object shall be compatible with the class and port name of the port to which it is attached. The flow objects attached to any particular port are ordered, but there is no order defined between flow objects attached to different ports of the same flow object.
The process of creating the flow object tree includes the following steps:
Formatting characteristics are associated with each flow object.
Nodes representing data characters from the grove are converted to character flow objects. Each character flow object has characteristics governing glyph selection and style parameters such as font family, font weight, etc.
In constructing the flow object tree, SDQL may be
used to identify portions of the SGML document that have
specific formatting characteristics as well as those that can be
treated together for purposes of flowing onto the same column or page.
The content that is flowed together is placed as a sequence of flow
objects in a port of the parent in the flow tree.
For example, if a document consists of several normal
paragraphs and some footnote paragraphs, the footnote paragraphs can
be grouped as the content of a port of the parent flow object that
represents the footnote. Similarly, the normal paragraphs can be
grouped in a port of a flow object representing a sequence of
columns.
The flow object classes and the characteristics that apply to them define the formatting appearance and behavior of the contents of the document.
The following flow object classes are provided in this
International Standard:
Sequence flow object class
Display-group flow object class
Simple-page-sequence flow object class
Page-sequence flow object class
Column-set-sequence flow object class
Paragraph flow object class
Paragraph-break flow object class
Line-field flow object class
Sideline flow object class
Anchor flow object class
Character flow object class
Leader flow object class
Embedded-text flow object class
Rule flow object class
External-graphic flow object class
Included-container-area flow object class
Score flow object class
Box flow object class
Side-by-side flow object class
Glyph-annotation flow object class
Alignment-point flow object class
Aligned-column flow object class
Multi-line-inline-note flow object class
Emphasizing-mark flow object class
Flow object classes for mathematical formulae
Flow object classes for tables
Flow object classes for online display
In addition, DSSSL applications may define their own set of flow object classes as well as their own set of characteristics that may apply to these or to DSSSL-defined flow object classes.
The result of formatting a flow object is a sequence of areas. An area is a rectangular box with a fixed width and height. There are two types of areas: inline areas that are parts of lines and display areas that are not directly parts of lines.
Both types of areas are positioned by a process of filling. The
exact nature of the filling process is different for each of these
types of areas. See
A display area is positioned by being filled into an area container. The size of an area container may grow in the filling-direction, but is fixed in the other direction.
Page layout in DSSSL is specified by page-model characteristics on the page-sequence flow object and column-set-model characteristics on the column-set sequence flow object.
The page-sequence flow object is formatted to produce a sequence of
page areas. A page-model is the specification of the possible
structure and positioning of the area hierarchy of the page, including
the height and width of the page and the specification of page-regions.
Page-regions are area containers with fixed dimensions into
which formatted content is placed as specified by the
page-region-flow-map.
The page-region-flow-map provides the connection between the
port name and a page-region. Each of the page-regions may have a
header and a footer specification. For complete information on the
page-sequence flow object and the associated page models, see
The column-set-sequence flow object is formatted to produce a sequence of column-set areas. A column-set area contains a set of parallel columns. The structure and positioning of each column-set area is controlled by the column-set-model to which it conforms. A column-set-model specifies the possible hierarchy of areas for each column-set. Column-sets may be nested. The column-set area is divided geometrically in a direction parallel to the filling direction into a number of columns. Associated with each column-set may be zones that constrain the placement of areas relative to other areas in the filling-direction. The allowed zones are: top-float, body-text, bottom-float, and footnote.
The column-set-model specifies the possible structure and
positioning of the area hierarchy of the column-set through the
column-subset specification, the filling-direction specification,
width and height specifications, etc. The column-subset specification
includes a column-subset-flow-map that indicates the ports from which
the contents are flowed into the specified zone. The column-set-model
also supports spanning. For complete information on the column-set
sequence flow object, see
The formatting process uses the core expression language
defined in
Figure
The formatting process uses the model for coded characters,
characters,
and glyph identifiers described in
A DSSSL specification is an SGML document conforming to the DSSSL document architecture. The DSSSL document architecture is a document architecture conforming to the Architectural Form Definition Requirements of ISO/IEC 10744.
An SGML document can declare its conformance to the DSSSL document architecture
by including a token ArcBase
in the APPINFO parameter of its
SGML declaration and the following declarations in its DTD:
The DSSSL document architecture is defined by the following meta-DTD.
The element type form dsssl-specification
is a container for
one or more process specification element type forms. Declaration
elements in a dsssl-specification
element apply to
all the process specification elements in the dsssl-specification
element.
There are two types of process specification element type forms. The
element type form transformation-specification
specifies a
transformation process. The element type form
style-specification
specifies a formatting process. Instances
of these element type forms are called process specification elements.
Each process specification element may be self-contained, or it may
make use of other process specification elements of the same type.
Process specification elements are identified by an SGML unique
identifier. A process specification element in one SGML document may
use a process specification element in another SGML document by using
the external-specification
element type form to assign a local
unique identifier to the process specification element in the other
document. The combination of a process specification element with the
process specification elements that it uses is a
A user specifies processing of an SGML document by identifying a
process specification element.
The manner in which these elements are identified is system-dependent.
A system may identify a process specification element with
a system identifier for the document and an optional
unique identifier for the element within the document,
with the first process specification element in a document being
used if no unique identifier is specified.
Each process specification element may contain elements, called body
elements, whose content specifies processing in a process-specific
notation. For a transformation-specification
, this notation is
the DSSSL transformation language; for a style-specification
,
this notation is the DSSSL style language. In addition, each process
specification element may contain declaration elements that contain
information needed to parse these notations.
The process specification described by a sequence of process
specification elements is considered as a sequence of parts, where
each part consists of declarations expressed using element type forms,
and a specification in the process-specific notation, called the body
of the part. The parts from a sequence of process specification
elements consist of the sequence of parts from the first process
specification element, followed by the sequence of parts from the next
process specification element, and so on. The sequence of parts from a
single process specification element consists of a part constructed
from the content of the process specification element followed by the
sequence of parts from the sequence of process specification elements
that it uses. The declarations in the first part comprise the
declarations contained in the process specification element together
with those contained in the dsssl-specification
element that
contains the process specification element. The body of the first
part consists of the concatenation of the body elements contained in
the process specification element.
A process specification shall be processed by first processing the declarations of all of the parts, and then processing the bodies of all of the parts in order. Within a single part, there shall not be conflicting declarations; when two declarations in different parts conflict, the declaration in the earlier part shall take precedence. Similarly, within the body of a single part, there shall not be conflicting specifications, but when two specifications in the bodies of different parts conflict, the specification in the earlier part shall take precedence.
The declarations of a process specification shall specify how each bit combination occurring in the bodies of the parts of the specification and in all the SGML input documents are to be converted to characters. Declarations may occur in any order. In particular, character names may be used before they are declared.
Every character name used either in declarations or in body elements
shall be declared using either a standard-chars
element type
form, an other-chars
element type form, or a
char-repertoire
element type form.
All declaration element type forms other than the
char-repertoire
, features
, and sgml-grove-plan
element type forms require the charset
feature.
The features
element type form declares the features used by a
specification. A process specification shall declare all the features
that it uses.
The content of the element shall be a list of feature names.
This declaration is cumulative.
The sgml-grove-plan
element type form names additional modules
that should be included in the grove plan for the SGML property set.
The modadd
attribute specifies the modules to be added.
The following modules are included automatically:
baseabs
prlgabs0
instabs
For the transformation language, the prlgabs1 module is also included automatically.
This declaration is cumulative.
The char-repertoire
element type form declares
that the specification uses the character repertoire
whose public identifier is given by the name
attribute.
A char-repertoire
element is equivalent to a sequence of
instances of the element type forms baseset-encoding
,
literal-described-char
, add-name-chars
,
add-separator-chars
, standard-chars
, other-chars
,
and map-sdata-entity
, and of
The standard-chars
element type form declares the names of
characters in the character repertoire which correspond to characters
defined in ISO/IEC 10646-1 or ISO/IEC 6429.
A character in ISO/IEC 10646-1 or ISO/IEC 6429
is identified by its code in the corresponding character
set, called its
The content of the element shall be a list of pairs of character names and numbers expressed in decimal. It declares that each character name corresponds to the character with the universal code specified by the following number.
A process specification shall declare character names for each of the following character numbers in ISO/IEC 10646-1: 32 (space), 34 (quotation mark), 35 (number sign), 39 (apostrophe), 40 (left parenthesis), 41 (right parenthesis), 42 (asterisk), 43 (plus sign), 45 (hyphen-minus), 46 (full stop), 47 (solidus), 48 to 57 (digit zero to digit nine), 58 (colon), 59 (semicolon), 60 (less-than sign), 61 (equals sign), 62 (greater-than sign), 63 (question mark), 65 to 90 (Latin capital letter A to Latin capital letter Z), 92 (reverse solidus), and 97 to 122 (Latin small letter a to Latin small letter z). It shall also declare character names for each of the following character numbers in ISO/IEC 6429: 10 (line feed), and 13 (carriage return).
It shall be an error for a single character name to occur more than once in
the standard-chars
elements in a single part. The declaration
for a character name in one part in the standard-chars
element type
form takes precedence over any declaration for that character name in
any later parts.
A system may inherently know for a base character set identified by a
public identifier with an ISO owner identifier how bit combinations in
that character set correspond to universal codes. Thus, if a base
character set has a formal public identifier that includes an ISO
owner identifier, and, for each character used by the document
character set from that base character set, exactly one character name
is declared using the standard-chars
element type form, then no
baseset-encoding
element type form is required for that base
character set.
The other-chars
element type form declares the names of characters
in the character repertoire which do not correspond to characters
defined in ISO/IEC 10646-1 or ISO/IEC 6429.
The content of the element shall consist of a list of character names.
These declarations are cumulative.
The baseset-encoding
element type form specifies how bit
combinations in an SGML document whose meaning was declared in the
SGML declaration to be that of a character number in a base character
set are to be converted to characters.
The content of a baseset-encoding
element shall consist of a
list of pairs of corresponding character numbers, specified in decimal,
and character names. It specifies the character names corresponding
to character numbers in the character set whose public identifier is
given by the name
characteristic.
Conflicts between baseset-encoding
elements are resolved
separately for each character number. There can be multiple
baseset-encoding
elements for the same base character set, but
it shall be an error to have two specifications for the same character
number in the same base character set in a single part.
The literal-described-char
element type form specifies
that bit combinations in an SGML document whose meaning was declared
in the SGML declaration using a minimum literal equal to
the value of the desc
attribute are to be converted to
the character whose name is specified in the content of the element.
The map-sdata-entity
element type form declares that a
reference to an internal SDATA
entity whose name is equal to the value of the name
attribute
and/or whose replacement text is equal to the value of the text
attribute represents the character whose name is given in the content
of the element. The content of the element shall be a single
character name.
If the grove plan includes the entity-name
property for
the sdata
node class, then an SDATA entity shall be mapped by
first searching for a mapping for its name and then, if no mapping is
found, searching for a mapping for its text.
The add-separator-chars
element type form
declares characters as
These declarations are cumulative.
The add-name-chars
element type form
declares additional characters as
These declarations are cumulative.
The combine-char
element type form contains a list of
three or more character names. It declares that a sequence of
characters comprising the second and following characters shall be
replaced by the first character. Use of this element type form
requires the combine-char
feature.
Within this International Standard, public identifiers shall conform to the canonical string form of a public identifier defined in ISO/IEC 9070.
Upper- and lower-case forms of a letter are always distinguished.
Traditionally Lisp systems are case-insensitive.
Most identifiers allowed by other programming
languages are also acceptable in DSSSL.
In addition to letters and digits, identifiers
may contain the characters $%&*/:<=>?˜_^+-.
and any characters declared as
add-name-chars
or char-repertoire
element type forms.
An identifier shall not begin with a character that can begin a
number; however, :
(unless the entire identifier
is :
).
Whitespace characters are spaces, record starts, record ends, and
A semicolon (;
) indicates the start of a
comment. The comment continues to the
end of the record on which the semicolon appears. Comments are invisible,
but the record end is visible as whitespace. This
prevents a comment from appearing in the middle of an identifier or
number.
Tokens which require implicit termination (identifiers, numbers,
characters, dot, and
The expression language is inspired by the Scheme Programming Language defined in the IEEE Scheme standard, R4RS. The following specification is based on this definition.
The expression language differs from Scheme in a number of ways:
The expression language uses only the functional, side-effect free subset of Scheme. Features of Scheme that are not useful in the absence of side-effects have been removed (for example, begin).
The vector data type is not provided.
A character object is uniquely identified by its name rather than its code.
Dependencies in Scheme on the ASCII character set have been removed.
The number data type is a subtype of a more general quantity data type that adds the concept of dimension to a number.
Continuations are not provided.
Some optional features of R4RS are not provided.
The
Keyword arguments are provided.
In addition, DSSSL specifies certain choices that the definition of Scheme leaves open to implementations.
A subset of the expression language, called the
Following Algol, the expression language is statically scoped. Each use of a variable is associated with a lexically apparent binding of that variable.
The expression language has latent as opposed to manifest types. Types are associated with values (also called objects) rather than with variables. (Some authors refer to languages with latent types as weakly typed or dynamically typed languages.) Other languages with latent types are other dialects of Lisp, APL, and Snobol. Languages with manifest types (sometimes referred to as strongly typed or statically typed languages) include Algol 60, Pascal, and C.
All objects created in the course of a computation, including procedures, have unlimited extent. No expression language object is ever destroyed. The reason that implementations do not (usually!) run out of storage is that they are permitted to reclaim the storage occupied by an object if they can prove that the object cannot possibly matter to any future computation. Other languages in which most objects have unlimited extent include other dialects of Lisp and APL.
Implementations are required to be properly tail-recursive. This allows the execution of an iterative computation in constant space, even if the iterative computation is described by a syntactically recursive procedure. Thus, with a tail-recursive implementation, iteration may be expressed using the ordinary procedure-call mechanics, so that special iteration constructs are useful only as syntactic sugar.
Procedures are objects in their own right. Procedures may be created dynamically, stored in data structures, returned as results of procedures, and so on. Other languages with these properties include Common Lisp and ML.
Arguments to procedures are always passed by value, which means that the actual argument expressions are evaluated before the procedure gains control, whether the procedure needs the result of the evaluation or not. ML, C, and APL are three other languages that always pass arguments by value. This is distinct from the lazy-evaluation semantics of Haskell, or the call-by-name semantics of Algol 60, where an argument expression is not evaluated unless its value is needed by the procedure.
The expression language, like most dialects of Lisp, employs a fully parenthesized prefix notation for expressions and (other) data; the grammar of the expression language generates a sublanguage of the language used for data.
Any identifier that is not a
Certain expression types are used to bind variables to new values.
The most fundamental of these
Like Algol and Pascal, and unlike most other dialects of Lisp
except for Common Lisp, the expression language is a statically scoped language with
block structure. To each place where a variable is bound in an expression
there corresponds a
Any expression language value may be used as a boolean value for the
purpose of a
conditional test. All values count as true in such a test except for
&schfalse;.
This International Standard uses the word true
to refer to any
value that counts as true, and the word false
to refer to
&schfalse;.
An important concept in the expression language (and Lisp) is that of the
, and an external representation of a list consisting
of the integers 8 and 13 is the sequence of characters 28
.
(8 13)
The external representation of an object is not necessarily unique. The
list in the previous paragraph also has the representations
and ( 08 13
)
.
(8 . (13 . ()))
Many objects have external representations, but some, such as procedures, do not.
An external representation may be written in an expression to obtain the corresponding object.
External representations may also be used for communicating between processes defined in this International Standard.
The syntax of external representations of various kinds of objects accompanies the description of the primitives for manipulating the objects.
No object satisfies more than one of the following predicates:
These predicates define the types
An expression is a construct that returns a value, such as a variable reference, literal, procedure call, or conditional.
Expression types are categorized as
An expression consisting of a variable is a variable reference. The value of the variable reference is the value to which the variable is bound. It shall be an error to reference an unbound variable.
Any identifier that is not a
(quote
evaluates to
(quote
may be abbreviated as
'
Boolean constants, numerical constants, character constants,
string constants, keywords,named constants, and glyph identifiers
evaluate to themselves
; they need not be quoted.
A procedure call is written by simply enclosing in parentheses expressions for the procedure to be called and the arguments to be passed to it. The operator and operand expressions are evaluated, and the resulting procedure is passed the resulting arguments.
If more than one of the operator or operand expressions signals an error, it is system-dependent which of the errors will be reported to the user.
A number of procedures are available as the values of variables in the
initial environment; for example, the addition and multiplication
procedures in the above examples are the values of the variables
Procedure calls are also called In contrast to other dialects of Lisp, the operator expression
and the operand
expressions are always evaluated with the same evaluation rules.
A lambda expression evaluates to a procedure. The environment in effect when the lambda expression was evaluated is remembered as part of the procedure. When the procedure is later called with some actual arguments, the environment in which the lambda expression was evaluated shall be extended by binding the variables in the formal argument list to the corresponding actual argument values, and the body of the lambda expression shall be evaluated in the extended environment. The result of the body shall be returned as the result of the procedure call.
When the procedure is applied to a list of actual arguments, the formal and actual arguments are processed from left to right as follows:
Next
If there is a
If Use of #!key
in a keyword
feature.
It shall be an error for a
A
A
All the
The
The
The three binding constructs
It shall be an error for a
See also
A
Each
Named
The following grammar for quasiquote expressions is not context-free. It is presented as a recipe for generating an infinite number of production rules. Imagine a copy of the following rules for D = 1, 2, 3, …. D keeps track of the nesting depth.
In
Backquote
or quasiquote
expressions are useful
for constructing a list structure when most but not all of the
desired structure is known in advance. If no
commas appear within the `
is equivalent to the result of evaluating
'
. If a comma appears within the
unquoted
), and its result is inserted into the structure
instead of the comma and the expression. If a comma appears followed
immediately by an at-sign (@
), then the following
expression shall evaluate to a list; the opening and closing parentheses
of the list are then stripped away
and the elements of the list are
inserted in place of the comma at-sign expression sequence.
Quasiquote forms may be nested. Substitutions are made only for unquoted components appearing at the same nesting level as the outermost backquote. The nesting level increases by one inside each successive quasiquotation and decreases by one inside each unquotation.
The notations `
and (quasiquote
are identical in all respects.
,
is identical to (unquote
,
and ,@
is identical to
(unquote-splicing
.
Unpredictable behavior may result if any of the symbols
Definitions may take two possible forms.
This syntax is primitive.
This form is equivalent to
A definition that does not occur within an expression is known
as a
A top-level definition
evaluates
A single variable shall not be defined by more than one top-level
definition in any process specification part. A top-level definition
of a variable in a process specification part is ignored if that
variable has been defined at the top level in a previous process
specification part. See
The This constraint does not prevent the definition of mutually recursive
procedures, because evaluating a lambda expression does not reference
variables that occur free within it.
It shall be an error if it is impossible to evaluate all the
The built-in definition of a variable may be replaced by a top-level
definition. The replacement definition shall be used for all
references to that variable, even those that occur in process
specification parts preceding the part that contains the first
top-level definition.
This rule is not easy to implement, but it allows
built-in procedures to be added in future versions of this International
Standard
without changing the meaning of any conforming DSSSL specifications.
Definitions may also occur at the beginning of a
A
Just as for the equivalent
This section describes the expression language's built-in procedures. The initial (or
top-level
) environment starts out with a number of variables
bound to useful values, most of which are primitive
procedures that manipulate data. For example, the variable
It shall be an error for a procedure to be passed an argument of a type that it is not specified to handle.
The standard boolean objects for true and false are written as
&schtrue; and &schfalse;. What really
matters, though, are the objects that the conditional expressions
(a true value
(or sometimes just true
) means any object treated as true by the
conditional expressions, and the phrase a false value
(or
false
) means any object treated as false by the conditional expressions.
Of all the standard values, only &schfalse;
counts as false in conditional expressions.
Except for &schfalse;,
all standard values, including &schtrue;,
pairs, the empty list, symbols, numbers, strings, and procedures,
count as true.
Programmers accustomed to other dialects of Lisp should be aware that
the expression language distinguishes both &schfalse; and the empty list from the symbol
Boolean constants evaluate to themselves, so they don't need to be quoted in expressions.
The
If one of In other words equality for procedures is not well defined.
A
The empty list is in
If
The objects in the car fields of successive pairs of a list are the elements of the list. For example, a two-element list is a pair whose car is the first element and whose cdr is a pair whose car is the second element and whose cdr is the empty list. The length of a list is the number of elements, which is the same as the number of pairs.
The empty list is a special object of its own type
(it is not a pair); it has no elements and its length is zero.
The above definitions imply that all lists have finite length and are
terminated by the empty list.
The most general notation (external representation) for pairs is
the dotted
notation (
where
(4 . 5)
is a pair whose car is 4 and whose
cdr is 5. Note that (4 . 5)
is the external representation of a
pair, not an expression that evaluates to a pair.
A more streamlined notation may be used for lists: the elements of the
list are simply enclosed in parentheses and separated by spaces. The
empty list is written ()
. For example,
and
are equivalent notations for a list of symbols.
A chain of pairs not ending in the empty list is called an
is equivalent to
Whether a given pair is a list depends upon what is stored in the cdr field.
Within literal expressions, the forms '
`
, ,
, and
,@
denote the two-element list whose first
element are the symbols
Returns &schtrue; if
Returns a pair whose car is
Returns the contents of the car field of
Returns the contents of the cdr field of
These procedures are compositions of
Arbitrary compositions, up to four deep, are provided. There are twenty-eight of these procedures in all.
Returns &schtrue; if
Returns &schtrue; if
Returns a list of its arguments.
Returns the length of
Returns a list consisting of the elements of the first
The last argument may actually be any object; an improper list results if the last argument is not a proper list.
Returns a list consisting of the elements of
Returns the sublist of
Returns the (list-tail
.)
Returns the first sublist of (list-tail
for
association list
) shall be a list of pairs. This
procedure finds the first pair in
Although they are ordinarily used as predicates,
Symbols are objects whose usefulness rests on the fact that two
symbols are identical (in the sense of
The rules for writing a symbol are exactly the same as the rules for writing an identifier.
Returns &schtrue; if
Returns the name of
Returns the symbol whose name is
Keywords are similar to symbols.
The main difference is that keywords are self-evaluating
and therefore do not need to be quoted in expressions.
They are used mainly
for specifying keyword arguments.
A keyword is a single token; therefore, no whitespace is allowed
between the
Returns &schtrue; if
Returns the name of
Returns the keyword whose name is
The expression language provides a quantity data type which represents
lengths and quantities derived from lengths,
such as areas and volumes.
The SI meter is used as the base unit for representing quantities.
The name of this unit is m
.
Any quantity may be represented as the product of a number and
the base unit raised to the power of an integer.
The dimension of a quantity is the power to which the base unit
is raised when the quantity is so represented.
A quantity with dimension 0 is
It is convenient to be able to express quantities not only in terms
of the base unit but also in terms of other derived units.
Derived units for centimeters, millimeters, inches, picas, and
points, corresponding to the following declarations, are pre-defined.
The number data type is
considered to be a subtype of quantity that represents dimensionless
quantities. The expression language provides two types of number:
reals and integers.
Integers are considered to be a subtype of reals, and reals are a
subtype of numbers. For example, the integer 3 is also considered to
be a real number, which, in turn, is considered to be a (dimensionless)
quantity. The types quantity, number, real, and integer are defined
by the predicates
Angle (or more precisely, plane angle) is considered to be a
dimensionless quantity (the ratio of two lengths). The integer 1 is
equivalent to 1 radian. It is recommended that
rad
be declared as the name of a derived unit equal to the
dimensionless quantity 1.
It is necessary to distinguish between quantities that are represented exactly and those that may not be. For example, indexes into data structures shall be known exactly. In order to catch uses of inexact quantities where exact quantities are required, the expression language explicitly distinguishes exact from inexact quantities. This distinction is orthogonal to the dimension of type.
Quantities are either exact or inexact. A quantity is exact if it was written as an exact constant or was derived from exact quantities using only exact operations. A quantity is inexact if it was written as an inexact constant, if it was derived using inexact ingredients, or if it was derived using inexact operations. Thus, inexactness is a contagious property of a quantity.
If two implementations produce exact results for a computation that did not involve inexact intermediate results, the two ultimate results shall be mathematically equivalent. This is generally not true of computations involving inexact quantities since approximate methods such as floating point arithmetic may be used, but implementations should make the result as close as practical to the mathematically ideal result.
Rational operations such as
With the exception of
Implementations may also support only a limited range of numbers of any type, subject to the requirements of this section. The supported range for exact numbers of any type may be different from the supported range for inexact numbers of that type. For example, an implementation that uses floating point numbers to represent all its inexact real numbers may support a practically unbounded range of exact integers while limiting the range of inexact reals (and, therefore, the range of inexact integers) to the dynamic range of the floating point format. All implementations are required to support exact integers between -2147483647 and 2147483647.
An implementation shall support exact integers
throughout the range of numbers that may be used for indexes of
lists and strings or that may result from computing the length of a
list or string. The
If one of these procedures is unable to deliver an exact result when given exact arguments, then it may either report a violation of an implementation restriction or it may silently coerce its result to an inexact number. Such a coercion may cause an error later.
An implementation may use floating point and other approximate representation strategies for inexact numbers.
This International Standard recommends, but does not require, that the IEEE 32-bit and 64-bit floating point standards be followed by implementations that use floating point representations, and that implementations using other representations should match or exceed the precision achievable using these floating point standards.
In particular, implementations that use floating point representations
shall follow these rules. A floating point result
shall be represented with at least as much precision as is used to express any of
the inexact arguments to that operation. It is desirable (but not required) for
potentially inexact operations such as
If an implementation encounters an exact numerical constant that it cannot represent as an exact quantity, then it may either report a violation of an implementation restriction, or it may silently represent the constant by an inexact quantity.
A quantity may be written in binary, octal, decimal, or
hexadecimal by the use of a radix prefix. The radix prefixes are
#b
(binary), #o
(octal), #d
(decimal),
and #x
(hexadecimal). With
no radix prefix, a quantity is assumed to be expressed in decimal.
A numerical constant is
inexact if it contains a decimal point, an The examples used in this section assume that any numerical constant written
using an exact notation is indeed represented as an exact
quantity. Some examples also assume that certain numerical constants written
using an inexact notation may be represented without loss of
accuracy; the inexact constants were chosen so that this is
likely to be true in implementations that use floating point numbers to represent
inexact quantities.
A numerical constant may have a
These type predicates may be applied to any kind of argument, including non-quantities. They return &schtrue; if the object is of the named type, and otherwise they return &schfalse;. In general, if a type predicate is true of a quantity, then all higher type predicates are also true of that quantity. Consequently, if a type predicate is false for a quantity, then all lower type predicates are also false for that quantity.
If (integer?
is true if and only if
(=
.
The behavior of these type predicates on inexact quantities is unreliable, since any inaccuracy may affect the result.
These numerical predicates provide tests for the exactness of a quantity. For any quantity, precisely one of these predicates is true.
These procedures return &schtrue; if their arguments are (respectively): equal, monotonically increasing, monotonically decreasing, monotonically nondecreasing, or monotonically nonincreasing.
These predicates are required to be transitive.
The dimensions of all the arguments shall be identical.
While it is not an error to compare inexact quantities using these
predicates, the results may be unreliable because a small inaccuracy
may affect the result; this is especially true of
These predicates test a quantity for a particular property, returning &schtrue; or &schfalse;. See note above.
These procedures return the maximum or minimum of their arguments. The dimensions of all the arguments shall be identical; the dimension of the result shall be the same as the dimension of the arguments.
If any argument is inexact, then the result shall also be inexact (unless
the procedure can prove that the inaccuracy is not large enough to affect the
result, which is possible only in unusual implementations). If
Returns the sum of its arguments, which shall all have the same dimension. The result shall have the same dimension as the arguments.
Returns the product of its arguments. The dimension of the result shall be the sum of the dimensions of the arguments.
With two or more arguments, returns the difference of its arguments, associating to the left; with one argument, returns the negation of its argument. The dimensions of all the arguments shall be identical. The dimension of the result shall be the same as the dimension of the arguments.
With two or more arguments, returns the quotient of its arguments, associating to the left; with one argument, returns 1 divided by the argument. The dimension of the result shall be the difference of the dimensions of each of the arguments.
Returns the magnitude of its argument.
These procedures implement number-theoretic (integer)
division: For positive integers
For integers
provided all numbers involved in that computation are exact.
The value returned by
These procedures return integers.
If the argument to one of these procedures is inexact, then the result
shall also be inexact. If an exact value is needed, the
result should be passed to the round
rounds to even for consistency with the default rounding
mode specified by the IEEE floating point standard.
inexact->exact
procedure.
Returns x
is
zero or negative, an error shall be signaled.
Returns the square root of
Returns (expt
is defined to be equal to 1.
These procedures implement the natural one-to-one correspondence between exact and inexact integers throughout an implementation-dependent range.
Returns the number of the quantity
is true. It shall be an error if no possible result makes this expression true.
If
The result returned by If
Returns a string representation of
1
means use 0, 1, 2 …
01
means use 00, 01, 02, … 10, 11 … 100, 101 …
and similarly for any number
of leading zeros;
a
means use 0, a, b, c, … z, aa, ab, …
A
means use 0, A, B, C, … Z, AA, AB, …
i
means use 0, i, ii, iii, iv, v, vi, vii, viii, ix, x, …
I
means use 0, I, II, III, IV, V, VI, VII, VIII, IX, X, …
Returns a string representation of
Returns a number of the maximally precise representation expressed by the
given &Quot;#o177&Quot;
). If
The character object represents a character.
Characters are written using the notation #\
#\
#\a
:
lower-case letter a
#\A
:
upper-case letter A
#\(
:
left parenthesis
#\
:
the space character
#\space
:
the preferred way to write a space
If the #\
could be taken to be either a representation of the space character or a
representation of the character #\
space
followed
by a representation of the symbol #\
space
.
The
Characters written in the #\
notation are self-evaluating.
That is, they do not have to be quoted in expressions.
Every character has a set of named properties. Each property has a default value.
This declares
The
The following character property is pre-defined:
numeric-equiv:
is an integer giving the numeric equivalent
of the character or #f. The default value is #f.
Additional properties are pre-defined for the style language.
Certain operations on characters such as case-conversion and collation are dependent on the natural language for which the characters are being used. The language data type describes how language-dependent operations should be performed. Expressions may be evaluated with respect to a current language. It shall be an error to call procedures which use the current language if there is no current language.
Some of the procedures that operate on characters ignore the
difference between upper case and lower case. The procedures that
ignore case have
(for -ci
case-insensitive
)
embedded in their names. These procedures always behave as if they
converted their arguments to upper case. These procedures all use the
current language. See
Returns #t if
At any point in a computation there may be a current language.
current-language
returns the current language if there
is one, and otherwise returns #f.
A
The
A
A The syntax of the collation-specification is based on ISO 9945-2,
which contains examples that may assist the reader.
When two strings are compared, each string is divided up into
collating elements. Each collating element is either a single
character or a sequence of consecutive characters that is to be
treated as a single unit. A
A
Each order specification defines a number of different comparison
levels. If two strings compare equal at the first level, they are
compared at the second level. If they also compare equal at the
second level, they are compared at the third level. This process is
repeated until there are no more levels or until the strings compare
unequal. The number of levels in the order specification is
determined by the number of
The
The
If the
A single
Each collation entry is associated with a weight determined
by its position in the
When a
A
If a #\a
is
equivalent to a (#\a #\a)
.
When #t is used as a collating-element, then the specified
weights are assigned to all collating elements to which
no weight has been explicitly assigned by a
The
Specifying a string is equivalent to specifying a list of the characters it contains.
In the
Returns &schtrue; if
These procedures impose a total ordering on the set of characters.
All the procedures other than
These procedures are similar to (char-ci=? #\A #\a)
returns &schtrue;.
The procedures return the upper- or lower-case equivalent of
Returns the value of the property
Strings are sequences of characters.
Strings are written as sequences of characters enclosed within doublequotes
(&Quot;
). A doublequote may be written inside a string by
escaping it with a backslash (\
), as in
A backslash may be written inside a string by escaping it with
another
backslash.
Any character may be written inside a string by writing its name
after a backslash. The name shall be followed by a semi-colon, unless
there are no following characters in the string, or the following
character is not a #\
syntax
for characters.
A string constant may continue from one record to the next and shall contain the characters that separate the two records in the entity.
The
In phrases such as the characters of
it is understood
that the index
Some of the procedures that operate on strings ignore the
difference between upper and lower case
by converting the strings to upper case before performing the operation.
The versions that ignore case
have
(for -ci
case-insensitive
) embedded in their
names.
Returns &schtrue; if
Returns a string composed of the arguments.
Returns the number of characters in the given
Return &schtrue; if the two strings are the same length
and contain the same
characters in the same positions, and otherwise return &schfalse;.
Returns &schtrue; if the two strings compare the same at the
first
These procedures are the lexicographic extensions to strings of the
corresponding orderings on characters. For example,
Returns a string formed from the characters of
Returns a string formed by the concatenation of the given strings.
Returns &schtrue; if
(append (list
as the actual
arguments.
The
Returns a procedure object which when called
shall execute the external procedure with public identifier
External procedures should be side-effect free, and implementations are free to assume that they are. They should be used to retrieve information from the system rather than to change the state of the system.
If the
These procedures impose a total ordering on the set of strings that represent dates and times in ISO 8601 format. It shall be an error if any argument does not represent a date or time in ISO 8601 format.
error
signals an error. The error
.
This clause defines a subset of the expression language called the
A grove is a set of nodes constructed according to a grove plan. Every node in the grove belongs to a named class in the grove plan. A node is a set of property assignments, each consisting of a property name and a property value.
A grove plan defines a set of classes and, for each class, an ordered set of properties.
For each property assignment of a node, there is a unique
corresponding property of the node's class whose name is the same as
the name part of the property assignment. This is referred to as the
property of the property assignment. The value part of a property
assignment is referred to as a value of the property of the
property assignment. A node is said to exhibit a value
The ordering of the properties of a class determines for nodes of that class the ordering of the corresponding property assignments.
Every property value has a data type. The definition of a property
declares a certain data type to be possible for values of the
property. This data type is referred to as the
In addition to simple abstract data types such as boolean or string,
there are three special data types called the
The definition of a property may also allow that property
to have a
A property of a class may be a
in any grove there is a unique node called the
for every node
for every node
This tree is referred to as the subnode tree. It is often useful for
applications to deal with certain subtrees of the subnode tree in
which all the children of a node occur as part of the value of a
single property of the node. For this purpose, one property of the
class can be distinguished as the A node can have siblings even if it does not have a parent because its
origin-to-subnode relationship property need not be the children
property of its origin.
The
There are two possibilities for properties with a declared data type that is nodal but which are not subnode properties:
The property may be an
The property may be a
A grove plan specifies a selection of classes and properties from a
property set. A property set is defined by a property set definition
expressed in SGML as described in
For any source for the grove, the property set determines the
The complete grove contains all the information that the parser is
capable of making available about the source of the grove. For any
particular application, much of this information may be irrelevant.
The grove plan provides a way for an application to get a grove that
contains just the information it requires.
The grove to be constructed from the grove plan shall be the same as a grove obtained by modifying the complete grove in the following manner:
To
A node in the constructed grove only exhibits values for those properties that are specified to be included in the grove.
If a node in the complete grove exhibits a value for an intrinsic property whose semantics are that it is the name of a non-intrinsic property exhibited by the node, then if the non-intrinsic property is not included in the grove plan, the node in the constructed grove shall exhibit a null value for the intrinsic property.
If a node in the complete grove exhibits a value for an intrinsic property whose semantics are that it is a list of names of non-intrinsic properties exhibited by the node, then the node in the constructed grove shall exhibit a value for the intrinsic property that is obtained from the value in the complete grove by removing the names of any of the non-intrinsic properties not included in the grove plan.
If a node in the complete grove exhibits a value for an irefnode property that has a declared value of node, but the value of the property is not marked for inclusion in the constructed grove, then the node shall exhibit a null value for that property in the constructed grove.
If a node in the complete grove exhibits a value for an irefnode property that has a declared value of nodelist or nmndlist, then the value in the constructed grove is obtained by removing from the value exhibited for the property in the complete grove all nodes that are not marked for inclusion in the constructed grove.
Property set definitions are described fully in the Property Set Definition Requirements of ISO/IEC 10744. This clause presents a simplified version that includes only those details necessary for the understanding of this International Standard.
The top-level element is a propset
element. The psn
and
fullnm
attributes specify a short SGML name and a long
descriptive name. At various places within the property set, the
following elements are allowed:
desc
contains a description of the object that is being
defined by the element in which it occurs.
note
contains notes about the object being defined.
The name of a class, property, or enumerator is not a simple string but a triple of strings, each appropriate for use as a name in a different context:
The reference concrete syntax (RCS) name is appropriate for use in a context where a valid name in the SGML reference concrete syntax is required.
The application name specifies a name that is appropriate
for use as an identifier in a programming or scripting language. An
application name can include multiple words separated by spaces; the
name must be transformed to be a valid identifier in the language in
which it is to be used, using the normal conventions of that language
for multi-word identifiers. For example, the application name
processing instruction
, when bound to a programming language, might
become ProcessingInstruction
, processing-instruction
, or
PROCESSING_INSTRUCTION
, depending on the language.
The full name is an unabbreviated name appropriate for use in documentation.
These three names are specified by attributes as follows:
rcsnm
specifies the RCS name of the property.
appnm
specifies the application name of the property;
this defaults to the RCS name.
fullnm
specifies the full name of the property;
this defaults to the application name.
Various elements occurring in a property set define components by referencing them in a specification document. These elements use the following common attributes:
sd
specifies the specification document; this defaults to SGML
.
Formally, the value is the name of a notation.
Other allowed values are GenFac
for the General Facilities
of ISO/IEC 10744 and DSSSL
.
clause
specifies the applicable clause of the specification
document; for SGML this uses the notation of ISO/IEC 13673.
A property set definition is divided into named modules each described
by a psmodule
element. The attributes have the following meaning:
rcsnm
gives the RCS name of the module.
fullnm
gives the full name.
dependon
lists the names of the modules on which this module depends.
required
specifies whether the module is required, that is,
shall be included in every grove plan.
A value of required
means that it is required; a value
of nrequire
means that it is not.
The default is nrequire
.
Including a module in a grove plan is equivalent to including in the grove plan:
all the classes and properties defined within the module,
any modules on which the module depends, and, recursively, any modules on which they depend.
In addition to modules defined in property sets, there are a number of
intrinsic modules defined in this International Standard that are
automatically part of every property set. Properties defined in
intrinsic modules are called
Every data type is defined by a datadef
element. The
attributes have the following meaning:
There is no application name for a data type, because when the
property set is used in a programming or scripting language, each
abstract data type has to be explicitly bound to one of the data types
provided by the language.
rcsnm
gives the RCS name of the data type.
fullnm
gives the full name of the data type.
nodal
specifies whether the data type is nodal;
the allowed values are nodal
or nonnodal
;
the default is nonnodal
.
listof
allows formal specification of the semantics of a data
type in the case where the data type is an ordered list or array of
some other data type; that other data type is specified as the value
of the attribute.
super
allows for the formal specification of a subtyping
hierarchy among defined data types; the value of the attribute is a
list of the names of the super types.
The
Some data types are defined in the following intrinsic module:
A class is defined by a classdef
element. In addition to the
component name attributes and specification document attributes, the
following attributes are allowed:
conprop
identifies the content property of the class, if any.
dsepprop
identifies the data separator property of the class, if any.
A class can have a data separator property only if it has a
children property (i.e., a nodal content property).
mayadd
identifies a category of classes that is used in the
definition of the verification mapping in the transformation language.
See mayadd
is allowed
for this attribute.
The attribute name can be omitted for this attribute.
A property is defined by a propdef
element. In addition to the
component name attributes and specification document attributes, the
following attributes are allowed:
cn
specifies the class to which this property belongs. When
a
propdef
element occurs within a classdef
element, the
property belongs to that class. Otherwise, the cn
attribute
shall be specified, specifying the class name. A value of #all
means that it belongs to all classes of node; a value of #grove
means that it belongs to the node at the root of the grove.
datatype
specifies the RCS name of the data type, as defined by a
datadef element.
ac
specifies the classes allowed in the value of the
property; this applies only if the data type is nodal.
The default is that any class is allowed in the value.
acnmprop
applies when the data type is nmndlist
and
specifies for each of the classes allowed in the property value
the name of the property that serves as the name of a node of that
class in the named node list. There shall be one property name for
each class in ac
.
The upper-case substitution that SGML performs on general names when
the reference concrete syntax is used is an example of a string
normalization rule.
strnorm
specifies a string normalization rule applicable to the
value. It applies when the data type is a string, is a list of
strings, or has a super type that is a string. The default is for no
normalization to be applied. Each string normalization rule shall be
defined by a normdef
element.
noderel
specifies whether the property is a subnode, irefnode, or
urefnode property; this applies only if the data type is nodal.
The attribute name is usually omitted for this attribute.
This does not prohibit a node from exhibiting a null value for
such a property.
vrfytype
categorizes the property as either derived, optional,
or other for purposes of defining the verification mapping in the
transformation language. See
strlex
gives a lexical type. The value is a lexical type
defined by a lexdef
element. The lexical type of a property is
not used in this International Standard. The semantics of lexical
types are defined in ISO/IEC 10744.
A propdef
can have subelements of the following types
in addition to desc
and note
elements:
when
specifies a condition that shall be satisfied for a node
to exhibit a value with the declared data type. If this condition is
not satisfied, the node shall exhibit a null value for this property.
enumdef
defines the possible enumerators when the data type is
enum. It has only the component name attributes.
A string normalization rule is defined by a normdef
element.
It has an rcsnm
attribute and the specification document attributes.
The following module defines the intrinsic properties of all nodes:
It is sometimes convenient to group nodes in a grove in an
application-dependent manner. This is done by using nodes in the
grove as the source for a further parse, called an source
,
that points to those nodes in the source grove from which it was
derived.
The property set for SGML is:
A DSSSL specification has a single grove plan specified by the
sgml-grove-plan
architectural form in the DSSSL specification.
See
SDQL adds two data types to the
expression language, node-list
and named-node-list
. It
also adds some additional syntax for expressions: in SDQL, in any
context in which an
A subset of SDQL called the
The There is no A node-list will typically be implemented in a lazy fashion. In other
words, the internal representation of a node-list is not a list
of nodes, but a representation of the specification that constructed
the node-list. For example, if an application uses the
node-list
data type represents an ordered list of zero or
more nodes in a grove.
node
data type.
A single node is represented by a node-list
with a single member.
node-list-count
procedure on a node-list, it would be
inefficient to build the node-list, count it, and then discard the
node-list; it would be better simply to count how many distinct nodes
match the node-list's specification.
The named-node-list
data type is a subtype of the
node-list
data type that represents a node-list
each of
whose members has a string-valued property that uniquely identifies
the node in the node-list.
The procedures in this clause are the primitive procedures, in the sense that all other procedures in SDQL could be defined in terms of the procedures in this clause, but no procedure in this clause is capable of being defined in terms of the other procedures in this clause.
Returns a singleton node-list. The semantics of this are defined by
the context in which the SDQL expression occurs.
Returns a singleton node-list. The semantics of this are defined by the context in which the SDQL expression occurs.
Returns #t if
Returns #t if
Returns a node-list containing the first member of
Returns a node-list containing all members of
Returns the node-list that results from appending the members
of
Returns #t if
Returns a node-list that has the same members as An implementation may be able to implement (node-list-no-order
more efficiently than
.
Returns #t if
Returns a singleton node-list comprising the node in
Returns
Returns a list of the names of the members of
This signals an error in a similar way to the error
procedure.
When an error is signaled with node-list-error
, the system
should report to the user that the error is associated with the nodes
in
In all contexts in SDQL, application names are transformed by
replacing each space with a hyphen and adding a question mark
(?
) to the application names of properties whose declared data
type is boolean.
Returns the value that the node represented by default:
is supplied, it is
returned; otherwise, an error is signaled. If the node exhibits a
null value for the property, then if null:
is supplied,
it is returned; otherwise, if default:
is supplied,
it is returned; otherwise, an error is signaled.
Property values are represented as expression language objects according to their abstract data type:
An abstract character is represented by an object of type char.
An abstract string is represented by an object of type string.
An abstract boolean is represented by an object of type boolean.
An abstract integer is represented by an object of type integer.
An abstract integer list is represented by a list of integers.
An abstract string list is represented by a list of strings.
An enumeration is represented by a symbol whose name is equal to
the application name of the enumerator (transformed as specified
in
A component name is represented by a symbol. The name of the symbol
shall be the application name (transformed as specified
in rcs?:
argument is supplied with a true value, in which case the
RCS name will be used.
An abstract component name list is represented by a list of the symbols that represent each component name.
An abstract node is represented by a singleton node-list.
An abstract nodelist is represented by an object of type node-list.
An abstract nmndlist is represented by an object of type named-node-list.
Null values have no representation in the expression language.
Returns a node-list containing a single node that is the root of a
grove built by parsing an SGML document or subdocument using the SGML
property set. active:
is a list
of strings specifying the names of the active DTD or LPDs. At most
one DTD shall be active. If parent:
is specified, then the
entity to be parsed is an SGML subdocument entity, and the value shall
be a singleton node-list in the grove in which the subdocument should
be treated as being declared. This uses the default grove plan, which
is determined in an application-dependent manner.
For some procedures, a formal definition in the expression language is supplied. These formal definitions do not handle errors. A correct implementation would need first to verify that arguments meet the requirements indicated by the procedure prototypes and the procedure description.
Use of the facilities in this clause in the style or transformation
languages requires the hytime
feature.
The grovepos abstract data type is represented by a list each of whose members is
an integer,
a list containing a symbol and a string, or
a list containing a symbol and an integer.
Returns the value that the member of node-property
procedure. If the member
of default:
is supplied, default:
shall
be returned; otherwise, an error shall be signaled. apropsrc?:
,
if true, has the same effect as specifying an apropsrc
attribute with a value of apropsrc
for the code proploc
form in ISO/IEC 10744.
Returns a list of objects, one for each member of node-property
procedure.
If some member of ignore-missing?:
is true, the resulting list shall
contain no object for that member; otherwise, an error shall be
signaled.
apropsrc?:
,
if true, has the same effect as specifying an apropsrc
attribute with a value of apropsrc
for the code proploc
form in ISO/IEC 10744.
Returns the node-list that results from concatenating the values that
each member of node-property
procedure. For the class of each member of ignore-missing?:
is true, the resulting node-list shall
contain no nodes for that member; otherwise, an error shall be
signaled.
apropsrc?:
,
if true, has the same effect as specifying an apropsrc
attribute with a value of apropsrc
for the code proploc
form in ISO/IEC 10744.
This addresses the members of the second argument in the same manner
as the listloc
architectural form defined in ISO/IEC 10744.
Returns a node-list, list, or string according to the type of the
second argument. overrun:
is one of the symbols error
, wrap
, truncate
, or
ignore
. The default is error
.
Returns a node-list containing one member for each member of
ignore-missing?:
is true.
Returns a list of nodes located in the same manner as with the
groveloc
architectural form of ISO/IEC 10744. overrun:
is interpreted as with listloc.
Returns a list of nodes located in the same manner as with the
treeloc
architectural form of ISO/IEC 10744.
overrun:
is interpreted as with listloc
.
treecom?:
, if true, corresponds to a treecom
attribute
with a value of treecom
.
Returns a list of nodes located in the same manner as with the
pathloc
architectural form of ISO/IEC 10744.
overrun:
is interpreted as with listloc
.
treecom?:
, if true, corresponds to a treecom
attribute
with a value of treecom
.
Returns a list of nodes located in the same manner as with the
Relations of parent and children are handled by relloc
architectural form of ISO/IEC 10744. The procedures
relloc-anc
, relloc-esib
, relloc-ysib
, and
relloc-des
correspond to values for the relation
attribute of anc
, esib
, ysib
, and des
.
overrun:
is interpreted as
with listloc
.
parent
and children
procedures.
Returns a list of nodes located in the same manner as with the
datatok
architectural form of ISO/IEC 10744.
filter:
is a symbol having one of the values allowed for the
filter
attribute.
concat:
is one of the symbols catshi
, catslo
,
cattk
, catshitk
, catslotk
, catrhitk
,
catrlotk
, or nconcat
interpreted in the same manner as the
concat
attribute.
catsrcsp:
, catressp:
, tokensp:
, and ascp:
are
strings interpreted in the same manner as the attributes with the same
name.
nlword:
is a string specifying an ISO 639 language code.
stem?:
, if true, has the same effect as specifying #STEM
for the nlword
attribute.
stop:
is a list of strings specifying a stop list;
the default is the empty list.
min:
is an integer specifying the minimum untruncated token length.
max:
is an integer specifying the maximum untruncated token length.
make-grove
constructs a new grove and returns a node-list
containing the grove root.
These functions construct a new grove using the Data Tokenizer
Property Set containing one tokenized string node for each
non-overlapping match found in the data of each member of
boundary:
is one of the symbols sodeod
, sodiec
,
isceod
, or isciec
, which shall be interpreted in the same
manner as the boundary
attribute of the HyLex
element
defined in ISO/IEC 10744.
level:
is a number of comparison levels in the
collation specification of the current language on which string
comparison shall be performed; if level:
is not specified,
strings shall be compared simply by comparing their constituent
characters for equality.
min-hits:
and max-hits:
are strictly positive integers
specifying the minimum and maximum number of hits: any match whose
parent node does not contain a number of hits within the specified
range shall be excluded from the list of nodes returned. The default
for min-hits:
is 1. If max-hits:
is not specified,
there shall be no maximum.
norm?:
is a boolean specifying whether the lexical model shall
be normalized.
Returns #t if
Each node shall be in an auxiliary grove, and the source nodes of all
the nodes shall be in a single tree. Returns #t if the source nodes
are ordered within that tree, and otherwise returns #f. For
ordered-no-overlap?
, the source nodes are considered to be
ordered if, for each argument node, all of its source nodes are
before any of the source nodes of the next argument node. For
ordered-may-overlap?
, the source nodes are considered to be
ordered if, for each argument node, the first of its source nodes is
before the first of the source nodes of the next argument node.
Each node shall be in an auxiliary grove, and the source nodes of all
the nodes shall be in a single tree. Returns the number of quanta
between the first and the last source nodes. filter:
argument of the datatok
procedure.
These procedures are similar to procedures on normal lists.
Returns an empty node-list.
If node-list-reduce
to
a node-list containing all but the first member of
the result of applying
node-list-reduce
could be defined as follows:
Returns #t if
Returns a node-list which is the same as
Returns a node-list containing the union of all the arguments, which
shall be node-lists. The result shall contain no duplicates. With no
arguments, an empty node-list shall be returned. This could be defined as
follows:
where reduce
is defined as follows:
Returns a node-list containing the intersection of all the arguments, which
shall be node-lists. The result shall contain no duplicates. With no
arguments, an empty node-list shall be returned. This could be defined as
follows:
Returns a node-list containing the set difference of all the
arguments, which shall be node-lists. The set difference is defined
to be those members of the first argument that are not members of any
of the other arguments. The result shall contain no duplicates. With
no arguments, an empty node-list shall be returned. This could be defined
as follows:
Returns a node-list containing the symmetric set difference of all the
arguments, which shall be node-lists. The symmetric set difference is
defined to be those nodes that occur in exactly one of the arguments.
The result shall contain no duplicates. With no arguments, an empty
node-list shall be returned. This could be defined as follows:
For each member of
For each member of
Returns #t if, for some member of
Returns #t if, for every member of
Returns a node-list containing just those members of
Returns a list containing, for each member of
Returns the length of
Returns a node-list containing the members of
Returns a node-list containing the
Returns the node-list comprising all but the first
Returns a node-list comprising the first
Returns a node-list containing those members of
Returns the number of distinct members of
Returns a node-list containing the last member of
When using node-list-some?
, node-list-every?
,
node-list-filter
, and node-list-union-map
, the first
argument is often a lambda expression with a variable. A syntax
that avoids the need to use an explicit lambda expression in this case
is provided in this International Standard.
An expression
is equivalent to:
Read this as: there exists a
An expression
is equivalent to:
Read this as: for all
An expression
is equivalent to:
Read this as: select each
An expression
is equivalent to:
Read this as: the union of, for each
These procedures work with any grove, but use only intrinsic properties.
The result of many of the following procedures is the
Returns the mapping over
This is equivalent to:
Returns the value that the member of origin-to-subnode-rel-property-name
property, or #f if it does
not exhibit a value or exhibits a null value. This could be defined as
follows:
This is equivalent to:
This is equivalent to:
Returns the mapping over
Returns a string containing the concatenation of the data of each
member of
if the node has a data property, the value of its data property converted to a string, if necessary,
if the child has a children property, the concatenation of the data of each of the children of the node, separated by the value of the data separator property, if it has a non-null value, or
otherwise, an empty string.
This is equivalent to:
This is equivalent to:
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns the mapping over
Returns #t if
Returns the members of
Returns #t if
Returns the mapping over
If
Returns a node-list comprising members of
Returns a node-list comprising those
members of
Returns a node-list comprising members of
Returns a node-list comprising members of
This clause defines a subset of SDQL. In addition to the
procedures defined in this clause, the
In the following procedures, the argument that is of type node-list
can be omitted and defaults to (current-node)
.
Returns a node-list containing the nearest ancestor of
Returns the value of the gi
property of the node contained in
gi
property or a null gi
property.
Returns the value of the gi
property of the first child of
element
or #f if
Returns the value of the id
property of the node contained in
id
property or a null id
property.
Returns the child number of
Returns the child number of the nearest ancestor of
Returns a list of non-negative integers with the same number of
members as
Returns a list of non-negative integers. The last member of the list is
the child number of the nearest ancestor of the
Returns the number of elements before or equal to
Returns a list of non-negative integers, one for each member of
are before or equal to
have a generic identifier equal to the
if
In effect the counter for each argument is reset at the start of the element referred to by the previous argument.
An element is considered to be after its parent.
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 document whose DTD lacks container elements.
In the following procedures, attribute values are represented as
strings by applying the attribute-assignment
node.
Returns a string representation of the attribute with name equal to
Returns a string representation of the attribute with name equal to
Returns a string representation of the attribute with name equal to
Returns #t if
Returns #t if
Returns #t if
Returns #t if
Returns the value of the public-id property of the value of the
external-id property of the general entity whose name is
Returns the value of the system-id property of the value of the
external-id property of the general entity whose name is
Returns the value of the generated-system-id property of the value of
the external-id property of the general entity whose name is
Returns the value of the text property of the general entity whose
name is
Returns the value of the notation-name property of the general entity
whose name is
Returns a string representation of the value of the attribute named
Returns the value of the entity-type property of the general entity
whose name is
Returns the value of the public-id property of the value of the
external-id property of the general notation whose name is
Returns the value of the system-id property of the value of the
external-id property of the general notation whose name is
Returns the value of the generated-system-id property of the value of
the external-id property of the general notation whose name is
Returns
Returns
These procedures make use of particular properties that are defined by
the property set for SGML.
This is equivalent to:
Returns the mapping over attributes
property whose name is
equal to
Returns a singleton node-list returning the element in the same grove
as (current-node)
.
This is equivalent to:
Returns #t if
For example,
the gi of n
is e4
,
the gi of n
's parent is e3
,
the gi of n
's grandparent is e2
,
n
's grandparent has an a3
attribute with a value equal to v3,
the gi of n
's great grandparent is e1
,
n
's great grandparent has an a2
attribute with a value
equal to v2
, and
n
's great grandparent has an a1
attribute with a value
equal to v1
.
When a string or symbol in the pattern is compared against a property
value, and the property value was subject to upper-case
substitution, upper-case substitution shall also be performed on the
string before comparison.
Returns a node-list comprising those members of
Searches in the subgroves whose roots are each members of
Searches in the subgroves whose roots are each members of
Searches in the subgroves whose roots are each members of
Use of the facilities in this clause in the style or transformation
languages requires the word
feature.
This builds a new grove by performing an auxiliary parse using
the Data Tokenizer Property Set.
For each member of
Returns a node-list containing each member of string
property equal to
Use of the facilities in this clause in the style or transformation
languages requires the regexp
feature.
The regexp type represents a node regular expression. A node regular
expression is an object that can be used to perform an auxiliary parse of a
grove. This auxiliary parse creates a new grove that contains nodes that
group together nodes that correspond to nodes in the original grove.
The semantics of a node regular expression define for any node-list
A node-list
the member of
there is no node in
follows in
precedes in
Returns #t if
The procedures in this section construct regexp objects that are used
by the subparsing procedures.
Returns a regexp that matches a node-list with respect to
any search list if the node-list contains exactly one node and
Returns a regexp that matches a node-list with
respect to a
search list
Returns a regexp that matches a node-list with respect to a
search list
Returns a regexp that matches a node-list with respect
to a search list
Returns a regexp that matches a node-list with respect to a
search list
Returns a regexp that matches a node-list with
respect to a search list
Returns a regexp that matches a node-list with respect
to a search list
Returns a regexp that matches a node-list with respect to a
search list
Returns the regexp represented by This could be implemented in terms of the above primitives.
char
property whose value is that character.
The procedures in this clause use regexp objects to create a new
auxiliary grove using the Regular Expression Property Set as follows:.
Returns a new auxiliary grove built
using the regexp property set.
The grove contains one group node
for each sublist of The source property is an intrinsic property of every node in an
auxiliary grove.
This is the same as regexp-search
except that the sublists
are disjoint. When two sublists overlap, if one sublist has a
member that occurs in
This clause describes the DSSSL transformation language.
Syntactically, the DSSSL transformation language is a data
content notation as defined by ISO 8879.
The content of an element in this notation is parsed as a
The transformation language uses the expression language defined
in clause
A transformation process requires a single grove as input, which is
transformed as specified by the
The following features are optional in the transformation language:
The combine-char
feature allows
The keyword
feature allows #!key
in
The multi-source
feature allows use of the
The multi-result
feature allows multiple result groves.
The regexp
feature allows the use of node regular expressions
described in
The word
feature allows the use of the facilities
for word searching described in
The hytime
feature allows the use of the facilities
for HyTime location addressing described in
The charset
feature allows the use of the declaration element
type forms other than char-repertoire
, features
, and
sgml-grove-plan
.
The transformation process is specified by a collection of associations.
Each association has up to three components:
a
a
an optional
A
A
Each node to which an association is potentially applicable has a
Within a
Each
For each node that is created in the result grove, links are created
from each of the constituent nodes of the node whose transformation
resulted in creation of the node in the result grove to the created
node. These links are referred to as
The subgrove to be created is described using an object of type
subgrove-spec.
Returns an object of type subgrove-spec.
The node:
argument shall be a singleton node-list; it specifies
that the node at the root of the created subgrove shall have the same
class as the value of node:
, the same non-nodal, non-intrinsic
properties as the value of node:
(as modified by the
add:
and remove:
arguments), and the same null-valued
properties as the value of node:
(except as modified by the
null:
and remove:
arguments).
The subgrove:
argument shall be a singleton node-list;
it specifies the creation of a subgrove that is a copy
of the subgrove rooted in the argument node.
The class:
argument is a symbol specifying the class of the
node to be created. Exactly one of the node:
, subgrove:
,
and class:
arguments shall be specified.
The add:
argument specifies non-nodal, non-intrinsic properties
with non-null values that shall be added to the node. The
add:
argument shall be a list of two-element lists whose first
member is the name of a property and whose second member is the value
of that property. The property shall be a non-nodal, non-intrinsic
property of the node's class. The value for a property specified in
the add:
argument replaces any value for that property that the
node specified by the node:
argument had.
The null:
argument is a list of symbols specifying the names of
additional non-intrinsic properties of the node which shall have null
values. This replaces any non-null property which the node would
have by virtue of the node:
argument.
The remove:
argument is a list of non-intrinsic properties
which the node specified by the node:
argument has and which
the node to be created should not have; it defaults to the empty list.
This may be used to remove properties with both null and non-null
values.
The sub:
argument is a list specifying subnodes for the
node at the root of the subgrove returned by subgrove-spec
.
The members of the list shall be lists whose first member is a symbol
specifying the name of the subnode property and the rest of whose
members are subgrove-specs specifying the nodes in the value of the
property. This argument defaults to the empty list.
The These can also be specified using the children:
argument is a list of subgrove-specs specifying
the nodes in the value of the children property of the node at the root of
the subgrove returned by sub:
argument,
but using children:
is often more convenient.
This argument defaults to the empty list.
The label:
argument specifies the label for the arrow which
shall be created from the transformed node in the source grove to the
node at the root of the subgrove being created in the result grove. It
may be any expression language object. The default value is #f.
The sort-children:
argument is a procedure that affects the ordering of
the children of the root node. See
Classes and properties are named by their application names as
defined in the SGML property set, with the usual transformation
described in
Returns #t
if create-spec
, and otherwise returns #f
.
Returns a create-spec specifying the creation of the root
of a result grove.
label:
with a start-point of
label:
can be any expression language object; it defaults to
#f
.
If optional:
is #f
, then it shall be an error if there never
is any such arrow; optional:
defaults to #f
.
result-path:
is a procedure that for each arrow is applied to a
result-node-list whose only member is the end-point of the arrow.
result-path:
may be applied to this result-node-list at various
points in the construction of the grove. At some point in the
construction of the grove, it shall return a result-node-list that
contains exactly one member. This is the result-path:
is not specified, it defaults to
the identity procedure.
For property:
is a symbol or string specifying a
property name. This property shall be a subnode property of the
creation origin, and the subgrove shall be created as a member of that
property of the creation origin.
If the property:
argument is omitted, it defaults to the children
property
of the creation origin; it shall not be omitted if the creation origin
has no children property.
For
Two subgroves are said to have the create-sub
, the same
If unique:
is not #f
, then this subgrove shall be the only
one that is ever created with the same creation method
as this one. unique:
defaults to #f
.
When unique:
is #f
, the relative order of subgroves
created with the same creation method is
determined in a way that is independent of the order in which the
subgroves are created. Let the create-sub
, then any
nodes that will be siblings of the inserted subgrove and
were created as part of the same subgrove as the origin
node shall be treated as creation siblings. The position of a subgrove
to be inserted is first determined relative to its creation siblings. It
is then inserted in such a way that it follows all the dependent
siblings of all those creation siblings that it is to follow and
precedes all the dependent siblings of all those creation siblings
that it is to precede so that there is no node between it and its
creation origin that is neither a creation sibling nor a dependent
sibling of a creation sibling.
When the node at the root of the subgrove is a child of the node
that will be the origin of the subgrove,
the position of the subgrove
among its creation siblings is determined by the ordering predicate of
the origin node. The ordering predicate is the procedure specified by
the sort-children:
argument to the
An arrow This requirement avoids the possibility of an infinite loop.
label:
argument. It shall be an error if there is a
sequence of arrows where each arrow triggers the next arrow and where
the last arrow has the same start-point and label as the first arrow.
A result-node-list represents a list of nodes in the result
grove. A subset of the operations permitted on node-lists are
permitted on result-node-lists. In a prototype, an argument
name The allowed operations are designed to ensure that if a node in the
result grove is contained in the result-node-list that results from
evaluating an expression at some point in the construction of the
result grove, then that node shall be contained in the result-node-list
that results from evaluating that expression at any subsequent point
in the construction of the result grove.
These procedures behave in the same way as the corresponding
operations on node-lists except that the return value is
of type result-node-list rather than node-list.
Returns a result-node-list containing
those nodes contained in
Returns a result-node-list containing those nodes in
An object of type transform-grove-spec represents a grove to be transformed in addition to the current grove.
Returns #t
if transform-grove-spec
,
and otherwise returns #f
.
transform-grove
creates
a new grove from transform-args
property to
the grove root whose value is a list containing
Returns a node-list containing those members of transform-args
property that contains a member equal
to
Returns a node-list containing a single node that is the root of a
grove built by parsing the prolog of an SGML document. This procedure is typically used to specify the subgrove:
argument to the
The SGML document generator generates an SGML document or subdocument
from a result grove. The operation of the SGML document generator is
specified in terms of a An implementation is not required to build a verification grove.
A result grove is
Any result grove satisfies the following requirements:
A node in the result grove does not exhibit a value for a property with a declared data type that is nodal unless the property is a subnode property.
A node in the result grove never exhibits a value for a property that is in the derived category.
The verification mapping,
If
For each distinct
For each
For each node
For each node
A node in the verification grove shall be grounded if its class is not in the mayadd category and either
any of its siblings are grounded, or
the origin of the node is grounded, and
the origin-to-subnode relationship property of its origin is not in the optional category.
For each node
For each node
For each node
For each node
For each node
The transliteration property described in
As an exception to these rules, a node in the verification grove of class attribute-assignment need not be grounded if the rules of ISO 8879 that apply with an SGML declaration that specified SHORTTAG YES would not require the attribute to be specified.
A
Returns #t if
Each node in a result grove can have a non-nodal transliteration property whose value is an object of type transliteration-map. If no transliteration property is specified for a node, the value of the transliteration property is the value of the transliteration property of the origin of the node. If no transliteration property is specified for the root node of a result grove, then the value shall be an empty transliteration map.
For each consecutive sequence of data-char nodes in the result
grove with the same transliteration property, the sequence of
characters that the sequence of characters in the result grove
represents with respect to the transliteration-map shall be output
instead of the sequence of characters in the result grove.
In case of ambiguity, the longest
This clause describes the DSSSL style language. Syntactically,
the style language is a data content notation,
as defined in ISO 8879.
The content of an element in this notation is parsed as a
The style language described in this International Standard uses the
core expression language described in
Within a A
The following features are optional in the style language:
The expression
feature allows the full expression language.
Without this feature only the core expression language shall be used.
The multi-process
feature allows the unrestricted use
of
The query
feature allows use of the full query language described in
multi-process
feature.
The regexp
feature allows the use of node regular expressions
described in
The word
feature allows the use of the facilities
for word searching described in
The hytime
feature allows the use of the facilities
for HyTime location addressing described in
The combine-char
feature allows
The keyword
feature allows #!key
in
The side-by-side
feature allows use of the side-by-side and
side-by-side-item flow object classes.
The sideline
feature allows use of the sideline flow
object class.
The aligned-column
feature allows use of the aligned-column
flow object class.
The bidi
feature allows use of the right-to-left writing-mode
and the embedded-text flow object class.
The vertical
feature allows use of the top-to-bottom writing-mode.
The math
feature allows use of the flow object classes for
mathematical formulae described in
The table
feature allows use of the flow object classes for tables
described in
The table-auto-width
feature allows the widths of table
columns to be computed automatically.
This implies the table
feature.
The simple-page
feature allows use of the facilities for
simple page layout described in
The page
feature allows use of the page-sequence and
column-set-sequence flow object classes and related features.
The multi-column
feature allows use of column-sets containing
more than one column.
This implies the page
feature.
The nested-column-set
feature allows use of a column-set-sequence
flow object with a column-set-sequence flow object ancestor.
This implies the multi-column
and page
features.
The general-indirect
feature allows use of the
The inline-note
feature allows use of the inline-note flow
object class.
The glyph-annotation
feature allows use of the glyph-annotation
flow object class.
The emphasizing-mark
feature allows use of the emphasizing-mark
flow object class.
The included-container
feature allows use the included-container
flow object class.
The actual-characteristic
feature allows use of the
The online
feature allows use of the facilities described
in
The font-info
feature allows use of the facilities described
in the
The cross-reference
feature allows the use of the
charset
feature allows the use of the declaration element
type form other than char-repertoire
, features
, and
sgml-grove-plan
.
A flow object tree is an abstract representation of the merger of the
formatting
specification and the source document. The nodes of the flow object tree
are flow objects. Each flow object is of a type called a
Each flow object has a set of ports to each of which an ordered list
of flow objects can be attached.
The set of ports may be empty.
One port of each
flow object that has any ports may be distinguished as the
The concept of an area is used to give semantics to flow objects.
The result of formatting a flow object other than the root flow object
is a sequence of
Display areas are areas that are not directly parts of lines.
A display area has an inherent absolute orientation.
Informally, the box has an arrow on it saying this way up
.
The positioning of display areas is specified by
An area container has a filling-direction specified in
terms of its own coordinate system.
The filling-direction gives a
starting edge and an ending edge which are opposite to each other.
The size of an area container is always fixed in the direction
perpendicular to the filling-direction. This means that the lengths
of the starting and ending edges are always fixed and equal to each other.
The size of an
area container in the filling-direction may be fixed or it may be
specified to grow as necessary to contain the areas with which it is
filled. The display areas with which an area container is filled are
always created so that their size in the direction perpendicular to
the filling-direction is equal to the size of the area container in
that
direction. This is called the
An area container resulting from an included-container-area flow object
may also specify a rotation to be
applied to each of the display areas with which it is to be filled.
The angle of rotation is restricted to be a multiple of 90 degrees.
This rotation is applied to each display area, thus changing the
display area's starting and ending edges.
It is possible to have paragraphs with lines with different
placement directions on the same page without using rotation.
See Figure
The direction between a
display area's starting and ending edges is the
Writing-mode may be left-to-right, right-to-left, or top-to-bottom.
See Figure
Inline areas are areas that are parts of lines.
An inline area has a Informally the box has an arrow pointing from the position point that
says place me so that the arrow lies parallel to the line I'm in
.
Inline areas are positioned to form lines in the following manner.
The writing-mode for a paragraph gives an
The use of kerning modifies this positioning as
illustrated in Figure
The path containing the position points of the inline areas,
which have the direction determined by the paragraph's writing-mode,
is known as the
There are additional steps in the process when the paragraph
uses more than one writing-mode. For example, in
Figure
The alignment mode specified by the alignment
mode property for the
font resource also influences how glyphs are positioned, as illustrated
in Figure
An inline area also has a
A flow object that is to be formatted so as to produce a
sequence of inline areas is said to be The included-container-area flow object described in
A display area can have a number of associated inline areas
called Attachment areas are used for sidelines, line numbers, and marginalia.
Each attachment area is positioned relative to a point on the
display area's
box called the
There is a specification for each attachment area that indicates which such edge of the display area it is attached to. Each attachment area has an alignment point and is positioned so that the attachment area's alignment point is at the same position in the placement direction as the corresponding attachment point on the display area.
Each attachment area has a specified
separation from the display area. If the attachment point is on
the edge that is
at the start in the direction determined by the writing-mode, then the
separation
is the distance in that direction from the attachment area's
alignment point to the attachment point, and the attachment area's
alignment point is its escapement point. If the attachment point
is on the edge that is at the end in the direction determined by the
writing-mode, then
the separation is the distance in that direction from the
attachment point to attachment area's alignment point, and the
attachment area's alignment point is its position point.
A negative value for the separation means that the attachment
point is inside the display area.
The construction-rules in a style-specification
(see
A
The most specific Processing a node has no side-effects; it just returns a value.
A node is processed with respect to a current processing mode.
In addition to named processing modes that are specified
with
A flow object tree is constructed from a source grove by processing the
root node of the source grove in the initial processing mode; the flow
objects specified by the resulting sosofo are added as children of the
root of the flow object tree. The flow objects specified by this
sosofo shall all be unlabeled, and shall either be all of class
scroll, or shall be all of class page-sequence or
simple-page-sequence.
A
The relative specificity of
A
Among style-specification
is more specific than any
Among construction-rules that have the same specificity according to the preceding rules, each of the following is more specific than the next:
A
An
It shall be considered an error if there are two or more equally specific construction rules that match the node.
In addition to
for a node of class sgml-document
, it shall return
(process-children)
.
for a node of class element
,
it shall return
(process-children)
.
for a node with a char
property,
it shall return
(make character)
.
for a node of class attribute-assignment
,
it shall return
(process-children)
.
for any other kind of node,
it shall return
(empty-sosofo)
.
A query
feature.
A
A query
feature is enabled,
within a
The
An element
that matches
the
A element
.
A sgml-document
.
An element
that has a unique identifier equal to
A flow object is
One flow object associated with a node is more closely associated with the node than another flow object associated with the node if:
the one flow object was constructed when the current processing mode was the initial processing mode, and the other flow object was constructed when the current processing mode was some mode other than the initial processing mode, or
the one flow object contains directly or indirectly the other flow object.
If there is a flow object associated with a node that is more closely
associated with the node than any other flow object associated with
the node, then that flow object is the
An object of type sosofo is a specification of a sequence of flow
objects to be added to the flow object tree.
The expression language never operates on flow objects directly;
it only operates on their specifications using
the sosofo data type.
An implementation will use the information in a sosofo
to construct portions of the flow object tree
when a sosofo is returned by a
Each flow object specified by a sosofo may be labeled with a symbol.
A sosofo whose members are all unlabeled is called an
A flow object is labeled by specifying a label:
argument
in a
Returns &schtrue; if
The result of evaluating a (process-children)
shall be used.
Each
A
A keyword that is the name of a characteristic and specifies
the value of that characteristic for the flow object
(unless it is an inherited characteristic that is overridden)
as described in
A keyword force!
:
where
A keyword that is the name of a reference value type and specifies that the constructed flow object has a reference value of that type with the specified value.
use:
specifying a style to be used
for the constructed flow object
as described in
content-map:
specifying the content
map for the
If the content-map:
argument is not specified, then a
content map shall be used that for each non-principal
port of the flow object contains
a list of two symbols both equal to the name of the port.
label:
specifying the label for the constructed
flow object in the result sosofo. This argument shall be a symbol.
Any identifier that is the name of a flow object class is a
This declares
A #f
indicates the initial
unnamed processing mode.
The
Returns an empty sosofo.
Returns a sosofo containing one flow object of class
character for every char in character
as the
char:
argument specifying the
character.
Returns the sosofo that results from appending the sosofos that result
from processing in order the children of the current node. When the
current node is of class sgml-document
, the value of the
document-element
property is treated as being the children of
the node.
Returns the sosofo that results from appending the
sosofos that result from processing in order the children of the
current node after removing any leading and trailing sequence
of nodes that have a char
property with the
input-whitespace
property true.
Returns the sosofo that results from appending the sosofos that result
from processing in order those children of the current node that match
any of …
. A
Returns the sosofo that results from processing the first descendant
in tree order of the current node that matches any of …
. A
Returns the sosofo that results from processing the element in the
same grove as the current node whose unique identifier is cross-reference
feature.
Returns the sosofo that results from appending
the sosofos that result from processing the members of the query
feature.
For each node in query
feature.
Returns the sosofo that results from appending
…
.
Returns a sosofo that results from labeling with
Returns a sosofo that results from discarding from
Returns the sosofo that results from applying
the next most specific construction rule that matches the current node.
If
A call to any of the procedures
it does not occur during the evaluation of a call to
it does not occur during the evaluation of the value of a reference value.
Unless the multi-process
feature is enabled, it shall be an error if
there occur two descending recursive calls both made when the same
node was the current node and when the same processing mode was the
current processing mode.
A style object contains a set of expressions specifying
values for inherited characteristics.
Evaluates to an object of type style.
The following keywords are allowed in the
A keyword that is the name of an inherited characteristic and specifies
the value of that characteristic for the style
(unless overridden)
as described in
A keyword force!
:
where
use:
specifying another style whose characteristics
are to be added to this style
as described in
A
Returns #t if
Returns a style object constructed by merging …
.
The expression for a characteristic in the returned style object is
the expression for that characteristic in the first of the argument
style objects that contains an expression for that characteristic.
Every characteristic is
While a
The expression specifying an inherited characteristic
If a keyword of force!
:
was specified, then the
corresponding expression shall be used.
If the current overriding style contains an expression for
If a keyword of :
was specified, then the corresponding
expression shall be used.
If use:
was specified on the flow object, and the corresponding
style object specifies an expression for
Otherwise, an expression (inherited-
shall be used.
The set of characteristics and corresponding expressions
for a style object is determined in a similar manner
during the evaluation of the
If a keyword of force!
:
was specified, then the
corresponding expression shall be used.
If the current overriding style contains an expression for
If a keyword of :
was specified, then the corresponding
expression shall be used.
If use:
was specified on the flow object, and the corresponding
style object specifies an expression for
For each non-inherited characteristic :
keyword, then the
corresponding expression shall be evaluated and used;
otherwise, the default for that characteristic shall be determined
as specified for that characteristic and flow object class.
The expression specifying the value of a characteristic
in a
When the flow object tree has been sufficiently constructed so that the position of a flow object in the flow object tree has been determined, then the expressions specifying the values for the characteristics applicable to that flow object shall be evaluated.
An expression specifying the value of a characteristic shall be
evaluated with respect to two flow objects, which are referred to as
the
For any inherited characteristic,
The procedure
the flow parent of the specification flow object is a table or a table-part;
the value flow object is a table-cell of that table or table-part or is in a table-cell of that table or table-part; and
the table or table-part contains a table-column flow object
that specifies
In this case,
For each inherited characteristic actual-characteristic
feature.
This procedure shall be used only in the evaluation of an expression
specifying a value for an inherited characteristic. There shall be an
odd number of arguments. All arguments other than the last shall be
interpreted as a series of pairs, where the first member of the pair
is a string specifying a public identifier, and the second member is
any object. If the value flow object is not a character flow object
or is a character flow object that has a script property
that is not #f, then For example, in formatting Japanese text, it is common to use
different fonts for the Katakana, Han, and Latin portions of the
text.
This declares
This declares char:
characteristic of the flow object. The default value
of the property is the value of
This declares the initial value of the inherited characteristic
Facilities in this clause require the page
feature.
It is sometimes necessary to constrain the relative positioning of
flow objects in different streams. For example, a footnote might be
constrained to be on the same page as the corresponding reference, or
a sidenote might be constrained to be at the same vertical position as
its reference. Such constraints are specified by creating a
Creates a synchronization set whose members are the first
member of
a copy of the first flow object of
any remaining flow objects of
a copy of the first flow object of
any remaining flow objects of
The type:
argument is a symbol specifying the type of
constraint on the areas created by formatting the synchronized flow
objects. The min:
and max:
arguments are integers that
further specify the type of constraint. The value of max:
shall
be greater than or equal to that of min:
. min:
and
max:
default to 0. The permitted values for type:
are:
page
specifying that the number of pages separating
the first of the areas created from the first synchronized flow object from
the first of the areas created from the second synchronized flow object
shall not be less than If min:
nor greater than max:
.
The synchronizing flow object shall be a page-sequence flow object or a
column-set-sequence flow object with a page-sequence flow object as an
ancestor. The number of pages from one area to another area is
defined to be the index, among all the pages of the page-sequence,
of the page on which the second area lies minus the index of the
page on which the first area lies.
min:
were -1 and max:
were 2, then the first of the
areas created from the second synchronized flow object would be
constrained to be either on the page before the first of the areas
created from the first synchronized flow object, on the same page as
the first of the areas created from the first synchronized flow
object, on the page after the
first of the areas created from the first synchronized flow object, or
on the next page after that.
spread
specifying that the number of spreads from the first of
the areas created from the first synchronized flow object to the first
of the areas created from second synchronized flow object shall not be
less than min:
nor greater than max:
. The synchronizing
flow object shall be a page-sequence flow object or a
column-set-sequence flow object with a page-sequence
flow object as an ancestor.
column
specifying that the first of the areas created from the
first synchronized flow object and the first of the areas created from
the second synchronized flow object shall be in the same column-subset
and that the number of columns from the first of the areas created
from the first synchronized flow object to the first of the areas
created from the second synchronized flow object shall be between
min:
and max:
. The synchronizing flow object shall be of
class column-set-sequence.
type:
is page
.
Creates a synchronization set containing the first
members of each of the members of
This clause describes the facilities for generating text when the
value of the text to be generated at some point in the flow object
tree may not be known until some formatting has been done.
The facilities in this clause require the Examples of layout-driven generated text include page numbers,
per-page footnote numbers, and dictionary heads.
page
feature.
Each such piece of generated text is represented by an indirect flow
object.
An indirect flow object contains a specification for a list
of flow objects. The result of formatting an indirect flow object is
the result of formatting the list of flow objects it specifies.
Indirect flow objects are created only by using the
procedures in
The generated-object data type is the specification of an
expression-language object. The
Returns #t if
Returns a sosofo containing a single
indirect flow object, the content of which is
an unlabeled sosofo that is
the result of applying the general-indirect
feature.
Returns a sosofo containing a single
indirect flow object whose content is the kernel of
Typically, the generated-object is created by one
of the procedures in
Returns a sosofo containing a single
indirect flow object whose content is the kernel of
format:
is a string specifying the format to use for conversion
of the number as in the
add:
is an integer to be added to the kernel of
multiple:
is an integer. The integers to be converted that are
not multiples of this integer shall be converted to the empty string.
The integer specified in the add:
argument shall be added
to the kernel of
The following procedures all return a generated-object whose kernel is
a number that may depend on the result of formatting. When the
first-area-of-node:
and last-area-of-node:
arguments are
allowed, the number is specified relative to a reference area.
At most one of the first-area-of-node:
and last-area-of-node:
arguments shall be supplied.
If the first-area-of-node:
argument is supplied, then
its value shall be a node, and the reference area
is the first area resulting from the primary flow object
of that node.
If the last-area-of-node:
argument is supplied, then
its value shall be a node, and the reference area
is the last area resulting from the primary flow object
of that node.
One of first-area-of-node:
or last-area-of-node:
shall be supplied
unless either:
there is a current node when the procedure is evaluated, in which case the reference area is the first area resulting from the primary flow object of the current node, or
the procedure is used within a
the procedure is used in the construction of a decoration area, in which case the reference area is the decorated area.
Although a column is not an area, in this clause it is treated as an area, and an area is deemed to be in a particular column if it is in the column-set of that column and if that column is the first column in the column-set that the area spans.
It shall be an error to use one of the procedures defined in this clause in such a way that it requires the primary flow object of a node that has no primary flow object.
Returns a generated-object whose kernel is the number of pages
before or the same as the reference area.
Returns a generated-object whose kernel is the number of pages
before
or the same as the reference area that has the same category as the
page that is or that contains the reference area.
Returns a generated-object whose kernel is the number of pages that:
are before or contain the first of the areas generated by the indirect-sosofo in which the generated-object is used, and
contain areas from the flow object that corresponds to
This procedure could be used within a table header or footer.
Returns a generated-object whose kernel is the total number of
pages that contain an area from the primary flow object associated with
Returns a generated-object whose kernel is the number of
columns in the same column-subset as the reference area
that is before or the same as the reference area.
Returns a generated-object whose kernel is the number of footnote
areas
that are before or the same as the reference area and are descendants
of the nearest ancestor of the reference area that is of the type
specified by page
,
page-region
, or column
. For this purpose, a footnote area
is an area which is the first in the sequence of areas produced from a
flow object whose stream is directed into the footnote zone of a
column-set-sequence flow object.
Returns a generated-object
whose
kernel is the number of line areas that are before or the same as the
reference area and are descendants of the nearest ancestor of the
reference area that is of the type specified by page
, page-region
,
column
, or paragraph
.
Line areas from paragraphs for which the
numbered-lines?:
characteristic was #f shall not be counted.
A flow object may have a number of named objects associated with it
called
A
Each of these procedures may be used only in a
When the procedures are used in the construction of a decoration area,
the associated-areas list contains just the decorated area. When the
procedures are used in a
A flow object is
it has a reference value
it has an ancestor with a reference value inherit:
is specified and is not #f.
The
is one of the areas in the associated-area list, or
is contained in one of the areas in the associated-area list
and returns a generated-object whose kernel is the value of the relevant
reference value for that flow object.
When a flow object has more
than one stream, then each stream is searched separately. If
the search finds flow objects in more than one stream,
then the flow object that is earlier
in the layout order of the area is returned. If the search
finds no flow object,
the value of the default:
argument is returned,
which shall be a generated-object.
This procedure might be used in the default:
argument is returned, which
shall be a generated-object.
default:
argument
for the
unique:
is not #f, then duplicate
(in the sense of
An object of type length-spec
specifies a length as a linear
combination of other lengths that may not be currently known.
Whenever a value of type length-spec is required, a length (a
quantity of dimension 1) may always be used.
These procedures behave in the same way as their counterparts on
quantities, except that they shall return a length-spec if any of their
arguments is a length-spec (as opposed to just a length).
This procedure shall be used only in the evaluation of an expression specifying a value for a characteristic. The value flow object shall be a displayed flow object. It returns a length-spec specifying the display-size of the value flow object.
Facilities in this clause require the page
feature.
An area container may be decorated
with one or more other areas called
Returns an object of type decoration-area.
The
placement-point-x:
is a length-spec specifying the distance
between the bottom left corner of the decorated area and the placement
point of the decoration area in the x-direction of the decorated area.
placement-point-y:
is a length-spec specifying the distance
between the bottom left corner of the decorated area and the placement
point of the decoration area in the y-direction of the decorated area.
placement-direction:
is one of the symbols
left-to-right
, right-to-left
, or top-to-bottom
giving the placement direction of the decoration
area relative to the orientation of the decorated area.
In this case, the line-progression direction of the decoration area
is the placement direction of the decorated area.
placement-point-x:
and placement-point-y:
arguments of a
decoration-area.
Objects of type display-space are used to describe the desired space
between displayed areas.
Returns &schtrue; if
Returns an object of type display-space. This allows spaces to disappear at page or column breaks.
min:
and max:
are length-specs
specifying the minimum and maximum size of the space.
These both default to the nominal size.
priority:
is either an integer or the symbol force
.
The default is 0.
Higher integers indicate higher priorities.
When two display-spaces are adjacent, then if one has a higher
priority than the other, the minimum, nominal, and maximum values
from the higher priority space shall be used, and the
lower priority space shall be ignored.
If the priorities are equal, but one display-space has a higher nominal
value than the other, then the minimum, nominal, and maximum values
from the space with the higher nominal value shall be used, and
the other space shall be ignored.
Otherwise, the priorities and nominal values are both equal;
in this case, that nominal value, the lesser of the maximum values,
and the greater of the minimum values shall be used.
A priority of force
is considered greater than any other
priority.
However, if both priorities are force
, then the
nominal, minimum, and maximum values shall be added together. The
conditional:
argument is a boolean; if true, the space shall be
discarded if it starts an area. The default is #t.
Objects of type inline-space are used to describe the desired space
between inline areas.
Returns &schtrue; if
Returns an object of type inline-space.
min:
and max:
are length-specs
specifying the minimum and maximum size of the space.
These both default to the nominal size.
Glyph identifiers are represented by objects of type glyph-id.
Returns a glyph-id with public identifier
An #A
and the digits.
An
where
An object of type
Returns #t if
Returns an object of type glyph-subst-table.
Returns the glyph-id that substitutes for
Facilities in this clause require the font-info
feature.
Returns the value of a property in a font resource. The
arguments name:
, family-name:
, weight:
,
posture:
, structure:
, or proportionate-width:
select
the font in the same manner as the corresponding characteristics, with
a prefix of font-
added, of a character flow object. The
size:
argument is a length specifying the size of the font,
which shall be supplied if the ISO/IEC 9541-1 data type of the value is
REL-RATIONAL.
a string, or
a list of three strings and an object.
The property value to be returned shall be determined as follows.
Initially,
the active property-list is the font-resource property-list. Each
member of
If the member is a string, then it shall set the property-list to the property-list that is the value of the property of that name in the active property-list.
Otherwise, the active property-list shall be searched for a property whose name is equal to the first string. The value of the property shall be a property-list. The active property-list shall be set to the value of the property in that list whose name is equal to the second string and whose value is a property-list that contains a property whose name is equal to the third string and whose value is equal to the fourth member of the list.
Finally, the value of the property whose name is
The optional writing-mode:
argument shall have one of the values
left-to-right
, right-to-left
, or top-to-bottom
.
The value left-to-right
is equivalent to prefixing
The object returned shall depend on the data type of the value of the property as defined in ISO/IEC 9541-1:
for a BOOLEAN property, a boolean value shall be returned.
for a STRUCTURED-NAME, a string containing the ISO 9070 canonical representation shall be returned.
for MATCH-STRING or MESSAGE, a string shall be returned.
for OCTET, INTEGER, CARDINAL, or CODE, a number shall be returned.
for REL-RATIONAL, a length shall be returned which is obtained by scaling the font size.
for ANGLE, a number shall be returned corresponding to the angle in degrees.
for an OCTET-STRING, a list of integers shall be returned.
for a value-list or an ordered-value-list, a list containing the result of converting the members of the value-list or ordered-value-list shall be returned.
An address object shall be used as the destination of a hypertext link.
An address object represents the address of one or more
objects.
Returns #t if
Returns #t if the
Returns #t if
Returns an object of type address.
The current node shall be an element conforming to the
clink architectural form as defined in ISO/IEC 10744.
The address identifies the linkend of the current node.
The
Returns an address object representing the current node.
The
Returns an address object representing the nodes in External procedures may be used to allow other addressing
mechanisms.
query
feature.
A color shall always be specified with respect to a color-space.
Returns an object of type color-space. The
Returns an object of type color. This is normally black.
This International Standard defines the following color-space families:
ISO/IEC 10179:1996//Color-Space Family::Device Gray
ISO/IEC 10179:1996//Color-Space Family::Device RGB
ISO/IEC 10179:1996//Color-Space Family::Device CMYK
ISO/IEC 10179:1996//Color-Space Family::Device KX
ISO/IEC 10179:1996//Color-Space Family::CIE LAB
ISO/IEC 10179:1996//Color-Space Family::CIE LUV
ISO/IEC 10179:1996//Color-Space Family::CIE Based ABC
ISO/IEC 10179:1996//Color-Space Family::CIE Based A
The semantics of each of these color-space families is that of
the corresponding color-space family in ISO/IEC 10180.
The additional arguments required by
If the ISO/IEC 10180 type is a number, then the argument type shall be a number.
If the ISO/IEC 10180 type is a procedure, then the argument type shall be a procedure.
If the ISO/IEC 10180 type is a reference to a vector of numbers, then the argument type shall be a list of numbers of the same length.
If the ISO/IEC 10180 type is a reference to a vector of procedures, then the argument type shall be a list of procedures of the same length.
The number and type of the additional arguments required by the
A color specified in a color-space with a procedure argument may be
transformed in a device-independent manner to a color specified in a
color-space without any procedure arguments. There is, therefore, no
need when implementing the style language with output to an ISO/IEC 10180
device to be able to compile an arbitrary expression into the language
defined in ISO/IEC 10180.
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.
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.
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.
It will, therefore, cause a line break in a paragraph even if the
display-group has no content.
The following characteristics are applicable:
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.
The facilities in this clause require the simple-page
feature.
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.
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.
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.
A simple-page-sequence flow object has the following characteristics:
page-width:
is a length specifying the total width of the page.
The initial value is system-dependent.
page-height:
is a length specifying the total height of the page.
The initial value is system-dependent.
left-margin:
is a length specifying the left margin.
The initial value is 0pt.
right-margin:
is a length specifying the right margin.
The initial value is 0pt.
The header line is within the top margin.
top-margin:
is a length specifying the distance from the top of
the page to the top of the area container used for the content of the
simple-page-sequence.
The initial value is 0pt.
The footer line is within the bottom margin.
bottom-margin:
is a length specifying the distance from the
bottom of the page to the bottom of the area container used for the
content of the simple-page-sequence.
The initial value is 0pt.
header-margin:
is a length specifying the distance from the top
of the page to the placement path for the header line.
The initial value is 0pt.
footer-margin:
is a length specifying the distance from
the bottom of the page to the placement path for the footer line.
The initial value is 0pt.
left-header:
is an unlabeled sosofo containing only
inline flow objects that is aligned with the left margin of the page
in the header line.
This characteristic is not inherited.
The default value is an empty sosofo.
center-header:
is an unlabeled sosofo containing only inline
flow objects that is centered between the left and right margins of
the page in the header line. This characteristic is not inherited.
The default value is an empty sosofo.
right-header:
is an unlabeled sosofo containing only inline
flow objects that is aligned with the right margin of the page in the
header line. This characteristic is not inherited. The default value
is an empty sosofo.
left-footer:
is an unlabeled sosofo containing only inline flow
objects that is aligned with the left margin of the page in the footer
line.
This characteristic is not inherited. The default value is an empty
sosofo.
center-footer:
is an unlabeled sosofo containing only inline
flow objects that is centered between the left and right margins of
the page in the footer line. This characteristic is not inherited.
The default value is an empty sosofo.
right-footer:
is an unlabeled sosofo containing only inline
flow objects that is aligned with the right margin of the page in
footer line. This characteristic is not inherited. The default value
is an empty sosofo.
writing-mode:
is one of the symbols left-to-right
or
right-to-left
. This determines the writing-mode of the header
and footer lines. The initial value is left-to-right
.
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.
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.
This is intended to handle cross references in conjunction with
A page-sequence flow object is formatted to produce a sequence of page areas. The structure and positioning of the page areas shall be controlled by page-models.
A page-sequence flow object has the following characteristics:
initial-page-models:
is a list of page-models
used for the initial pages.
The initial value is the empty list.
repeat-page-models:
is a list of page-models
used for pages after the initial pages.
The initial value is the empty list.
force-last-page:
is either #f or one of the symbols
front
or back
specifying the required type of the last
page of the page-sequence. If the last page is not of the required
type, then an additional blank page shall be generated. A value of #f
indicates that the last page may be of either type.
The initial value is #f.
force-first-page:
is either #f or one of the symbols
front
or back
specifying the required type of the
first page of the page-sequence. If the value is not #f, then the
parent flow object shall be of type root; if there is a preceding flow
object, then it shall be of type page-sequence. If the value of the
force-last-page:
characteristic of the preceding page-sequence
is not #f, it shall have the opposite type to the specified value of
the characteristic. If the last page of the preceding
page-sequence is not of the opposite type to the value specified for
this characteristic, then the preceding page-sequence shall have an
additional blank page added. If there is no preceding flow object and
the value is not #f, then it shall be an error if the specified
type of the first page is not the actual type
as determined by the first-page-type:
characteristic.
The initial value is #f.
This information makes it possible to determine which pairs
of pages are spreads.
first-page-type:
is either one of the symbols front
or
back
indicating that the first page of the page-sequence is a
front or back page, or the symbol parent
indicating that the
type of the first page shall be determined by the parent flow object.
The initial value is parent
. A value of parent
shall be
allowed only if the parent flow object is the root flow object. In
this case, if there is a preceding flow object, then it shall be of
type page-sequence, and the first page shall be a front or back page
if the last page of the preceding page-sequence was a back
or front page; if there is no preceding flow object, then the first
page shall be a front page. This characteristic does not cause
additional pages to be generated; it merely states that this page will
be of the specified type when it is printed and bound. The value
shall be parent
unless the value of the
force-first-page:
characteristic is #f.
blank-back-page-model:
is a page-model that shall be used
for the
final page if it was a back page and was required only because of the
force-last-page:
or force-first-page:
characteristics, or
it is #f if the normal page-model should be used for the final page. The
initial value is #f.
blank-front-page-model:
is a page-model that shall be used
for
the final page if it was a front page and was required only because of
the force-last-page:
or force-first-page:
characteristics, or it is #f if the normal page-model should be used for the
final page. The initial value is #f.
justify-spread?:
is a boolean specifying whether the bottom
of each page in a spread shall be justified.
The initial value is #f.
page-category:
specifies the category of the page areas resulting
from this page-sequence flow object.
It may be any expression language object for which the
binding-edge:
is one of the symbols left
, right
,
top
, or bottom
specifying the edge of a front page to
be bound. This affects whether a side of the page is considered
to be on the inside or outside. The initial value is left
.
There shall be an applicable page-model for every page produced
by the page-sequence.
The ports of a page-sequence flow object are determined by the page-models.
A page-model is the specification of a set of possible hierarchies of
areas.
Returns #t if
define-page-model
binds
The top-level area is the page area. The page area contains a number
of sub-areas called
A Included-container-area flow objects may use a different filling
direction.
It is possible to have display areas with different placement
directions on the same page using multiple page-regions, as
illustrated in Figure
A
If there is no (flow #f)
is
the default.
If a
A #f
specifies
the principal port.
A
A
The
The
The
The
The
The
The left-to-right
, right-to-left
, or top-to-bottom
specifying the filling-direction
of the area container.
If the filling-direction is not specified on the page-region, it shall be
inherited from the page-model. It shall be an error if it is not
specified on either the page-region or the page-model.
The start
,
end
, center
, or justify
specifying the alignment
of the child areas within the area container in the filling-direction
of the area container.
The default is start
.
A column-set-sequence flow object is formatted to produce a sequence of column-set areas. A column-set area is a display area. A column-set area is produced by creating and filling an area container. A column-set area contains a set of parallel columns. Typically, column-set areas may be used to fill page-regions; however, column-set areas may also be used to fill other column-set areas. The structure and positioning of each column-set area shall be controlled by the column-set-model to which it conforms. A column-set-sequence flow object shall only be displayed.
A column-set-sequence has the following characteristics.
column-set-model-map:
is a list of lists
each with two members, the
first a page-model and the second a
column-set-model; whenever an area from this column-set-sequence is
placed in an area whose nearest ancestor of type page-region uses the
specified page-model, then the specified column-set-model shall be
used.
The initial value is the empty list.
column-set-model:
is a column-set-model specifying the default
column-set-model to use if none of the column-set-models
specified in the column-set-model-map:
characteristic are
applicable or #f if there is no default column-set-model.
If the value is #f, then it shall be an error if a result area
is to be placed within a page-region whose page-model is
not listed in the value of the column-set-model-map:
characteristic.
The initial value is #f.
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.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial 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.
A column-set-sequence flow object has a port for each
port listed in a
A column-set-model specifies the possible hierarchy of areas for each
column-set. For some possible examples of column-sets and column-subset
configurations, see Figures
The top-level area in the hierarchy is the column-set area.
A column-set area shall have a filling-direction. If the
The area container that produces the column-set shall be filled in a more complicated way than normal area containers. Areas are placed in the column-set area in such a way that they satisfy a number of different constraints.
The most basic constraint is that the areas shall not overlap. This constraint does not apply to decoration areas.
There is a partial ordering defined on the areas that have been placed
in a column-set area. This is called the The layout order corresponds to the order in which the
areas should be read.
A fundamental constraint on the filling of an area container is that if two areas placed in the column-set area container come from the same stream, then they shall be placed so that their layout order is consistent with their order in the stream.
The column-set area is divided geometrically in a direction parallel
to the filling-direction into a number of columns.
When an area is said to be divided in some direction,
this means that it is divided in such a way that the dividing
line is in that direction.
A column is not an area container. Each column has an extent that is fixed in the direction perpendicular to the filling-direction.
Each column is a member of exactly one column-subset. The layout
order of columns in a column-subset is the order of the
It is for this reason that the layout order is a partial order.
A column-subset is defined to be
Each area to be placed in a column-set area shall be associated with a
single column-subset. If the filling-direction of the column-set area
is top-to-bottom, each area that is placed in the
column-set area shall be placed so that the left edge is aligned with
the left edge of a column in the column-subset and the right edge is
aligned with the right edge of a column in the same column-subset. If
the filling-direction of the column-set area is left-to-right or
right-to-left, each area that is placed in the column-set area shall be
placed so that its top edge is aligned with the top edge of a column
in the column-subset and its bottom edge is aligned with the bottom
edge of a column in the same column-subset.
An area may span
more than one column only if the column-subset is spannable. The number
of columns in the column-subset that an area spans shall be equal to the
value of the span:
characteristic of the flow object from which
the area comes.
An area that is to be placed in a column-set area shall be created in
such a way that its size in the direction perpendicular to the filling
direction is such that it exactly spans the required number of
columns. In other words, the display-size of the area shall be equal
to the distance between one edge
of the
first column it spans and the opposite edge of the last column it spans.
This is an exception to the general principle that an area to be
placed in an area container is created so that the area's size in the
direction perpendicular to the area's placement direction is equal to
the size of the area container in the direction perpendicular to the
area container's filling-direction.
Each area that is to be placed in a column-set area container is
labeled with a top-float
, body-text
, bottom-float
, and footnote
.
An area labeled with one zone shall be positioned so that it precedes,
in the filling-direction, an area that is labeled with a zone that is
later in the list, unless there is no column that is spanned by both
areas. For example, see Figure
An area labeled with the footnote zone shall span exactly one column.
Full-width footnotes in a multi-column layout may be achieved using
a nested-column-set.
An area that spans more than one column may span either
span-weak?:
characteristic on the flow object
from which the area comes.
An area that spans more than one column strongly is defined to follow in
the layout order any areas that:
are in the same column-subset as the area,
precede the area geometrically in the filling-direction,
have a span that is completely included in the span of the area, and
are labeled with the same zone as the area.
An area that spans more than one column weakly is defined to follow in the layout order exactly those areas that it would follow if it occupied only the first of the columns that it spans.
Two or more column-subsets may be A sequence of columns containing sidenotes is usually tied to the
sequence of columns containing the text to which the sidenotes refer.
When the spanning area is synchronized using the
whose corresponding column in the other column-subset is spanned by the spanning area, and
which is not covered by the spanning area.
A
Returns #t if
The
For each column-subset in the column-set-model, there shall be a
A top-float
and bottom-float
.
The
The
The
The
The
The
The
The
forward
specifying that as columns progress in the
forward direction their length shall not increase,
backward
specifying that as columns progress in the
backward direction their length shall not increase,
The
If the column-set filling-direction is top-to-bottom,
then the
A
A This may be used, for example, with sidenotes.
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.
Typically, a break implies that a new line is to be started.
The following characteristics are applicable:
lines:
is a symbol specifying how the content of
the paragraph shall be broken into lines in the formatted output,
as follows:
wrap
specifying that lines shall be broken so that they
fit in the available space.
asis
specifying that lines shall be broken
only after character flow objects
for which the record-end?:
characteristic is true.
asis-wrap
specifying that lines shall be broken
after character flow objects
for which the record-end?:
characteristic is true,
and as necessary to make lines
fit in the available space.
asis-truncate
specifying that lines shall be broken
only after character flow objects
for which the record-end?:
characteristic is true,
and that lines that do not fit the in the available space
shall be truncated.
This is useful in tables when the none
specifying that lines shall not be broken at all.
table-auto-width
feature is present to ensure that the width of a column is
made large enough so that the content of a cell fits on a single
line.
In all cases, line breaks shall also be allowed where explicitly
specified with the break-before:
or break-after:
characteristics.
The initial value is wrap
.
asis-truncate-char:
is either #f or a char object that determines
the glyph to be inserted when the lines:
characteristic
has the value asis-truncate
and a line is truncated.
The initial value is #f.
asis-wrap-char:
is either #f or a char object that determines
the glyph to be inserted at the end of a line when the lines:
characteristic has the value asis-wrap
and the line is broken
other than after a character flow object for which the
record-end?:
characteristic is true.
The initial value is #f.
asis-wrap-indent:
is a length-spec giving an indent to be added
to the start-indent when the lines:
characteristic has the
value asis-wrap
for a line following a break other than after a
character flow object for which the record-end?:
characteristic
is true.
The initial value is #f.
first-line-align:
is either #f, #t, or a char object. If it is
not #f, then the quadding:
and last-line-quadding:
characteristics are ignored for the first line of the paragraph, and the
first line shall be aligned using an alignment point in the line. If
the value is a char object, then the alignment point shall be the
position point of the first area produced by the first occurrence on
the line of a character flow object with a char:
characteristic
equal to that char object; otherwise, the alignment point shall be the
position of the first alignment-point flow object in the line. If
alignment-point-offset:
is not #f, then the first line of the
paragraph shall be aligned so that the percentage of the line length
(that is, the display-size less the applicable start and end indents)
before the alignment point is equal to the value of
alignment-point-offset:
. If alignment-point-offset:
is
#f, then the paragraph is an table-auto-width
feature shall be enabled. The initial value is
#f.
alignment-point-offset:
is either #f or a number between 0 and
100 specifying the percentage of the line length (that is, the
display-size less the start and end indents) before the alignment point. The
initial value is 50.
ignore-record-end?:
is a boolean specifying whether a
record-end shall be ignored.
If this characteristic is true,
then a character with the record-end?
property true
shall be ignored.
The initial value is #f.
expand-tabs?:
is either #f or a strictly positive integer
specifying the tab interval. When a tab interval is specified, each
character flow object that has the input-tab?:
characteristic
true shall be treated as equivalent to the smallest
strictly positive
number of spaces that when added to the number of character flow
objects following the last preceding record-end character flow object
shall be a multiple of the tab interval.
The initial value is 8.
line-spacing:
is a length-spec
giving the normal spacing between the placement paths of lines
in the paragraph as described in
line-spacing-priority:
is either an integer or the symbol
force
specifying the priority of any conditional space
before the line.
This shall be interpreted in the same manner as the priority:
argument
for the display-space
procedure.
The initial value is 0.
min-pre-line-spacing:
is a length-spec specifying
the minimum size of
the line in the placement direction before the placement path
as described in
min-post-line-spacing:
is a length-spec
specifying the minimum size of
the line in the placement direction after the placement path
as described in
min-leading:
is either #f or a length-spec specifying the minimum
space between the line areas in the placement direction
as described in
first-line-start-indent:
is a length-spec giving an indent to be
added to the start-indent for the first line. The length may be
negative.
The initial value is 0pt.
last-line-end-indent:
is a length-spec giving an indent to be
added to the end-indent for the last line. The length may be
negative.
The initial value is 0pt.
hyphenation-char:
is a char that is used to determine the
glyph that is inserted when hyphenation is performed.
The characteristics of the character flow object preceding the
hyphenation point shall determine the mapping of the character
to a glyph, as well as the font resource and font-size of the glyph.
The initial value is #\-
(the hyphen character).
hyphenation-ladder-count:
is a strictly positive integer specifying the
maximum number of consecutive lines ending with the same glyph
as the glyph determined by the value of the hyphenation-char:
characteristic,
or #f indicating that there is no limit. The initial value is #f.
hyphenation-remain-char-count:
is a positive integer
specifying the minimum number of characters in a hyphenated word
before the hyphenation character. This is the minimum number of
characters in the word left on the line ending with the hyphenation
character. The initial value is 2.
hyphenation-push-char-count:
is a positive integer
specifying the minimum number of characters in a hyphenated word after
the hyphenation character. This is the minimum number of characters
in the word pushed to the next line after the line ending with the
hyphenation character. The initial value is 2.
hyphenation-keep:
is either #f or one of the following symbols:
spread
means that both parts of a hyphenated word
shall lie within a single spread.
page
means that both parts of a hyphenated word
shall lie within a single page.
column
means that both parts of a hyphenated word
shall lie within a single column.
The initial value is #f.
The determination of a word is system-dependent.
hyphenation-exceptions:
is a list of strings. Each string is a
word which may contain hyphen characters, #\-
, indicating where
hyphenation may occur. If a word to be hyphenated occurs in the list,
it may only be hyphenated in the specified places.
The initial value is the empty list.
line-breaking-method:
is #f or a string specifying a public
identifier for the line-breaking-method to be used for this
paragraph.
The initial value is #f.
Typically, the line-composition-method:
is #f or a string specifying a public
identifier for the line-composition-method to be used for this
paragraph.
The initial value is #f.
line-composition-method:
uses characteristics
declared using an
implicit-bidi-method:
is #f or a string specifying a public
identifier for the method to be used for implicitly determining the
directionality of the content of the paragraph. This includes both
the writing-mode of characters, which, when this characteristic is #f,
is specified with the writing-mode characteristic, and how portions of
content with a common writing-mode are nested within each other,
which, when this characteristic is #f, is specified with embedded-text
flow objects. It is part of the semantics of the method which
characteristics of character flow objects, if any, it uses.
A method may be specific to a particular character repertoire, in
which case, it may not make use of any characteristics. It may be
part of the semantics of a method for certain glyph substitutions to
be applied depending on the writing-mode that is determined for a
character, and possibly also on characteristics of the character.
The initial value is #f.
glyph-alignment-mode:
is one of the symbols base
,
center
, top
, bottom
, or font
specifying the
alignment mode to be used for glyphs. font
means that the
nominal alignment mode of the font in the flow object's writing-mode
should be used.
The initial value is font
.
ISO/IEC 10180 defines a mandatory font set for interchange
comprising the font families font-family-name:
is either #f, indicating that any font family
is acceptable, or a string giving the font family name property of
the desired font resource.
The initial value is iso-serif
.
iso-serif
, iso-sanserif
,
and iso-monospace
.
This characteristic is applicable when the glyph-alignment-mode:
is font
or when min-pre-line-spacing:
or min-post-line-spacing:
are
#f.
font-weight:
is either #f, indicating that any font weight is
acceptable, or one of the symbols not-applicable
,
ultra-light
, extra-light
, light
,
semi-light
, medium
, semi-bold
, bold
,
extra-bold
, or ultra-bold
, giving the weight property of
the desired font resource. The initial value is
medium
.
This characteristic is applicable when the glyph-alignment-mode:
is font
or when min-pre-line-spacing:
or min-post-line-spacing:
is
#f.
font-posture:
is either #f, indicating that any posture is
acceptable,
or one of the symbols not-applicable
, upright
,
oblique
, back-slanted-oblique
, italic
, or
back-slanted-italic
, giving the posture property of the desired
font resource. The initial value is upright
.
This characteristic is applicable when the glyph-alignment-mode:
is font
or when min-pre-line-spacing:
or min-post-line-spacing:
is
#f.
font-structure:
is either #f, indicating that any structure is
applicable, or one of the symbols not-applicable
, solid
,
or outline
. The initial value is solid
.
This characteristic is applicable when the glyph-alignment-mode:
is font
or when min-pre-line-spacing:
or min-post-line-spacing:
is
#f.
font-proportionate-width:
is either #f, indicating that any
proportionate width is acceptable, or one of the symbols
not-applicable
, ultra-condensed
, extra-condensed
,
condensed
, semi-condensed
, medium
,
semi-expanded
, expanded
, extra-expanded
, or
ultra-expanded
. The initial value is
medium
.
This characteristic is applicable when the glyph-alignment-mode:
is font
or when min-pre-line-spacing:
or min-post-line-spacing:
is
#f.
font-name:
is either #f, indicating that any font name is
acceptable, or a string which is the public identifier for the font
name property of the desired font resource.
When the value is a string, the values of the
font-family-name:
, font-weight:
, font-posture:
,
font-structure:
, and font-proportionate-width:
characteristics are not used in font selection.
The initial value is #f.
This characteristic is applicable when the glyph-alignment-mode:
is font
or when min-pre-line-spacing:
or min-post-line-spacing:
is
#f.
font-size:
is a length specifying the body size to which
the font resource should be scaled.
The initial value is 10pt.
This characteristic is applicable when min-pre-line-spacing:
or
min-post-line-spacing:
is #f.
numbered-lines?:
is #t if the lines produced by this
paragraph shall be considered for the purposes of line numbering,
and #f otherwise.
The initial value is #t.
The sosofo may include indirect flow objects that refer to the line's
number by using the The rules for the positioning of an attachment area mean that line
numbers are usually positioned so that the edges nearest the line
are aligned. Different alignments can be achieved by using the
line-field flow object class.
line-number:
is either #f or an unlabeled sosofo containing
only inline flow objects.
If it is a sosofo, then for each line in the paragraph, the sosofo is
formatted to produce a single inline area that is positioned as an
attachment area for the line. See
line-number-side:
is one of the symbols start
,
end
, spread-inside
, spread-outside
,
page-inside
, or page-outside
specifying the side of the
line for the attachment specified with the line-number:
characteristic. A value of spread-inside
or
spread-outside
shall be allowed only if the flow object has
an ancestor of class page-sequence.
A value of page-inside
or page-outside
shall be allowed
only if the flow object has an ancestor of column-set-sequence.
line-number-sep:
is a length-spec specifying the separation
for the attachment specified with the line-number:
characteristic.
quadding:
is one of the symbols start
, end
,
spread-inside
, spread-outside
,
page-inside
, page-outside
,
center
, or justify
specifying the alignment of lines other than the last line in the
paragraph in the direction determined by the writing-mode.
A value of spread-inside
or
spread-outside
shall be allowed only if the flow object has an
ancestor of class page-sequence.
A value of page-inside
or page-outside
shall be allowed
only if the flow object has an ancestor of column-set-sequence.
The initial value is start
.
last-line-quadding:
is one of the symbols
relative
, start
,
end
,
spread-inside
, spread-outside
,
page-inside
, page-outside
,
center
, or
justify
specifying the alignment of the last line of the
paragraph in the direction determined by the writing-mode.
This shall apply also to any line in the paragraph that immediately
precedes a break.
A value of relative
means that the value of the quadding:
characteristic shall be used, except when that value is justify
, in
which case, a value of start
shall be used.
A value of spread-inside
or
spread-outside
shall be allowed only if the flow object has an
ancestor of class page-sequence.
A value of page-inside
or page-outside
shall be allowed
only if the flow object has an ancestor of column-set-sequence.
The initial value is relative
.
last-line-justify-limit:
is a length-spec specifying the
maximum amount of free space in the last line that shall cause the
last line to be justified rather than aligned as specified by the
last-line-quadding:
characteristic. The initial value is 0.
justify-glyph-space-max-add:
is a length-spec specifying
the maximum space that may be added between glyphs in order
to justify a line.
The initial value is 0pt.
justify-glyph-space-max-remove:
is a length-spec specifying
the maximum space that may be removed between glyphs in order
to justify a line.
The initial value is 0pt.
hanging-punct?:
is a boolean specifying whether the paragraph
shall be formatted with the punctuation characters hanging into the
margin or gutter of a column.
The initial value is #f.
widow-count:
is a positive integer specifying the minimum
number of lines of the paragraph that shall be kept together at the
beginning of an area. If the widow-count:
is
orphan-count:
is a positive integer specifying the minimum
number of lines of the paragraph that shall be kept together at the
end of an area. If the orphan-count:
is
language:
is #f or a symbol specifying the ISO 639 language code
in upper-case.
This affects line composition in a system-dependent way.
The initial value is #f.
country:
is #f or a symbol specifying the ISO 3166 country
code in upper-case.
This affects line composition in a system-dependent way.
The initial value is #f.
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.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
This controls the orientation of the placement path of the lines.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This applies only to lines from the paragraph itself.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This applies only to lines from the paragraph itself.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial 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.
The line-progression direction for inline areas in the paragraph is the placement direction of the paragraph.
The size of the line areas produced by the paragraph shall be
min-pre-line-spacing:
before the placement path and
min-post-line-spacing:
after the placement path. If
min-leading:
is not #f, the size of the line shall be increased
to cover all the areas in the line.
If the previous area is a line,
then conditional space shall be added, if necessary,
before the line so that the total distance between the previous
line's placement path and this placement path is the value of
the line-spacing:
characteristic.
If the previous area is not a line, then
conditional space shall be added, if necessary,
before the line so that the total distance between the end
of the previous area and this placement path is the value of
the line-spacing:
characteristic less the value
of the min-post-line-spacing:
characteristic.
If min-leading:
is not #f, then
additional conditional space shall be added, if required, to make the
space between the previous area and this one no less than the value of
min-leading:
.
The conditional space has the priority specified by the
line-spacing-priority:
characteristic.
Paragraph-break flow objects can be used to make a paragraph
flow object 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.
The paragraph-break flow object inherits from its containing
paragraph flow object in the usual way.
The It is recommended that paragraph-break flow objects be used only if
there is no other way of specifying the desired formatting.
first-line-start-indent:
characteristic is applicable to the line
following a paragraph-break flow object, and the
last-line-end-indent:
characteristic is applicable to the line preceding a
paragraph-break flow object.
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 a line-field area cannot fit in this width, then
the area grows to accommodate the content and,
if the line-field occurs in a paragraph,
there shall be a break after the line-field.
It has a single principal port.
It has the following characteristics:
field-width:
is a length-spec specifying the width of the
area produced by the flow object.
The initial value is 0pt.
field-align:
is one of the symbols start
, end
, or
center
specifying the alignment of the contents of the field.
The initial value is start
.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
A line-break shall be allowed immediately before and after a line-field used in a paragraph.
Use of this flow object requires the sideline
feature.
A sideline flow object is used to contain flow objects that
have an attachment area (see Sidelines are often used to mark changes.
This is illustrated in Figure
A sideline flow object has the following characteristics:
sideline-side:
is one of the symbols start
, end
,
both
, spread-inside
, spread-outside
,
page-inside
, or page-outside
, specifying the side of the
line area for the sideline attachment. A value of
spread-inside
or spread-outside
is allowed only if the
flow object has an ancestor of class page-sequence. A value of
page-inside
or page-outside
is allowed only if the flow
object has an ancestor of column-set-sequence. A value of both
means that there shall be a sideline attachment on both sides of
the line area containing the text.
sideline-sep:
is a length-spec specifying the separation for
the sideline attachment.
A negative value is allowed.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
line-cap:
is one of the symbols butt
,
round
, or square
specifying the cap style for the line.
The initial value is butt
.
line-dash:
is a list of one or more lengths that
specifies the dash pattern of the line. The first length specifies
the number component of the CurrentDashPattern graphics state variable
in ISO/IEC 10180. The remaining lengths specify the vector component
of the CurrentDashPattern graphics state variable.
The initial value is a list containing the length 0pt.
line-thickness:
is a length that specifies the
thickness of the line or lines.
The initial value is 1pt.
line-repeat:
is a strictly positive integer that specifies
the number of parallel lines to be drawn. For example, a value of 2
indicates a double line.
The initial value is 1.
line-sep:
is a length that gives the distance between
the centers of parallel lines.
The initial value is 1pt.
Sidelines on consecutive areas in a single area container which have no space between them should be drawn as a single line.
Use of this flow object requires the page
feature.
An anchor flow object is atomic and serves only as a flow object
to be synchronized. It may be either inlined or displayed.
If inlined, it produces a single area with zero size in the escapement
direction. If displayed, it produces a single area with zero size
in the placement direction.
The resulting area will be kept with the first area resulting
from the flow object that follows unless
the anchor-keep-with-previous?:
characteristic is true.
Anchor flow objects have the following characteristics:
anchor-keep-with-previous?:
is a boolean specifying whether the
resulting area shall be kept with the last area of the previous flow
object instead of the first area resulting from the following flow object.
The initial value is #f.
display?:
is a boolean specifying whether the flow object
is displayed rather than inlined. This characteristic
is not inherited. The default value is #f.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial value is #f.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
A character flow object is atomic. Flow objects of this class can only be inlined. Flow objects of this class have the following characteristics:
char:
is an object of type char specifying the character. This
characteristic is not inherited. If it is not specified, and there is
a current node, and the current node has a char
property, then
the value of the char
property shall be used as the value of this
characteristic.
If the value of the char-map:
characteristic is not #f,
then it is applied to the value of the char
property, and the
result is used as the value of the characteristic.
This characteristic may be used to control
hyphenation
as well as possibly being used in the selection of
the glyph.
char-map:
is either #f or a procedure that is applied
in the construction of the default value of the char:
characteristic.
The initial value is #f.
glyph-id:
is an object of type glyph-id specifying the glyph
that shall be imaged in the resulting area or #f if no image is
associated
with the resulting area. This characteristic is not inherited. If
this characteristic is not specified, it is computed using the value
of the char:
characteristic: if the blank?
property of
the character is true, then the value of the characteristic shall be
#f; otherwise, the value of the characteristic shall be the value of the
glyph-id
property of the character, which shall not be #f in
this case.
glyph-subst-table:
is either #f or a glyph-subst-table or a list
of glyph-subst-tables specifying substitutions to be performed on the
glyph-id specified by the glyph-id:
characteristic.
If the value is a list, then the substitutions shall be performed in the
specified order.
The initial value is #f.
This allows for context-dependent glyph substitution and for glyph
substitutions that involve multiple glyphs.
glyph-subst-method:
is either #f or a string or a list of strings.
Each string shall be a public identifier specifying a method for
performing glyph substitution.
The initial value is #f.
This is typically used for Indic scripts.
glyph-reorder-method:
is either #f or a string or a list of strings.
Each string shall be a public identifier specifying a method for
reordering glyphs. The initial value is #f.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
This controls which writing-mode of the font resource is used for the
metrics of the glyph.
ISO/IEC 10180 defines a mandatory font set for interchange
comprising the font families font-family-name:
is either #f, indicating that any font family
is acceptable, or a string giving the font family name property of
the desired font resource.
The initial value is iso-serif
.
iso-serif
, iso-sanserif
,
and iso-monospace
.
font-weight:
is either #f, indicating that any font weight is
acceptable, or one of the symbols not-applicable
,
ultra-light
, extra-light
, light
,
semi-light
, medium
, semi-bold
, bold
,
extra-bold
, or ultra-bold
, giving the weight property of
the desired font resource. The initial value is
medium
.
font-posture:
is either #f, indicating that any posture is
acceptable,
or one of the symbols not-applicable
, upright
,
oblique
, back-slanted-oblique
, italic
, or
back-slanted-italic
, giving the posture property of the desired
font resource. The initial value is upright
.
In addition, the value math
is allowed specifying that the
font posture shall be the value of the math-font-posture:
characteristic.
math-font-posture:
specifies the posture property of the
desired font resource to be used when the font-posture:
characteristic has the value math
. It shall have the value #f
or one of the symbols not-applicable
, upright
,
oblique
, back-slanted-oblique
, italic
, or
back-slanted-italic
. This characteristic is not inherited.
The default value is the value of the math-font-posture
character property of the char:
characteristic.
font-structure:
is either #f, indicating that any structure is
applicable, or one of the symbols not-applicable
, solid
,
or outline
. The initial value is solid
.
font-proportionate-width:
is either #f, indicating that any
proportionate width is acceptable, or one of the symbols
not-applicable
, ultra-condensed
, extra-condensed
,
condensed
, semi-condensed
, medium
,
semi-expanded
, expanded
, extra-expanded
, or
ultra-expanded
. The initial value is
medium
.
font-name:
is either #f, indicating that any font name is
acceptable, or a string which is the public identifier for the font
name property of the desired font resource.
When the value is a string, the values of the
font-family-name:
, font-weight:
, font-posture:
,
font-structure:
, and font-proportionate-width:
characteristics are not used in font selection.
The initial value is #f.
font-size:
is a length specifying the body size to which
the font resource should be scaled.
The initial value is 10pt.
It is implementation- and font-dependent how this is achieved.
This is designed primarily for math delimiters of various kinds.
The size of the delimiter is determined by the product of the
font-size and the stretch-factor, but the visual appearance
is designed to be consistent with glyphs with that font-size.
stretch-factor:
is a number specifying
the factor by which the character
should be stretched.
This characteristic is not inherited.
The default is 1.
hyphenate?:
is a boolean specifying whether hyphenation is allowed.
The initial value is #f.
hyphenation-method:
is a string specifying a public identifier
for a hyphenation method or #f.
The initial value is #f.
kern?:
is a boolean specifying whether kerning (escapement
adjustment) is allowed. If true, then kerning shall be performed as
specified in 8.8.1.6 of ISO 9541-1 according to the kern-mode:
characteristic. Escapement adjustment is not performed for glyphs
whose escapement adjustment indicator property has the value
non-adjusting.
The initial value is #f.
kern-mode:
is one of the symbols loose
, normal
,
kern
, tight
, or touch
specifying the escapement
adjustment mode. The initial value is normal
.
ligature?:
is a boolean specifying whether ligatures are allowed.
The initial value is #f.
allowed-ligatures:
is a list of allowed ligatures. Each
member of the list shall be either a glyph-id or a char. Only ligatures
whose result is one of the glyph-ids in the list or is equal
to the glyph-id property of one of the chars in the list shall be used.
The initial value is the empty list.
space?:
is a boolean specifying whether the flow object is a
space. This characteristic is not inherited. This affects only
whether the inline-space specified as the value of the
inline-space-space:
characteristic is applicable to this flow
object. The default value is the value of the space?
character
property of the char:
characteristic.
inline-space-space:
is an object of type inline-space which
is applicable to the flow object if it is a space.
This is in addition to any space from the
escapement-space-before:
and escapement-space-after:
characteristics.
escapement-space-before:
is an object of type inline-space
specifying space to be added before the first result area in the
escapement direction.
The initial value is (inline-space 0pt)
.
escapement-space-after:
is an object of type inline-space
specifying space to be added after the last result area in the
escapement direction.
The initial value is (inline-space 0pt)
.
record-end?:
is a boolean specifying whether the flow object
is a record-end.
Flow objects for which the record-end?:
characteristic is true
shall be treated differently by paragraphs
for which the lines:
characteristic has the value asis
or for which the ignore-record-end?:
characteristic is true.
This characteristic is not inherited.
The default value is the value of the record-end?
character property
of the char:
characteristic.
input-tab?:
is a boolean
specifying whether the flow object is a tab
on input.
This characteristic is not inherited.
Character flow objects that are tabs shall be treated differently
by paragraphs for which the expand-tabs
property is not #f.
The default value is the value of the input-tab?
character property
of the char:
characteristic if the char:
characteristic was
not explicitly specified, and otherwise #f.
input-whitespace-treatment:
is one of the following symbols:
preserve
specifying no special action.
collapse
specifying that a character flow object for which
the input-whitespace?:
characteristic is true
shall be ignored if the preceding flow object was a character
flow object also with the input-whitespace?:
characteristic
true.
ignore
specifying that any character flow object for which the
input-whitespace?:
characteristic is true shall be ignored.
The initial value is preserve
.
input-whitespace?:
is a boolean specifying whether the
character shall be considered as whitespace on input. This
characteristic is not inherited. The default value is the value of the
input-whitespace?
character property of the char:
characteristic if the char:
characteristic was
not explicitly specified, and otherwise #f.
punct?:
is a boolean specifying whether the character
should be treated as punctuation for the purposes of
formatting the paragraph with hanging punctuation. This shall
only take effect if the hanging-punct?:
characteristic of the paragraph
is true. This characteristic is not inherited.
The default value is the value of the punct?
character property
of the char:
characteristic.
For example,
for ideographs, the break-before-priority:
is an integer that affects whether a
break is allowed before this character. The drop-after-line-break?:
characteristic
is true. A break is allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited. The
default value is the value of the break-before-priority
character property of the char:
characteristic.
break-before-priority:
and
break-after-priority:
characteristics would typically be 0 and
0, for a Latin letter 1 and 1, and for a space character 2 and 3.
break-after-priority:
is an integer that affects
whether a break is allowed after this character as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited. The default value is the value
of the break-after-priority
character property of the
char:
characteristic.
drop-after-line-break?:
is a boolean specifying whether this
character should be discarded if it follows a line break. This
characteristic is not inherited. The default value is the value of
the drop-after-line-break?
character property of the char:
characteristic.
drop-unless-before-line-break?:
is a boolean specifying whether
this character shall be discarded unless it precedes a line break.
This characteristic is not inherited. The default value is the value
of the drop-unless-before-line-break?
character property of the
char:
characteristic.
math-class:
is one of the symbols ordinary
,
operator
, binary
, relation
, opening
,
closing
, punctuation
, inner
, or space
. This
is used by the flow object classes for mathematical formulae to adjust
the spacing of the character. A value of space
is used for
character flow objects that specify additional space; flow objects
with this math-class should be ignored when adjusting the spacing of
another character flow object. This characteristic is not inherited.
The default value is the value of the math-class
character
property of the char:
characteristic.
script:
is a string specifying a formal public identifier that
identifies the character's script or #f if the character is not
associated with any single script.
This characteristic is not inherited.
The default
value is the value of the script
character property of the
char:
characteristic.
Shifting the position point by a positive amount in the
line-progression
direction has the effect of shifting the areas produced by
flow object in the opposite direction to the line-progression
direction.
position-point-shift:
is a length-spec specifying a shift of
the position point in the line-progression direction.
The initial value is 0pt.
language:
is #f or a symbol specifying the ISO 639 language code
in upper-case.
This affects line composition in a system-dependent way.
The initial value is #f.
country:
is #f or a symbol specifying the ISO 3166 country
code in upper-case.
This affects line composition in a system-dependent way.
The initial value is #f.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
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 properties are used to determine the default values of
certain non-inherited characteristics of character flow objects. In
addition, character properties are accessible with the
Character properties should not be confused with
properties of nodes of class data-char
.
The following character properties are pre-defined for the style language:
space?
is a boolean specifying whether the character is a
space. The default value is #f.
record-end?
is a boolean specifying whether the character is a
record-end. The default value is #f. Both the space?
and
record-end?
properties are usually true for a record-end
character.
blank?
is a boolean which is true if the character has no glyph
associated with it. The default value is #f.
input-tab?
is a boolean specifying whether the character is a
tab on input. The default value is #f.
input-whitespace?
is a boolean specifying whether the character
should be considered as whitespace on input.
The default value is #f.
punct?
is a boolean which is true if the character is treated
as a punctuation character for the purposes of hanging punctuation.
The default value is #f.
script
is a string specifying a formal public identifier that
identifies the character's script or #f if the character is not
associated with any single script.
The following script public identifiers are defined in this
International Standard:
ISO/IEC 10179:1996//Script::Latin
ISO/IEC 10179:1996//Script::Greek
ISO/IEC 10179:1996//Script::Cyrillic
ISO/IEC 10179:1996//Script::Arabic
ISO/IEC 10179:1996//Script::Hebrew
ISO/IEC 10179:1996//Script::Armenian
ISO/IEC 10179:1996//Script::Georgian
ISO/IEC 10179:1996//Script::Devanagari
ISO/IEC 10179:1996//Script::Gujarati
ISO/IEC 10179:1996//Script::Gurmukhi
ISO/IEC 10179:1996//Script::Bengali
ISO/IEC 10179:1996//Script::Oriya
ISO/IEC 10179:1996//Script::Telugu
ISO/IEC 10179:1996//Script::Tamil
ISO/IEC 10179:1996//Script::Kannada
ISO/IEC 10179:1996//Script::Malayalam
ISO/IEC 10179:1996//Script::Thai
ISO/IEC 10179:1996//Script::Lao
ISO/IEC 10179:1996//Script::Han
ISO/IEC 10179:1996//Script::Bopomofo
ISO/IEC 10179:1996//Script::Hiragana
ISO/IEC 10179:1996//Script::Katakana
ISO/IEC 10179:1996//Script::Hangul
ISO/IEC 10179:1996//Script::Burmese
ISO/IEC 10179:1996//Script::Khmer
ISO/IEC 10179:1996//Script::Mongolian
ISO/IEC 10179:1996//Script::Ethiopian
ISO/IEC 10179:1996//Script::Sinhala
ISO/IEC 10179:1996//Script::Tibetan
ISO/IEC 10179:1996//Script::Punctuation
ISO/IEC 10179:1996//Script::Symbol
ISO/IEC 10179:1996//Script::Digit
Characters representing punctuation and symbols typically have a
script
value of #f.
The nominal glyph-id may be transformed using one or more
glyph-substitution-tables. This allows for selective mapping to,
for example, small caps or old style glyphs.
glyph-id
is an object of type glyph-id representing the
nominal glyph to be used for this character
or #f if the character has no glyph.
If the character was declared using the
standard-chars
architectural form,
then the default value is the
glyph-id for the nominal glyph for that character, if there is one,
and otherwise #f.
Otherwise, the default value is #f.
This is usually true for a space character.
drop-after-line-break?
is a boolean specifying whether the
character is dropped when it immediately follows a line break. The
default value is #f.
This is usually true for a soft hyphen.
drop-unless-before-line-break?:
is a boolean specifying whether
this character shall be discarded unless it precedes a line break.
The default value is #f.
break-before-priority
is an integer that affects
whether a break is allowed before this character in the manner
described in the specification for the break-before-priority:
characteristic of the character flow object.
The default value is 0.
break-after-priority
is an integer that affects
whether a break is allowed after this character in the manner
described in the specification for the break-after-priority:
characteristic of the character flow object.
The default value is 0.
math-class
is one of the symbols ordinary
,
operator
, binary
, relation
, opening
,
closing
, punctuation
, or inner
. The default value
is ordinary
.
math-font-posture
is either #f, meaning that any posture is
acceptable, or one of the symbols not-applicable
,
upright
, oblique
, back-slanted-oblique
,
italic
, back-slanted-italic
, or math
giving the
posture property of the font resource to be used when the
font-posture:
characteristic has the value math
.
This set of character properties is not exhaustive.
Additional properties may be added using an
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. A leader flow object class has the following characteristics:
length:
is a length-spec specifying the length of the leader. This
characteristic is not inherited. If this characteristic is
not specified, the length of the leader shall be determined by the
context in which it is used.
The length shall be specified for a leader in a paragraph unless the
leader occurs on the last line.
truncate-leader?:
is a boolean specifying whether the final
repetition of the sequence of inline flow objects that is the content of
this flow object may be truncated.
The initial value is #f.
align-leader?:
is a boolean specifying whether the leaders
shall be aligned against an imaginary grid associated with the page.
The initial value is #t.
min-leader-repeat:
is a strictly positive integer specifying the
minimum number
of times that the pattern shall be repeated. This characteristic is
applicable only if length:
is not specified. If the
available space is insufficient for the leader to be repeated this
number of times, then the leader shall be blank. When a leader occurs
in a paragraph, the available space consists of the display-size of
the paragraph less the sum of the start-indent applicable to the last
line, the last-line-end-indent, the total length of everything
following the leader in the paragraph, and the smallest portion of the
paragraph preceding the leader that shall be kept with the leader.
The initial value is 1.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
The embedded-text flow object class is used for embedding right-to-left text within left-to-right text or vice-versa. This flow object class shall only be inlined. It has a single principal port.
An embedded text flow object has the following characteristics:
direction:
is one of the symbols left-to-right
or
right-to-left
.
It shall be parallel to the writing-mode of the paragraph.
This characteristic is not inherited and shall be specified.
language:
is #f or a symbol specifying the ISO 639 language code
in upper-case.
This affects line composition in a system-dependent way.
The initial value is #f.
country:
is #f or a symbol specifying the ISO 3166 country
code in upper-case.
This affects line composition in a system-dependent way.
The initial value is #f.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
The effect of the embedded text flow object is to make any line
fragments that contain the content of the embedded text flow
object use the specified direction as their inline-progression
direction.
For
example, suppose a line contains four inline areas whose order (in the
flow object stream) is A, B, C, D, where the B and C were contained in
an embedded text flow object whose direction was the reverse of the
paragraph's writing-mode. Then the line shall be built up as follows:
first a partial line shall be built up containing B and C by placing
the position point of C on the escapement point of B. Then the
resulting partial line area shall be treated as an inline area whose
position point is the escapement point of C and whose escapement point
is the position point of B. The line shall then consist of A, then the
inline partial line area produced from B and C, and finally D all
placed using the writing-mode of the paragraph.
See Figure
A rule is used to specify a straight line. Rules may be inlined or displayed. A rule flow object class has the following characteristics:
orientation:
is one of the symbols horizontal
,
vertical
, escapement
, or line-progression
which
specifies the orientation of the rule and also determines whether the
rule is inlined or displayed. This characteristic is not inherited.
It has no default value and so it shall be specified.
If the orientation is The size of the area is distinct from the thickness of the rule.
horizontal
or vertical
, then the
rule is displayed. In this case, if the orientation of the rule
is perpendicular to the placement direction, then the size of the
area in the placement direction shall be 0; otherwise, the size of the
area in the placement direction shall be equal to the length of the
rule.
If the orientation is Thus, a rule whose orientation is escapement
, then the rule shall be inlined.
In this case, the rule shall be centered in the line-progression
direction about the position point, and the escapement shall be equal
to the length of the rule. The rule may be offset in the
line-progression direction using the position-point-shift:
characteristic. If the orientation is line-progression
, the
rule shall be inlined. In this case, the rule shall start at the
position point and extend in the line-progression direction the
length of the rule. The escapement shall be 0.
line-progression
does
not affect the positioning of subsequent flow objects.
length:
is a length specifying the length of the rule. This
characteristic is not inherited. If this characteristic is
not specified, the length of the rule shall be determined by the
context in which it is used.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
line-cap:
is one of the symbols butt
,
round
, or square
specifying the cap style for the line.
The initial value is butt
.
line-dash:
is a list of one or more lengths that
specifies the dash pattern of the line. The first length specifies
the number component of the CurrentDashPattern graphics state variable
in ISO/IEC 10180. The remaining lengths specify the vector component
of the CurrentDashPattern graphics state variable.
The initial value is a list containing the length 0pt.
line-thickness:
is a length that specifies the
thickness of the line or lines.
The initial value is 1pt.
line-repeat:
is a strictly positive integer that specifies
the number of parallel lines to be drawn. For example, a value of 2
indicates a double line.
The initial value is 1.
line-sep:
is a length that gives the distance between
the centers of parallel lines.
The initial value is 1pt.
Shifting the position point by a positive amount in the
line-progression
direction has the effect of shifting the areas produced by
flow object in the opposite direction to the line-progression
direction.
position-point-shift:
is a length-spec specifying a shift of
the position point in the line-progression direction.
The initial value is 0pt.
This applies only if the flow object is inlined.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
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.
display-alignment:
is one of the symbols start
,
center
, end
, inside
, or outside
specifying
the alignment of the areas resulting from the flow object in the
direction of the writing-mode.
The initial value is start
.
This determines how the flow object expands
its areas so their size is equal to the display size in the direction
perpendicular to the area container's filling-direction. First space
is added to the area so that its size is equal to the display size
less the sum of the start and end indents:
if the alignment is start
, the space is all added
at the end in the direction of the writing-mode;
if the alignment is end
, the space is all added
at the start in the direction of the writing-mode;
if the alignment is center
, the space is added equally
at the start and the end in the direction of the writing-mode;
if the alignment is inside
, then the flow object shall have an
ancestor of class page-sequence, the direction of the writing-mode
shall be perpendicular to the binding-edge:
of the
page-sequence, and the space shall be added on the edge that is
outside with respect to the spread;
if the alignment is outside
, then the flow object shall have an
ancestor of class page-sequence, the direction determined by the
writing-mode shall
be perpendicular to the binding-edge:
of the page-sequence, and
the space shall be added on the edge that is inside with respect to
the spread.
Then an amount of space equal to the start-indent is added at the start in the direction of the writing-mode, and an amount of space equal to the end-indent is added at the end in the direction of the writing-mode. This applies only if the flow object is displayed.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
This applies only if the flow object is displayed.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
This applies only if the flow object is displayed.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial value is #f.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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. This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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. Flow objects of this class have the following characteristics:
display?:
is a boolean specifying whether the flow object
shall be displayed rather than inlined. This characteristic
is not inherited. The default value is #f.
scale:
is either a number or a list of two numbers or one of
the symbols max
or max-uniform
. If it is a number, then
the graphic shall be scaled by that factor in both the horizontal and
vertical directions. If it is a list of two numbers, then the graphic
shall be scaled by the factor specified by the first number in the
horizontal direction and by the factor specified by the second number
in the vertical direction. If it is the symbol max-uniform
,
then it shall be scaled uniformly in the horizontal and vertical
directions so that its size in either the horizontal or vertical
direction is as large as allowed. If it is the symbol max
, then
it shall be scaled in the horizontal and vertical directions so that
its size in the horizontal and vertical directions is as large as
allowed. This characteristic is not inherited. The default value is
max-uniform
.
max-width:
is a length-spec specifying the maximum allowed
width of the resulting area when scale:
is max
or
max-uniform
. This characteristic is not inherited.
max-height:
is a length-spec specifying the maximum allowed
height of the resulting area when scale:
is max
or
max-uniform
. This characteristic is not inherited.
The external identifier specified in an entity
declaration in the source document
shall be resolved into a system identifier by the
entity manager of the SGML system.
The resulting system identifier is available
as the entity-system-id:
is a string specifying the system identifier
of the entity containing the external graphic or #f if the entity has
no system identifier. This characteristic is not inherited
and shall be specified.
effective-system-id
node property in the source grove.
The external identifier specified in a notation
declaration in the source document
shall be resolved into a system identifier by the
entity manager of the SGML system.
The resulting system identifier is available
as the notation-system-id:
is a string specifying the system identifier
of the notation of the external graphic.
This characteristic is not inherited and shall be specified.
effective-notation-system-id
node property in the source
grove.
The manner in which this system identifier identifies the processor
for the notation is system-dependent.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
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.
display-alignment:
is one of the symbols start
,
center
, end
, inside
, or outside
specifying
the alignment of the areas resulting from the flow object in the
direction of the writing-mode.
The initial value is start
.
This determines how the flow object expands
its areas so their size is equal to the display size in the direction
perpendicular to the area container's filling-direction. First space
is added to the area so that its size is equal to the display size
less the sum of the start and end indents:
if the alignment is start
, the space is all added
at the end in the direction of the writing-mode;
if the alignment is end
, the space is all added
at the start in the direction of the writing-mode;
if the alignment is center
, the space is added equally
at the start and the end in the direction of the writing-mode;
if the alignment is inside
, then the flow object shall have an
ancestor of class page-sequence, the direction of the writing-mode
shall be perpendicular to the binding-edge:
of the
page-sequence, and the space shall be added on the edge that is
outside with respect to the spread;
if the alignment is outside
, then the flow object shall have an
ancestor of class page-sequence, the direction determined by the
writing-mode shall
be perpendicular to the binding-edge:
of the page-sequence, and
the space shall be added on the edge that is inside with respect to
the spread.
Then an amount of space equal to the start-indent is added at the start in the direction of the writing-mode, and an amount of space equal to the end-indent is added at the end in the direction of the writing-mode. This applies only if the flow object is displayed.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
This applies only if the flow object is displayed.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
This applies only if the flow object is displayed.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial value is #f.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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. This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
position-point-x:
is a length-spec giving the x-coordinate of
the position point of the resulting area in the area's coordinate
system. For this purpose, the area is considered to have a coordinate
system in the same way as an area container. This shall apply only when
the flow object is inlined. This characteristic is not inherited. If
this characteristic is not specified and the writing-mode:
characteristic is left-to-right
or right-to-left
, then
the value shall default to 0.
position-point-y:
is a length-spec giving the y-coordinate of
the position point of the resulting area in the area's coordinate
system. For this purpose, the area is considered to have a coordinate
system in the same way as an area container. This applies only when
the flow object is inlined. This characteristic is not inherited. If
this characteristic is not specified and the writing-mode:
characteristic is top-to-bottom
, then
the value shall default to 0.
escapement-direction:
is one of the symbols
top-to-bottom
, left-to-right
, bottom-to-top
, or
right-to-left
specifying the escapement direction of the
resulting area relative to the area's coordinate system. For this
purpose, the area is considered to have a coordinate system in the
same way as an area container. This applies only when the flow object
is inlined. This characteristic is not inherited. If this
characteristic is not specified, then its value shall default to the
value of the writing-mode:
characteristic.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
This applies only if the flow object is inlined.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
An included-container-area flow object results in a sequence of one or more areas each of which is specified as an area container. An included-container-area flow object has a single principal port. The contents of this port shall be displayed.
Flow objects of the included-container-area class may be inlined or displayed.
The size of the container shall be fixed in the direction perpendicular to the area container's filling-direction. It shall be specified unless the flow object is being displayed and the filling-direction is the same as the placement direction, in which case the size is the display-size. It need not be specified in the filling-direction. In this case, it shall be determined by the size of the child areas. If the included-container-area flow object is displayed and its placement direction is parallel to the area container's filling-direction and the size in the filling-direction is not specified, then the size in the filling-direction shall be limited by the size of its parent in that direction. If the flow object is being displayed and its placement direction is perpendicular to the area container's filling direction and the size in the filling-direction is not specified, then the size in the filling-direction shall be limited to the display-size.
An included-container-area has the following characteristics:
display?:
is a boolean specifying whether the flow object
shall be displayed rather than inlined. This characteristic
is not inherited. The default value is #f.
filling-direction:
is one of the symbols top-to-bottom
,
left-to-right
, or right-to-left
. It
specifies the filling-direction of the area container. The
filling-direction
of the area container may be perpendicular to the placement
direction.
The initial value is top-to-bottom
.
width:
is a length specifying the width of the area container.
This characteristic is not inherited.
height:
is a length specifying the height of the area
container. This characteristic is not inherited.
contents-alignment:
is one of the symbols start
,
end
, center
, or justify
specifying the alignment
of the child areas within the area container in the filling-direction
of the area container.
The initial value is start
.
overflow-action:
is one of the symbols truncate
,
error
, or repeat
specifying the action to be taken if the
content of the area container does not fit within the dimensions
specified for the area container.
The initial value is repeat
.
contents-rotation:
is one of the integers 0, 90, 180, or 270
specifying the counter-clockwise rotation to be applied to the
area contents.
This characteristic is not inherited.
The default is 0.
scale:
is a number specifying a scaling factor to be applied to
the content of the area. Numbers less than 1 shall make the content
smaller. Numbers greater than 1 shall make it larger. This
characteristic is not inherited. If not specified, it shall default to
1.
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.
display-alignment:
is one of the symbols start
,
center
, end
, inside
, or outside
specifying
the alignment of the areas resulting from the flow object in the
direction of the writing-mode.
The initial value is start
.
This determines how the flow object expands
its areas so their size is equal to the display size in the direction
perpendicular to the area container's filling-direction. First space
is added to the area so that its size is equal to the display size
less the sum of the start and end indents:
if the alignment is start
, the space is all added
at the end in the direction of the writing-mode;
if the alignment is end
, the space is all added
at the start in the direction of the writing-mode;
if the alignment is center
, the space is added equally
at the start and the end in the direction of the writing-mode;
if the alignment is inside
, then the flow object shall have an
ancestor of class page-sequence, the direction of the writing-mode
shall be perpendicular to the binding-edge:
of the
page-sequence, and the space shall be added on the edge that is
outside with respect to the spread;
if the alignment is outside
, then the flow object shall have an
ancestor of class page-sequence, the direction determined by the
writing-mode shall
be perpendicular to the binding-edge:
of the page-sequence, and
the space shall be added on the edge that is inside with respect to
the spread.
Then an amount of space equal to the start-indent is added at the start in the direction of the writing-mode, and an amount of space equal to the end-indent is added at the end in the direction of the writing-mode. This applies only if the flow object is displayed.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
This applies only if the flow object is displayed.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
This applies only if the flow object is displayed.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial value is #f.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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. This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
position-point-x:
is a length-spec giving the x-coordinate of
the position point of the resulting area in the area's coordinate
system. For this purpose, the area is considered to have a coordinate
system in the same way as an area container. This shall apply only when
the flow object is inlined. This characteristic is not inherited. If
this characteristic is not specified and the writing-mode:
characteristic is left-to-right
or right-to-left
, then
the value shall default to 0.
position-point-y:
is a length-spec giving the y-coordinate of
the position point of the resulting area in the area's coordinate
system. For this purpose, the area is considered to have a coordinate
system in the same way as an area container. This applies only when
the flow object is inlined. This characteristic is not inherited. If
this characteristic is not specified and the writing-mode:
characteristic is top-to-bottom
, then
the value shall default to 0.
escapement-direction:
is one of the symbols
top-to-bottom
, left-to-right
, bottom-to-top
, or
right-to-left
specifying the escapement direction of the
resulting area relative to the area's coordinate system. For this
purpose, the area is considered to have a coordinate system in the
same way as an area container. This applies only when the flow object
is inlined. This characteristic is not inherited. If this
characteristic is not specified, then its value shall default to the
value of the writing-mode:
characteristic.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
This applies only if the flow object is inlined.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
The score flow object has a single principal port.
The content of this port is scored.
The port can contain only inlined flow objects.
Kendot scoring is achieved using the emphasizing-mark flow object
class.
The applicable characteristics are:
type:
is one of
the symbol before
specifying that a score should be drawn
parallel to the placement path and at a position specified
by the font of the score flow object
for scores that are before the placement path in the
line-progression direction.
the symbol through
specifying that a score should be drawn
parallel to the placement path and at a position specified
by the font of the score flow object
for scores that are drawn through the characters
of the font.
the symbol after
specifying that a score shall be drawn
parallel to the placement path and at a position specified
by the font of the score flow object
for scores that are after the placement path in the
line-progression direction.
a length-spec specifying that a score shall be drawn parallel to the placement path such that the distance in the line-progression direction from the center of the score to the placement path is the specified length; a positive value shall cause the score to be after the placement path in the line-progression direction.
a character, which means that each glyph shall be overstruck with that character.
This characteristic is non-inherited and shall be specified.
score-spaces?:
is a boolean specifying whether the scoring
shall be applied to spaces. The initial value is #t.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
line-cap:
is one of the symbols butt
,
round
, or square
specifying the cap style for the line.
The initial value is butt
.
This applies only when type:
is a length-spec.
line-dash:
is a list of one or more lengths that
specifies the dash pattern of the line. The first length specifies
the number component of the CurrentDashPattern graphics state variable
in ISO/IEC 10180. The remaining lengths specify the vector component
of the CurrentDashPattern graphics state variable.
The initial value is a list containing the length 0pt.
This applies only when type:
is a length-spec.
line-thickness:
is a length that specifies the
thickness of the line or lines.
The initial value is 1pt.
This applies only when type:
is a length-spec.
line-repeat:
is a strictly positive integer that specifies
the number of parallel lines to be drawn. For example, a value of 2
indicates a double line.
The initial value is 1.
This applies only when type:
is a length-spec.
line-sep:
is a length that gives the distance between
the centers of parallel lines.
The initial value is 1pt.
This applies only when type:
is a length-spec.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
ISO/IEC 10180 defines a mandatory font set for interchange
comprising the font families font-family-name:
is either #f, indicating that any font family
is acceptable, or a string giving the font family name property of
the desired font resource.
The initial value is iso-serif
.
iso-serif
, iso-sanserif
,
and iso-monospace
.
font-weight:
is either #f, indicating that any font weight is
acceptable, or one of the symbols not-applicable
,
ultra-light
, extra-light
, light
,
semi-light
, medium
, semi-bold
, bold
,
extra-bold
, or ultra-bold
, giving the weight property of
the desired font resource. The initial value is
medium
.
font-posture:
is either #f, indicating that any posture is
acceptable,
or one of the symbols not-applicable
, upright
,
oblique
, back-slanted-oblique
, italic
, or
back-slanted-italic
, giving the posture property of the desired
font resource. The initial value is upright
.
font-structure:
is either #f, indicating that any structure is
applicable, or one of the symbols not-applicable
, solid
,
or outline
. The initial value is solid
.
font-proportionate-width:
is either #f, indicating that any
proportionate width is acceptable, or one of the symbols
not-applicable
, ultra-condensed
, extra-condensed
,
condensed
, semi-condensed
, medium
,
semi-expanded
, expanded
, extra-expanded
, or
ultra-expanded
. The initial value is
medium
.
font-name:
is either #f, indicating that any font name is
acceptable, or a string which is the public identifier for the font
name property of the desired font resource.
When the value is a string, the values of the
font-family-name:
, font-weight:
, font-posture:
,
font-structure:
, and font-proportionate-width:
characteristics are not used in font selection.
The initial value is #f.
font-size:
is a length specifying the body size to which
the font resource should be scaled.
The initial value is 10pt.
When the type:
is before
, after
, or
through
, the font characteristics shall determine the
positioning of the score. When the type:
is a character, the
font characteristics shall determine the glyph used.
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 inlined 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.
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.
The applicable characteristics are:
display?:
is a boolean that specifies whether
the box shall be displayed rather than inlined.
This characteristic is not inherited.
The default value is #f.
box-type:
is one of the following symbols:
border
specifying that the box shall have a border.
background
specifying that the box shall have a background.
both
specifying that the box shall have both
a border and a background.
The initial value is border
.
box-open-end?:
is a boolean that specifies whether a
broken box shall have an open end. If the value is &schtrue;, the ending
edge of the area before the line break shall not have the visible
border, and the starting edge of the area after the line break shall
not have the visible border. If the value is &schfalse;, broken box
areas shall have the visible borders as usual.
The initial value is #f.
background-color:
is either #f or an object of type color that
specifies the color
in which the marks for the flow object's background should be made.
The initial value is #f.
This applies only if the box-type:
characteristic does
not have the value border
.
background-layer:
is an integer specifying the layer of the
marks of the areas resulting
from the background of a flow object.
The initial value is -1.
This applies only if the box-type:
characteristic does
not have the value border
.
box-corner-rounded:
specifies whether the corners
of the box shall be drawn as quarter circles as follows:
#f indicating that no corners shall be rounded.
#t indicating that all corners shall be rounded.
a list of the symbols identifying the individual corners that shall
be rounded; each symbol shall be of the form -
before
or after
; if the box is
displayed then
The initial value is #f.
box-corner-radius:
is a length-spec specifying the radius of
the quarter circles to be used when box-corner-rounded:
is not #f. A negative value indicates that the center of the circle
is at the point where the edges intersect; in this case, the corners
shall be concave.
The initial value is 3pt.
box-border-alignment:
is a symbol specifying the alignment
of the border's line relative to the position of the border, as follows:
center
specifying that the line shall be centered with
respect to the position of the border.
outside
specifying that the edge of the line that is an outer
edge of the box shall be aligned with the position of the border.
inside
specifying that the edge of the line that is an inner
edge of the box shall be aligned with the position of the
border.
The initial value is outside
.
box-size-before:
is a length that specifies
the distance from
the placement path to the edge of the box that is before the placement
path in the line-progression direction.
This shall apply only if the flow object is inline.
The initial value is 8pt.
box-size-after:
is a length that specifies the distance from
the placement path to the edge of the box that is after the placement
path in the line-progression direction.
This shall apply only if the flow object is inline.
The initial value is 4pt.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
This applies to the box's border.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
This applies to the box's border.
line-cap:
is one of the symbols butt
,
round
, or square
specifying the cap style for the line.
The initial value is butt
.
This applies to the box's border.
line-dash:
is a list of one or more lengths that
specifies the dash pattern of the line. The first length specifies
the number component of the CurrentDashPattern graphics state variable
in ISO/IEC 10180. The remaining lengths specify the vector component
of the CurrentDashPattern graphics state variable.
The initial value is a list containing the length 0pt.
This applies to the box's border.
line-thickness:
is a length that specifies the
thickness of the line or lines.
The initial value is 1pt.
This applies to the box's border.
line-repeat:
is a strictly positive integer that specifies
the number of parallel lines to be drawn. For example, a value of 2
indicates a double line.
The initial value is 1.
This applies to the box's border.
line-sep:
is a length that gives the distance between
the centers of parallel lines.
The initial value is 1pt.
This applies to the box's border.
line-miter-limit:
is a number that specifies the miter
limit for line joins.
The semantics of the miter limit are described in ISO/IEC 10180.
The initial value is 10.
This applies to the box's border.
line-join:
is one of the symbols miter
,
round
, or bevel
specifying the join style of the line.
The initial value is miter
.
This applies to the box's border.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
When the box is inline, this determines the placement of
flow objects in the box.
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.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
This applies only if the flow object is inlined.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
This applies only if the flow object is inlined.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This applies only if the flow object is displayed.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
This applies only if the flow object is displayed.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial value is #f.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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. This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
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.
This applies only if the flow object is displayed.
Use of this flow object requires the side-by-side
feature.
A side-by-side flow object is always displayed. It has a
single port whose contents are side-by-side-item flow objects that
are potentially aligned with each other in the placement
direction of the side-by-side.
When two objects are aligned in some direction, then their
relative position is adjusted in that direction so that their alignment
points lie on a line that is perpendicular to that direction.
The following characteristics are applicable:
side-by-side-overlap-control:
is one of the symbols none
or indent
determining how the side-by-side handles the
possibility of its side-by-side-items overlapping each other.
The initial value is indent
.
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.
Use of this flow object requires the side-by-side
feature.
A side-by-side-item flow object is always displayed. It has a single principal port whose contents are displayed. The display-size of the content is the same as the display-size of the side-by-side. A side-by-side-item flow object shall be allowed only in a side-by-side flow object.
The following characteristics are applicable:
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This determines only whether adjacent side-by-side-items overlap
when the side-by-side-overlap-control:
characteristic
of the containing side-by-side
has the value
indent
.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This determines only whether adjacent side-by-side-items overlap
when the side-by-side-overlap-control:
characteristic
of the containing side-by-side
has the value
indent
.
side-by-side-pre-align:
is a symbol specifying the point that
shall be used to align this item with the
preceding side-by-side-item as
follows:
start
meaning the beginning edge in the placement direction
of the first area produced by this side-by-side-item flow object;
initial
meaning the placement path of the first line area
produced by this side-by-side-item flow object;
final
meaning the placement path of the last line area produced
by this side-by-side-item flow object;
end
meaning the ending edge in the placement direction
of the last line area produced by this side-by-side-item flow object.
The initial value is initial
.
side-by-side-post-align:
is a symbol specifying the point that
shall be used to align this item with the following side-by-side-item,
in the same manner as side-by-side-pre-align:
.
The initial value is initial
.
The side-by-side-items are positioned so that, for each side-by-side-item except the first, its side-by-side-pre-align point is aligned in the placement direction with the side-by-side-post-align point of the preceding side-by-side-item.
If side-by-side-overlap-control:
has the value
indent
, and
if the start-indent of a side-by-side-item in a side-by-side flow
object is less
than the difference between the display-size and the end-indent of the
previous side-by-side-item in the side-by-side, then it shall be
positioned after the previous side-by-side-item in the placement
direction.
Any space-before:
applicable to the first area produced by a
side-by-side-item and any space-after:
applicable to the last area
produced by a side-by-side-item shall be ignored.
Flow objects of class glyph-annotation are mainly used for
characters, words, or phrases that have an associated description of
their meaning or pronunciation. The annotation is placed on the before
side in the line-progression direction of the annotated glyphs. A
glyph-annotation flow object that has more than one annotated glyph
shall not be broken between lines.
Users should explicitly divide long annotations between several
glyph-annotation flow objects.
A glyph-annotation flow object has the following ports:
the principal port is used for the annotated glyph. Only character flow objects shall be flowed into this port.
annotation
is used for the annotating glyph or glyphs
that are placed on the annotated glyph or glyphs. Only character flow
objects shall be flowed into this port.
The applicable characteristics are:
annotation-glyph-placement:
is a symbol that specifies
the nominal placement rule of the annotating glyph. The
shouldered
placement shall be applied only for
a glyph-annotation flow object that has exactly one annotated glyph.
Permitted values are:
centered
indicating that
annotating glyphs shall be centered,
shouldered
indicating that
annotating glyphs shall be placed in
relation to the number of annotating glyphs and the starting edge of
the annotated glyph. There shall be exactly one annotated
glyph with this placement. The precise placement of the annotating
glyph is determined by the annotation-glyph-style.
The initial value is centered
.
These rules might, for example, control details about placement,
different forms at the start and end of the line, or space adjustment
in the line.
annotation-glyph-style:
is #f or a string that specifies a
public identifier for additional rules to be applied in formatting.
The initial value is #f.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
An alignment-point flow object specifies an explicit alignment
point for paragraphs with a first-line-align:
characteristic
equal to #t. It is atomic and inlined.
Use of this flow object requires the aligned-column
feature.
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.
The following characteristics are applicable:
display-alignment:
is one of the symbols start
,
center
, end
, inside
, or outside
specifying
the alignment of the areas resulting from the flow object in the
direction of the writing-mode.
The initial value is start
.
This determines how the flow object expands
its areas so their size is equal to the display size in the direction
perpendicular to the area container's filling-direction. First space
is added to the area so that its size is equal to the display size
less the sum of the start and end indents:
if the alignment is start
, the space is all added
at the end in the direction of the writing-mode;
if the alignment is end
, the space is all added
at the start in the direction of the writing-mode;
if the alignment is center
, the space is added equally
at the start and the end in the direction of the writing-mode;
if the alignment is inside
, then the flow object shall have an
ancestor of class page-sequence, the direction of the writing-mode
shall be perpendicular to the binding-edge:
of the
page-sequence, and the space shall be added on the edge that is
outside with respect to the spread;
if the alignment is outside
, then the flow object shall have an
ancestor of class page-sequence, the direction determined by the
writing-mode shall
be perpendicular to the binding-edge:
of the page-sequence, and
the space shall be added on the edge that is inside with respect to
the spread.
Then an amount of space equal to the start-indent is added at the start in the direction of the writing-mode, and an amount of space equal to the end-indent is added at the end in the direction of the writing-mode. This is used for aligning the first line of each externally aligned paragraph.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This is used for aligning the first line of each externally aligned paragraph.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This is used for aligning the first line of each externally aligned paragraph.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
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.
Flow objects of class multi-line-inline-note are used for placing a note inline. A multi-line-inline-note is inlined. Typically, a multi-line-inline-note consists of the following:
an open parenthesis in approximately the same size as the glyphs before the note;
two lines placed one before the other in the line-progression direction with the contents in a smaller size than the surrounding glyphs; the content shall be used to fill the first line and then the second line so that the length of the two lines is approximately equal;
a close parenthesis in the same size as the open parenthesis.
The multi-line-inline-note may be broken between two or more lines. In
this case, the contents shall be used to fill each fragment of the
multi-line-inline-note in turn. For example, a character occurring on
the second line of the first part of a broken multi-line-inline-note
shall have occurred in the content before a character that occurs in
the first line of the second part of the note. In addition, the
breaking may be affected by the inline-note-style:
characteristic.
This flow object has a single principal port containing the
content of the inline note.
It shall accept any inlined flow objects.
Usually, a smaller point-size is specified for the
content.
The applicable characteristics are:
open:
is an unlabeled sosofo which is used
to open the multi-line-inline-note. The sosofo shall
contain only inline flow objects. This characteristic is not
inherited. If not specified, the default shall be the result of
evaluating
(literal "(")
.
close:
is an unlabeled sosofo which is
used to close the multi-line-inline-note. The sosofo
shall contain only inline flow objects. This characteristic is not
inherited. If not specified, the default shall be the result of
evaluating
(literal ")")
.
inline-note-line-count:
is a positive integer that
specifies the number of lines in the note. The initial
value is 2.
These rules might control details of placement or breaking.
inline-note-style:
is #f or a string specifying the public
identifier of the additional or detailed rules to be applied
in formatting the flow object.
The initial value is #f.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
Flow objects of class emphasizing-mark are used for emphasizing
characters, words, or phrases.
Each emphasizing-mark shall be placed on a path that is perpendicular to
the
line-progression direction and that lies before the placement path in
the line-progression direction. This path is called the
emphasizing-mark placement path.
The emphasizing-mark flow object class can be used to handle
the Kendot feature of Japanese typesetting in a generalized way.
The emphasizing-marks are distributed in the following ways:
With This distribution should be used for emphasizing characters, words, or
phrases in a monospaced font.
glyph
distribution, the emphasizing-mark shall be
placed on the emphasizing-mark placement path so that it is centered
with respect to the glyph.
With even
distribution, emphasizing-marks shall be
distributed evenly along the emphasizing-mark placement path of the
area or
areas resulting from the content of the flow object.
For both distributions, the details of the formatting of the flow
object shall be affected by the rules identified by the public
identifier specified by the mark-style
characteristic.
The applicable characteristics are:
mark:
is an unlabeled sosofo specifying
the areas that shall be used as the emphasizing-mark.
The sosofo shall contain only inline flow objects.
This characteristic is not inherited.
This characteristic shall not be defaulted.
mark-distribution:
is one of the symbols
glyph
or even
specifying the distribution of the emphasizing-marks.
The initial value is glyph
.
For example, details of the placing rules or
breaking rules.
mark-style:
is #f or a string that specifies the public
identifier of the additional or detailed rules that shall be applied
in formatting the flow object.
The initial value is #f.
inhibit-line-breaks?:
is a boolean specifying whether
line breaks shall be inhibited before and after
each area produced by this flow object.
This applies only to line breaks introduced by the
formatter to make lines fit in the available space.
The initial value is #f.
break-before-priority:
is an integer that affects whether a
break is allowed before this flow object. The drop-after-line-break?:
characteristic
is true. A break shall be allowed at a potential breakpoint only if the
break priority is even. This characteristic is not inherited.
The default value is 0.
break-after-priority:
is an integer that affects
whether a break is allowed after this flow object as described in the
specification of the break-before-priority:
characteristic.
This characteristic is not inherited.
The default value is 0.
The flow object classes for mathematical formulae are math-sequence,
unmath, subscript, superscript, script, mark, fence, fraction, radical,
math-operator, and grid.
These flow objects may also be used for
linear
chemical formulae.
Character flow objects are used for characters in mathematical
formulae; there is no special flow object class for this.
Characteristics such as font-size:
or font-posture:
are
determined in the usual way by the characteristics of the character
flow object. These characteristics are not automatically changed by
the mathematical formulae flow object classes. However, the
math
value for the font-posture:
characteristic may be
used to make different characters within math formulae have different
font postures.
A math-sequence flow object produces a single area.
The flow object has a single principal port used for the content of the area. The port shall accept flow objects of the following classes: math-sequence, unmath, subscript, superscript, script, mark, fence, fraction, radical, math-operator, grid, character, or alignment-point. The spacing between the flow objects in the contents may be adjusted based on their class and characteristics. The applicable characteristics are:
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
When one of the mathematical formulae flow object classes has a port that accepts the same classes as a math-sequence flow object, then the spacing between the flow objects is adjusted as if it were in a math-sequence flow object.
An unmath flow object is used to get words of natural language within a mathematical formula. The characters in such words are spaced differently from adjacent characters in a mathematical formula. The flow object has a single principal port. The port shall accept any inline flow objects. These flow objects are positioned in the normal way.
The following characteristics are applicable:
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
glyph-alignment-mode:
is one of the symbols base
,
center
, top
, bottom
, or font
specifying the
alignment mode to be used for glyphs. font
means that the
nominal alignment mode of the font in the flow object's writing-mode
should be used.
The initial value is font
.
ISO/IEC 10180 defines a mandatory font set for interchange
comprising the font families font-family-name:
is either #f, indicating that any font family
is acceptable, or a string giving the font family name property of
the desired font resource.
The initial value is iso-serif
.
iso-serif
, iso-sanserif
,
and iso-monospace
.
This is applicable when the glyph-alignment-mode:
is font
.
font-weight:
is either #f, indicating that any font weight is
acceptable, or one of the symbols not-applicable
,
ultra-light
, extra-light
, light
,
semi-light
, medium
, semi-bold
, bold
,
extra-bold
, or ultra-bold
, giving the weight property of
the desired font resource. The initial value is
medium
.
This is applicable when the glyph-alignment-mode:
is font
.
font-posture:
is either #f, indicating that any posture is
acceptable,
or one of the symbols not-applicable
, upright
,
oblique
, back-slanted-oblique
, italic
, or
back-slanted-italic
, giving the posture property of the desired
font resource. The initial value is upright
.
This is applicable when the glyph-alignment-mode:
is font
.
font-structure:
is either #f, indicating that any structure is
applicable, or one of the symbols not-applicable
, solid
,
or outline
. The initial value is solid
.
This is applicable when the glyph-alignment-mode:
is font
.
font-proportionate-width:
is either #f, indicating that any
proportionate width is acceptable, or one of the symbols
not-applicable
, ultra-condensed
, extra-condensed
,
condensed
, semi-condensed
, medium
,
semi-expanded
, expanded
, extra-expanded
, or
ultra-expanded
. The initial value is
medium
.
This is applicable when the glyph-alignment-mode:
is font
.
font-name:
is either #f, indicating that any font name is
acceptable, or a string which is the public identifier for the font
name property of the desired font resource.
When the value is a string, the values of the
font-family-name:
, font-weight:
, font-posture:
,
font-structure:
, and font-proportionate-width:
characteristics are not used in font selection.
The initial value is #f.
This is applicable when the glyph-alignment-mode:
is font
.
A subscript flow object is allowed in a math-sequence or in a port on a math flow object that accepts the same flow object classes as a math-sequence. A subscript flow object causes its parent to position the content of the subscript flow object as a subscript on the preceding area. It has a single principal port.
A superscript flow object is allowed in a math-sequence or in a port on a math flow object that accepts the same flow object classes as a math-sequence. A superscript flow object causes its parent to position the content of the superscript flow object as a superscript on the preceding area. It has a single principal port.
The script flow object describes a seven-part area. The parts described are:
the base area,
the pre-superscript area,
the pre-subscript area,
the mid-superscript area,
the mid-subscript area,
the post-superscript area,
the post-subscript area.
The applicable ports are:
the principal port, which is used for the main content of the flow object.
pre-sup
, which is used for a superscript that shall be placed
before the base content in the direction determined by the writing-mode.
pre-sub
, which is used for a subscript that shall be placed
before the base content in the direction determined by the writing-mode.
post-sup
, which is used for a superscript that shall be placed
after the base content in the direction determined by the writing-mode.
post-sub
, which is used for a subscript that shall be placed
after the base content in the direction determined by the writing-mode.
mid-sup
, which is used for a superscript that shall be placed
above the base content.
mid-sub
, which is used for a subscript that shall be placed
below the base content.
The applicable characteristics are:
script-pre-align:
is a symbol that specifies the alignment of
the pre-superscript and pre-subscript areas.
Permitted values are:
independent
specifying that the pre-subscript and
pre-superscript areas shall be aligned independently of each other.
pile
specifying that the trailing edges of the areas
shall be aligned.
sup-out
specifying that the trailing edge of the area
associated with the pre-sup port shall be aligned with the leading edge
of the area associated with the pre-sub port.
sub-out
specifying that the trailing edge of the area
associated with the pre-sub port shall be aligned with the leading edge
of the area associated with the pre-sup port.
The initial value is independent
.
script-post-align:
is a symbol that specifies the alignment of
the post-superscript and post-subscript areas.
Permitted values are:
independent
specifying that the post-subscript and
post-superscript areas shall be aligned independently of each other.
pile
specifying that the leading edges of the areas
shall be aligned.
sup-out
specifying that the leading edge of the area
associated with the post-sup port shall be aligned with the trailing edge
of the area associated with the post-sub port.
sub-out
specifying that the leading edge of the area
associated with the post-sub port shall be aligned with the trailing edge
of the area associated with the post-sup port.
The initial value is independent
.
script-mid-sup-align:
is a symbol that specifies the alignment of
the mid-superscript and base areas.
Permitted values are:
lead-edge
specifying that the leading edges of the areas
shall be aligned.
trail-edge
specifying that the trailing edges of the areas
shall be aligned.
center
specifying that the center points of the areas
in the direction determined by the writing-mode shall be aligned.
The initial value is center
.
script-mid-sub-align:
is a symbol that specifies the alignment of
the mid-subscript and base areas.
Permitted values are:
lead-edge
specifying that the leading edges of the areas
shall be aligned.
trail-edge
specifying that the trailing edges of the areas
shall be aligned.
center
specifying that the center points of the areas
in the direction determined by the writing-mode shall be aligned.
The initial value is center
.
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
The mark flow object describes a three-part area. The parts described are:
the base area,
the over-mark area,
the under-mark area.
The applicable ports are:
the principal port, which is used for the main content of the flow object.
over-mark
, which is used for the flow objects that shall be placed
in the over-mark area.
under-mark
, which is used for the flow objects that shall be placed
in the under-mark area.
If the over-mark or under-mark port contains exactly one
flow object of class character, rule, or leader, then
that flow object shall be extended to cover the full width of the
base area.
It is implementation- and font-dependent how character flow objects
are extended.
Each port shall accept flow objects of the same class as the port of a math-sequence flow object. The applicable characteristics are:
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
The fence flow object describes a three-part area. The parts described are:
the base area,
the open-fence area,
the close-fence area.
It is implementation- and font-dependent how this is achieved.
The flow object has the following ports:
the principal port, which is used for the main content of the flow object. It shall accept flow objects of the same class as the port of a math-sequence flow object.
open
, which is used for the open-fence area.
It shall accept a single flow object of type character.
close
, which is used for the close-fence area.
It shall accept a single flow object of type character.
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
The fraction flow object class describes a three-part area. The parts described are:
the numerator area,
the fraction-bar area,
the denominator area.
The flow object has the following ports:
numerator
, which is used for the content that shall be placed
in the numerator area.
denominator
, which is used for the content that shall be
placed in the denominator area.
The applicable characteristics are:
fraction-bar:
is an unlabeled sosofo containing a single
rule flow object to be used for the fraction-bar. The initial value
is a rule with all applicable inherited characteristics equal to their
initial values.
numerator-align:
is a symbol that specifies
the alignment of the numerator area and the fraction-bar area.
Permitted values are:
lead-edge
specifying that the leading edges of the
areas
shall be aligned.
trail-edge
specifying that the trailing edges of the
areas
shall be aligned.
center
specifying that the center points of the areas
in the direction determined by the writing-mode shall be aligned.
The initial value is center
.
denominator-align:
is a symbol that specifies
the alignment of the denominator area and the fraction-bar area.
Permitted values are:
lead-edge
specifying that the leading edges of the
areas
shall be aligned.
trail-edge
specifying that the trailing edges of the
areas
shall be aligned.
center
specifying that the center points of the areas
in the direction determined by the writing-mode shall be aligned.
The initial value is center
.
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
The radical flow object describes a three-part area. The parts described are:
the base area,
the degree area,
the radical-glyph area.
The flow object has the following ports:
the principal port, which is used for the main content of the flow object.
degree
, which is used for the degree of the root of the flow object.
The applicable characteristics are:
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
radical:
is an unlabeled sosofo containing a
single character flow object to be used for the radical glyph.
This characteristic is not inherited. If not specified,
it is defaulted in a system-dependent way.
The math-operator flow object describes a four-part area. The parts described are:
the base area,
the lower-limit area,
the upper-limit area,
the operator-symbol area.
The flow object has the following ports:
the principal port, which is used for the main content of the flow object.
operator
, which is used for the operator symbol.
lower-limit
, which is used for the lower-limit content of
the flow object.
upper-limit
, which is used for the upper-limit content of
the flow object.
The applicable characteristics are:
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
display
indicates that the limits are typically placed before or
after the operator-symbol in the line-progression direction.
inline
indicates that the limits are typically placed
after the operator-symbol in the inline-progression direction.
The grid flow object describes a series of areas arranged in a grid.
The column-progression direction for the grid is the escapement
direction,
and the row-progression direction is the line-progression direction.
A matrix is handled by enclosing a grid flow object
in a fence flow object.
The flow object has a single principal port used for all content. It shall accept flow objects of the class grid-cell.
The applicable characteristics are:
grid-position-cell-type:
is a symbol specifying how the
positioning of cells in the grid is determined as follows:
explicit
indicating that each grid-cell has an explicit
row- and column-number.
row-major
indicating that the position of each cell
is determined by where it occurs in the content of
the grid; the cells in one row occur before the cells
in subsequent rows.
column-major
indicating that the position of each cell
is determined by where it occurs in the content of
the grid; the cells in one column occur before the cells
in subsequent columns.
The initial value is row-major
.
grid-n-columns:
is a strictly positive integer that
specifies the number of columns in the grid.
This characteristic is not inherited and shall be specified if
grid-position-cell-type:
is row-major
or explicit
.
grid-n-rows:
is a strictly positive integer that
specifies the number of rows in the grid.
This characteristic is not inherited and shall be specified if
grid-position-cell-type:
is column-major
or explicit
.
grid-column-alignment:
is a symbol that specifies the
alignment of the areas in the grid in the grid's column-progression
direction. Permitted values are start
,
center
, and end
. The initial value is
center
.
grid-row-alignment:
is a symbol that specifies the
alignment of the areas in the grid in the grid's row-progression
direction. Permitted values are start
,
center
, and end
. The initial value is
center
.
grid-equidistant-rows?:
is a boolean that specifies
whether the areas in the grid shall be positioned so that their
centers are equidistant in the grid's row-progression direction. The
initial value is #f.
grid-equidistant-columns?:
is a boolean that specifies
whether the areas in the grid shall be positioned so that their
centers are equidistant in the grid's column-progression direction.
The initial value is #f.
math-display-mode:
is
one of the symbols display
or inline
specifying
the style of formatting.
The initial value is display
.
The grid-cell flow object is a container for the content of each cell in a grid.
The flow object has a single principal port used for all content. It shall accept flow objects of the same class as the port of a math-sequence flow object.
The applicable characteristics are:
column-number:
is a strictly positive integer specifying the column
for this cell.
This characteristic is not inherited.
This characteristic shall be specified if and only if it occurs
in a grid with a grid-position-cell-type:
of explicit
.
The value shall not exceed the value specified for the grid-n-columns:
characteristic of the grid in which it occurs.
The number of the first column is 1.
row-number:
is a strictly positive integer specifying the row
for this cell.
This characteristic is not inherited.
This characteristic shall be specified if and only if it occurs
in a grid with a grid-position-cell-type:
of explicit
.
The value shall not exceed the value specified for the grid-n-rows:
characteristic of the grid in which it occurs.
The number of the first row is 1.
In any grid, there shall not be two or more grid cells that have both
the same column-number:
and the same row-number:
characteristic.
Specification of tabular formatting makes use of the following flow object classes:
table,
table-part,
table-column,
table-row,
table-cell,
table-border.
A table flow object has a single principal port. The contents of this port shall be either:
all of class table-part, or
all of class table-column, table-row, or table-cell.
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
shall be perpendicular.
A table flow object has the following characteristics:
table-width:
is a length-spec that specifies the size of the
table in the column-progression direction, or, if the
table-auto-width
feature is used, #f indicating that the width
of the table should be the minimum that will accommodate its content.
This characteristic is not inherited. The default value is the
display-size less any applicable indent.
table-auto-width-method:
is #f or a string specifying a public
identifier for the method to be used to determine the widths of
columns. This applies only if the table-auto-width
feature is
present. The initial value is #f.
table-border:
is an unlabeled sosofo containing a single
table-border flow object. A value of #t or #f is also allowed; this
is equivalent to a table-border with a border-present?:
characteristic equal to #t or #f, respectively, and all other
characteristics inherited from the table. This characteristic
determines the default value for the before-row-border:
,
after-row-border:
, before-column-border:
, and
after-column-border:
characteristics. The initial value is #f.
before-row-border:
is an unlabeled sosofo containing a single
table-border flow object to be used as the border on the side of the
table that is before the table in the row-progression direction. A
value of #t or #f is also allowed; this is equivalent to a
table-border with a border-present?:
characteristic equal to #t
or #f, respectively, and all other characteristics inherited from the
table. This characteristic is not inherited. The default value is
the value of the table-border:
characteristic.
after-row-border:
is the same as before-row-border:
but applies to the side of the table that is after the table
in the row-progression direction.
before-column-border:
is the same as before-row-border:
but applies to the side of the table that is before the table
in the column-progression direction.
after-column-border:
is the same as before-row-border:
but applies to the side of the table that is after the table
in the column-progression direction.
table-corner-rounded:
specifies whether the corners
of the table shall be drawn as quarter circles as follows:
#f indicating that no corners shall be rounded.
#t indicating that all corners shall be rounded.
a list of the symbols identifying the individual corners that shall
be rounded; each symbol shall be of the form -
before
or after
specifying whether the corner
is before or after the table in the column-progression direction and
before
or after
specifying whether the corner
is before or after the table in the row-progression direction.
The initial value is #f.
table-corner-radius:
is a length-spec specifying the radius of
the quarter circles to be used when table-corner-rounded:
is not #f. A negative value indicates that the center of the circle
is at the point where the edges intersect; in this case, the corners
shall be concave.
The initial value is 3pt.
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.
display-alignment:
is one of the symbols start
,
center
, end
, inside
, or outside
specifying
the alignment of the areas resulting from the flow object in the
direction of the writing-mode.
The initial value is start
.
This determines how the flow object expands
its areas so their size is equal to the display size in the direction
perpendicular to the area container's filling-direction. First space
is added to the area so that its size is equal to the display size
less the sum of the start and end indents:
if the alignment is start
, the space is all added
at the end in the direction of the writing-mode;
if the alignment is end
, the space is all added
at the start in the direction of the writing-mode;
if the alignment is center
, the space is added equally
at the start and the end in the direction of the writing-mode;
if the alignment is inside
, then the flow object shall have an
ancestor of class page-sequence, the direction of the writing-mode
shall be perpendicular to the binding-edge:
of the
page-sequence, and the space shall be added on the edge that is
outside with respect to the spread;
if the alignment is outside
, then the flow object shall have an
ancestor of class page-sequence, the direction determined by the
writing-mode shall
be perpendicular to the binding-edge:
of the page-sequence, and
the space shall be added on the edge that is inside with respect to
the spread.
Then an amount of space equal to the start-indent is added at the start in the direction of the writing-mode, and an amount of space equal to the end-indent is added at the end in the direction of the writing-mode.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
span:
is a strictly positive integer specifying the number of columns
that the areas resulting from this flow object shall span.
This characteristic shall apply if the flow object is directed into
a port on a column-set-sequence flow object that is flowed
into the top-float, bottom-float, or body-text zone of a spannable
column-subset. The initial value is 1.
span-weak?:
is a boolean specifying whether the areas resulting
from this flow object span weakly rather than strongly. See span:
characteristic with a value
greater than 1. The initial 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.
A table-part flow object is allowed only within a table flow object. A table-part flow object has three ports:
the principal port, which is used for the table body.
header
, which is used for the table header.
footer
, which is used for the table footer.
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.
The following characteristics are applicable:
table-part-omit-middle-header?:
is a boolean which if true
specifies that a table-part whose first area is not at the beginning
of an area produced by the table shall not start with the content of
its header port. The initial value is #f.
table-part-omit-middle-footer?:
is a boolean which if true
specifies that a table-part whose last area is not at the end
of an area produced by the table shall not end with the content of
its footer port. The initial 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.
A table-column flow object is an atomic flow object that specifies characteristics applicable to table-cells that have the same column and span.
It has the following characteristics:
column-number:
is a strictly positive integer specifying the column
number of the table-cells that are to inherit their characteristics from
this table-column flow object.
The default is 1 plus the column-number:
of the previous table-column
flow object, if there is a previous table-column, and otherwise 1.
This characteristic is not inherited.
n-columns-spanned:
is a strictly positive integer specifying the
number of columns spanned by table-cells
that are to inherit their characteristics from
this table-column flow object.
This characteristic is not inherited.
The default value is 1.
width:
is a length-spec specifying the width of this column.
This characteristic is not inherited.
This characteristic shall not be specified for table-column flow objects
for which the n-columns-spanned:
characteristic is greater than 1.
The width:
characteristic shall be specified for every column
unless the table-auto-width
feature is present.
display-alignment:
is one of the symbols start
,
center
, end
, inside
, or outside
specifying
the alignment of the areas resulting from the flow object in the
direction of the writing-mode.
The initial value is start
.
This determines how the flow object expands
its areas so their size is equal to the display size in the direction
perpendicular to the area container's filling-direction. First space
is added to the area so that its size is equal to the display size
less the sum of the start and end indents:
if the alignment is start
, the space is all added
at the end in the direction of the writing-mode;
if the alignment is end
, the space is all added
at the start in the direction of the writing-mode;
if the alignment is center
, the space is added equally
at the start and the end in the direction of the writing-mode;
if the alignment is inside
, then the flow object shall have an
ancestor of class page-sequence, the direction of the writing-mode
shall be perpendicular to the binding-edge:
of the
page-sequence, and the space shall be added on the edge that is
outside with respect to the spread;
if the alignment is outside
, then the flow object shall have an
ancestor of class page-sequence, the direction determined by the
writing-mode shall
be perpendicular to the binding-edge:
of the page-sequence, and
the space shall be added on the edge that is inside with respect to
the spread.
Then an amount of space equal to the start-indent is added at the start in the direction of the writing-mode, and an amount of space equal to the end-indent is added at the end in the direction of the writing-mode. This is used for aligning the first line of each externally aligned paragraph in the column.
start-indent:
is a length-spec specifying the indent
for the edge of the area at the start in the direction of the writing-mode.
The initial value is 0pt.
This is used for aligning the first line of each externally aligned paragraph
in the column.
end-indent:
is a length-spec specifying the indent
for the edge of the area at the end in the direction of the writing-mode.
The initial value is 0pt.
This is used for aligning the first line of each externally aligned paragraph
in the column.
Any inherited characteristic that is specified on a table-column flow
object may be inherited by table-cells (or indirectly by the content
of table-cells) as described in
If the table-auto-width
feature is not enabled, the number of
columns in a table-part or in a table that contains no table-parts is
determined by the table-column flow objects in its principal port. For
every cell in the content, and for every column spanned by that cell,
there shall be a table-column flow object whose column-number is equal
to the number of that column. If the table-auto-width
feature
is enabled, then the number of columns is determined automatically
from the content of the table.
Returns a length-spec that specifies This allows the width of a column to be specified proportionally.
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.
This clause applies when the table-auto-width
feature is
enabled.
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.
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, and 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.
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.
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.
A table-cell has the following characteristics:
When an earlier table-row has table-cells that span more than one row,
then table-cells in subsequent table-rows shall use the
column-number:
is a strictly positive integer
specifying the number of the first column to be spanned
by this table-cell. This characteristic is not inherited.
The default value is the current column-number.
For the first table-cell in a table-row, the current column-number is 1.
For other table-cells, the current column-number is the column-number
of the previous table-cell in the row plus the number of columns spanned
by that previous table-cell.
column-number:
characteristic to avoid conflict.
n-columns-spanned:
is a strictly positive integer specifying the
number
of columns which this cell spans in the column-progression direction
starting with the current column. This characteristic is not
inherited. The default value is 1.
n-rows-spanned:
is a strictly positive integer specifying the
number
of rows which this cell spans in the row-progression direction starting
with the current row. This characteristic is not inherited. The
default value is 1.
cell-before-row-margin:
is a length giving the margin before
the row in row-progression direction.
The initial value is 0pt.
cell-after-row-margin:
is a length giving the margin after
the row in row-progression direction.
The initial value is 0pt.
cell-before-column-margin:
is a length giving the margin before
the column in column-progression direction. The initial value is 0pt.
The display-size for the content of the cell is equal to the width of
the cell less the sum of the cell-before-column-margin:
and
cell-after-column-margin:
characteristics.
cell-after-column-margin:
is a length giving the margin after
the column in the column-progression direction.
The initial value is 0pt.
cell-row-alignment:
is one of the symbols start
,
end
, or center
specifying the alignment of the content
of the cell in the row-progression direction.
The initial value is start
.
cell-background?:
is a boolean specifying whether the cell
has a solid background. If it does, then the background-color:
characteristic specifies the color to be used for the background.
The initial value is #f.
background-color:
is either #f or an object of type color that
specifies the color
in which the marks for the flow object's background should be made.
The initial value is #f.
This applies only if the cell-background?:
characteristic
is true.
background-layer:
is an integer specifying the layer of the
marks of the areas resulting
from the background of a flow object.
The initial value is -1.
This applies only if the cell-background?:
characteristic
is true.
cell-before-row-border:
is an unlabeled sosofo containing a
single table-border flow object to be used as the border on the side
of the table that is before the cell in the row-progression direction.
A value of #t or #f is also allowed; this is equivalent to a
table-border with a border-present?:
characteristic equal to #t
or #f, respectively, with all other characteristics inherited from the
table-cell.
The initial value is #f.
cell-after-row-border:
is the same as cell-before-row-border:
but applies to the side of the cell that is after the cell
in the row-progression direction.
cell-before-column-border:
is the same as cell-before-row-border:
but applies to the side of the cell that is before the cell
in the column-progression direction.
cell-after-column-border:
is the same as cell-before-row-border:
but applies to the side of the cell that is after the cell
in the column-progression direction.
starts-row?:
is a boolean specifying whether this cell starts a
row. This is allowed only for table-cells that are not in table-rows.
The default value is #f. This characteristic is not inherited. A
cell that is not part of a table-row will start a row if the
starts-row?:
characteristic is true, or if there is no previous
flow object, or if the previous flow object is not a table-cell, or if
the previous flow object is a table-cell with the ends-row?:
characteristic true.
ends-row?:
is a boolean specifying whether this cell ends a
row. This is allowed only for table-cells that are not in table-rows.
The default value is #f. This characteristic is not inherited.
cell-crossed:
is either #f or one of the following symbols:
with
specifying that a single diagonal line shall be drawn
through the cell
from the corner that is first in both the row- and column-progression
directions to the diagonally opposite corner.
against
specifying that a single diagonal line
shall be drawn from the corner that is first in the
row-progression direction and last in the column-progression direction
to the diagonally opposite corner.
both
specifying that
a pair of lines shall be drawn through the cell from each corner to
the diagonally opposite corner.
The initial value is #f. The appearance of the lines is determined by the values of the following line characteristics for the table-cell.
line-cap:
is one of the symbols butt
,
round
, or square
specifying the cap style for the line.
The initial value is butt
.
This applies to the lines drawn when the cell-crossed:
characteristic
is true.
line-dash:
is a list of one or more lengths that
specifies the dash pattern of the line. The first length specifies
the number component of the CurrentDashPattern graphics state variable
in ISO/IEC 10180. The remaining lengths specify the vector component
of the CurrentDashPattern graphics state variable.
The initial value is a list containing the length 0pt.
This applies to the lines drawn when the cell-crossed:
characteristic
is true.
line-thickness:
is a length that specifies the
thickness of the line or lines.
The initial value is 1pt.
This applies to the lines drawn when the cell-crossed:
characteristic
is true.
line-repeat:
is a strictly positive integer that specifies
the number of parallel lines to be drawn. For example, a value of 2
indicates a double line.
The initial value is 1.
This applies to the lines drawn when the cell-crossed:
characteristic
is true.
line-sep:
is a length that gives the distance between
the centers of parallel lines.
The initial value is 1pt.
This applies to the lines drawn when the cell-crossed:
characteristic
is true.
float-out-sidelines?:
is a boolean which if true specifies
that sideline attachments on the content of a cell shall be
detached from the cell and attached to the table instead.
The initial value is #f.
float-out-marginalia?:
is a boolean which if true specifies
that marginalia attachments on the content of a cell shall be
detached from the cell and attached to the table instead.
The initial value is #f.
float-out-line-numbers?:
is a boolean which if true specifies
that line-number attachments on the content of a cell shall be
detached from the cell and attached to the table instead.
The initial value is #f.
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.
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 following characteristics are applicable:
This characteristic resolves conflicts between the specification of
the border of the table and the specification of the border of cells
as well as between the specifications of the borders of adjacent
cells.
border-priority:
is an integer that determines how conflicts
between border specifications are resolved. When there are two
table-border flow objects that apply to a particular segment of a
border, then the one that has the larger priority shall be used. It
shall be an error if there are two such table-borders that have
the same priority but are not
identical. The initial value is 0.
border-alignment:
is a symbol specifying the alignment
of the border's line relative to the position of the border, as follows:
center
specifying that the line shall be centered with
respect to the position of the border.
start
specifying that the edge of the line that is the starting
edge in the row- or column-progression direction shall be aligned with
the position of the border.
end
specifying that the edge of the line that is the ending
edge in the row- or column-progression direction shall be aligned with
the position of the border.
outside
specifying that the edge of the line that is an outer
edge of the table shall be aligned with the position of the border.
This is allowed only for borders that are at the edge of the table.
inside
specifying that the edge of the line that is not the
outer edge of the table shall be aligned with the position of the
border. This is allowed only for borders that are at the edge of the
table.
The initial value is center
.
border-present?:
is a boolean specifying whether the border
shall be present.
The initial value is #t.
border-omit-at-break?:
is a boolean specifying whether this
border shall be omitted if adjacent to a break in the table. A
border shall be omitted if either this characteristic or the
border-present?:
characteristic is #f.
This is applicable only to borders
that are parallel to the row-progression direction.
The initial value is #f.
color:
is an object of type color that specifies the color
in which the flow object's marks should be made.
The initial value is the default color in the Device Gray color space.
layer:
is an integer specifying the layer of the
marks of the areas resulting
from the flow object. An area shall be imaged after any area whose
layer has a lower value.
The initial value is 0.
line-cap:
is one of the symbols butt
,
round
, or square
specifying the cap style for the line.
The initial value is butt
.
line-dash:
is a list of one or more lengths that
specifies the dash pattern of the line. The first length specifies
the number component of the CurrentDashPattern graphics state variable
in ISO/IEC 10180. The remaining lengths specify the vector component
of the CurrentDashPattern graphics state variable.
The initial value is a list containing the length 0pt.
line-thickness:
is a length that specifies the
thickness of the line or lines.
The initial value is 1pt.
line-repeat:
is a strictly positive integer that specifies
the number of parallel lines to be drawn. For example, a value of 2
indicates a double line.
The initial value is 1.
line-sep:
is a length that gives the distance between
the centers of parallel lines.
The initial value is 1pt.
line-miter-limit:
is a number that specifies the miter
limit for line joins.
The semantics of the miter limit are described in ISO/IEC 10180.
The initial value is 10.
line-join:
is one of the symbols miter
,
round
, or bevel
specifying the join style of the line.
The initial value is miter
.
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.
The facilities described in this clause require the online
feature.
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.
This flow object has the following characteristics:
filling-direction:
is one of the symbols top-to-bottom
,
left-to-right
, or right-to-left
. It
specifies the filling-direction of the area container. The
filling-direction
of the area container may be perpendicular to the placement
direction.
The initial value is top-to-bottom
.
writing-mode:
is one of the symbols left-to-right
,
right-to-left
, or top-to-bottom
. The direction
determined by the writing-mode
shall be perpendicular to the placement direction. The
initial value is left-to-right
.
This is used to determine which side of the flow object the
start-margin:
and end-margin:
characteristics
apply to.
background-color:
is either #f or an object of type color that
specifies the color
in which the marks for the flow object's background should be made.
The initial value is #f.
background-layer:
is an integer specifying the layer of the
marks of the areas resulting
from the background of a flow object.
The initial value is -1.
background-tile:
is either #f or a public identifier specifying
an image that should be repeated to cover the background of the
scroll. The initial value is #f.
start-margin:
is a length-spec specifying the distance from the
edge of the resulting area that is first in the writing-mode direction
to the nearest edge of the text area. The initial value is 0pt.
end-margin:
is a length-spec specifying the distance from the
edge of the resulting area that is last in the writing-mode direction
to the nearest edge of the text area.
The initial value is 0pt.
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.
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.
This flow object has the following characteristics:
The string might be displayed in a menu.
multi-modes:
is a list.
The number of members of the list gives the number
of modes of presentation.
The list shall have at least two members.
Each member of the list can be a specification
of a port or a list consisting of a specification
of a port and a string giving a description of the mode.
The specification of a port is either #f specifying
the principal port or a symbol specifying a named port.
A port specification shall not occur more than once in the list.
There shall be one port specification of #f in the list.
The corresponding mode is the principal mode.
This characteristic is not inherited and shall be specified.
principal-mode-simultaneous?:
is a boolean specifying
whether the principal mode is simultaneous with the other
modes. If it is, then when the current presentation mode
is a mode other than the principal mode, both the content
of the port for the principal mode and the content of the port
for the current mode shall be displayed.
The initial value is #f.
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.
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 a character flow object representing an icon and
the second containing a scroll flow object.
In this case, the principal-mode-simultaneous?:
characteristic
would be true.
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. It has the following characteristic:
destination:
is either #f or an object of type address or a
list of one or more objects of type address. See
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. See
The behavior when there is more than one marginalia area attached to a single line is system-dependent.
A marginalia flow object has the following characteristics:
marginalia-sep:
is a length-spec specifying the separation for the
attachment.
The initial value is 0pt.
marginalia-side:
is one of the symbols start
or
end
specifying which side of the line the marginalia area shall be
attached to.
The initial value is start
.
marginalia-keep-with-previous?:
specifies whether the marginalia
area shall be associated with the last area of the previous flow
object instead of the first area resulting from the following flow object.
The initial value is #f.
For examples, tutorials, production cross reference list, and other
relevant material for the understanding and implementation of DSSSL
see the following web site and ftp address: