W3C

Extensible Stylesheet Language (XSL)
Version 1.0

W3C Working Draft 12 January 2000

This version:
http://www.w3.org/TR/2000/WD-xsl-20000112
Latest version:
http://www.w3.org/TR/xsl
Previous version:
http://www.w3.org/TR/1999/WD-xsl-19990421
Authors and Contributors:
Sharon Adler (IBM) <sca@us.ibm.com>
Anders Berglund (IBM) <alrb@us.ibm.com>
Jeff Caruso (Bitstream) <jcaruso@bitstream.com>
Stephen Deach (Adobe) <sdeach@adobe.com>
Alex Milowski (Lexica) <alex@milowski.com>
Scott Parnell (Xerox) <Scott.Parnell@usa.xerox.com>
Jeremy Richman (Interleaf) <jrichman@hq.ileaf.com>
Steve Zilles (Adobe) <szilles@adobe.com>

Abstract

XSL is a language for expressing stylesheets. It consists of two parts:

  1. a language for transforming XML documents, and

  2. an XML vocabulary for specifying formatting semantics.

An XSL stylesheet specifies the presentation of a class of XML documents by describing how an instance of the class is transformed into an XML document that uses the formatting vocabulary.

Status of this document

This is a W3C Working Draft for review by W3C members and other interested parties. This adds additional functionality to what was described in the previous draft. It is a draft document and may be updated, replaced, or obsoleted by other documents at any time. The XSL Working Group will not allow early implementation to constrain its ability to make changes to this specification prior to final release. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". A list of current W3C working drafts can be found at http://www.w3.org/TR/.

This document has been produced as part of the W3C Style Activity by the XSL Working Group (members only).

Comments may be sent to xsl-editors@w3.org. Public discussion of XSL takes place on the XSL-List mailing list.

Table of contents

1 Introduction to XSL
    1.1 Processing a stylesheet
        1.1.1 Transformation
        1.1.2 Formatting
        1.1.3 Rendering
    1.2 An example
    1.3 Why XSL => Benefits of XSL
    1.4 How to Read this Document
2 Introduction to XSL Transformation
    2.1 Tree Construction
    2.2 XSL Namespace
3 Introduction to Formatting
    3.1 Conceptual Procedure
4 Area Model
    4.1 Introduction
    4.2 Rectangular Areas
        4.2.1 Area Types
        4.2.2 Common Traits
        4.2.3 Geometric Definitions
        4.2.4 Ordering
    4.3 Spaces and Conditionality
    4.4 Block-areas
    4.5 Stacked Block-areas
    4.6 Line-areas
    4.7 Inline-areas
    4.8 Stacked Inline-areas
    4.9 Glyph-areas
5 Property Refinement / Resolution
    5.1 Specified, Computed, and Actual Values and Inheritance
        5.1.1 Specified Values
        5.1.2 Computed Values
        5.1.3 Actual Values
    5.2 Inheritance
    5.3 Computing the Values of Corresponding Properties
        5.3.1 Properties with a Simple Correspondance
        5.3.2 Space and Margin Properties
        5.3.3 Start-indent and End-indent
    5.4 Expressions
        5.4.1 Property Context
        5.4.2 Evaluation Order
        5.4.3 Basics
        5.4.4 Function Calls
        5.4.5 Numerics
        5.4.6 Absolute Numerics
        5.4.7 Relative Numerics
        5.4.8 Strings
        5.4.9 Colors
        5.4.10 Keywords
        5.4.11 Lexical Structure
        5.4.12 Expression Value Conversions
    5.5 Core Function Library
        5.5.1 Number Functions
        5.5.2 Color Functions
        5.5.3 Font Functions
        5.5.4 Property Value Functions
    5.6 Property Datatypes
6 Formatting Objects
    6.1 Introduction to Formatting Objects
        6.1.1 Definitions Common to Many Formatting Objects
    6.2 Formatting Object Content
    6.3 Formatting Objects Summary
    6.4 Pagination and Layout Formatting Objects
        6.4.1 Introduction
        6.4.2 fo:root
        6.4.3 fo:page-sequence
        6.4.4 fo:layout-master-set
        6.4.5 fo:page-sequence-master
        6.4.6 fo:single-page-master-reference
        6.4.7 fo:repeatable-page-master-reference
        6.4.8 fo:repeatable-page-master-alternatives
        6.4.9 fo:conditional-page-master-reference
        6.4.10 fo:simple-page-master
        6.4.11 fo:region-body
        6.4.12 fo:region-before
        6.4.13 fo:region-after
        6.4.14 fo:region-start
        6.4.15 fo:region-end
        6.4.16 fo:flow
        6.4.17 fo:static-content
    6.5 Block-level Formatting Objects
        6.5.1 Introduction
        6.5.2 fo:block
        6.5.3 fo:block-container
    6.6 Inline-level Formatting Objects
        6.6.1 Introduction
        6.6.2 fo:bidi-override
        6.6.3 fo:character
        6.6.4 fo:initial-property-set
        6.6.5 fo:external-graphic
        6.6.6 fo:instream-graphic
        6.6.7 fo:inline
        6.6.8 fo:inline-container
        6.6.9 fo:leader
        6.6.10 fo:page-number
        6.6.11 fo:page-number-citation
    6.7 Formatting Objects for Tables
        6.7.1 Introduction
        6.7.2 fo:table-and-caption
        6.7.3 fo:table
        6.7.4 fo:table-column
        6.7.5 fo:table-caption
        6.7.6 fo:table-header
        6.7.7 fo:table-footer
        6.7.8 fo:table-body
        6.7.9 fo:table-row
        6.7.10 fo:table-cell
    6.8 Formatting Objects for Lists
        6.8.1 Introduction
        6.8.2 fo:list-block
        6.8.3 fo:list-item
        6.8.4 fo:list-item-body
        6.8.5 fo:list-item-label
    6.9 Link and Multi Formatting Objects
        6.9.1 Introduction
        6.9.2 fo:simple-link
        6.9.3 fo:multi-switch
        6.9.4 fo:multi-case
        6.9.5 fo:multi-toggle
        6.9.6 fo:multi-properties
        6.9.7 fo:multi-property-set
    6.10 Out-of-Line Formatting Objects
        6.10.1 Introduction
        6.10.2 fo:float
        6.10.3 fo:footnote
        6.10.4 fo:footnote-citation
    6.11 Other Formatting Objects
        6.11.1 Introduction
        6.11.2 fo:wrapper
7 Formatting Properties
    7.1 Description of Property Groups
    7.2 Common Accessibility Properties
        7.2.1 source-document
        7.2.2 role
    7.3 Common Absolute Position Properties
        7.3.1 position
        7.3.2 top
        7.3.3 right
        7.3.4 bottom
        7.3.5 left
    7.4 Common Aural Properties
        7.4.1 azimuth
        7.4.2 cue
        7.4.3 cue-after
        7.4.4 cue-before
        7.4.5 elevation
        7.4.6 pause
        7.4.7 pause-after
        7.4.8 pause-before
        7.4.9 pitch
        7.4.10 pitch-range
        7.4.11 play-during
        7.4.12 richness
        7.4.13 speak
        7.4.14 speak-header
        7.4.15 speak-numeral
        7.4.16 speak-punctuation
        7.4.17 speech-rate
        7.4.18 stress
        7.4.19 voice-family
        7.4.20 volume
    7.5 Common Border, Padding, and Background Properties
        7.5.1 background
        7.5.2 background-attachment
        7.5.3 background-color
        7.5.4 background-image
        7.5.5 background-repeat
        7.5.6 background-position
        7.5.7 border-before-color
        7.5.8 border-before-style
        7.5.9 border-before-width
        7.5.10 border-after-color
        7.5.11 border-after-style
        7.5.12 border-after-width
        7.5.13 border-start-color
        7.5.14 border-start-style
        7.5.15 border-start-width
        7.5.16 border-end-color
        7.5.17 border-end-style
        7.5.18 border-end-width
        7.5.19 border-top-color
        7.5.20 border-top-style
        7.5.21 border-top-width
        7.5.22 border-bottom-color
        7.5.23 border-bottom-style
        7.5.24 border-bottom-width
        7.5.25 border-left-color
        7.5.26 border-left-style
        7.5.27 border-left-width
        7.5.28 border-right-color
        7.5.29 border-right-style
        7.5.30 border-right-width
        7.5.31 border
        7.5.32 border-top
        7.5.33 border-bottom
        7.5.34 border-left
        7.5.35 border-right
        7.5.36 border-color
        7.5.37 border-style
        7.5.38 border-width
        7.5.39 padding-before
        7.5.40 padding-after
        7.5.41 padding-start
        7.5.42 padding-end
        7.5.43 padding-top
        7.5.44 padding-bottom
        7.5.45 padding-left
        7.5.46 padding-right
        7.5.47 padding
    7.6 Common Font Properties
        7.6.1 font
        7.6.2 font-family
        7.6.3 font-size
        7.6.4 font-stretch
        7.6.5 font-size-adjust
        7.6.6 font-style
        7.6.7 font-variant
        7.6.8 font-weight
    7.7 Common Hyphenation Properties
        7.7.1 xml:lang
        7.7.2 country
        7.7.3 language
        7.7.4 script
        7.7.5 hyphenate
        7.7.6 hyphenation-character
        7.7.7 hyphenation-push-character-count
        7.7.8 hyphenation-remain-character-count
    7.8 Common Keeps and Breaks Properties
        7.8.1 page-break-after
        7.8.2 page-break-before
        7.8.3 break-after
        7.8.4 break-before
        7.8.5 keep-with-next
        7.8.6 keep-with-previous
    7.9 Common Margin Properties-Block
        7.9.1 margin-top
        7.9.2 margin-bottom
        7.9.3 margin-left
        7.9.4 margin-right
        7.9.5 margin
        7.9.6 space-before
        7.9.7 space-after
        7.9.8 start-indent
        7.9.9 end-indent
    7.10 Common Margin Properties-Inline
        7.10.1 space-end
        7.10.2 space-start
    7.11 Pagination and Layout Properties
        7.11.1 column-count
        7.11.2 column-gap
        7.11.3 extent
        7.11.4 flow-name
        7.11.5 master-name
        7.11.6 region-name
        7.11.7 initial-page-number
        7.11.8 force-page-count
        7.11.9 maximum-repeats
        7.11.10 page-position
        7.11.11 odd-or-even
        7.11.12 blank-page
        7.11.13 page-height
        7.11.14 page-width
        7.11.15 precedence
    7.12 Table Properties
        7.12.1 border-collapse
        7.12.2 border-spacing
        7.12.3 caption-side
        7.12.4 column-number
        7.12.5 column-width
        7.12.6 empty-cells
        7.12.7 table-layout
        7.12.8 table-omit-header-at-break
        7.12.9 table-omit-footer-at-break
        7.12.10 number-columns-spanned
        7.12.11 number-rows-spanned
        7.12.12 number-columns-repeated
        7.12.13 may-break-after-row
        7.12.14 may-break-before-row
        7.12.15 ends-row
        7.12.16 starts-row
    7.13 Character Properties
        7.13.1 character
        7.13.2 letter-spacing
        7.13.3 word-spacing
        7.13.4 apply-word-spacing
        7.13.5 suppress-at-eol
        7.13.6 text-decoration
        7.13.7 text-shadow
        7.13.8 text-transform
    7.14 Rule and Leader Properties
        7.14.1 leader-alignment
        7.14.2 leader-pattern
        7.14.3 leader-pattern-width
        7.14.4 leader-length
        7.14.5 rule-style
        7.14.6 rule-thickness
    7.15 Page-related Properties
        7.15.1 page-break-inside
        7.15.2 keep
        7.15.3 orphans
        7.15.4 widows
    7.16 Float-related Properties
        7.16.1 float
        7.16.2 clear
    7.17 Properties for Number to String Conversion
        7.17.1 format
        7.17.2 letter-value
        7.17.3 grouping-separator
        7.17.4 grouping-size
    7.18 Properties for Links
        7.18.1 external-destination
        7.18.2 internal-destination
        7.18.3 show-destination
        7.18.4 indicate-destination
        7.18.5 destination-placement-offset
        7.18.6 auto-restore
        7.18.7 starting-state
        7.18.8 case-name
        7.18.9 case-title
        7.18.10 switch-to
        7.18.11 dom-state
    7.19 Miscellaneous Properties
        7.19.1 clip
        7.19.2 baseline-shift
        7.19.3 color
        7.19.4 direction
        7.19.5 unicode-bidi
        7.19.6 glyph-orientation-horizontal
        7.19.7 glyph-orientation-vertical
        7.19.8 font-height-override-after
        7.19.9 font-height-override-before
        7.19.10 height
        7.19.11 min-height
        7.19.12 max-height
        7.19.13 block-progression-dimension
        7.19.14 minimum-block-progression-dimension
        7.19.15 maximum-block-progression-dimension
        7.19.16 href
        7.19.17 hyphenation-keep
        7.19.18 hyphenation-ladder-count
        7.19.19 id
        7.19.20 inhibit-line-breaks
        7.19.21 last-line-end-indent
        7.19.22 line-height-shift-adjustment
        7.19.23 line-height
        7.19.24 line-stacking-strategy
        7.19.25 overflow
        7.19.26 provisional-label-separation
        7.19.27 provisional-distance-between-starts
        7.19.28 ref-id
        7.19.29 reference-orientation
        7.19.30 scale
        7.19.31 score-spaces
        7.19.32 size
        7.19.33 span
        7.19.34 text-align
        7.19.35 text-align-last
        7.19.36 text-indent
        7.19.37 vertical-align
        7.19.38 visibility
        7.19.39 width
        7.19.40 min-width
        7.19.41 max-width
        7.19.42 inline-progression-dimension
        7.19.43 minimum-inline-progression-dimension
        7.19.44 maximum-inline-progression-dimension
        7.19.45 white-space
        7.19.46 white-space-treatment
        7.19.47 linefeed-treatment
        7.19.48 space-treatment
        7.19.49 white-space-collapse
        7.19.50 wrap-option
        7.19.51 writing-mode
        7.19.52 z-index

Appendices

A Internationalization
    A.1 Additional writing-mode values
B Formatting Object Summary
    B.1 Pagination and Layout Formatting Objects
    B.2 Block Formatting Objects
    B.3 Inline Formatting Objects
    B.4 Table Formatting Objects
    B.5 List Formatting Objects
    B.6 Link and Multi Formatting Objects
    B.7 Out-of-line Formatting Objects
    B.8 Other Formatting Objects
C Property Index
    C.1 Explanation of Trait Mapping Values:
    C.2 Property Table: Part I
    C.3 Property Table: Part II
D References
    D.1 Normative References
    D.2 Other References
E Acknowledgements (Non-Normative)

1 Introduction to XSL

1.1 Processing a stylesheet

The following section is still to be developed. It will contain pictures and an explanation of the XSL "Processing Model".

1.1.1 Transformation

TBD

1.1.2 Formatting

TBD

1.1.3 Rendering

Issue (imaging-model-font-indices):

The plan is to reference SVG Section 4: Rendering Model. Does SVG permit glyph indices into a particular font?

1.2 An example

TBD

1.3 Why XSL => Benefits of XSL

TBD

1.4 How to Read this Document

TBD

2 Introduction to XSL Transformation

What this section will contain:

XSLT fits in how

This is the normative reference to XSLT

2.1 Tree Construction

Issue (xslt-reference):

This serves temporary place-holder

The Tree Construction is described in "XSL Transformations (XSLT)".

The provisions in "XSL Transformations" form an integral part of this recommendation and are considered normative.

2.2 XSL Namespace

The XSL namespace has the URI http://www.w3.org/1999/XSL/Format.

NOTE:

The 1999 in the URI indicates the year in which the URI was allocated by the W3C. It does not indicate the version of XSL being used.

XSL processors must use the XML namespaces mechanism [W3C XML Names] to recognize elements and attributes from this namespace. Elements from the XSL namespace are recognized only in the stylesheet, not in the source document. Implementors must not extend the XSL namespace with additional elements or attributes. Instead, any extension must be in a separate namespace.

This specification uses the prefix fo: for referring to elements in the XSL namespace. However, XSL stylesheets are free to use any prefix, provided that there is a namespace declaration that binds the prefix to the URI of the XSL namespace.

An element from the XSL namespace may have any attribute not from the XSL namespace, provided that the expanded-name of the attribute has a non-null namespace URI. The presence of such attributes must not change the behavior of XSL elements and functions defined in this document. Thus, an XSL processor is always free to ignore such attributes, and must ignore such attributes without giving an error if it does not recognize the namespace URI. Such attributes can provide, for example, unique identifiers, optimization hints, or documentation.

It is an error for an element from the XSL namespace to have attributes with expanded-names that have null namespace URIs (i.e., attributes with unprefixed names) other than attributes defined for the element in this document.

NOTE:

The conventions used for the names of XSL elements, attributes, and functions are as follows: names are all lower-case, hyphens are used to separate words, dots are used to separate names for the components of complex datatypes, and abbreviations are used only if they already appear in the syntax of a related language such as XML or HTML.

3 Introduction to Formatting

The aim of this section is to describe the general process of formatting, enough to read the area model and the formatting-object descriptions and properties and to understand the process of refinement.

Formatting is the process of turning the result of an XSL transformation into a tangible form for the reader or listener. This process comprises several steps, some of which depend on others in a non-sequential way. Our model for formatting will be the construction of an area tree, which is an ordered tree containing geometric information for the placement of every glyph, shape, and image in the document, together with information embodying spacing constraints and other rendering information; this information is referred to under the rubric of traits, which are to areas what properties are to formatting objects and attributes are to XML nodes. Section 4 (see [4 Area Model]) will describe the area tree and define the default placement-constraints on stacked areas. However, this is an abstract model which need not be actually implemented in this way in a formatter, so long as the resulting tangible form obeys the implied constraints.

Formatting objects are elements in the formatting-object tree, whose names are from the XSL namespace; a formatting object belongs to a class of formatting objects identified by its element name. The formatting behavior of each class of formatting objects is described in terms of what areas are created by a formatting object of that class, how the traits of the areas are established based, and how the areas are structured hierarchically with respect to areas created by other formatting objects. Sections 6 (see [6 Formatting Objects]) and Section 7 (see [7 Formatting Properties] describe formatting objects and their properties.

Some formatting objects are block-level and others are inline-level. This refers to the types of areas which they generate, which in turn refer to their default placement method. Inline-areas (for example, glyph-areas) are collected into lines and the direction in which they are stacked is the inline-progression-direction. Lines are a type of block-area and these are stacked in a direction perpendicular to the inline-progression-direction, called the block-progression-direction. See Section 4 for detailed decriptions of these area types and directions.

In Western writing systems, the block-progression-direction is "top-to-bottom" and the inline-progression-direction is "left-to-right". This specification treats other writing systems as well and introduces the terms "block" and "inline" instead of using absolute indicators like "vertical" and "horizontal". Similarly this specification tries to give relatively-specified directions ("before" and "after" in the block-progression-direction, "start" and "end" in the inline-progression-direction) where appropriate, either in addition to or in place of absolutely-specified directions such as "top", "bottom", "left", and "right". These are interpreted according to the value of the writing-mode property.

Central to this model of formatting is refinement. This is a computational process which finalizes the specification of properties based on the attribute values in the XML result tree. Though the XML result tree and the formatting-object tree have very similar structure, it is helpful to think of them as separate conceptual entities. Refinement involves

Some of these operations (particularly evaluating expressions) depend on knowledge of the area tree. Thus refinement is not necessarily a straightforward, sequential procedure, but may involve look-ahead, back-tracking, or control-splicing with other processes in the formatter. Refinement is described more fully in Section 5. See (see [5 Property Refinement / Resolution]).

To summarize, formatting proceeds by constructing an area tree (containing areas and their traits) which satisfies constraints based on information contained in the XML result tree (containing element nodes and their attributes). Conceptually, there is an intermediate step of refinement, constructing a formatting-object tree (containing formatting objects and their properties); this step may proceed in an interleaved fashion during the construction of the area tree.

3.1 Conceptual Procedure

This subsection contains a conceptual description of how formatting could work. This conceptual procedure does not mandate any particular algorithms or data structures as long as the result obeys the implied constraints.

The procedure works by processing formatting objects. Each object, while being processed, may initiate processing in other objects. While the objects are hierarchically structured, the processing is not; processing of a given object is rather like a co-routine which may pass control to other processes, but pick up again later where it left off. The procedure starts by initiating the processing of the fo:root formatting object.

Unless otherwise specified, processing a formatting object creates areas and returns them to its parent to be placed in the area tree. Like a co-routine, it resumes control later and initiates formatting of its own children (if any), or some subset of them. The formatting object supplies parameters to its children based on the traits of areas already in the area tree, possibly including areas generated by the formatting object or its ancestors. It then disposes of the areas returned by its formatting-object children. It might simply return such an area to its parent (and will always do this if it does not generate areas itself), or alternatively it might arrange the area in the area tree according to the semantics of the formatting object; this may involve changing its geometric position. It terminates processing when all its children have terminated processing (if initiated) and it is finished generating areas.

Some formatting objects do not themselves generate areas, instead these formatting objects simply return the areas returned to them by their children. Alternatively, a formatting object may continue to generate (and return) areas based on information discovered while formatting its own children; for example, the fo:page-sequence formatting object will continue generating pages as long as it contains a flow with unprocessed descendants.

Areas received by an fo:root formatting object are pages, and are simply placed as children of the area tree root in the order in which they are returned, with no geometrical implications.

As a general rule, the order of the area tree parallels the order of the formatting-object tree. That is, if one formatting object precedes another in the depth-first traversal of the formatting-object tree, with neither containing the other, then all the areas generated by the first will precede all the areas generated by the second in the depth-first traversal of the area tree, unless otherwise specified. Typical exceptions to this rule would be things like inline floats, block floats, and footnotes.

At the end of the procedure, the areas and their traits have been constructed, and they are required to satisfy constraints described in the definitions of their associated formatting objects, and in the area model section. In particular, size and position of the areas will be subject to the placement and spacing constraints described in the area model, unless the formatting-object definition indicates otherwise.

The formatting-object definitions, property descriptions, and area model are not algorithms. Thus, the formatting-object semantics do not specify how the line-breaking algorithm must work in collecting characters into words, positioning words within lines, shifting lines within a container, etc. Rather this specification assumes that the formatter has done these things and describes the constraints which the result is supposed to satisfy.

4 Area Model

In XSL, one creates a tree of formatting objects that serve as inputs or specifications to a formatter. The formatter generates a hierarchical arrangement of areas which comprise the formatted result. This section defines the general model of areas and how they interact. The purpose is to present an abstract framework which is used in describing the semantics of formatting objects. It should be seen as describing a series of constraints for conforming implementations, and not as prescribing particular algorithms.

4.1 Introduction

The formatter generates an ordered tree, the area tree, which describes a geometric structuring of the output medium. The terms child, sibling, parent, descendant, and ancestor refer to this tree structure. The tree has a root node.

Each area tree node other than the root is called an area and is associated to a rectangular portion of the output medium. Areas are not formatting objects; rather, a formatting object generates zero or more rectangular areas, and normally each area is generated by a unique object in the formatting object tree.

NOTE:

The only exceptions are when several leaf nodes of the formatting object tree are combined to generate a single area, for example when several characters in sequence generate a single ligature glyph. In all such cases, relevant properties such as font-family and font-size are the same for all the generating formatting objects.

An area has a content-rectangle, the portion in which its child areas are assigned, and optional padding and border. The diagram shows how these portions are related to one another. The outer bound of the border is called the border-rectangle, and the outer bound of the padding is called the padding-rectangle.

Each area has a set of traits, a mapping of names to values, in the way elements have attributes and formatting objects have properties. Individual traits are used either for rendering the area or for defining constraints on the result of formatting, or both. Traits used strictly for formatting purposes or for defining constraints may be called formatting traits, and traits used for rendering may be called rendering traits. For the complete list of the type of traits see [C Property Index].

The semantics of each type of formatting object that generates areas are given in terms of which areas it generates and their place in the area-tree hierarchy. This may be further modified by interactions between the various types of formatting objects. The properties of the formatting object determine what areas are generated and how the formatting object's content is distributed among them. (For example, a word that is not to be hyphenated may not have its glyphs distributed into areas on two separate line-areas.)

The traits of an area are either:

1. "directly-derived" -- The values of directly-derived traits are the computed value of a property of the same name on the generating formatting object, or

2. "indirectly-derived" -- The values of indirectly-derived traits are the result of a computation involving the computed values of one or more properties on the generating formatting object, other traits on this area or other interacting areas (ancestors, parent, siblings, and/or children) and/or one or more values constructed by the formatter. The calculation formula may depend on the type of the formatting object.

This description assumes that refined values have been computed for all properties of formatting objects in the result tree, i.e., all relative and corresponding values have been computed and the inheritable values have been propagated as described in [5 Property Refinement / Resolution]. This allows the process of inheritance to be described once and avoids a need to repeat information on computing values in this description.

4.2 Rectangular Areas

4.2.1 Area Types

There are two types of areas: block-areas and inline-areas. These differ according to how they are typically stacked by the formatter. An area can have child areas of one type or the other as determined by the generating formatting object, but an area's children must all be of one type. One should note that although block-areas and inline-areas are typically stacked, some areas can be explicitly positioned.

A line-area is a special kind of block-area whose children are all inline-areas. A glyph-area is a special kind of inline-area which has no child areas, and has a single glyph image as content.

Typical examples would be: a paragraph rendered by using an fo:block formatting object, which generates block-areas, and a character rendered by using an fo:character formatting object, which generates an inline-area (in fact, a glyph-area).

4.2.2 Common Traits

Associated with any area are two directions, which are derived from the generating formatting object's "writing-mode" and "reference-orientation" properties: the block-progression-direction is the direction for stacking block-area descendants of the area, and the inline-progression-direction is the direction for stacking inline-area descendants of the area. Another trait, the shift-direction, is present on inline-areas and refers to the direction in which the baseline shifts are applied. Also the glyph-orientation defines the orientation of glyph-images in the rendered result.

An area has a Boolean trait is-indent-reference, which determines whether or not it establishes a coordinate system for specifying indents. An area for which this trait is true is called a reference-area. A reference-area may be either a block-area or an inline-area.

A set of traits describes the position, height, and width of the area. Other traits specify:

4.2.3 Geometric Definitions

As described above, the content-rectangle is the rectangle bounding the inside of the padding and is used to describe the constraints on the positions of descendant areas. It is possible that marks from glyph contents or descendant areas may appear outside the content-rectangle.

Related to this is the allocation-rectangle of an area, which is used to describe the constraints on the position of the area within its parent area. For an inline-area this extends to the content-rectangle in the block-progression-direction and to the border-rectangle in the inline-progression-direction.

Allocation- and content-rectangles of an inline-area

For a block-area, it extends to the border-rectangle in the block-progression-direction and outside the border-rectangle in the inline-progression-direction by an amount equal to the space-end, and in the opposite direction by an amount equal to the space-start. The traits actual-height and actual-width of an area apply to the content-rectangle.

NOTE:

The inclusion of space outside the border-rectangle of a block-area in the inline-progression-direction does not affect placement constraints, and is intended to promote compatibility with the CSS box model.

Allocation- and content-rectangles of a block-area

The edges of a rectangle are designated as follows:

The following diagram shows the correspondence between the various edge names for a mixed writing-mode example:

For purposes of this definition, the content-rectangle of an area uses the inline-progression-direction and block-progression-direction of that area; but the border-rectangle, padding-rectangle, and allocation-rectangle use the directions of its parent area. Thus the edges designated for the content-rectangle may not correspond with the same-named edges on the padding-, border-, and allocation-rectangles. This is important in the case of nested block-areas with different writing-modes.

Each inline-area has a designated position-point on the start-edge of its allocation-rectangle; for a glyph-area, this is a point on the leading edge of the glyph on its nominal baseline. The descent of an inline-area is defined to be how far its allocation-rectangle extends in the block-progression-direction from the position-point, and the ascent is defined to be how far the allocation-rectangle extends in the opposite direction. Together these add up to the actual-height of the inline-area.

4.2.4 Ordering

In the area tree, the set of areas with a given parent is ordered. The terms initial, final, preceding, and following refer to this ordering.

This extends to a strict partial ordering among all descendant areas of a given area by saying (recursively) that A precedes B (and B follows A) when

(This is a only a partial ordering, since it does not define an area as following or preceding its descendant areas.)

If C follows A and precedes B, C is said to be between A and B.

Typically areas follow one another in sequence when stacked, but some areas may be marked as not following the main sequence (e.g., floats and absolutely positioned areas). The out-of-sequence trait is a Boolean value which is true if the area is to be treated in this way; a sequenced-area is an area for which this trait is false.

Issue (out-of-line-or-sequence):

Inadvertent inconsistency between Area Model that uses term "out-of-sequence" and Introduction to Formatting Objects that uses the term "out-of-line" to be consistent with the categorization of formatting objects in the April Draft. Another discrepancy is between "sequenced-area" and "normal area". These need to be harmonized.

If A and B are sequenced block-areas, A consecutively precedes B (or B consecutively follows A) if A precedes B and there is no sequenced-area between A and B, and further: (1) all ancestors of A which precede B have zero border-after and padding-after, and (2) all ancestors of B which follow A have zero border-before and padding-before.

Similarly, if A and B are inline-areas, A consecutively precedes B (or B consecutively follows A) if A precedes B and there is no area between A and B, and further: (1) all ancestors of A which precede B have zero border-end and padding-end, and (2) all ancestors of B which follow A have zero border-start and padding-start.

NOTE:

The intention of the definition is to identify areas at any level of the tree which have only space between them.

Example. In this diagram each node represents a block-area. Assume that all padding and border widths are zero. Then A consecutively precedes B, A consecutively precedes C, C consecutively precedes D, B consecutively precedes E, and D consecutively precedes E; these are the only pairs of consecutively preceding elements in the diagram. If B had non-zero padding-after, then D would not consecutively precede E (though B would still consecutively precede E).

Recursively define an area A to be leading in another area B if

1. A is the initial child of B, or

2. A is the initial child of an area C, where C is leading in B and C has zero border-before and padding-before.

Define an area A to begin an area B if A is leading in B and all of A's ancestors which are descendants of B have zero space-before.

Recursively define an area A to be trailing in another area B if

1. A is the final child of B, or

2. A is the final child of an area C, where C is trailing in B and C has zero border-after and padding-after.

Define an area A to end an area B if A is trailing in B and all of A's ancestors which are descendants of B have zero space-after.

NOTE:

It is possible for several areas to be leading or trailing, e.g., if the first child area is a block-area that has nested block-areas.

Example. In this diagram each node represents a block-area. Assume that all areas have zero border and padding. Then A, B, and C are all leading areas in P. If B had non-zero before-border, then only A and B would be leading in P.

4.3 Spaces and Conditionality

A space-specifier is a compound datatype consisting of a minimum, optimum, and maximum, conditionality, and precedence.

Minimum, optimum, and maximum are lengths and can be used to define a constraint on a distance, namely that the distance should preferably be the optimum, and in any case no less than the minimum nor more than the maximum. Any of these values may be negative, which can (for example) cause areas to overlap, but in any case the minimum should be less than or equal to the optimum value, and the optimum less than or equal to the maximum value.

Conditionality is a Boolean value which controls whether a space-specifier has effect at the beginning or end of a reference-area; a conditional space-specifier is one for which this value is true.

Precedence has a value which is either an integer or the special token force. A forcing space-specifier is one for which this value is force.

Space-specifiers occurring in sequence may interact with each other. The constraint imposed by a sequence of space-specifiers is computed by calculating for each space-specifier its associated resolved space-specifier in accordance with their conditionality and precedence, as shown below in the space-resolution rules.

The constraint imposed on a distance by a sequence of resolved space-specifiers is additive; that is, the distance is constrained to be no less than the sum of the resolved minimum values and no larger than the sum of the resolved maximum values.

Recursively define that a space-specifier S' consecutively follows another space-specifier S (and S consecutively precedes S') if

  1. S' is the space-before of a block-area, and S is the space-after of the area's preceding sibling, or

  2. S' is the space-after of a block-area B, where B has zero padding-after and border-after and is not a reference-area, and S is the space-after of a block-area A which is a not a line-area, and A is the final child of B, or

  3. S' is the space-before of a block-area B, where B has zero padding-before and border-before and is not a reference-area, and S is the space-before of a block-area A which is not a line-area, and A is the initial child of B, or

  4. S' is the space-start of an inline-area, and S is the space-end of the area's preceding sibling, or

  5. S' is the space-end of an inline-area I, where I has zero padding-end and border-end values, and is not a reference-area, and S is the space-end of the final child of I, or

  6. S' is the space-start of an inline-area I, where I has zero padding-start and border-start values and is not a reference-area, and S is the space-start of the initial child of I, or

  7. S' consecutively follows a space-specifier S'', S'' consecutively follows S, and S'' has zero values for minimum, optimum, and maximum.

Space-resolution rules. To compute the resolved space-specifier of a given space-specifier S, consider the maximal sequence of space-specifiers containing S in which each is consecutively followed by the next. The resolved space-specifier of each of these space-specifiers is a non-conditional space-specifier computed in terms of this sequence.

1. If any of the space-specifiers is conditional, and is the space-before of an area which begins a reference-area, then it is suppressed, which means that its resolved space-specifier is zero. Further, conditional space-specifiers which consecutively follow a space-specifier suppressed in this way are also suppressed.

If a conditional space-specifier is the space-after of an area which ends a reference-area, then it is suppressed together with any other conditional space-specifiers which consecutively precede it.

2. If any of the remaining space-specifiers is forcing, all non-forcing space-specifiers are suppressed, and the value of each of the forcing space-specifiers is taken as its resolved value.

3. Alternatively if all of the remaining space-specifiers are non-forcing, then the resolved space-specifier is defined in terms of those space-specifiers whose precedence is highest, and among these those whose optimum value is the greatest. All other space-specifiers are suppressed. If there is only one of these then its value is taken as its resolved value.

Otherwise the resolved space-specifier of the last space-specifier in the sequence is derived from these spaces by taking their common optimum value as its optimum, the greatest of their minimum values as its minimum, and the least of their maximum values as its maximum, and all other space-specifiers are suppressed.

Example. Suppose the sequence of space values occurring at the beginning of a reference-areas is: first, a space with value 10 points (that is minimum, optimum, and maximum all equal to 10 points) and conditionality true; second, a space with value 4 points and conditionality false; and third, a space with value 5 points and conditionality true; all three spaces having precedence zero. Then the first (10 point) space is suppressed under rule 1, and the second (4 point) space is suppressed under rule 3. The resolved value of the third space is a non-conditional 5 points, even though it originally came from a conditional space.

Note that the padding of a block-area does not affect the resolved value of any space-specifier (except that by definition, the presence of padding at the before- or after-edge causes space-specifiers around it to be non-consecutive.)

The border or padding at the before-edge of a block-area may be specified as conditional. If so, then it is set to zero if its space-before is zero or conditional, and either its space-before consecutively follows a conditional space suppressed under rule 1 or the area begins a reference-area. In this case, the border or padding is taken to be zero for purposes of the definition of when a space-specifier consecutively follows another. Similarly the border or padding at the after-edge of a block-area may be specified as conditional. If so, then it is set to zero if its space-after is zero or conditional, and either its space-after consecutively precedes a conditional space suppressed under rule 1 or the area ends a reference-area.

4.4 Block-areas

Block-areas have several traits which typically affect the placement of their children. The line-height is used in line placement calculations. So is its nominal-glyph-height, which is the size (in the block-progression-direction) of a glyph-area in the default font of the generating formatting object; this is the sum of its nominal-ascent and nominal-descent. These three "nominal" traits depend only on the default font and not on which glyphs (or fonts) actually occur among descendants of the block-area. The line-stacking-strategy trait controls what kind of allocation is used for descendant line-areas and has an enumerated value (either font-height, max-height, or line-height). This is all rigorously described below. All block-areas have these traits, but they only have meaning for areas which have stacked block-area children.

The space-before and space-after determine the distance between the block-area and surrounding block-areas.

A block-area which is not a line-area typically has its size in the inline-progression-direction determined by its start-indent and end-indent and by the size of its nearest ancestor reference-area. A block-area which is not a line-area typically varies in the block-progression-direction to accommodate its descendants. Alternatively the generating formatting object may specify a height for the block-area.

4.5 Stacked Block-areas

Block-area children of an area are typically stacked in the block-progression-direction within their parent area, and this is the default method of positioning such block-areas. However, formatting objects are free to specify other methods of positioning child areas of areas which they generate.

If P is an area with block-area children, a block-area descendant B of P is stackable in P if the out-of-sequence trait of B is false and either

1. B is a child area of P, or

2. B is a child area of a block-area A, where A is a stackable descendant of P, A is not a reference-area, and A has the same block-progression-direction and inline-progression-direction as P.

Example. In the diagram,P is a block area, B1 is an embedded block-area, L1,...,L5 are line-areas, H is a block-area which is an inline float (with out-of-sequence trait equal to true) and B2 is a block-area child of H, T is a reference-area which is a block-area generated by an fo:table formatting object, and C11,...,C22 are block-areas which represent cells of the table. In this case L1, B1, L2, L3, L4, L5, and T are all stackable in P. However, H, B2, and C11, ..., C22 are not stackable in P, and thus the constraints described below do not involve them.

For a parent area P whose children are block-areas, P is defined to be properly stacked if all of the following conditions hold:

  1. Either P is a reference-area R, or P has an ancestor reference-area and P's closest ancestor reference-area R has the same block-progression-direction and inline-progression-direction as P.

  2. For each stackable block-area which is a descendant of P, the following hold:

    NOTE:

    The start-intrusion-adjustment and end-intrusion-adjustment are traits used to deal with intrusions from floats. The notion of indent is intended to apply to the content-rectangle, but the constraint is written in terms of the allocation-rectangle, because as noted earlier the edges of the content-rectangle may not correspond to like-named edges of the allocation-rectangle.

  3. For each pair of stackable block-area descendants B and B' of P, if B precedes B' consecutively, then the distance from the after-edge of the allocation-rectangle of B to the before-edge of the allocation-rectangle of B' is consistent with the constraint imposed by the resolved values of the space-after traits of B and of any of its ancestors which precede B', and of the space-before traits of B' and of any of its ancestors which follow B.

    NOTE:

    In both this clause and the next, several block-areas may have placement constraints relative to another area or to the content-rectangle of P, and together these determine the size of all block-areas, which may affect things like which background color has effect at a given point.

    Example. In the diagram, if area A has a space-after value of 3 points, B a space-before of 1 point, and C a space-before of 2 points, all with precedence of force, and with zero border and padding, then the constraints will place B's allocation-rectangle 4 points below that of A, and C's allocation-rectangle 6 points below that of A. Thus the 4-point gap receives the background color from P, and the 2-point gap before C receives the background color from B.

  4. The distance from the before-edge of the content-rectangle of P to the before-edge of the allocation-rectangle of any leading block-area descendant B of P is consistent with the constraint imposed by the resolved values of the space-before traits of B of all the ancestors of B which are descendants of P.

    Similarly, the distance from the after-edge of the allocation-rectangle of any trailing block-area descendant B' of P to the after-edge of the content-rectangle of P is consistent with the constraint imposed by the resolved values of the space-after traits of B' and of all the ancestors of B' which are descendants of P.

4.6 Line-areas

A line-area is a special type of block-area, and is generated by the same formatting object which generated its parent. Line-areas do not have borders and padding, i.e., border-before-width, padding-before-width, etc. are all zero.

The allocation-rectangle of a line is determined by the value of the line-stacking-strategy trait: if the value is font-height, the allocation-rectangle is the nominal-requested-line-rectangle, defined below; if the value is max-height, the allocation-rectangle is the maximum-line-rectangle, defined below; and if the value is line-height, the allocation-rectangle is the per-inline-height-rectangle, defined below.

The nominal-requested-line-rectangle for a line-area is the rectangle bounded in the inline-progression-direction by the content-rectangle of the parent block-area, as modified by typographic properties such as indents, and in the block-progression-direction by the nominal-glyph-height of the parent block-area. It has the same height for each line-area child of a block-area.

The maximum-line-rectangle for a line-area has the same length as the nominal-requested-line-rectangle in the inline-progression-direction. In the block-progression-direction, it is bounded by the maximum ascent and the maximum descent for the inline-areas descendants stacked within the line-area, as raised and lowered by the shift-amount trait perpendicular to the inline-progression-direction, but may not be less than the nominal-glyph-height. Its height may vary depending on the descendants of the line-area.

Nominal and Maximum Line Rectangles

The per-inline-height-rectangle has the same length as the nominal-requested-line-rectangle in the inline-progression-direction. For each inline-area the half-leading is defined to be half the difference of its line-height minus its actual-height. The expanded-ascent of an inline-area is its ascent plus half-leading, and the expanded-descent is its descent plus half-leading. As in the definition of the maximum-line-rectangle, this is raised or lowered according to mandated adjustments perpendicular to the baseline. The per-inline-height-rectangle extends in the line-progression-direction from the maximum expanded-ascent to the maximum expanded-descent over all the inline-area descendants stacked within the line-area. Its height may vary depending on the descendants of the line-area.

NOTE:

Using the nominal-requested-line-rectangle allows equal baseline-to-baseline spacing. Using the maximum-line-rectangle allows constant space between line-areas. Using the per-inline-height-rectangle and zero space-before and space-after allows CSS-style line box stacking.

Inline-areas are stacked within a line-area relative to a baseline-start-point which is a point on the start-edge of its content-rectangle, separated from the before-edge of the nominal-requested-line-rectangle by a distance equal to the nominal-ascent.

4.7 Inline-areas

An inline-area has its own line-height trait, which may be different from the line-height of its containing block-area. This may affect the placement of its ancestor line-area when the line-stacking-strategy is line-height. An inline area has a font-ascent and font-descent trait for the font associated with the generating formatting object.

An inline-area may or may not have child areas, and if so it may or may not be a reference-area. The content-rectangle for an inline-area without children has a specified size in both dimensions. An inline-area with children has a content-rectangle which is the minimum rectangle (with sides parallel to those of the content-rectangle of its parent area) which includes the allocation-rectangles of all of its children, and which extends in the block-progression-direction by at least the font-descent from its position-point, and in the opposite direction by at least the font-ascent from its position-point.

Examples of inline-areas with children might include portions of inline mathematical expressions or areas arising from mixed writing systems (left-to-right within right-to-left, for example).

4.8 Stacked Inline-areas

Inline-area children of an area are typically stacked in the inline-progression-direction within their parent area, and this is the default method of positioning such inline-areas.

If P is an area with inline-area children, an inline-area descendant I of P is stackable in P if the out-of-sequence trait of I is false and either

1. I is a child area of P, or

2. I is a child area of an inline-area J, where J is a stackable descendant of P, J is not a reference-area, and J has the same block-progression-direction and inline-progression-direction as P.

A stackable inline-area is leading if there is no inline-area descendant of P which precedes it, and is trailing if there is no inline-area descendant of P which follows it.

Inline-areas are stacked relative to a baseline, defined as follows:

1. If P is a line-area, the baseline of P is defined to be the line through the baseline-start-point which is parallel to the inline-progression-direction;

2. If P is an inline-area, the baseline of P is defined to be the line through the position-point of P which is parallel to the inline-progression-direction.

For a parent area P whose children are inline-areas, P is defined to be properly stacked if all of the following conditions hold:

1. For each stackable inline-area descendant I of P, the before-edge and after-edge of the allocation-rectangle of I are parallel to the before-edge and after-edge of the content-rectangle of P, and the start-edge and end-edge of the content-rectangle of I are parallel to those of P.

2. For each pair of stackable inline-area descendants I and I' of P, if I precedes I' consecutively, then the distance from the end-edge of the allocation-rectangle of I to the start-edge of the allocation-rectangle of I' is consistent with the constraint imposed by the resolved values of the space-after traits of I and of any of its ancestors which precede I', and of the space-before traits of I' and of any of its ancestors which follow I.

Issue (mixed-writing-direction-line-area-2):

This item (2.) has not yet been updated to account for mixed writing directions within a single line-area.

3. The distance from the start-edge of the content-rectangle of P to the start-edge of the allocation-rectangle of any leading inline-area descendant I of P is consistent with the constraint imposed by the resolved values of the space-start traits of I of all the ancestors of I which are descendants of P.

Similarly, the distance from the end-edge of the allocation-rectangle of any trailing inline-area descendant I' of P to the end-edge of the content-rectangle of P is consistent with the constraint imposed by the resolved values of the space-end traits of I' and of all the ancestors of I' which are descendants of P.

4. For any stackable inline-area descendant I of P, the distance in the shift-direction from the baseline of P to the position-point of I equals the value of the baseline-shift trait of I. The baseline-shift trait is calculated from the baseline-shift property plus an amount computed to compensate for mixed writing systems with different nominal glyph baselines.

Issue (mixed-writing-direction-line-area-4):

This item (4.) has not yet been updated to reflect the notion of different baselines for mixed writing systems within a single line-area.

4.9 Glyph-areas

The most common inline-area is a glyph-area, which contains the representation for a character in a particular font.

A glyph-area has font-family, font-size, and font-weight traits, which apply to its character data.

The position-point and escapement-point of a glyph-area are assigned according to the writing-system in use (e.g., the glyph baseline in European languages), and are used to control placement of inline-areas descendants of a line-area. The formatter may generate inline-areas with different inline-progression-directions from their parent to accommodate correct inline-area stacking in the case of mixed-language formatting.

A glyph-area has no children, and its ascent and descent should depend only on the font-name, font-size, and font-weight properties of its generating formatting object, and is not based on the individual glyph rendered.

5 Property Refinement / Resolution

Issue (Mapping-CSS-Box):

Include mapping to CSS box so that CSS properties can be read and interpreted for XSL.

5.1 Specified, Computed, and Actual Values and Inheritance

Issue (refinement1):

This section is incomplete and may be inconsistent with other parts of this working draft.

The semantics of formatting is divided into a set of simple steps to simplify the explanation and to highlight what interactions (or, perhaps more importantly, lack of interactions) exist between formatting objects and the properties on them. Although they are described as steps, this is solely for the convenience of exposition and does not imply they must be implemented as separate steps in any conforming implementation. A conforming implementation must only achieve the same effect. Some of the relevant steps are, for each formatting object in the result tree, determining (computed) values for all the properties applicable to that formatting object and then using the formatting model to describe how the values of these properties constrain the distribution of the content of these formatting objects into areas and the resolution of the spacing adjustments among the various areas.

The step of determining the computed values of the relevant properties is described below. The process of distribution and space resolution is described and/or constrained by the descriptions of the formatting properties and the formatting objects which use them.

For every property that is applicable to the a given formatting object, it is necessary to determine the value of the property. Three variants of the property value are distinguished: the specified value, the computed value, and the actual value. The "specified value" is one that is placed on the formatting object during the tree-constuction process. A specified value may not be in a form that is directly usable; for example, it may be a percentage that must be converted into an absolute value. A value resulting from such a conversion is called the "computed value". Finally, the computed value may not be realizable on the output media and may need to be adjusted prior to use in rendering. For example, a line width may be adjusted to become an integral number of output medium pixels. This adjusted value is the "actual value."

5.1.1 Specified Values

The specified value of a property is determined using the following mechanisms (in order of precedence):

  1. If the tree-construction process placed the property on the formatting object, use the value of that property as the specified value. This is called "explicit specification".

  2. Otherwise, if the property is inheritable, use the value of that property from the parent formatting object, generally the computed value (see below).

  3. Otherwise use the property's initial value, if it has one. The initial value of each property is indicated in the property's definition. If there is no initial value, that property is not specifed on the formatting object. (A property will only be "not specified" if there are corresponding properties that can provide equivalent information.

Since it has no parent, the root of the result tree cannot use values from its parent formatting object; in this case, the initial value is used if necessary.

5.1.2 Computed Values

Specified values may be absolute (i.e., they are not specified relative to another value, as in "red" or "2mm") or relative (i.e., they are specified relative to another value, as in "auto", "2em", and "12%"). For most absolute values, no computation is needed to find the computed value. Relative values, on the other hand, must be transformed into computed values: percentages must be multiplied by a reference value (each property defines which value that is), values with relative units (em, ex, px) must be made absolute by multiplying with the appropriate font or pixel size, "auto" values must be computed by the formulas given with each property, certain property values ("smaller", "bolder") must be replaced according to their definitions.

Some properties have more than one way in which the property value can be specified. The simplest example of such properties are those which can be specified either in terms of a direction relative to the writing-mode (e.g., padding-before) or a direction in terms of the absolute geometric orientation of the viewport (e.g., padding-top). These two properties are called the relative property and the absolute property, respectively. Collectively, they are called "corresponding properties."

Specifying a value for one property determines both a computed value for the specified property and a computed value for the corresponding property. Which relative property corresponds to which absolute property depends on the writing-mode. For example, if the "writing-mode" at the top level of a document is "lr-tb", then "padding-start" corresponds to 'padding-left", but if the "writing-mode" is "rl-tb", then "padding-start" corresponds to "padding-right". The exact specification of how to compute the values of corresponding properties is given in the section on Computing the values of Corresponding Properties, below.

In most cases, elements inherit computed values. However, there are some properties whose specified value may be inherited (e.g., the number value for the "line-height" property). In the cases where child elements do not inherit the computed value, this is described in the property definition.

5.1.3 Actual Values

A computed value is in principle ready to be used, but a user agent may not be able to make use of the value in a given environment. For example, a user agent may only be able to render borders with integer pixel widths and may, therefore, have to adjust the computed width to an integral number of media pixels. The actual value is the computed value after any such adjustments have been applied.

5.2 Inheritance

Issue (refinement2):

This section is incomplete and may be inconsistent with other parts of this working draft.

Some of the properties applicable to formatting objects are "inheritable." Such properties are so identified in the property description. The inheritable properties can be placed on any formatting object. The inheritable properties are propagated down the result tree from a parent to each child. (These properites are given their initial value at the root of the result tree.) For a given inheritable property, if that property is present on a child, then that value of the property is used for that child (and its descendents until explicitly re-set in a lower descendent); otherwise, the specified value of that property on the child is the computed value of that property on the parent formatting object. Hence there is always a specified value defined for every inheritable property for every formatting object.

5.3 Computing the Values of Corresponding Properties

Issue (refinement3):

This section is incomplete and may be inconsistent with other parts of this working draft.

Where there are corresponding properties, such as "padding-left" and "padding-start", a computed value is determined for all the corresponding properties. How the computed values are determined for a given formatting object is dependent on which of the corresponding properties are specified.

5.3.1 Properties with a Simple Correspondance

The simplest class of corresponding properties are those for which there are only two variants in the correspondance, an absolute property and a relative property, and the property names differ only in the choice of absolute or relative designation; for example, "border-left-color" and "border-start-color".

Issue (correspondance):

Need to add description of the correspondance because it involves both writing-mode and reference-orientation of all enclosing reference-areas.

For this class, the computed values of the corresponding properties are determined as follows. If the corresponding absolute variant of the property is specified on the formatting object, its computed value is used to set the computed value of the corresponding relative property. If the corresponding absolute property is not explicitly specified, then the computed value of the absolute property is set to the computed value of the relative property of the same name.

Note that if both the absolute and the relative properties are not explicitly specified, then the rules for determining the specifed value will use either inheritance if that is defined for the property or the initial value. The initial value must be the same for all possible corresponding properties. If both an absolute and a corresponding relative property are explicitly specified, then the above rule gives precedence to the absolute property, and the specified value of the corresponding relative property is ignored in determining the computed value of the corresponding properties.

The (corresponding) properties that use the above rule to determine their computed value are:

5.3.2 Space and Margin Properties

The "space-before", "space-after", "space-start", and "space-end" properties are handled very similarly to the properties immediately above, but the corresponding absolute properties are in the set: "margin-top", "margin-bottom", "margin-left", and "margin-right". Again the correspondance between the relative property and the corresponding absolute property is determined by the "writing-mode" property of the formatting object. For example, at the top level of a document, if the "writing-mode" is "lr-tb", then "space-before" corresponds to "margin-top", but if the "writing-mode" is "tb-rl", the "space-before" corresponds to "margin-right".

5.3.3 Start-indent and End-indent

There are two more properties, "end-indent" and "start-indent", for which the computed value may be determined by the computed value of the absolute margin properties. For these traits, the calculation of the value of the trait when the corresponding absolute property is present depends on three computed values: the computed value of the corresponding absolute property, the computed value of the corresponding "padding" property, and the computed value of the corresponding "border-width" property.

Here the term "corresponding" has been broadened to mean that if "margin-left" is the corresponding absolute property to "start-indent", then "padding-left" (and "padding-start") and 'border-left-width" (and "border-start-width") are the "corresponding" "padding" and "border-width" properties.

The formulae for calculating the computed value of the x-indent properties are as follows (where "margin-corresponding" is a place-holder for the corresponding absolute "margin" property):

End-indent = margin-corresponding + padding-end + border-end-width

Start-indent = margin-corresponding + padding-start + border-start-width

If an absolute "margin" property is not explicity specified, these equations determine a computed value for the corresponding "margin" property given values for the three traits corresponding-indent, padding-corresponding and border-corresponding width.

5.4 Expressions

All property value specifications in attributes within an XSL stylesheet can be expressions. These expressions represent the value of the property specified. The expression is first evaluated and then the resultant value is used to determine the value of the property.

5.4.1 Property Context

Properties are evaluated against a property-specific context. This context provides:

NOTE:

It is not necessary that a conversion is provided for all types. If no conversion is specified, it is an error.

When a type instance (e.g., a string, a keyword, a numeric, etc.) is recognized in the expression it is evaluated against the property context. This provides the ability for specific values to be converted with the property context's specific algorithms or conversions for use in the evaluation of the expression as a whole.

For example, the "auto" enumeration token for certain properties is a calculated value. Such a token would be converted into a specific type instance via an algorithm specified in the property definition. In such a case the resulting value might be an absolute length specifying the width of some aspect of the formatting object.

In addition, this allows certain types like relative numerics to be resolved into absolute numerics prior to mathematical operations.

All property contexts allow conversions as specified in [5.4.12 Expression Value Conversions].

5.4.2 Evaluation Order

When a set of properties is being evaluated for a specific formatting object element in the formatting object element tree there is a specific order in which properties must be evaluated. Essentially, the font-size property must be evaluated first before all other properties. Once the font-size property has been evaluated, all other properties may be evaluated in any order.

When the "font-size" property is evaluated, the current font-size for use in evaluation is the font-size of the formatting object element's parent. Once the "font-size" property has been evaluated, that value is used as the current font-size for all property contexts of all properties value expressions being further evaluated.

5.4.3 Basics

[1]   Expr   ::=   AdditiveExpr
[2]   PrimaryExpr   ::=   '(' Expr ')'
|Numeric
| Literal
| Color
| Keyword
| EnumerationToken
| FunctionCall

5.4.4 Function Calls

[3]   FunctionCall   ::=   FunctionName '(' ( Argument ( ',' Argument)*)? ')'
[4]   Argument   ::=   Expr

5.4.5 Numerics

A numeric represents all the types of numbers in an XSL expression. Some of these numbers are absolute values. Others are relative to some other set of values. All of these values use a floating-point number to represent the number-part of their definition.

A floating-point number can have any double-precision 64-bit format IEEE 754 value [IEEE 754]. These include a special "Not-a-Number" (NaN) value, positive and negative infinity, and positive and negative zero. See Section 4.2.3 of [JLS] for a summary of the key rules of the IEEE 754 standard.

[5]   Numeric   ::=   AbsoluteNumeric
| RelativeNumeric
[6]   AbsoluteNumeric   ::=   AbsoluteLength
[7]   AbsoluteLength   ::=   Number AbsoluteUnitName?
[8]   RelativeNumeric   ::=   Percent
| RelativeLength
[9]   Percent   ::=   Number '%'
[10]   RelativeLength   ::=   Number RelativeUnitName

The following operators may be used with numerics:

+

Performs addition.

-

Performs subtraction or negation.

*

Performs multiplication.

div

Performs floating-point division according to IEEE 754.

mod

Returns the remainder from a truncating division.

NOTE:

Since XML allows - in names, the - operator (when not used as a UnaryExpr negation) typically needs to be preceded by whitespace. For example the expression 10pt - 2pt means subtract 2 points from 10 points. The expression 10pt-2pt means a length value of 10 with a unit of "pt-2pt".

NOTE:

The following are examples of the mod operator:

NOTE:

The mod operator is the same as the % operator in Java and ECMAScript and is not the same as the IEEE remainder operation, which returns the remainder from a rounding division.

Numeric Expressions
[11]   AdditiveExpr   ::=   MultiplicativeExpr
| AdditiveExpr '+' MultiplicativeExpr
| AdditiveExpr '-' MultiplicativeExpr
[12]   MultiplicativeExpr   ::=   UnaryExpr
| MultiplicativeExpr MultiplyOperator UnaryExpr
| MultiplicativeExpr 'div' UnaryExpr
| MultiplicativeExpr 'mod' UnaryExpr
[13]   UnaryExpr   ::=   PrimaryExpr
| '-' UnaryExpr
NOTE:

The effect of this grammar is that the order of precedence is (lowest precedence first):

and the operators are all left associative. For example, 2*3 + 4 div 5 is equivalent to (2*3) + (4 div 5).

If a non-numeric value is used in an AdditiveExpr and there is no property context conversion from that type into an absolute numeric value, the expression is invalid and considered an error.

5.4.6 Absolute Numerics

An absolute numeric is an absolute length which is a pair consisting of a Number and a UnitName raised to a power. When an absolute length is written without a unit, the unit power is assumed to be zero. Hence, all floating point numbers are a length with a power of zero.

Each unit name has associated with it an internal ratio to some common internal unit of measure (e.g., a meter). When a value is written in a property expression, it is first converted to the internal unit of measure and then mathematical operations are performed.

In addition, only the mod, addition, and subtraction operators require that the numerics on either side of operation be absoluted numerics of the same unit power. For other operations, the unit powers may be different and the result should be mathematically consistent as with the handling of powers in algebra.

A property definition may constrain an absolute length to a particular power. For example, when specifying font-size, the value is expected to be of power "one". That is, it is expect to have a single powered unit specified (e.g., 10pt).

When the final value of property is calculated, the resulting power of the absolute numeric must be either zero or one. If any other power is specified, the value is an error.

5.4.7 Relative Numerics

Relative lengths are values that are calculated relative to some other set of values. When written as part of an expression, they are either converted via the property context into an absolute numeric or passed verbatim as the property value.

It is an error if the property context has no available conversion for the relative numeric and a conversion is required for expression evaluation (e.g., within an add operation).

5.4.7.1 Percents

Percentages are values that are counted in 1/100 units. That is, 10% as a percentage value is 0.10 as a floating point number. When converting to an absolute numeric, the percentage is defined in the property definition as being a percentage of some known property value.

For example, a value of "110%" on a "font-size" property would be evaluated to mean 1.1 times the current font size. Such a definition of the allowed conversion for percentages is specified on the property definition. If no conversion is specified, the resulting value is a percentage.

5.4.7.2 Relative Lengths

A relative length is a unit-based value that is measured against the current value of the font-size property.

There is only one relative unit of measure, the "em". The definition of "1em" is equal to the current font size. For example, a value of "1.25em" is 1.25 times the current font size.

When an em measurement is used in an expression, it is converted according to the font-size value of the current property's context. The result of the expression is an absolute length. See [7.6.3 "font-size"]

5.4.8 Strings

Strings are represented either as literals or as an enumeration token. All properties contexts allow conversion from enumeration tokens to strings. See [5.4.12 Expression Value Conversions].

5.4.9 Colors

A color is a set of values used to identify a particular color from a color space. Currently, only RGB colors are supported by this draft.

Issue (color-space):

Change this section when/if "color-profile" and "rendering-intent" properties are incorporated into XSL.

RGB colors are directly represented in the expression language using a hexadecimal notation. They can also be accessed through the system-color function or through conversion from a EnumerationToken via the property context.

5.4.10 Keywords

Keywords are special tokens in the grammar that provide access to calculated values or other property values. The allowed keywords are defined in the following subsections.

5.4.10.1 inherit

The property takes the same computed value as the property for the formatting object's parent object.

5.4.11 Lexical Structure

When processing an expression, whitespace (ExprWhitespace) may be allowed before or after any expression token even though it is not explicitly defined as such in the grammar. In some cases, whitespace is necessary to make tokens in the grammar lexically distinct. Essentially, whitespace should be treated as if it does not exist after tokenization of the expression has occurred.

The following special tokenization rules must be applied in the order specified to disambiguate the grammar:

Expression Lexical Structure
[14]   ExprToken   ::=   '(' | ')' | '%'
| Operator
| FunctionName
| EnumerationToken
| Number
[15]   Number   ::=    FloatingPointNumber
[16]   FloatingPointNumber   ::=   Digits ('.' Digits?)?
| '.' Digits
[17]   Digits   ::=   [0-9]+
[18]   Color   ::=   '#' AlphaOrDigits
[19]   AlphaOrDigits   ::=   [a-fA-F0-9]+
[20]   Literal   ::=   '"' [^"]* '"'
| "'" [^']* "'"
[21]   Operator   ::=   OperatorName
| MultiplyOperator
| '+' | '-'
[22]   OperatorName   ::=   'mod' | 'div'
[23]   MultiplyOperator   ::=   '*'
[24]   Keyword   ::=   'inherit'
[25]   FunctionName   ::=    NCName
[26]   EnumerationToken   ::=   NCName
[27]   AbsoluteUnitName   ::=   'cm' | 'mm' | 'in' | 'pt' | 'pica'
[28]   RelativeUnitName   ::=   'em'
[29]   ExprWhitespace   ::=   S

5.4.12 Expression Value Conversions

Values that are the result of an expression evaluation may be converted into property value types. In some instances this is a simple verification of set membership (e.g., is the value a legal country code). In other cases, the value is expected to be a simple type like an integer and must be converted.

It is not necessary that all types be allowed to be converted. If the expression value cannot be converted to the necessary type for the property value, it is an error.

The following table indicates what conversions are allowed.

TypeAllowed ConversionsConstraints
NCName
  • Color, via the system-color() function.

  • Enumeration value, as defined in the property definition.

  • To a string literal

The value may be checked against a legal set of values depending on the property.
AbsoluteNumeric
  • Integer, via the round() function.

  • Color, as an RGB color value.

If converting to an RGB color value, it must be a legal color value from the color space.
RelativeLength
  • To an AbsoluteLength

The specific conversion to be applied is property specific and can be found in the definition of each property.

5.5 Core Function Library

5.5.1 Number Functions

Function: numeric floor( numeric)

The floor function returns the largest (closest to positive infinity) integer that is not greater than the argument. The numeric argument to this function must be of unit power zero.

NOTE:

If it is necessary to use the floor function for a property where a unit power of one is expected, then an expressions such as: "floor(1.4in/1.0in)*1.0in" must be used. This applies to the ceiling, round, and other such functions where a unit power of zero is required.

Function: numeric ceiling(numeric)

The ceiling function returns the smallest (closest to negative infinity) integer that is not less than the argument. The numeric argument to this function must be of unit power zero.

Function: numeric round(numeric)

The round function returns the integer that is closest to the argument. If there are two such numbers, then the one that is closest to positive infinity is returned. The numeric argument to this function must be of unit power zero.

Function: numeric min( numeric , numeric)

The min function returns the minimum of the two numeric arguments. These arguments must have the same unit power.

Function: numeric max(numeric , numeric)

The min function returns the maximum of the two numeric arguments. These arguments must have the same unit power.

Function: numeric abs( numeric)

The abs functions returns the absolute value of the numeric argument. That is, if the numeric argument is negative, it returns the negation of the argument.

5.5.2 Color Functions

Function: color rgb(numeric , numeric , numeric)

The rgb function returns a specific color from the RGB color space. The parameters to this function must be numerics (real numbers) with a length power of zero.

Function: color system-color( NCName)

The system-color function returns a system defined color with a given name.

5.5.3 Font Functions

Function: object system-font( NCName , NCName)

The system-font funtions returns a characteristic of a system font. The first argument is the name of the system font and the second argument, which is optional, names the property that specifies the characteristic. If the second argument is omitted, then the characteristic returned is the same as the name of the property to which the expression is being assigned.

For example, the expression "system-font(heading,font-size)" returns the font-size characteristic for the system font named "heading". This is equivalent to the property assignment 'font-size="system-font(heading)"'.

5.5.4 Property Value Functions

Function: object inherited-property-value(NCName)

The inherited-property-value function returns the inherited value of the property whose name matches the argument specified. It is an error if this property is not an inherited property.

Function: numeric label-end()

The label-end function returns the calculated label-end value for lists. See the definition of the provisional-label-separation property.

Function: numeric body-start()

The body-start function returns the calculated body-start value for lists. See the definition of the provisional-distance-between-starts property.

NOTE:

When this function is used outside of a list, it still returns a calculated value as specified.

Function: object from-parent( NCName)

The from-parent function returns a computed value of the property whose name matches the argument specified. The value returned is that for the parent of the formatting object for which the expression is evaluated. If there is no parent, the value returned is the initial value. If the argument specifies a shorthand property and if the expression only consists of the from-parent function with an argument matching the property being computed, it is interpreted as an expansion of the shorthand with each property into which the shorthand expands; each having a value of from-parent with an argument matching the property. It is an error if arguments matching a shorthand property are used in any other way.

Function: object from-nearest-specified-value( NCName)

The from-nearest-specified-value function returns a computed value of the property whose name matches the argument specified. The value returned is that for the closest ancestor of the formatting object for which the expression is evaluated on which there is an assignment of the property in the formatting object element tree. If there is no such ancestor, the value returned is the initial value. If the argument specifies a shorthand property and if the expression only consists of the from-nearest-specified-value function with an argument matching the property being computed, it is interpreted as an expansion of the shorthand with each property into which the shorthand expands; each having a value of from-nearest-specified-value with an argument matching the property. It is an error if arguments matching a shorthand property are used in any other way.

Function: object from-table-column( NCName)

The from-table-column function returns the inherited value of the property, whose name matches the argument specified, from the fo:table-column whose column-number matches the column for which this expression is evaluated and whose number-columns-spanned also matches any span. If there is no match for the number-columns-spanned, it is matched against a span of 1. If there is still no match, the initial value is returned. It is an error to use this function on formatting objects that are not an fo:table-cell or its descendants.

5.6 Property Datatypes

Certain property values are described in terms of compound datatypes, in terms of restrictions on permitted number values, or strings with particular semantics.

The compound datatypes, such as space, are represented in the result tree as multiple attributes. The names of these attributes consist of the property name, followed by a period, followed by the component name. For example a the "space-before" property may be specified as:

space-before.minimum="2.0pt"
space-before.maximum="4.0pt"
space-before.optimum="3.0pt"
space-before.precedence="0"
space-before.conditionality="discard"

The following datatypes are defined:

Issue (datatypes-review):

Some datatypes may be missing. To be checked against those used in the property section.

<integer>

A signed integer value which consists of an optional '+' or '-' character followed by a sequence of digits. A property may define additional constraints on the value.

<number>

A signed real number which consists of an optional '+' or '-' character followed by a sequence of digits followed by an optional '.' character and sequence of digits. A property may define additional constraints on the value.

<length>

A signed length value where a 'length' is a real number plus a unit qualification. A property may define additional constraints on the value.

<length-range>

A compound datatype, with components: minumum, optimum, maximum. Each component is a <length>. A property may define additional constraints on the values.

<space>

A compound datatype, with components: minumum, optimum, maximum, precedence, and conditionality. The minumum, optimum, and maximum components are <length>s. The precedence component is either "force" or an <integer>. The conditionality component is either "discard" or "retain".

<angle>

An <integer> representing an angle.

<character>

A single Unicode character.

<string>

A sequence of characters.

<name>

A string of characters representing a name. It must not contain any whitespace, or space characters.

<family-name>

A string of characters identifying a font.

<color>

TBD

<country>

A string of characters conforming to an ISO 3166 country code.

<language>

A string of characters conforming to the ISO 639 3 letter code.

<script>

A string of characters conforming to an ISO 15924 script code.

<id>

A string of characters conforming to the XML NMTOKEN definition that is unique within the stylesheet.

<idref>

A string of characters conforming to the XML NMTOKEN definition that matches an ID property value used within the stylesheet.

<uri>

A sequence of characters conforming to a URI value as specified in the URI specification.

6 Formatting Objects

6.1 Introduction to Formatting Objects

The refined formatting-object tree describes one or more intended presentations of the information within this tree. Formatting is the process which converts the description into a presentation. See [3 Introduction to Formatting].The presentation is represented, abstractly, by an area tree, as defined in the area model. See [4 Area Model]. Each possible presentation is represented by one or more area trees in which the information in the refined formatting object tree is positioned on a two and one-half dimensional surface.

There are three kinds of formatting objects: (1) those that generate areas, (2) those that return areas, but do not generate them, and (3) those that are used in the generation of areas. The first and second kinds are typically called flow objects. The third kind is either a layout object or an auxilliary object. The kind of formatting object is indicated by the terminology used with the object. Formatting objects of the first kind are said to "generate one or more areas". Formatting objects of the second kind are said to "return one or more areas". Formatting objects of the first kind may both generate and return areas. Formatting objects of the third kind are "used in the generation of areas"; that is, they act like parameters to the generation process.

6.1.1 Definitions Common to Many Formatting Objects

This categorization leads to defining two traits which characterize the relationship between an area and the formatting objects which generate and return that area. These traits are generated-by and returned-by.

The value of the generated-by trait is a single formatting object. A formatting object F is defined to generate an area A if the semantics of F specify the generation of one or more areas and A is one of the areas thus generated.

Issue (single-area-from-multiple-FOs):

How is generation specified when more than one refined formatting object, for example, a sequence of fo:character formatting objects in an Indic syllable, are used to generate a single area; namely, the glyph composition for the Indic syllable with appropriate pre-, post-, above-, and below-vowels and marks.

There are two other kinds of generation anomalies: (1) where a character, such as a final hyphen, is generated by a "process", such as line-breaking; and (2) when an fo:character, such as a space at the end or at the beginning of a line, does not generate anything because the space is "removed". The modification of a German "double s" at a hyphenation point is another example of spontaneous generation of areas. Should the German "double s" and cases (1) and (2) above be described as transformations on the sequence of fo:character objects rather than transformations on areas?

The value of the returned-by trait is a set of pairs, where each pair consists of a formatting object and a positive integer. The integer represents the position of the area in the ordering of all areas returned by the formatting object.

A formatting object F is defined to return the sequence of areas A, B, C, ... if the pair (F,1) is a member of the returned-by trait of A, the pair (F,2) is a member of the returned-by trait of B, the pair (F,3) is a member of the returned-by trait of C, ...

If an area is a member of the sequence of areas returned by a formatting object, then either it was generated by the formatting object or it was a member of the sequence of areas returned by a child of that formatting object. Not all areas returned by a child of a formatting object need be returned by that formatting object. A formatting object may generate an area that has, as some of its children areas, areas returned by the children of that formatting object. These children (in the area tree) of the generated area are not returned by the formatting object to which they were returned.

A set of nodes in a tree is a lineage if:

The set of formatting objects that an area is returned by is a lineage.

Areas returned by a formatting object may be either normal or out-of-line. Normal areas represent areas in the "normal flow of text"; that is, they become area children of the areas generated by the formatting object to which they are returned. Normal areas have a returned-by lineage of size one. There is only one kind of normal area.

Out-of-line areas are areas used outside the normal flow of text either because the are absolutely positioned or they are part of a float or footnote. Out-of-line areas may have a returned-by lineage of size greater than one.

The area-class trait indicates which class, normal or out-of-line, an area belongs to. For out-of-line areas, it also indicates the subclass of out-of-line area. The values for this trait are: "normal", "absolute", "xsl-footnote", "xsl-start-float", "xsl-end-float" or "xsl-top-float". An area is normal if and only if the value of the area-class trait is "normal"; otherwise, the area is an out-of-line area.

The areas returned-by a given formatting object are ordered as noted above. This ordering defines an ordering on the sub-sequence of areas that are of a given area-class, such as the sub-sequence of normal areas. An area A precedes an area B in the sub-sequence if and only if area A precedes area B in the areas returned-by the formatting objects.

6.2 Formatting Object Content

The content of a formatting object is described using xml content model syntax. In some cases additional constraints, not expressable in xml content models, are given in prose.

The parameter entity, "%block;" in the content models below, contains the following formatting objects:

     block
     block-container
     table-and-caption
     table
     list-block

The parameter entity, "%inline;" in the content models below, contains the following formatting objects:

     bidi-override
     character
     external-graphic
     instream-graphic
     inline
     inline-container
     leader
     page-number
     page-number-citation
     simple-link
     multi-toggle

The following formatting objects are "neutral" containers and may be used anywhere where #PCDATA, %block;, or %inline; are allowed:

     multi-switch
     multi-properties
     wrapper

The following "out-of-line" formatting objects may be used anywhere where #PCDATA, %block;, or %inline; are allowed:

     float
     footnote

6.3 Formatting Objects Summary

bidi-override

The fo:bidi-override inline formatting object is used where it is necessary to override the default Unicode-bidirectionality algorithm writing-direction for different (or nested) inline scripts in mixed-language documents.

block

The fo:block formatting object is commonly used for formatting paragraphs, titles, headlines, figure and table captions, etc.

block-container

The fo:block-container flow object is used to generate a block-level reference-area.

character

The fo:character flow object represents a character that is mapped to a glyph for presentation.

conditional-page-master-reference

The fo:conditional-page-master-reference is used to identify a page-master that is to be used when the conditions on its use are satisfied.

external-graphic

The fo:external-graphic flow object is used for an inline graphic where the graphics data resides outside of the fo:element tree.

float

The fo:float flow object is used to gather content of a floating figure, table, or sidebar.

flow

The content of the fo:flow formatting object is a sequence of flow objects that forms one unit of content distribution, such as an article, a chapter, or a section.

footnote

The fo:footnote formatting object is used to gather the components of a floating note.

footnote-citation

The fo:footnote-citation formatting object is used to specify the properties that affect the formatting of a footnote citation.

initial-property-set

The fo:initial-property-set specifies formatting properties for the first line of an fo:block.

inline

The fo:inline formatting object is commonly used for formatting a portion of text with a background or enclosing it in a border.

inline-container

The fo:inline-container flow object is used to generate an inline reference-area.

instream-graphic

The fo:instream-graphic flow object is used for an inline graphic where the graphics data resides as descendants of the fo:instream-graphic.

layout-master-set

The fo:layout-master-set is a wrapper around all masters used in the document.

leader

The fo:leader formatting object is used to generate leaders consisting either of a rule or of a row of a repeating character or cyclically repeating pattern of characters that are used for connecting two text formatting objects and split-quads (space-leaders).

list-block

The fo:list-block flow object is used to format a list item or a list.

list-item

The fo:list-item formatting object contains the label and the body of an item in a list.

list-item-body

The fo:list-item-body formatting object contains the content of the body of a list-item.

list-item-label

The fo:list-item-label formatting object contains the content of the label of a list-item; typically used to either enumerate, identify or adorn the list-item's body.

multi-case

The fo:multi-case is used to embed flow objects, that the parent fo:multi-switch can choose to either show or hide.

multi-properties

The fo:multi-properties is used to switch between two or more property sets that are associated with a given portion of content.

multi-property-set

The fo:multi-property-set is used to specify an alternative set of formatting properties that, dependent on a DOM state, are applied to the content.

multi-switch

The fo:multi-switch is used to switch between two or more sub-trees of formatting objects.

multi-toggle

The fo:multi-toggle is used within an fo:multi-case to switch to another fo:multi-case.

page-number

The fo:page-number formatting object is used to represent the current page-number.

page-number-citation

The fo:page-number-citation is used to reference the page-number for the page containing the first area generated by the cited formatting object.

page-sequence

The fo:page-sequence formatting object is used to specify how to create a (sub-)sequence of pages within a document; for example, a chapter of a report. The content of these pages comes from flow children of the fo:page-sequence.

page-sequence-master

The fo:page-sequence-master specifies sequences of page-masters that are used when generating a sequence of pages.

region-after

This region defines a viewport that is located on the "after" side of fo:region-body region.

region-before

This region defines a viewport that is located on the "before" side of fo:region-body region.

region-body

This region specifies a viewport that is located in the "center" of the fo:simple-page-master.

region-end

This region defines a viewport that is located on the "end" side of fo:region-body region.

region-start

This region defines a viewport that is located on the "start" side of fo:region-body region.

repeatable-page-master-alternatives

An fo:repeatable-page-master-alternatives specifies a sub-sequence consisting of repeated instances of a set of alternative page-masters. The number of repetitions may be bounded or potentially unbounded.

repeatable-page-master-reference

An fo:repeatable-page-master-reference specifies a sub-sequence consisting of repeated instances of a single page-master. The number of repetitions may be bounded or potentially unbounded.

root

The fo:root node is the top node of an XSL result tree. This tree is composed of formatting objects.

simple-link

The fo:simple-link is used for representing the start resource of a simple link.

simple-page-master

The fo:simple-page-master is used in the generation of pages and specifies the geometry of the page. The page may be subdivided into up to five regions

single-page-master-reference

An fo:single-page-master-reference specifies a sub-sequence consisting of a single instance of a single page-master.

static-content

The fo:static-content formatting object holds a sequence or a tree of formatting objects that is to be presented in a single region or repeated in like-named regions on one or more pages in the page-sequence. Its common use is for repeating or running headers and footers.

table

The fo:table flow object is used for formatting the tabular material of a table.

table-and-caption

The fo:table-and-caption flow object is used for formatting a table together with its caption.

table-body

The fo:table-body formatting object is used to contain the content of the table body.

table-caption

The fo:table-caption formatting object is used to contain block-level formatting objects containing the caption for the table.

table-cell

The fo:table-cell formatting object is used to group content to be placed in a table-cell.

table-column

The fo:table-column formatting object specifies characteristics applicable to table cells that have the same column and span.

table-footer

The fo:table-footer formatting object is used to contain the content of the table footer.

table-header

The fo:table-header formatting object is used to contain the content of the table header.

table-row

The fo:table-row formatting object is used to group table-cells into rows.

wrapper

The fo:wrapper formatting object is used to specify inherited properties for a group of formatting objects. It has no additional formatting semantics.

6.4 Pagination and Layout Formatting Objects

6.4.1 Introduction

The root node of the formatting-object tree must be an fo:root formatting object. The children of the fo:root formatting object are a single fo:layout-master-set and a sequence of one or more fo:page-sequences. The fo:layout-master-set defines the geometry and sequencing of the pages; the children of the fo:page-sequences, which are called flows, provide the content that is distributed into the pages. The process of generating the pages is done automatically by the XSL processor formatting the result tree.

The children of the fo:layout-master-set are the pagination and layout specifications. The names of these specifications end in "-master". There are two types of pagination and layout specifications: page-masters and page-sequence-masters. Page-masters have the role of describing the intended subdivisions of a page and the geometry of these subdivisions. Page-sequence-masters have the role of describing the sequence of page-masters that will be used to generate pages during the formatting of an fo:page-sequence.

6.4.1.1 Page-sequence-masters

Each fo:page-sequence-master characterizes a set of possible sequences of page-masters. For any given fo:page-sequence, only one of the possible set of sequences will be used. The sequence that is used is the smallest sequence that satisfies the constraints determined by the individual page-masters, the flows which generate pages from the page-masters and the fo:page-sequence-master itself.

The fo:page-sequence-master is used to determine which page-masters are used and in which order. The children of the fo:page-sequence-master are a sequence of sub-sequence specifications. The page-masters in a sub-sequence may be specified by a reference to a single page-master or as a repetition of one or more page-masters. For example, a sequence might begin with several explicit page-masters and continue with a repetition of some other page-master (or masters).

The fo:single-page-master-reference is used to specify a sub-sequence consisting of a single page-master.

There are two ways to specify a sub-sequence that is a repetition. The fo:repeatable-page-master-reference specifies a repetition of a single page-master. The fo:repeatable-page-master-alternatives specifies the repetition of a set of page-masters. Which of the alternative page-masters is used at a given point in the sub-sequence is conditional and may depend on whether the page number is odd or even, is the first page, is the last page or is blank. The "maximum" property on the repetition specification controls the number of repetitions. If this property is not specified, there is no limit on the number of repetitions.

6.4.1.2 Page-masters

A page-master is a master that is used to generate a page. A page is a combination of two (nested) reference-areas: the media reference-area and the page-level reference-area. The media reference-area is defined by the output medium; the page-level reference-area defined by the content-rectangle of the media reference-area and is a child (in the area tree) of the media reference-area. This has the affect of positioning the page-level reference-area on the output media.

The term page is used ambiguously to refer to both the media reference-area, the page-level reference-area, or both together. The intended referent is clear from context. Most references to page will be referring either to both reference-areas or to the page-level reference-area. The media reference-area is used only when defining the position of the page-level reference-area on the output medium. Children of the page are always children of the page-level reference-area and the parent of the page is always the parent of the media reference-area. Where confusion would arise, such the values of traits on the reference-areas, the term "page" will not be used, and, instead, the appropriate reference-area will be explicity identified.

A single page-master may be used multiple times, each time it is used it generates a single page; for example, a page-master that is referenced from an fo:repeatable-page-master-reference will generate one page for each occurrence of the reference in the specified sub-sequence.

NOTE:

When pages are used with a user agent such as a Web Browser, it is common that the each document has only one page. The viewport used to view the page determines the size of the page. When pages are placed on non-interactive media, such as sheets of paper, pages correspond to one or more of the surfaces of the paper. The size of the paper determines the size of the page.

In this specification, there is only one kind of page-master, the fo:simple-page-master. Future versions of this specification may add additional kinds of page-masters.

An fo:simple-page-master has, as children, specifications for one or more regions.

A region specification is used as a master, the region-master, when generating both a viewport reference-area and a region reference-area. The region reference-area is the only area child of the viewport reference-area. The viewport reference-area represents an opening in the page-level reference-area through which the region reference-area can be viewed. Scrolling and clipping is controlled in terms of the viewport reference-area. We will say a viewport/region area corresponds to a region if the viewport/region area was generated using the region-master specified by that region.

NOTE:

The regions on the page are analogous to "frames" in an HTML document. Typically, at least one of these regions is of indefinite length in one of its dimensions. For languages with a lr-tb (or rl-tb) writing-mode, this region is typically of indefinite length in the top-to-bottom direction. The viewport represents the visible part of the frame. The flow assigned to the region is viewed by scrolling the region reference-area through the viewport.

Each region is defined by a region formatting object. Each region formatting object has a name and a definite position. In addition, the region's height or width is fixed and the other dimension may be either fixed or indefinite. For example, a region that is the body of a Web page may have indefinite height.

The specification of the region determines the size and position of the viewport associated with the region. The positioning of the viewport is relative to the page-level reference-area that is generated using the page-master that is the parent of the region. The region reference-area takes its position from the viewport and size from the size specification of the region.

For version 1.0 of this recommendation, a page-master will consist of up to five regions: "region-body" and four other regions, one on each side of the body. To allow the side regions to correspond to the current writing-mode, these regions are named "region-before" (which corresponds to "header" in the "lr-tb" writing-mode), "region-after" (which corresponds to "footer" in the "lr-tb" writing-mode), "region-start" (which corresponds to a "left-sidebar" in the "lr-tb" writing-mode) and "region-end" (which corresponds to a "right-sidebar" in the "lr-tb" writing-mode). It is expected, that a future version of the recommendation will introduce a mechanism that allows a page-master to contain an arbitrary number of arbitrarily sized and positioned regions.

6.4.1.3 Page Generation

Pages are generated automatically by the formatting of fo:page-sequences. As noted above, pages are page-level reference-areas. The parent of each page is the area tree root. Each page is generated by using a page-master to define the viewport areas and region reference-areas that correspond to the regions specified by that page-master.

Each fo:page-sequence references either an fo:page-sequence-master or an fo:page-master. If the reference is to an fo:page-master, this is interpreted as if it were a reference to an fo:page-sequence-master that repeats the referenced fo:page-master an unbounded number of times. We will say an fo:page-sequence references a page-master if either the fo:page-sequence directly references the page-master via the "master-name" property or that property references an fo:page-sequence-master that references the page-master.

6.4.1.4 Flows and Flow Mapping

There are two kinds of flows: fo:static-content and fo:flow. An fo:static-content flow holds content, such as the text that goes into headers and footers, that is repeated on many of the pages. The fo:flow flow holds content that is distributed across a sequence of pages. The processing of the fo:flow flow is what determines how many pages are generated to hold the fo:page-sequence. The fo:page-sequence-master is used as the generator of the sequence of page-masters into which the flow children content is distributed.

The children of a flow are a sequence of block-level flow objects. Each flow has a name, and no two fo:flow or fo:static-content formatting objects in the same page-sequence may have the same name.

The assignment of flows to regions on a page-master is determined by an implicit flow-map. The flow-map specifies an association between the flow children of the fo:page-sequence and regions defined within the page-masters referenced by that fo:page-sequence.

In version 1.0 of XSL, the flow-map is implicit. The "flow-name" property of a flow specifies to which region that flow is assigned. Each region has a "region-name" property. The implicit flow-map assigns a flow to the region that has the same name. In future versions of XSL, the flow map is expected to become an explicit formatting object.

To avoid requiring users to generate region-names, the regions all have default values for the "region-name" property. The region-names all begin with the prefix, "xsl-" and the suffix is the element name of the region formatting object. For example, the region that has the element name, "region-body" would have "xsl-region-body" as its default region-name.

6.4.1.5 Constraints on Page Generation

The areas that are descendant from a page are constrained by the page-master used to generate the page and the flows that are assigned to the regions specified on the page-master. For fo:static-content flows, the processing of the flow is repeated for each page generated using a page-master having the region to which the flow is assigned. For fo:flow flows, the areas generated by the descendants of the flow are distributed across the pages in the sequence that were generated using page-masters having the region to which the flow is assigned.

Issue (pagination-intro-traits):

Need to say how the traits of reference-areas generated "using" the region-master for a region reference-area are determined. The region-master provides the geometry, background, boarder, padding, etc. trait values. The traits determined by "writing-mode" are taken from the "writing-mode" of the flow that is assigned to the region.

Issue (pagination-intro-constraints):

There may be other constraints that should be satisfied in determining the "preferred" page trees. For example, one might want that all footnotes appear on the page from which they are referenced, even if that might require more pages than a page-tree that does not meet this constraint.

There may be many area trees that would satisfy the constraints determined by the formatting objects in the result tree. Among these, the area trees with the least number of pages are preferred. Among the area trees with the same number of pages, the ones with the least number of lines are preferred.

6.4.1.6 Area Generated by Descendants of a Given Flow

The areas generated by the descendants of a flow are called flow-descendant-areas.

Every flow-descendant-area is in two relationships: an area-descendant relationship and a generation-descendant relationship.

As an area, a flow-descendant-area is an immediate area descendant of its parent area in the area tree. In addition, a flow-descendant-area is, necessarily, a descendant of some page in the area tree. That is, there is some page for which the flow-descendant-area is an area descendant.

The flow-descendant-area is also a generation descendant of the flow that is an ancestor of the flow descendant that generated that area. That is, the flow objects that are the descendants of a given flow generate areas which are generation descendants of that flow.

In the sequel, the qualifiers "area" and "generation" will normally be omitted before the term "descendant" because the qualifier (and, therefore, the relationship) is implied by whether the area is described as descendant from an area or from a flow.

The area model defines a partial ordering of areas in the area tree. This area tree ordering becomes a total area tree ordering by adding the rule that A precedes B if A is a descendant of B. Using this total ordering, the flow-descendant-areas of a given flow are totally ordered. This is called the total ordering of flow-descendant-areas. This is the depth first traversal of the area tree ordering.

The same rules that define a total ordering on the area tree can can, by analogy, be used define a total ordering on the refined formatting-object tree. This order is called the total ordering of formatting objects. This is the depth first traversal of the refined formatting object tree ordering.

Combining this ordering and the generated-by trait defines a second ordering on the flow-descendant-areas. A flow-descendant-area A precedes a flow-descendant-area B (in the total generation ordering of flow-descendant-areas) if and only if the formatting object that generated A precedes the formatting object that generated B in the total ordering of formatting objects.

These orderings are used to express constraints on the order of appearance of objects in the refined formatting object tree and in the area tree.

6.4.1.7 Pagination Tree Structure

The result tree structure is shown below.

6.4.1.8 Examples

TBD

6.4.2 fo:root

6.4.3 fo:page-sequence

6.4.4 fo:layout-master-set

6.4.5 fo:page-sequence-master

6.4.6 fo:single-page-master-reference

6.4.7 fo:repeatable-page-master-reference

6.4.8 fo:repeatable-page-master-alternatives

6.4.9 fo:conditional-page-master-reference

6.4.10 fo:simple-page-master

6.4.11 fo:region-body

6.4.12 fo:region-before

6.4.13 fo:region-after

6.4.14 fo:region-start

6.4.15 fo:region-end

6.4.16 fo:flow

6.4.17 fo:static-content

6.5 Block-level Formatting Objects

Issue (subroutines):

Identify required "subroutines" for descriptions that pertain to multiple FO classes.

Determine appropriate placement in the Draft to hold subroutines.

6.5.1 Introduction

The fo:block formatting object is used for formatting paragraphs, titles, figure captions, table titles, etc. The following example illustrates the usage of the fo:block in a style sheet.

6.5.1.1 Example
6.5.1.1.1 Chapter and Section Titles, Paragraphs

Input sample:

<doc>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
</doc>

In this example the Chapter title appears at the top of the page (its "space-before" is discarded).

Space between Chapter title and first section title is (8pt,8pt,8pt): the chapter title's "space-after" has a higher precedence than the section title's "space-before" (which takes on the initial value of zero), so the latter is discarded

Space between the first section title and Section one's first paragraph is (6pt,6pt,6pt): the section title's "space-after" has higher precedence than the paragraph's "space-before", so the latter is discarded.

Space between the two paragraphs is (6pt,8pt,10pt): the "space-after" the first paragraph is discarded because its precedence is equal to that of the "space-before" the next paragraph, and the optimum of the "space-after" of the first paragraph is greater than the optimum of the "space-before" of the second paragraph.

Space between the second paragraph of the first section and the title of the second section is (12pt,12pt,12pt): the "space-after" the paragraph is discarded because its precedence is equal to that of the "space-before" of the section title, and the optimum of the "space-after" of the paragraph is less than the optimum of the "space-before" of the section title.

The indent on the first line of the first paragraph in section one and the only paragraph in section two is 2pc; the indent on the first line of the second paragraph in section one is zero.

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="chapter">
  <fo:block break-before="page">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block text-align="center" space-after="8pt"
            space-before="16pt" space-after.precedence="3">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section/title">
  <fo:block text-align="center" space-after="6pt"
            space-before="12pt" space-before.precedence="0"
            space-after.precedence="3">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p[1]" priority="1">
  <fo:block text-indent="0pc" space-after="7pt"
            space-before.minimum="6pt" space-before.optimum="8pt"
            space-before.maximum="10pt">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block text-indent="2pc" space-after="7pt"
            space-before.minimum="6pt" space-before.optimum="8pt"
            space-before.maximum="10pt">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

Result Instance: elements and attributes in the fo: namespace

<fo:block break-before="page">
  <fo:block text-align="center" space-after="8pt"
  space-before="16pt" space-after.precedence="3">Chapter
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
  space-before.minimum="6pt" space-before.optimum="8pt"
  space-before.maximum="10pt">Text
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
  space-before="12pt" space-before.precedence="0"
  space-after.precedence="3">Section
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
  space-before.minimum="6pt" space-before.optimum="8pt"
  space-before.maximum="10pt">Text
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
  space-before="12pt" space-before.precedence="0"
  space-after.precedence="3">Section
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
  space-before.minimum="6pt" space-before.optimum="8pt"
  space-before.maximum="10pt">Text
  </fo:block>
</fo:block>

<fo:block break-before="page">
  <fo:block text-align="center" space-after="8pt"
  space-before="16pt" space-after.precedence="3">Chapter
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
  space-before.minimum="6pt" space-before.optimum="8pt"
  space-before.maximum="10pt">Text
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
  space-before="12pt" space-before.precedence="0"
  space-after.precedence="3">Section
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
  space-before.minimum="6pt" space-before.optimum="8pt"
  space-before.maximum="10pt">Text
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
  space-before="12pt" space-before.precedence="0"
  space-after.precedence="3">Section
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
  space-before.minimum="6pt" space-before.optimum="8pt"
  space-before.maximum="10pt">Text
  </fo:block>
</fo:block>

6.5.2 fo:block

6.5.3 fo:block-container

6.6 Inline-level Formatting Objects

6.6.1 Introduction

Inline formatting objects are most commonly used to format a portion of text or for generating rules and leaders. There are many other uses. The following examples illustrate some of these uses of inline-level formatting objects.

6.6.1.1 Examples
6.6.1.1.1 First Line of Paragraph in Small-caps

Input sample:

<doc>
<p>This is the text of a paragraph that is going to be
presented with the first line in small-caps.</p>
</doc>

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <fo:initial-property-set font-variant="small-caps"/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

Result instance: elements and attributes in the fo: namespace

<fo:block>
  <fo:initial-property-set font-variant="small-caps">
  </fo:initial-property-set>This is the text of a paragraph that is going to be
presented with the first line in small-caps.
</fo:block>
6.6.1.1.2 Figure with a Photograph

Input sample:

<doc>
  <figure>
    <photo image="TH0317A.jpg"/>
    <caption>C'ieng Tamlung of C'ieng Mai</caption>
  </figure>
</doc>

In this example the image (an fo:external-graphic) is placed as a centered block-level object. The caption is centered with 10mm indents.

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="figure">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="photo">
  <fo:block text-align="center">
    <fo:external-graphic href="{@image}"/>
  </fo:block>
</xsl:template>

<xsl:template match="caption">
  <fo:block space-before="3pt" text-align="center"
    start-indent="10mm" end-indent="10mm">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

fo: element and attribute tree:

<fo:block>
  <fo:block text-align="center">
    <fo:external-graphic href="TH0317A.jpg"/>
  </fo:block>

  <fo:block space-before="3pt" text-align="center" start-indent="10mm"
    end-indent="10mm">C'ieng Tamlung of C'ieng Mai</fo:block>
</fo:block>
6.6.1.1.3 Page numbering and page number reference

Input sample:

<!DOCTYPE doc SYSTEM "pgref.dtd">
<doc>
  <chapter id="x"><title>Chapter</title>
    <p>Text</p>
  </chapter>
  <chapter><title>Chapter</title>
    <p>For a description of X see <ref refid="x"/>.</p>
  </chapter>
</doc>

In this example each page has a running footer containing the word "Page" followed by the page number. The "ref" element generates the word "see" followed by the page number of the page on which the referenced by the "refid" attribute was placed.

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <fo:root>
    <fo:layout-master-set>
      <fo:simple-page-master master-name="page"
        page-height="297mm" page-width="210mm"
        margin-top="20mm" margin-bottom="10mm"
        margin-left="25mm" margin-right="25mm">
        <fo:region-body
          margin-top="0mm" margin-bottom="15mm"
          margin-left="0mm" margin-right="0mm"/>
        <fo:region-after extent="10mm"/>
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-name="page">
      <fo:static-content flow-name="xsl-region-after">
        <fo:block>
          <xsl:text>Page </xsl:text>
          <fo:page-number/>
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <xsl:apply-templates/>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="ref">
  <xsl:text>page </xsl:text>
  <fo:page-number-citation refid="{generate-id(id(@refid)/title)}"/>
</xsl:template>

</xsl:stylesheet>

Result Instance: elements and attributes in the fo: namespace

<fo:root>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="page"
      page-height="297mm" page-width="210mm"
      margin-top="20mm" margin-bottom="10mm"
      margin-left="25mm" margin-right="25mm">
      <fo:region-body margin-top="0mm" margin-bottom="15mm"
        margin-left="0mm" margin-right="0mm"/>
      <fo:region-after extent="10mm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-name="page">
    <fo:static-content flow-name="xsl-region-after">
      <fo:block>Page <fo:page-number/>
      </fo:block>
    </fo:static-content>
    <fo:flow flow-name="xsl-region-body">
      <fo:block id="N5">1. Chapter</fo:block>
      <fo:block>Text</fo:block>
      <fo:block id="N13">2. Chapter</fo:block>
      <fo:block>For a description of X see page <fo:page-number-citation refid="N5"/>
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

6.6.2 fo:bidi-override

6.6.3 fo:character

6.6.4 fo:initial-property-set

6.6.5 fo:external-graphic

Issue (scaling-properties-for-graphics):

For scaling we want:

- scale factor for x and y

- individual for x and y

- max-width and height

- min-width and height

- height and width

Use cases:

- intrinsic size of graphic: just get it as is

- scale by a specified factor

- scale to a specified size

- put constraints on the scaling to be between

- Note fallback for graphics formats that do not have an intrinsic size.

- For the case of fixing the height of a graphic and caption and aligning the in x and y: use the fo:block-container.

CSS questions: is the graphic rescaled when its intrinsic height differs from the height property (and the height property is not "auto")

6.6.6 fo:instream-graphic

Issue (render-processor):

How to "call" or indicate appropriate processor for rendering? Should it be: a special property or making use of mime-type machinery?

6.6.7 fo:inline

6.6.8 fo:inline-container

6.6.9 fo:leader

NOTE:

If it is desired that the leader should stretch to fill all available space on a line, the maximum length of the leader should be specified to be at least as large as the column width.

NOTE:

The alignment of the leader may be script specific and may require indicating what aligment point is required, because it is different from the default alignment for the script. For example, in some usage of Indic scripts the leader is aligned at the baseline.

NOTE:

An fo:leader can be wrapped in an fo:block to create a rule for separating or decorating block-areas.

6.6.10 fo:page-number

6.6.11 fo:page-number-citation

6.7 Formatting Objects for Tables

6.7.1 Introduction

There are nine formatting objects used to construct tables: fo:table-and-caption, fo:table, fo:table-column, fo:table-caption, fo:table-header, fo:table-footer, fo:table-body, fo:table-row, and fo:table-cell. The result tree structure is shown below.

6.7.1.1 Examples

TBD

6.7.2 fo:table-and-caption

NOTE:

This formatting object corresponds to the CSS anonymous box that encloses the table caption and the table.

6.7.3 fo:table

6.7.4 fo:table-column

6.7.5 fo:table-caption

6.7.6 fo:table-header

6.7.7 fo:table-footer

6.7.8 fo:table-body

6.7.9 fo:table-row

6.7.10 fo:table-cell

6.8 Formatting Objects for Lists

6.8.1 Introduction

There are four formatting objects used to construct lists: fo:list-block, fo:list-item, fo:list-item-label, and fo:list-item-body.

The fo:list-block has the role of containing the complete list and to specify values used for the list geometry in the inline-progression-direction (see details below).

The children of the fo:list-block are one or more fo:list-item, each containing a pair of fo:list-item-label and fo:list-item-body.

The fo:list-item has the role of containing each item in a list.

The fo:list-item-label has the role of containing the content, block-level formatting objects, of the label for the list-item; typically an fo:block containing a number, a ding-bat character, or a term.

The fo:list-item-body has the role of containing the content, block-level formatting objects, of the body of the list-item; typically one or more fo:block.

The placement, in the block-progression-direction, of the label with respect to the body is made in accordance with the "vertical-align" property of the fo:list-item.

The specification of the list geometry in the inline-progression-direction is achieved by:

The start-indent of the list item label and end-indent of the list item body, if desired, are typically specified as a length.

6.8.1.1 Examples
6.8.1.1.1 Numbered List

The list-items are contained in an "ol" element. The items are contained in "item" elements and contain text (as opposed to paragraphs).

The style is to number the items alphabetically with a dot at the end of the number.

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="ol">
  <fo:list-block provisional-distance-between-starts="15mm"
   provisional-label-separation="5mm" space-between-list-rows="3mm">
    <xsl:apply-templates/>
  </fo:list-block>
</xsl:template>

<xsl:template match="ol/item">
  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>
        <xsl:number format="a."/>
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</xsl:template>

</xsl:stylesheet>

Input sample:

<ol>
<item>List item 1.</item>
<item>List item 2.</item>
<item>List item 3.</item>
</ol>

Result Instance: elements and attributes in the fo: namespace

<fo:list-block provisional-distance-between-starts="15mm"
  provisional-label-separation="5mm" space-between-list-rows="3mm">

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>a.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>List item 1.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>b.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>List item 2.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>c.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>List item 3.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

</fo:list-block>
6.8.1.1.2 HTML-style "dl" lists

In this example the stylesheet processes HTML-style "dl" lists, which contain unwrapped pairs of "dt" and "dd" elements, transforming them into fo:list-blocks.

Balanced pairs of "dt"/"dd"s are converted into fo:list-items. For unbalanced "dt"/"dd"s, the stylesheet makes the following assumptions:

In other words, given a structure like this:

<doc>
<dl>
  <dt>term</dt>
  <dd>definition</dd>
  <dt>term</dt>
  <dt>term</dt>
  <dd>definition</dd>
  <dt>term</dt>
  <dd>definition</dd>
  <dd>definition</dd>
</dl>
</doc>

If $allow-naked-dd is true, the result instance: elements and attributes in the fo: namespace is:

<fo:list-block provisional-distance-between-starts="35mm"
  provisional-label-separation="5mm" space-between-list-rows="3mm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>

If $allow-naked-dd is false, the result instance: elements and attributes in the fo: namespace is:

<fo:list-block provisional-distance-between-starts="35mm"
  provisional-label-separation="5mm" space-between-list-rows="3mm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:include href="dtdd.xsl"/>

<xsl:template match="doc">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="dl">
  <xsl:call-template name="process.dl"/>
</xsl:template>

<xsl:template match="dt|dd">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

Included stylesheet "dtdd.xsl"

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:variable name="allow-naked-dd" select="true()"/>

<xsl:template name="process.dl">
  <fo:list-block provisional-distance-between-starts="35mm"
   provisional-label-separation="5mm" space-between-list-rows="3mm">
    <xsl:choose>
      <xsl:when test="$allow-naked-dd">
        <xsl:call-template name="process.dl.content.with.naked.dd"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:call-template name="process.dl.content"/>
      </xsl:otherwise>
    </xsl:choose>
  </fo:list-block>
</xsl:template>

<xsl:template name="process.dl.content.with.naked.dd">
  <xsl:param name="dts" select="./force-list-to-be-empty"/>
  <xsl:param name="nodes" select="*"/>

  <xsl:choose>
    <xsl:when test="count($nodes)=0">
      <!-- Out of nodes, output any pending DTs -->
      <xsl:if test="count($dts)>0">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <xsl:apply-templates select="$dts"/>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()"/>
        </fo:list-item>
      </xsl:if>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dd'">
      <!-- We found a DD, output the DTs and the DD -->
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <xsl:apply-templates select="$dts"/>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <xsl:apply-templates select="$nodes[1]"/>
        </fo:list-item-body>
      </fo:list-item>
      <xsl:call-template name="process.dl.content.with.naked.dd">
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dt'">
      <!-- We found a DT, add it to the list of DTs and loop -->
      <xsl:call-template name="process.dl.content.with.naked.dd">
        <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <!-- This shouldn't happen -->
      <xsl:message>
        <xsl:text>DT/DD list contained something bogus (</xsl:text>
        <xsl:value-of select="name($nodes[1])"/>
        <xsl:text>).</xsl:text>
      </xsl:message>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template name="process.dl.content">
  <xsl:param name="dts" select="./force-list-to-be-empty"/>
  <xsl:param name="dds" select="./force-list-to-be-empty"/>
  <xsl:param name="output-on"></xsl:param>
  <xsl:param name="nodes" select="*"/>

  <!-- The algorithm here is to build up a list of DTs and DDs, -->
  <!-- outputing them only on the transition from DD back to DT -->

  <xsl:choose>
    <xsl:when test="count($nodes)=0">
      <!-- Out of nodes, output any pending elements -->
      <xsl:if test="count($dts)>0 or count($dds)>0">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <xsl:apply-templates select="$dts"/>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()">
            <xsl:apply-templates select="$dds"/>
          </fo:list-item-body>
        </fo:list-item>
      </xsl:if>
    </xsl:when>

    <xsl:when test="name($nodes[1])=$output-on">
      <!-- We're making the transition from DD back to DT -->
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <xsl:apply-templates select="$dts"/>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <xsl:apply-templates select="$dds"/>
        </fo:list-item-body>
      </fo:list-item>

      <!-- Reprocess this node (and the rest of the node list) -->
      <!-- resetting the output-on state to nil -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="nodes" select="$nodes"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dt'">
      <!-- We found a DT, add it to the list and loop -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
        <xsl:with-param name="dds" select="$dds"/>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dd'">
      <!-- We found a DD, add it to the list and loop, noting that -->
      <!-- the next time we cross back to DT's, we need to output the -->
      <!-- current DT/DDs. -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="dts" select="$dts"/>
        <xsl:with-param name="dds" select="$dds|$nodes[1]"/>
        <xsl:with-param name="output-on">dt</xsl:with-param>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <!-- This shouldn't happen -->
      <xsl:message>
        <xsl:text>DT/DD list contained something bogus (</xsl:text>
        <xsl:value-of select="name($nodes[1])"/>
        <xsl:text>).</xsl:text>
      </xsl:message>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

The "dtdd.xsl" stylesheet may be customized in the following ways:

In the stylesheet using the "dtdd.xsl" stylesheet change the "dl" to the name of the element which is the wrapper for the list.

6.8.2 fo:list-block

6.8.3 fo:list-item

6.8.4 fo:list-item-body

6.8.5 fo:list-item-label

6.9 Link and Multi Formatting Objects

6.9.1 Introduction

The following classes of "dynamic" effects are covered by the formatting objects included in this section:

The switching between subtrees is achieved by using the following three formatting objects: fo:multi-switch, fo:multi-case, and fo:multi-toggle. The result tree structure is shown below.

The role of the fo:multi-switch is to wrap fo:multi-case formatting objects, each containing a subtree. Each subtree is given a name on the fo:multi-case formatting object. Activating, for example implemented as clicking on, an fo:multi-toggle causes a named subtree, the previous, the next, or "any" subtree to be displayed; controlled by the "switch-to" property. For "any", an implementation would typically present a list of choices each labeled using the "case-title" property of the fo:multi-case. The initial subtree displayed is controlled by the "starting-state" property on the fo:multi-case.

6.9.1.1 Examples
6.9.1.1.1 Expandable/Collapsible Table of Contents

Input sample:

<doc>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
</doc>

In this example the chapter and section titles are extracted into a table of contents placed at the front of the result. The chapter titles are preceeded by an icon indicating either collapsed or expanded state. The section titles are only shown in the expanded state. Furthermore,there are links from the titles in the table of contents to the corresponding titles in the body of the document.

The two states are achieved by, for each chapter title, using an fo:multi-switch with a fo:multi-case for each state. The icon is contained in an fo:multi-toggle with the appropriate fo:multi-case "switch-to" property to select the other state.

The links in the table of contents are achieved by adding a unique id on the title text in the body of the document and wrapping the title text in the table of contents in an fo:simple-link referring to that id.

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <!-- create the table of contents -->
  <xsl:apply-templates select="chapter/title" mode="toc"/>
  <!-- do the document -->
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="chapter/title" mode="toc">
  <fo:multi-switch>
    <fo:multi-case case-name="collapsed" case-title="collapsed"
    starting-state="show">
      <fo:block>
        <fo:multi-toggle switch-to="expanded">
          <fo:external-graphic href="plus-icon.gif"/>
        </fo:multi-toggle>
        <fo:simple-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter" format="1. "/>
          <xsl:apply-templates mode="toc"/>
        </fo:simple-link>
      </fo:block>
    </fo:multi-case>
    <fo:multi-case case-name="expanded" case-title="expanded"
    starting-state="hide">
      <fo:block>
        <fo:multi-toggle switch-to="collapsed">
          <fo:external-graphic href="minus-icon.gif"/>
        </fo:multi-toggle>
        <fo:simple-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter" format="1. "/>
          <xsl:apply-templates mode="toc"/>
        </fo:simple-link>
      </fo:block>
      <xsl:apply-templates select="../section/title" mode="toc"/>
    </fo:multi-case>
  </fo:multi-switch>
</xsl:template>

<xsl:template match="section/title" mode="toc">
  <fo:block start-indent="10mm">
    <fo:simple-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
      <xsl:apply-templates/>
    </fo:simple-link>
  </fo:block>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

Result Instance: elements and attributes in the fo: namespace

<fo:multi-switch>
  <fo:multi-case case-name="collapsed" case-title="collapsed" starting-state="show">
    <fo:block>
      <fo:multi-toggle switch-to="expanded">
        <fo:external-graphic href="plus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:simple-link internal-destination="N4">1. Chapter
      </fo:simple-link>
    </fo:block>
  </fo:multi-case>
  <fo:multi-case case-name="expanded" case-title="expanded" starting-state="hide">
    <fo:block>
      <fo:multi-toggle switch-to="collapsed">
        <fo:external-graphic href="minus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:simple-link internal-destination="N4">1. Chapter
      </fo:simple-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:simple-link internal-destination="N11">1.1 Section
      </fo:simple-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:simple-link internal-destination="N19">1.2 Section
      </fo:simple-link>
    </fo:block>
  </fo:multi-case>
</fo:multi-switch>
<fo:multi-switch>
  <fo:multi-case case-name="collapsed" case-title="collapsed" starting-state="show">
    <fo:block>
      <fo:multi-toggle switch-to="expanded">
        <fo:external-graphic href="plus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:simple-link internal-destination="N28">2. Chapter
      </fo:simple-link>
    </fo:block>
  </fo:multi-case>
  <fo:multi-case case-name="expanded" case-title="expanded" starting-state="hide">
    <fo:block>
      <fo:multi-toggle switch-to="collapsed">
        <fo:external-graphic href="minus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:simple-link internal-destination="N28">2. Chapter
      </fo:simple-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:simple-link internal-destination="N35">2.1 Section
      </fo:simple-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:simple-link internal-destination="N43">2.2 Section
      </fo:simple-link>
    </fo:block>
  </fo:multi-case>
</fo:multi-switch>

<fo:block id="N4">1. Chapter
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N11">1.1 Section
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N19">1.2 Section
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N28">2. Chapter
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N35">2.1 Section
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N43">2.2 Section
</fo:block>
<fo:block>Text
</fo:block>

6.9.2 fo:simple-link

6.9.3 fo:multi-switch

6.9.4 fo:multi-case

6.9.5 fo:multi-toggle

6.9.6 fo:multi-properties

6.9.7 fo:multi-property-set

6.10 Out-of-Line Formatting Objects

Issue (out-of-line):

This section is incomplete and may be inconsistent with other sections of this draft.

6.10.1 Introduction

6.10.1.1 Conditional Regions

Conditional regions specify region-masters that are used to generate region reference-areas. These region reference-areas are called conditional reference-areas. Conditional reference-areas are generated only when one or more areas that would be descendant from these reference-areas are present on the page from which the conditional reference-area is descendant. The descendants of a conditional reference-area are out-of-line areas that are returned by formatting objects, such as footnotes and floats, which have children that generate areas that are not placed in the normal flow of areas.

Conditional regions are subdivisions of a region. They specify how space can be borrowed from that region either at the top or bottom of that region. The region from which the conditional region borrows space is called the containing region. When a region-master that contains conditional regions is used to generate a reference-area, some of the region reference-areas that correspond to the conditional regions may be generated as well.

Whether a conditional reference-area is generated depends on the presence of out-of-line areas that should be descendent from that conditional reference-area. If there are out-of-line areas, such as areas generated by an fo:footnote or fo:float, then the conditional reference-areas may be generated. Whether or not the conditional reference-areas are actually generated depends, additionally, on whether there is sufficient space left in the reference-area from which the space is being borrowed and whether constraints on the relationship between the placement of the out-of-line areas and the normal areas generated by the same formatting object are met. For example, a constraint on footnotes requires that the footnote begin on the same page as the reference to the footnote. In addition, constraints on other portions of the content on the page may produce an over-constrained situation; for example, if there is a long, unbreakable paragraph that contains the footnote reference and just fits on a page.

When one or more conditional reference-areas are generated, the parent reference-area must be subdivided. This subdivision gives meaning to the phrase, "a conditional region borrows space from the containing region". The subdivision preserves the original reference-area generated using the region-master. This original area is the parent area of the subdivision areas. Subdivision generates two or more reference-areas that are children of the original reference-area. All but one of these reference-areas are conditional reference-areas. These conditional reference-areas are aligned with the before-edge or after-edge, respectively of the content-rectangle of the parent reference-area.

The remaining reference-area corresponds to the remaining space after the borrowing done by the conditional regions. The traits of the remaining reference-area are set as they would be if the reference-area were generated by a region with no specified properties that was the child of the containing region. This insures that there is a transparent background and no margin, border, or padding; and that inherited properties are set as they would be when the region-master for the containing region is used to generate a reference-area. The block-progression-dimension (this is "height" when the writing-mode is "lr-tb") of the remaining reference-area is set equal to the block-progression-dimension of the parent reference-area minus the sum of the sizes in the block-progression-direction of the allocation-rectangles of the conditional reference-areas. The remaining reference-area is positioned to immediately follow the after edge of the allocation-rectangle of the last of the conditional reference-areas that are before the remaining reference-area. This positions the after-edge of the remaining reference-area to coincide with the before-edge of the allocation-rectangle of the first of the conditional reference-areas that are after the remaining reference-area. The areas that would have been children of the parent reference-area are made children of the remaining reference-area. In addition to the constraints normally determined by the original region, the inline-progression-dimension (this is "width" when the writing-mode is "lr-tb") of that region is constrained to match inline-progression-dimension of the remaining reference-area.

Issue (out-of-line-intro-space):

Should space-before and space-after be taken into account for the space consumed by the conditional regions. The allocation-rectangle size in the block-progression-direction does not include these.

There may be limits on how much space conditional regions can borrow from the containing region.

The association of out-of-line content (areas) with particular conditional regions (areas) is specified in the descriptions of the formatting objects that initially return the out-of-line content (areas).

6.10.1.2 Floats and Footnotes

The region-body region has an implicit conditional float region at the before-edge of the region and an implicit conditional footnote region at the after-edge of the region.

When an fo:footnote formatting object appears in a flow, it returns at least two kinds of areas. One kind of area is a normal inline-area to accommodate the footnote citation. This inline-area is generated in sequence with the areas generated by the flow objects preceding and following the fo:footnote formatting object. It is, therefore, assigned to the reference-area generated using the region-master associated with the flow in which the fo:footnote occurs.

The second kind of area that is returned by the fo:footnote formatting object is an out-of-line area. It becomes a descendant of the reference-area generated by the implicit conditional footnote region associated with the region to which the flow in which the fo:footnote occurs is assigned.

The conditional reference-area which has as its descendant the first (and usually only) out-of-line area returned by the fo:footnote is constrained to be a sibling of the reference-area which has as its descendant the first of normal areas returned by the fo:footnote. That is, the footnote must begin in the same instance of the containing region in which the footnote citation occurs.

NOTE:

The actual areas generated by the descendants of the fo:footnote formatting object are determined by the formatting objects that comprise the descendant subtree. For example, if one wanted to format the footnote with a label and an indented body, then one could use the fo:list-block formatting object to format the content of the footnote.

Issue (out-of-sequence-hot-links):

This text need to be adapted to allow an interactive user agent to create "hot links" to the footnotes from the footnote citation instead of realizing conditional regions. The same holds true below for floats, only floats would need a manufactured "citation" to make hot.

When an fo:float formatting object appears in a flow, it returns out-of-line areas. These areas become descendants of reference-areas generated by the implicit conditional float region associated with the region to which the flow in which the fo:float occurs is assigned.

Issue (out-of-sequence-intro-error):

Should it be an error if an fo:float occurs in a flow that is not assigned to a region that has an implicit conditional "float" region. If it is an error is there a reasonable fallback, say put the float inline at the point of occurrence. This issue also applies to footnotes. Note that this would consistent with the fallback listed in the conformance summary since footnotes and floats are not in the "basic" formatting object set.

The constraint on the areas returned by an fo:float is that they may only be descendant from conditional reference-areas that are (a) descendant from areas generated using the region-masters for the region to which the flow that has the fo:float as a descendant is assigned, and (b) are descendent from the same page as the page in which normal areas returned by the fo:float would be descendants, or descendant from a page following that page in the sequence of pages that are children of the area tree root.

NOTE:

Future versions of this specification will describe the above semantics as special cases of a more general mechanism that allows out-of-line areas to be assigned to conditional regions and the expression of constraints between the occurrences of normal areas and out-of-line areas.

6.10.1.3 Examples

TBD

6.10.2 fo:float

6.10.3 fo:footnote

6.10.4 fo:footnote-citation

Issue (footnote-citation):

This formatting object will be removed.

6.11 Other Formatting Objects

6.11.1 Introduction

The following example shows the use of the fo:wrapper formatting object that has no semantics but acts as a "carrier" for inherited properties.

6.11.1.1 Example

Input sample:

<doc>
<p>This is an <emph>important word</emph> in this
sentence that also refers to a <code>variable</code>.</p>
</doc>

The "emph" elements are to be presented using a bold font and the "code" elements are using a Courier font.

XSL Stylesheet:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="emph">
  <fo:wrapper font-weight="bold">
    <xsl:apply-templates/>
  </fo:wrapper>
</xsl:template>

<xsl:template match="code">
  <fo:wrapper font-family="Courier">
    <xsl:apply-templates/>
  </fo:wrapper>
</xsl:template>

</xsl:stylesheet>

fo: element and attribute tree:

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">This is an
<fo:wrapper font-weight="bold">important word</fo:wrapper>
in this sentence that also refers to a
<fo:wrapper font-family="Courier">variable</fo:wrapper>.
</fo:block>

6.11.2 fo:wrapper

7 Formatting Properties

7.1 Description of Property Groups

The following sections describe the properties of the XSL formatting objects.

7.2 Common Accessibility Properties

7.2.1 "source-document"

XSL Definition:

Value: <uri>+ | none | inherit
Initial: none
Applies to: fo:root
Inherited: no
Percentages: N/A
Media: all

Values have the following meanings:

none

The source document is transient, unknown, or unspecified.

<uri>

A list of space-separated URIs, indicating the XML document(s) used as input to the stylesheet.

This property provides a pointer back to the original XML document(s) used to create this formatting-object tree. It is useful for for alternate renderers (aural readers, etc) whenever the structure of the formatting-object tree is inappropriate for that renderer.

7.2.2 "role"

XSL Definition:

Value: <string> | none | inherit
Initial: none
Applies to: see prose
Inherited: no
Percentages: N/A
Media: all

It is used by all formatting objects that can be contained in fo:flow or fo:static-content (all formatting objects that can be directly created from an XML source element).

Values have the following meanings:

none

Indicates that no semantic tag is cited by this formatting object.

<string>

The value is a string representing a semantic that may be used in rendering this formatting object. It can, for example, be an element name in some known semantic vocabulary, such as HTML, or a particular Web Accessibility Initiative (WAI) semantic vocabulary.

This provides a hint for alternate renderers (aural readers, etc) as to the role and potential alternate presentation of the content of this formatting object.

This property is not inherited, but all subsidiary nodes of this formatting object that do not bear a role property should utilize the same alternate presentation properties. (It is not inherited because knowledge of the start and end of the formatting-object subtree generated by the element may be needed by the renderer.)

7.3 Common Absolute Position Properties

7.3.1 "position"

CSS2 Definition:

Value: static | relative | absolute | fixed | inherit
Initial: static
Applies to: all elements, but not to generated content
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-position.

Values have the following meanings:

static

The box is a normal box, laid out according to the normal flow. The "left" and "top" properties do not apply.

relative

The box's position is calculated according to the normal flow (this is called the position in normal flow). Then the box is offset relative to its normal position. When a box B is relatively positioned, the position of the following box is calculated as though B were not offset.

absolute

The box's position (and possibly size) is specified with the "left", "right", "top", and "bottom" properties. These properties specify offsets with respect to the box's containing block. Absolutely positioned boxes are taken out of the normal flow. This means they have no impact on the layout of later siblings. Also, though absolutely positioned boxes have margins, they do not collapse with any other margins.

fixed

The box's position is calculated according to the "absolute" model, but in addition, the box is fixed with respect to some reference. In the case of continuous media, the box is fixed with respect to the viewport (and doesn't move when scrolled). In the case of paged media, the box is fixed with respect to the page, even if that page is seen through a viewport (in the case of a print-preview, for example). Authors may wish to specify "fixed" in a media-dependent way. For instance, an author may want a box to remain at the top the viewport on the screen, but not at the top of each printed page.

Specifies the positioning scheme to be used.

XSL modifications to the CSS definition:

The following additional restrictions apply for paged presentations:

7.3.2 "top"

CSS2 Definition:

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: positioned elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-top.

The "top" property specifies how far a box's top content edge is offset below the top edge of the box's containing block.

XSL modifications to the CSS definition:

See definition of property left ([7.3.5 "left"]).

7.3.3 "right"

CSS2 Definition:

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: positioned elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-right.

The "right" property specifies how far a box's right content edge is offset to the left of the right edge of the box's containing block.

XSL modifications to the CSS definition:

See definition of property left ([7.3.5 "left"]).

7.3.4 "bottom"

CSS2 Definition:

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: positioned elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-bottom.

The "bottom" property specifies how far a box's bottom content edge is offset above the bottom of the box's containing block.

XSL modifications to the CSS definition:

See definition of property left ([7.3.5 "left"]).

7.3.5 "left"

CSS2 Definition:

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: positioned elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-left.

The "left" property specifies how far a box's left content edge is offset to the right of the left edge of the box's containing block.

The values of the four (position offset) properties have the following meanings:

auto

The effect of this value depends on which of related properties have the value "auto" as well. See the sections on the width and height of absolutely positioned, non-replaced elements for details.

<length>

The offset is a fixed distance from the reference edge.

<percent>

The offset is a percentage of the containing block's width (for "left" or "right") or "height" (for "top" and "bottom"). For "top" and "bottom", if the "height" of the containing block is not specified explicitly (i.e., it depends on content height), the percentage value is interpreted like "auto".

For absolutely positioned boxes, the offsets are with respect to the box's containing block. For relatively positioned boxes, the offsets are with respect to the outer edges of the box itself (i.e., the box is given a position in the normal flow, then offset from that position according to these properties).

XSL modifications to the CSS definition:

These properties set the position of the content-rectangle of the associated area.

If both "top" and "bottom" are specified, the height of the content rectangle is overridden. If both "left" and "right" are specified, the width of the content-rectangle is overridden.

Issue (height-width-overrides):

There appears to be a contradiction in the CSS spec. 10.3.7 and 9.3.2. SZilles to request clarfication from CSS.

Clarify. CSS spec says, "If you specify opposing edges, the edge toward 'end' will be disregarded." Clarify if this is based on text-align or writing-direction (writing-mode). We believe it to be based solely on writing-mode.

7.4 Common Aural Properties

7.4.1 "azimuth"

CSS2 Definition:

Value: <angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inherit
Initial: center
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-azimuth.

7.4.2 "cue"

CSS2 Definition:

Value: <cue-before> || <cue-after> | inherit
Initial: not defined for shorthand properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-cue.

7.4.3 "cue-after"

CSS2 Definition:

Value: <uri> | none | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-cue-after.

7.4.4 "cue-before"

CSS2 Definition:

Value: <uri> | none | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-cue-before.

7.4.5 "elevation"

CSS2 Definition:

Value: <angle> | below | level | above | higher | lower | inherit
Initial: level
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-elevation.

7.4.6 "pause"

CSS2 Definition:

Value: [<time> | <percentage>]{1,2} | inherit
Initial: depends on user agent
Applies to: all elements
Inherited: no
Percentages: see descriptions of 'pause-before' and 'pause-after'
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-pause.

7.4.7 "pause-after"

CSS2 Definition:

Value: <time> | <percentage> | inherit
Initial: depends on user agent
Applies to: all elements
Inherited: no
Percentages: see prose
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-pause-after.

7.4.8 "pause-before"

CSS2 Definition:

Value: <time> | <percentage> | inherit
Initial: depends on user agent
Applies to: all elements
Inherited: no
Percentages: see prose
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-pause-before.

7.4.9 "pitch"

CSS2 Definition:

Value: <frequency> | x-low | low | medium | high | x-high | inherit
Initial: medium
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-pitch.

7.4.10 "pitch-range"

CSS2 Definition:

Value: <number> | inherit
Initial: 50
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-pitch-range.

7.4.11 "play-during"

CSS2 Definition:

Value: <uri> mix? repeat? | auto | none | inherit
Initial: auto
Applies to: all elements
Inherited: no
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-play-during.

7.4.12 "richness"

CSS2 Definition:

Value: <number> | inherit
Initial: 50
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-richness.

7.4.13 "speak"

CSS2 Definition:

Value: normal | none | spell-out | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-speak.

7.4.14 "speak-header"

CSS2 Definition:

Value: once | always | inherit
Initial: once
Applies to: elements that have table header information
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/tables.html#propdef-speak-header.

7.4.15 "speak-numeral"

CSS2 Definition:

Value: digits | continuous | inherit
Initial: continuous
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-speak-numeral.

7.4.16 "speak-punctuation"

CSS2 Definition:

Value: code | none | inherit
Initial: none
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-speak-punctuation.

7.4.17 "speech-rate"

CSS2 Definition:

Value: <number> | x-slow | slow | medium | fast | x-fast | faster | slower | inherit
Initial: medium
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-speech-rate.

7.4.18 "stress"

CSS2 Definition:

Value: <number> | inherit
Initial: 50
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-stress.

7.4.19 "voice-family"

CSS2 Definition:

Value: [[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inherit
Initial: depends on user agent
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-voice-family.

7.4.20 "volume"

CSS2 Definition:

Value: <number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inherit
Initial: medium
Applies to: all elements
Inherited: yes
Percentages: refer to inherited value
Media: aural

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/aural.html#propdef-volume.

7.5 Common Border, Padding, and Background Properties

The following common-border-padding-and-background-properties are taken from CSS2. Those "border", "padding", and "background" properties that have a before, after, start, or end suffix are writing-mode relative and are XSL-only properties.

Interrelated shorthands and individual properties:

CSS indicates that the user must specify the order of processing for combinations of multiple interrelated shorthands and individual interrelated properties. In XML, attributes are defined as unordered. To resolve this issue, XSL defines the following precedence order when multiple interrelated shorthand properties or a shorthand property and an interrelated individual property are specified:

7.5.1 "background"

CSS2 Definition:

Value: [<background-color> || <background-image> || <background-repeat> || <background-attachment> || <background-position> | ]]inherit
Initial: not defined for shorthand properties
Applies to: all elements
Inherited: no
Percentages: allowed on 'background-position'
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background.

The "background" property is a shorthand property for setting the individual background properties (i.e., background-color, background-image, background-repeat, background-attachment and background-position) at the same place in the stylesheet.

The "background" property first sets all the individual background properties to their initial values, then assigns explicit values given in the declaration.

7.5.2 "background-attachment"

CSS2 Definition:

Value: scroll | fixed | inherit
Initial: scroll
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background-attachment.

scroll

The background-image may scroll with the enclosing object.

fixed

The background-image is to be fixed within the viewable area of the enclosing object.

If a background-image is specified, this property specifies whether it is fixed with regard to the viewport (fixed) or scrolls along with the document (scroll).

Even if the image is fixed, it is still only visible when it is in the background or padding area of the element. Thus, unless the image is tiled ("background-repeat: repeat"), it may be invisible.

User agents may treat fixed as scroll. However, it is recommended they interpret fixed correctly, at least for the HTML and BODY elements, since there is no way for an author to provide an image only for those browsers that support fixed. See the section on conformance for details.

XSL modifications to the CSS definition:

7.5.3 "background-color"

CSS2 Definition:

Value: <color> | transparent | inherit
Initial: transparent
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background-color.

This property sets the background color of an element, either a <color> value or the keyword transparent, to make the underlying colors shine through.

transparent

The underlying colors will shine through.

<color>

Any valid color specification.

XSL modifications to the CSS definition:

Issue (color-props):

Shall we include proposed SVG properties: color-profile and rendering-intent in XSL? If so, what is appropriate syntax? Is there an extended syntax to specify both ICC and SVG color?

7.5.4 "background-image"

CSS2 Definition:

Value: <uri> | none | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background-image.

This property sets the background image of an element. When setting a "background-image", authors should also specify a background-color that will be used when the image is unavailable. When the image is available, it is rendered on top of the background color. (Thus, the color is visible in the transparent parts of the image).

Values for this property are either <uri>, to specify the image, or "none", when no image is used.

none

No image is specified.

<uri>

7.5.5 "background-repeat"

CSS2 Definition:

Value: repeat | repeat-x | repeat-y | no-repeat | inherit
Initial: repeat
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background-repeat.

If a background image is specified, this property specifies whether the image is repeated (tiled), and how. All tiling covers the content and padding areas of a box. Values have the following meanings:

repeat

The image is repeated both horizontally and vertically.

repeat-x

The image is repeated horizontally only.

repeat-y

The image is repeated vertically only.

no-repeat

The image is not repeated: only one copy of the image is drawn.

XSL modifications to the CSS definition:

7.5.6 "background-position"

CSS2 Definition:

Value: [ [<percentage> | <length> ]{1,2} | [ [top | center | bottom] || [left | center | right] ] ] | inherit
Initial: 0% 0%
Applies to: block-level and replaced elements
Inherited: no
Percentages: refer to the size of the box itself
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-background-position.

If a "background-image" has been specified, this property specifies its initial position.

<percentage> <percentage>

With a value pair of 0% 0%, the upper left corner of the image is aligned with the upper left corner of the box's padding edge. A value pair of 100% 100% places the lower right corner of the image in the lower right corner of padding area. With a value pair of 14% 84%, the point 14% across and 84% down the image is to be placed at the point 14% across and 84% down the padding area.

<length> <length>

With a value pair of 2cm 2cm, the upper left corner of the image is placed 2cm to the right and 2cm below the upper left corner of the padding area.

top left and left top

Same as 0% 0%.

top, top center, and center top

Same as 50% 0%.

right top and top right

Same as 100% 0%.

left, left center, and center left

Same as 0% 50%.

center and center center

Same as 50% 50%.

right, right center, and center right

Same as 100% 50%.

bottom left and left bottom

Same as 0% 100%.

bottom, bottom center, and center bottom

Same as 50% 100%.

bottom right and right bottom

Same as 100% 100%.

If only one percentage or length value is given, it sets the horizontal position only, the vertical position will be 50%. If two values are given, the horizontal position comes first. Combinations of length and percentage values are allowed, (e.g., 50% 2cm). Negative positions are allowed. Keywords cannot be combined with percentage values or length values (all possible combinations are given above).

If the background image is fixed within the viewport (see the "background-attachment" property), the image is placed relative to the viewport instead of the elements padding area.

7.5.7 "border-before-color"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Specifies the color of the border on the before-edge of a block-area or inline-area.

See definition of property border-top-color ([7.5.19 "border-top-color"]).

7.5.8 "border-before-style"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-style> | inherit
Initial: none
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-style" for the before-edge

7.5.9 "border-before-width"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-width> | inherit
Initial: medium
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-width" for the before-edge.

7.5.10 "border-after-color"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Specifies the color of the border on the after-edge of a block-area or inline-area.

See definition of property border-top-color ([7.5.19 "border-top-color"]).

7.5.11 "border-after-style"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-style> | inherit
Initial: none
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-style" for the after-edge

7.5.12 "border-after-width"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-width> | inherit
Initial: medium
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-width" for the after-edge

7.5.13 "border-start-color"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Specifies the color of the border on the start-edge of a block-area or inline-area.

See definition of property border-top-color ([7.5.19 "border-top-color"]).

7.5.14 "border-start-style"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-style> | inherit
Initial: none
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-style" for the start-edge

7.5.15 "border-start-width"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-width> | inherit
Initial: medium
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-width" for the start-edge

7.5.16 "border-end-color"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Specifies the color of the border on the end-edge of a block-area or inline-area.

See definition of property border-top-color ([7.5.19 "border-top-color"]).

7.5.17 "border-end-style"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-style> | inherit
Initial: none
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-style" for the end-edge

7.5.18 "border-end-width"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <border-width> | inherit
Initial: medium
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Analogous to "border-top-width" for the end-edge

7.5.19 "border-top-color"

CSS2 Definition:

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-top-color.

The 'border-color' property sets the color of the four borders. Values have the following meanings:

<color>

Any valid color specification.

If an element's border color is not specified with a "border" property, user agents must use the value of the element's "color" property as the computed value for the border color.

7.5.20 "border-top-style"

CSS2 Definition:

Value: <border-style> | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-top-style.

The border style properties specify the line style of a box's border (solid, double, dashed, etc.).

The properties defined in this section refer to the <border-style> value type, which may take one of the following:

none

No border. This value forces the computed value of 'border-width' to be '0'.

hidden

Same as 'none', except in terms of border conflict resolution for table elements.

dotted

The border is a series of dots.

dashed

The border is a series of short line segments.

solid

The border is a single line segment.

double

The border is two solid lines. The sum of the two lines and the space between them equals the value of 'border-width'.

groove

The border looks as though it were carved into the canvas.

ridge

The opposite of 'groove': the border looks as though it were coming out of the canvas.

inset

The border makes the entire box look as though it were embedded in the canvas.

outset

The opposite of 'inset': the border makes the entire box look as though it were coming out of the canvas.

All borders are drawn on top of the box's background. The color of borders drawn for values of 'groove', 'ridge', 'inset', and 'outset' depends on the element's 'color' property.

Conforming HTML user agents may interpret 'dotted', 'dashed', 'double', 'groove', 'ridge', 'inset', and 'outset' to be 'solid'.

XSL modifications to the CSS definition:

For fallback, a conforming implementation may interpret 'dotted', 'dashed', 'double', 'groove', 'ridge', 'inset', and 'outset' to be 'solid'.

7.5.21 "border-top-width"

CSS2 Definition:

Value: <border-width> | inherit
Initial: medium
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-top-width.

The border width properties specify the width of the border area. The properties defined in this section refer to the <border-width> value type, which may take one of the following values:

thin

A thin border.

medium

A medium border.

thick

A thick border.

<length>

The border's thickness has an explicit value. Explicit border widths cannot be negative.

The interpretation of the first three values depends on the user agent. The following relationships must hold, however:

7.5.22 "border-bottom-color"

CSS2 Definition:

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-bottom-color.

XSL modifications to the CSS definition:

Analogous to "border-top-color" for the bottom-edge

7.5.23 "border-bottom-style"

CSS2 Definition:

Value: <border-style> | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-bottom-style.

XSL modifications to the CSS definition:

Analogous to "border-top-style" for the bottom-edge

7.5.24 "border-bottom-width"

CSS2 Definition:

Value: <border-width> | inherit
Initial: medium
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-bottom-width.

XSL modifications to the CSS definition:

Analogous to "border-top-width for the bottom-edge

7.5.25 "border-left-color"

CSS2 Definition:

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-left-color.

XSL modifications to the CSS definition:

Analogous to "border-top-color" for the left-edge

7.5.26 "border-left-style"

CSS2 Definition:

Value: <border-style> | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-left-style.

XSL modifications to the CSS definition:

Analogous to "border-top-style" for the left-edge

7.5.27 "border-left-width"

CSS2 Definition:

Value: <border-width> | inherit
Initial: medium
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-left-width.

XSL modifications to the CSS definition:

Analogous to "border-top-width" for the left-edge

7.5.28 "border-right-color"

CSS2 Definition:

Value: <color> | inherit
Initial: the value of the 'color' property
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-right-color.

XSL modifications to the CSS definition:

Analogous to "border-top-color" for the right-edge

7.5.29 "border-right-style"

CSS2 Definition:

Value: <border-style> | inherit
Initial: none
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-right-style.

XSL modifications to the CSS definition:

Analogous to "border-top-style" for the right-edge

7.5.30 "border-right-width"

CSS2 Definition:

Value: <border-width> | inherit
Initial: medium
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-right-width.

XSL modifications to the CSS definition:

Analogous to "border-top-width" for the right-edge

7.5.31 "border"

CSS2 Definition:

Value: [ <border-width> || <border-style> || <color> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border.

The "border" property is a shorthand property for setting the same width, color, and style for all four borders, top, bottom, left, and right, of a box. Unlike the shorthand "margin" and "padding" properties, the "border" property cannot set different values on the four borders. To do so, one or more of the other border properties must be used.

XSL modifications to the CSS definition:

Refer to the introduction to the Section "Common Border, Padding, and Background Properties" for information on the ordering of properties.

7.5.32 "border-top"

CSS2 Definition:

Value: [ <border-top-width> || <border-style> || <color> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-top.

A shorthand property for setting the width, style, and color of the top of a block-area or inline-area.

7.5.33 "border-bottom"

CSS2 Definition:

Value: [ <border-top-width> || <border-style> || <color> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-bottom.

XSL modifications to the CSS definition:

Analogous to "border-top" for the bottom border.

7.5.34 "border-left"

CSS2 Definition:

Value: [ <border-top-width> || <border-style> || <color> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-left.

XSL modifications to the CSS definition:

Analogous to "border-top" for the left border.

7.5.35 "border-right"

CSS2 Definition:

Value: [ <border-top-width> || <border-style> || <color> ] | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-right.

XSL modifications to the CSS definition:

Analogous to "border-top" for the right border.

7.5.36 "border-color"

CSS2 Definition:

Value: <color>{1,4} | transparent | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-color.

The 'border-color' property sets the color of the four borders. Values have the following meanings:

transparent

The border is transparent (though it may have width).

<color>

Any valid color specification.

The "border-color" property can have from one to four values, and the values are set on the different sides as for "border-width".

If an element's border color is not specified with a "border" property, user agents must use the value of the element's "color" property as the computed value for the border color.

XSL modifications to the CSS definition:

See the 'border-width' property for a description of how this property is interpreted when one thru four values are provided.

7.5.37 "border-style"

CSS2 Definition:

Value: <border-style>{1,4} | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-style.

The "border-style" property sets the style of the four borders.

It can have from one to four values, and the values are set on the different sides.

XSL modifications to the CSS definition:

See the 'border-width' property for a description of how this property is interpreted when one thru four values are provided.

7.5.38 "border-width"

CSS2 Definition:

Value: <border-width>{1,4} | inherit
Initial: see individual properties
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-border-width.

This property is a shorthand property for setting "border-top-width", "border-right-width", "border-bottom-width", and "border-left-width" at the same place in the stylesheet.

If there is only one value, it applies to all sides. If there are two values, the top and bottom borders are set to the first value and the right and left are set to the second. If there are three values, the top is set to the first value, the left and right are set to the second, and the bottom is set to the third. If there are four values, they apply to the top, right, bottom, and left, respectively.

7.5.39 "padding-before"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <padding-width> | inherit
Initial: 0pt
Applies to: see prose
Inherited: no
Percentages: refer to width of containing block
Media: visual

Specifies the width of the padding on the before-edge of a block-area or inline-area.

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.40 "padding-after"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <padding-width> | inherit
Initial: 0pt
Applies to: see prose
Inherited: no
Percentages: refer to width of containing block
Media: visual

Specifies the width of the padding on the after-edge of a block-area or inline-area.

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.41 "padding-start"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <padding-width> | inherit
Initial: 0pt
Applies to: see prose
Inherited: no
Percentages: refer to width of containing block
Media: visual

Specifies the width of the padding on the start-edge of a block-area or inline-area.

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.42 "padding-end"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <padding-width> | inherit
Initial: 0pt
Applies to: see prose
Inherited: no
Percentages: refer to width of containing block
Media: visual

Specifies the width of the padding on the end-edge of a block-area or inline-area.

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.43 "padding-top"

CSS2 Definition:

Value: <padding-width> | inherit
Initial: 0pt
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-padding-top.

<length>

Specifies the width of the padding on the top-edge of a block-area or inline-area.

7.5.44 "padding-bottom"

CSS2 Definition:

Value: <padding-width> | inherit
Initial: 0pt
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-padding-bottom.

Specifies the width of the padding on the bottom-edge of a block-area or inline-area.

XSL modifications to the CSS definition:

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.45 "padding-left"

CSS2 Definition:

Value: <padding-width> | inherit
Initial: 0pt
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-padding-left.

Specifies the width of the padding on the left-edge of a block-area or inline-area.

XSL modifications to the CSS definition:

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.46 "padding-right"

CSS2 Definition:

Value: <padding-width> | inherit
Initial: 0pt
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-padding-right.

Specifies the width of the padding on the right-edge of a block-area or inline-area.

XSL modifications to the CSS definition:

See definition of property padding-top ([7.5.43 "padding-top"]).

7.5.47 "padding"

CSS2 Definition:

Value: <padding-width>{1,4} | inherit
Initial: not defined for shorthand properties
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-padding.

A shorthand property for setting padding-top, padding-bottom, padding-left, and padding-right of a block-area or inline-area.

If there is only one value, it applies to all sides. If there are two values, the top and bottom paddings are set to the first value and the right and left paddings are set to the second. If there are three values, the top is set to the first value, the left and right are set to the second, and the bottom is set to the third. If there are four values, they apply to the top, right, bottom, and left, respectively.

The surface color or image of the padding area is specified via the "background" property.

7.6 Common Font Properties

The following common-font-properties all are taken from CSS2. The reference to CSS2 is: http://www.w3.org/TR/REC-CSS2/fonts.html

NOTE:

Although these properties reference the individual properties in the CSS specification, it is recommended that you read the entire font section of the CSS2 specification.

7.6.1 "font"

CSS2 Definition:

Value: [ [ <font-style> || <font-variant> || <font-weight> ]? <font-size> [ / <line-height>]? <font-family> ] | caption | icon | menu | message-box | small-caption | status-bar | inherit
Initial: see individual properties
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#propdef-font.

The "font" property is, except as described below, a shorthand property for setting "font-style", "font-variant", "font-weight", "font-size", "line-height", and "font-family", at the same place in the stylesheet. The syntax of this property is based on a traditional typographical shorthand notation to set multiple properties related to fonts.

All font-related properties are first reset to their initial values, including those listed in the preceding paragraph plus "font-stretch" and "font-size-adjust". Then, those properties that are given explicit values in the "font" shorthand are set to those values. For a definition of allowed and initial values, see the previously defined properties. For reasons of backward compatibility, it is not possible to set "font-stretch" and "font-size-adjust" to other than their initial values using the "font" shorthand property; instead, set the individual properties.

The following [first six] values refer to system fonts:

caption

The font used for captioned controls (e.g., buttons, drop-downs, etc.).

icon

The font used to label icons.

menu

The font used in menus (e.g., dropdown menus and menu lists).

message-box

The font used in dialog boxes.

small-caption

The font used for labeling small controls.

status-bar

The font used in window status bars.

System fonts may only be set as a whole; that is, the "font-family", "size", "weight", "style", etc. are all set at the same time. These values may then be altered individually if desired. If no font with the indicated characteristics exists on a given platform, the user agent should either intelligently substitute (e.g., a smaller version of the "caption" font might be used for the "smallcaption" font), or substitute a user agent default font. As for regular fonts, if, for a system font, any of the individual properties are not part of the operating system's available user preferences, those properties should be set to their initial values.

That is why this property is "almost" a shorthand property: system fonts can only be specified with this property, not with "font-family" itself, so "font" allows authors to do more than the sum of its sub-properties. However, the individual properties such as "font-weight" are still given values taken from the system font, which can be independently varied.

7.6.2 "font-family"

CSS2 Definition:

Value: [[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inherit
Initial: depends on user agent
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#propdef-font-family.

This property specifies a prioritized list of font family names and/or generic family names. To deal with the problem that a single font may not contain glyphs to display all the characters in a document, or that not all fonts are available on all systems, this property allows authors to specify a list of fonts, all of the same style and size, that are tried in sequence to see if they contain a glyph for a certain character. This list is called a font set.

The generic font family will be used if one or more of the other fonts in a font set is unavailable. Although many fonts provide the "missing character" glyph, typically an open box, as its name implies this should not be considered a match except for the last font in a font set.

There are two types of font family names:

<family-name>

The name of a font-family of choice. In the previous example, "Baskerville", "Heisi Mincho W3", and "Symbol" are font families. Font family names containing whitespace should be quoted. If quoting is omitted, any whitespace characters before and after the font name are ignored and any sequence of whitespace characters inside the font name is converted to a single space.

<generic-family>

The following generic families are defined: "serif", "sans-serif", "cursive", "fantasy", and "monospace". Please see the section on generic font families for descriptions of these families. Generic font family names are keywords, and therefore must not be quoted.

XSL modifications to the CSS definition:

<string>

The names are syntactically expressed as strings.

NOTE:

See the expression language for a two-argument "system-font" function with the first argument being the system font name and the second (optional) argument being the font property you are trying to get the value of. If the second argument is omitted, you get the property corresponding to the left hand side of this assignment.

7.6.3 "font-size"

CSS2 Definition:

Value: <absolute-size> | <relative-size> | <length> | <percentage> | inherit
Initial: medium
Applies to: all elements
Inherited: yes, the computed value is inherited
Percentages: refer to parent element's font size
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#propdef-font-size.

This property describes the size of the font when set solid. Values have the following meanings:

<absolute-size>

An <absolute-size> keyword refers to an entry in a table of font sizes computed and kept by the user agent. Possible values are:

[ xx-small | x-small | small | medium | large | x-large | xx-large ]

On a computer screen a scaling factor of 1.2 is suggested between adjacent indexes; if the "medium" font is 12pt, the "large" font could be 14.4pt. Different media may need different scaling factors. Also, the user agent should take the quality and availability of fonts into account when computing the table. The table may be different from one font family to another. Note. In CSS1, the suggested scaling factor between adjacent indexes was 1.5 which user experience proved to be too large.

<relative-size>

A <relative-size> keyword is interpreted relative to the table of font sizes and the font size of the parent element. Possible values are:

[ larger | smaller ]

For example, if the parent element has a font size of "medium", a value of "larger" will make the font size of the current element be "large". If the parent element's size is not close to a table entry, the user agent is free to interpolate between table entries or round off to the closest one. The user agent may have to extrapolate table values if the numerical value goes beyond the keywords.

<length>

A length value specifies an absolute font size (that is independent of the user agent's font table). Negative lengths are illegal.

<percentage>

A percentage value specifies an absolute font size relative to the parent element's font size. Use of percentage values, or values in "em's", leads to more robust and cascadable stylesheets.

The actual value of this property may differ from the computed value due a numerical value on 'font-size-adjust' and the unavailability of certain font sizes.

Child elements inherit the computed 'font-size' value (otherwise, the effect of 'font-size-adjust' would compound).

7.6.4 "font-stretch"

CSS2 Definition:

Value: normal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded |inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#font-styling.

The 'font-stretch' property selects a normal, condensed, or extended face from a font family.

ultra-condensed
extra-condensed
condensed
semi-condensed
normal
semi-expanded
expanded
extra-expanded
ultra-expanded

Absolute keyword values have the following ordering, from narrowest to widest :

  1. ultra-condensed

  2. extra-condensed

  3. condensed

  4. semi-condensed

  5. normal

  6. semi-expanded

  7. expanded

  8. extra-expanded

  9. ultra-expanded

wider

The relative keyword "wider" sets the value to the next expanded value above the inherited value (while not increasing it above "ultra-expanded").

narrower

The relative keyword "narrower" sets the value to the next condensed value below the inherited value (while not decreasing it below "ultra-condensed").

7.6.5 "font-size-adjust"

CSS2 Definition:

Value: <number> | none | inherit
Initial: none
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#font-size-props.

In bicameral scripts, the subjective apparent size and legibility of a font are less dependent on their 'font-size' value than on the value of their 'x-height', or, more usefully, on the ratio of these two values, called the aspect value (font size divided by x-height). The higher the aspect value, the more likely it is that a font at smaller sizes will be legible. Inversely, faces with a lower aspect value will become illegible more rapidly below a given threshold size than faces with a higher aspect value. Straightforward font substitution that relies on font size alone may lead to illegible characters.

For example, the popular font Verdana has an aspect value of 0.58; when Verdana's font size 100 units, its x-height is 58 units. For comparison, Times New Roman has an aspect value of 0.46. Verdana will therefore tend to remain legible at smaller sizes than Times New Roman. Conversely, Verdana will often look 'too big' if substituted for Times New Roman at a chosen size.

This property allows authors to specify an aspect value for an element that will preserve the x-height of the first choice font in the substitute font. Values have the following meanings:

none

Do not preserve the font's x-height.

<real>

Specifies the aspect value. The number refers to the aspect value of the first choice font. The scaling factor for available fonts is computed according to the following formula:

y(a/a') = c

where:

y="font-size" of first-choice font

a' = aspect value of available font

c="font-size" to apply to available font

This property allows authors to specify an aspect value for an element that will preserve the x-height of the first choice font in the substitute font.

Font size adjustments take place when computing the actual value of "font-size". Since inheritance is based on the computed value, child elements will inherit unadjusted values.

7.6.6 "font-style"

CSS2 Definition:

Value: normal | italic | oblique | backslant | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#font-styling.

The "font-style" property requests normal (sometimes referred to as "roman" or "upright"), italic, and oblique faces within a font family. Values have the following meanings:

normal

Specifies a font that is classified as "normal" in the UA's font database.

oblique

Specifies a font that is classified as "oblique" in the UA's font database. Fonts with Oblique, Slanted, or Incline in their names will typically be labeled "oblique" in the font database. A font that is labeled "oblique" in the UA's font database may actually have been generated by electronically slanting a normal font.

italic

Specifies a font that is classified as "italic" in the UA's font database, or, if that is not available, one labeled 'oblique'. Fonts with Italic, Cursive, or Kursiv in their names will typically be labeled "italic".

XSL modifications to the CSS definition:

The following value type has been added for XSL:

backslant

Specifies a font that is classified as "backslant" in the UA's font database.

7.6.7 "font-variant"

CSS2 Definition:

Value: normal | small-caps | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#font-styling.

In a small-caps font, the glyphs for lowercase letters look similar to the uppercase ones, but in a smaller size and with slightly different proportions. The "font-variant" property requests such a font for bicameral (having two cases, as with Roman script). This property has no visible effect for scripts that are unicameral (having only one case, as with most of the world's writing systems). Values have the following meanings:

normal

Specifies a font that is not labeled as a small-caps font.

small-caps

Specifies a font that is labeled as a small-caps font. If a genuine small-caps font is not available, user agents should simulate a small-caps font, for example by taking a normal font and replacing the lowercase letters by scaled uppercase characters. As a last resort, unscaled uppercase letter glyphs in a normal font may replace glyphs in a small-caps font so that the text appears in all uppercase letters.

Insofar as this property causes text to be transformed to uppercase, the same considerations as for "text-transform" apply.

7.6.8 "font-weight"

CSS2 Definition:

Value: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/fonts.html#font-styling.

The "font-weight" property specifies the weight of the font.

normal

Same as "400".

bold

Same as "700".

bolder

Specifies the next weight that is assigned to a font that is darker than the inherited one. If there is no such weight, it simply results in the next darker numerical value (and the font remains unchanged), unless the inherited value was "900", in which case the resulting weight is also "900".

lighter

Specifies the next weight that is assigned to a font that is lighter than the inherited one. If there is no such weight, it simply results in the next lighter numerical value (and the font remains unchanged), unless the inherited value was "100", in which case the resulting weight is also "100".

<integer>

These values form an ordered sequence, where each number indicates a weight that is at least as dark as its predecessor.

Child elements inherit the computed value of the weight.

7.7 Common Hyphenation Properties

7.7.1 "xml:lang"

XSL Definition:

Value: <country-language> | inherit
Initial: not defined for shorthand properties
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

<string>

A language and/or country specifier in conformance with RFC-1766.

Specifies the language and country to be used by the formatter in linguistic services (such as hyphenation) and in the determination of line breaks. This affects line composition in a system-dependent way.

The string may be any RFC-1766 code.

XSL treats xml:lang as a shorthand and uses it to set the country and language properties.

NOTE:

In general, linguistic services (line-justification strategy, line-breaking and hyphenation) may depend on a combination of the "language", "script", and "country" properties.

7.7.2 "country"

XSL Definition:

Value: none | <country> | inherit
Initial: none
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

none

Indicates the country is unknown or is not significant to the proper formatting of this object.

<country>

A country specifier in conformance with RFC-1766.

Specifies the country to be used by the formatter in language-/locale-coupled services (line-justification strategy, line-breaking and hyphenation). This affects line composition in a system-dependent way.

The country may be the country component of any RFC-1766 code (these are derived from ISO-3166).

7.7.3 "language"

XSL Definition:

Value: none | <language> | inherit
Initial: none
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

none

Indicates the language is unknown or is not significant to the proper formatting of this object.

<language>

A language specifier in conformance with RFC-1766.

Specifies the language to be used by the formatter in language-/locale-coupled services (line-justification strategy, line-breaking, and hyphenation). This affects line composition in a system-dependent way.

The language may be the language component of any RFC-1766 code (these are derived from the ISO 639 language codes).

Issue (RFC-1766):

In 1996 ISO changed this to a 3-letter code, what does RFC-1766 say.

7.7.4 "script"

XSL Definition:

Value: none | auto | <script> | inherit
Initial: auto
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

auto

Indicates that the script is determined using codepoint ranges in the text of the document. This provides the automatic differentiation between Kanji, Katakana, Hiragana, and Romanji used in JIS-4051 and similar services in some other countries/languages.

none

Indicates the script is unknown or is not significant to the proper formatting of this object.

<script>

A script specifier in conformance with ISO 15924.

Specifies the script to be used by the formatter in language-/locale-coupled services (line-justification strategy, line-breaking and hyphenation). This affects line composition in a system-dependent way.

The script may be any ISO 15924 script code.

7.7.5 "hyphenate"

XSL Definition:

Value: false | true | inherit
Initial: false
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

false

Hyphenation may not be used in the line-breaking algorithm for the text contained in this object.

true

Hyphenation may be used in the line-breaking algorithm for the text contained in this object.

Specifies whether hyphenation is allowed during line-breaking when the formatter is formatting this flow object.

7.7.6 "hyphenation-character"

XSL Definition:

Value: <character> | inherit
Initial: The unicode hyphen character u+2010
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

<char>

Specifies the character to be displayed when a hyphenation break occurs. The styling properties of this character are those inherited from its containing flow object.

7.7.7 "hyphenation-push-character-count"

XSL Definition:

Value: <number> | inherit
Initial: 2
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

<integer>

If a negative or non-integer value is specified, it will be rounded to the nearest integer greater than zero.

The hyphenation-push-character-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.

7.7.8 "hyphenation-remain-character-count"

XSL Definition:

Value: <number> | inherit
Initial: 2
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

<integer>

If a negative or non-integer value is specified, it will be rounded to the nearest integer greater than zero.

The hyphenation-remain-character-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.

7.8 Common Keeps and Breaks Properties

All keep values are ordered from weakest (auto) to strongest (always) and break values are ordered from weakest (auto) to strongest (even/odd). In general, the strongest condition applies, with all breaks other than "auto" being stronger than all keeps. Also, conflicting even-page/odd-page breaks behave as if they were "page".

If it is not possible to satisfy all keep conditions, then the keep-together conditions are relaxed before relaxing the keep-with-previous and keep-with-next conditions.

Issue (overconstrained-keep-conditions):

Some SG members believe the above should not be singled out in specifying what constraints get relaxed and in what order.

Page breaks only apply to descendants of the fo:flow formatting object, and not within absolutely positioned areas, or out-of-sequence areas. Likewise, column breaks only apply to descendants of fo:flow formatting objects, or within non-final column descendants of an absolutely positioned or out-of-sequence area.

7.8.1 "page-break-after"

CSS2 Definition:

Value: auto | always | avoid | left | right | inherit
Initial: auto
Applies to: Block-level elements, table, and table-row.
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/page.html#propdef-page-break-after.

Values for these properties have the following meanings:

auto

Neither force nor forbid a page break before (after, inside) the generated box.

always

Always force a page break before (after) the generated box.

avoid

Avoid a page break before (after, inside) the generated box.

left

Force one or two page breaks before (after) the generated box so that the next page is formatted as a left page.

right

Force one or two page breaks before (after) the generated box so that the next page is formatted as a right page.

A potential page break location is typically under the influence of the parent element's 'page-break-inside' property, the 'page-break-after' property of the preceding element, and the 'page-break-before' property of the following element. When these properties have values other than 'auto', the values 'always', 'left', and 'right' take precedence over 'avoid'. See the section on allowed page breaks for the exact rules on how these properties may force or suppress a page break.

XSL modifications to the CSS definition:

The CSS property shall be treated as a shorthand by XSL and maps as follows:

auto

break-after = "auto"

keep-with-next = "auto"

always

break-after = "page"

keep-with-next = "auto"

avoid

break-after = "auto"

keep-with-next = "always"

left

break-after = "even-page"

keep-with-next = "auto"

right

break-after = "odd-page"

keep-with-next = "auto"

7.8.2 "page-break-before"

CSS2 Definition:

Value: auto | always | avoid | left | right | inherit
Initial: auto
Applies to: Block-level elements, table, and table-row.
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/page.html#propdef-page-break-before.

Values for these properties have the following meanings:

auto

Neither force nor forbid a page break before (after, inside) the generated box.

always

Always force a page break before (after) the generated box.

avoid

Avoid a page break before (after, inside) the generated box.

left

Force one or two page breaks before (after) the generated box so that the next page is formatted as a left page.

right

Force one or two page breaks before (after) the generated box so that the next page is formatted as a right page.

A potential page break location is typically under the influence of the parent element's 'page-break-inside' property, the 'page-break-after' property of the preceding element, and the 'page-break-before' property of the following element. When these properties have values other than 'auto', the values 'always', 'left', and 'right' take precedence over 'avoid'. See the section on allowed page breaks for the exact rules on how these properties may force or suppress a page break.

XSL modifications to the CSS definition:

The CSS property shall be treated as a shorthand by XSL and maps as follows:

auto

break-before = "auto"

keep-with-previous = "auto"

always

break-before = "page"

keep-with-previous = "auto"

avoid

break-before = "auto"

keep-with-previous = "always"

left

break-before = "even-page"

keep-with-previous = "auto"

right

break-before = "odd-page"

keep-with-previous = "auto"

7.8.3 "break-after"

XSL Definition:

Value: auto | column | page | even-page | odd-page | inherit
Initial: auto
Applies to: Block-level formatting objects, fo:table, and fo:table-row.
Inherited: no
Percentages: N/A
Media: visual

Values for these properties have the following meanings:

auto

No break shall be forced.

NOTE:

Page breaks may occur as determined by the formatter's widow, orphan, keep-with-next, keep-with-previous, and page-break-inside processing rules.

column

The last area generated by formatting this formatting object shall be the last one placed in this column.

page

The last area generated by formatting this formatting object shall be the last one placed in this page.

even-page

The last area generated by formatting this formatting object shall be the last one in this page. The first block-level area generated by formatting the next formatting object shall begin a new even-numbered page (a blank page may be inserted if necessary).

odd-page

The last area generated by formatting this formatting object shall be the last one placed in this page. The first block-level area generated by formatting the next formatting object shall begin a new odd-numbered page (a blank page may be inserted if necessary).

Specifies that the last area generated by formatting this formatting object shall be the last one placed in a particular type of reference-area. For the "odd-page" and "even-page" property values, it also specifies where the first block-level area generated by formatting the next formatting object in the result tree shall be placed.

7.8.4 "break-before"

XSL Definition:

Value: auto | column | page | even-page | odd-page | inherit
Initial: auto
Applies to: Block-level formatting objects, fo:table, and fo:table-row.
Inherited: no
Percentages: N/A
Media: visual

Values have the following meanings:

auto

No break shall be forced.

NOTE:

Page breaks may occur as determined by the widow, orphan, keep-with-next, keep-with-previous, and page-break-inside properties.

column

Specifies that the first block-level area generated by formatting this formatting object shall be the first one placed in a column.

page

Specifies that the first block-level area generated by formatting this formatting object shall be the first one placed in a page.

even-page

Specifies that the first block-level area generated by formatting this formatting object shall be the first one placed in an even-numbered page (a blank page may be inserted if necessary).

odd-page

Specifies that the first block-level area generated by formatting this formatting object shall be the first one placed in an odd-numbered page (a blank page may be inserted if necessary).

Specifies that the first block-level area generated by formatting this formatting object shall be the first one placed in a particular type of reference-area.

Issue (keepformalism):

See JC mail on Keeps and Breaks to determine where the semantic information should be placed.

7.8.5 "keep-with-next"

XSL Definition:

Value: auto | always | column | page | inherit
Initial: auto
Applies to: Block-level formatting objects, fo:table, and fo:table-row.
Inherited: no
Percentages: N/A
Media: visual

Issue (keep-with-next):

Should indicate that it keeps "last area generated by the first FO" in the same "reference-area" as the "first-area generated by the second FO". Also, "reference-area" is column or page or region, not any reference-area.

Values have the following meanings:

auto

Indicates the last block-level area generated by this formatting object need not be kept adjacent to the first block-level area generated by the next object in the FO tree.

always

Indicates the last block-level area generated by this formatting object must be kept adjacent to the first block-level area generated by the next object in the FO tree.

column

Indicates the last block-level area generated by this formatting object must be kept in the same column (or page) to the first block-level area generated by the next object in the FO tree.

page

Indicates the last block-level area generated by this formatting object must be kept in the same page to the first block-level area generated by the next object in the FO tree, but need not be kept in the same column.

Specifies whether the last block-level area generated by formatting this formatting object shall be placed in the same reference-area as the first block-level area created by formatting the next formatting object in the result tree.

When applied to fo:table-row, the term "block-level area" in this definition refers to the "block-level-area generated by the fo:table-row".

Issue (adjacency):

Must define "adjacency" in area model and result-tree. This definition must then be reworded to use that definition. Note that both "adjacency in the FOT" and "adjacency in the area-tree" are utilized in this definition.

7.8.6 "keep-with-previous"

XSL Definition:

Value: auto | always | column | page | inherit
Initial: false
Applies to: Block-level formatting objects, fo:table, and fo:table-row.
Inherited: no
Percentages: N/A
Media: visual

Issue (area-generation-keeps):

There has been a request for clarification of definition. Should indicate that it keeps "first area generated by the second FO" in the same "reference-area" as the "last-area generated by the first FO". Also, "reference-area" is column or page or region, not any reference-area.

Values have the following meanings:

auto

Indicates the first block-level area generated by this formatting object need not be kept adjacent to the last block-level area generated by the previous object in the FO tree.

always

Indicates the first block-level area generated by this formatting object must be kept adjacent to the last block-level area generated by the previous object in the FO tree.

column

Indicates the first block-level area generated by this formatting object must be kept in the same column (or page) to the last block-level area generated by the previous object in the FO tree.

page

Indicates the first block-level area generated by this formatting object must be kept in the same page to the last block-level area generated by the previous object in the FO tree, but need not be kept in the same column.

Specifies whether the first block-level area generated by formatting this formatting object shall be placed in the same reference-area as the last block-level area created by formatting the previous formatting object in the result tree.

When applied to fo:table-row, the term "block-level area" in this definition refers to the "block-level-area generated by the fo:table-row".

7.9 Common Margin Properties-Block

7.9.1 "margin-top"

CSS2 Definition:

Value: <margin-width> | inherit
Initial: 0
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-top.

Margin-width may be one of the following:

auto

See the CSS2 section on computing widths and margins for behavior.

<length>

Specifies a fixed width.

<percent>

The percentage is calculated with respect to the width of the generated box's containing block. This is true for 'margin-top' and 'margin-bottom', except in the page context, where percentages refer to page box height.

Negative values for margin properties are allowed, but there may be implementation-specific limits.

Sets the top margin of a box.

XSL modifications to the CSS definition:

7.9.2 "margin-bottom"

CSS2 Definition:

Value: <margin-width> | inherit
Initial: 0
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-bottom.

Margin-width may be one of the following:

auto

See the CSS2 section on computing widths and margins for behavior.

<length>

Specifies a fixed width.

<percent>

The percentage is calculated with respect to the width of the generated box's containing block. This is true for 'margin-top' and 'margin-bottom', except in the page context, where percentages refer to page box height.

Negative values for margin properties are allowed, but there may be implementation-specific limits.

Sets the bottom margin of a box.

XSL modifications to the CSS definition:

7.9.3 "margin-left"

CSS2 Definition:

Value: <margin-width> | inherit
Initial: 0pt
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-left.

Margin-width may be one of the following:

auto

See the CSS2 section on computing widths and margins for behavior.

<length>

Specifies a fixed width.

<percent>

The percentage is calculated with respect to the width of the generated box's containing block. This is true for 'margin-top' and 'margin-bottom', except in the page context, where percentages refer to page box height.

Negative values for margin properties are allowed, but there may be implementation-specific limits.

Sets the left margin of a box.

XSL modifications to the CSS definition:

7.9.4 "margin-right"

CSS2 Definition:

Value: <margin-width> | inherit
Initial: 0pt
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin-right.

Margin-width may be one of the following:

auto

See the CSS2 section on computing widths and margins for behavior.

<length>

Specifies a fixed width.

<percent>

The percentage is calculated with respect to the width of the generated box's containing block. This is true for 'margin-top' and 'margin-bottom', except in the page context, where percentages refer to page box height.

Negative values for margin properties are allowed, but there may be implementation-specific limits.

Sets the right margin of a box.

XSL modifications to the CSS definition:

7.9.5 "margin"

CSS2 Definition:

Value: <margin-width>{1,4} | inherit
Initial: not defined for shorthand properties
Applies to: all elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/box.html#propdef-margin.

A shorthand property for setting margin-top, margin-right, margin-bottom, and margin-left of a block-area or inline-area.

If there is only one value, it applies to all sides. If there are two values, the top and bottom margins are set to the first value and the right and left margins are set to the second. If there are three values, the top is set to the first value, the left and right are set to the second, and the bottom is set to the third. If there are four values, they apply to the top, right, bottom, and left, respectively.

XSL modifications to the CSS definition:

7.9.6 "space-before"

XSL Definition:

Value: <space> | inherit
Initial: space.minimum=0pt, .optimum=0pt, .maximum=0pt, .conditionality=discard, .precedence=0
Applies to: All block-level formatting objects
Inherited: no
Percentages: N/A (Differs from margin-top in CSS)
Media: visual

Values have the following meanings:

<space>

Specifies the minimum, optimum, and maximum width for the space-before any areas created by this formatting object and any conditionality or precedence determining if/how the widths are used

Specifies additional space that is to be inserted preceding a block-area.

This space may be conditional at the start of a reference-area via the conditionality sub-property.

Space-after on one area and space-before on the subsequent area are merged in the manner described in the area model.

Space-before specifies the following values as a set:

optimum

The optimum (or preferred) amount of space to be inserted.

minimum

The minimum amount of space to be inserted. If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum".

maximum

The maximum amount of space to be inserted. If "maximum" is less than optimum, it will be treated as if it had been set to "optimum".

precedence

Controls the merging of space between blocks.

This property may be set to:

force

This space-specifier will be retained and not merged with other space-specifier preceding this object.

an integer

This space-specifier will be merged with other space-specifier preceding this object in accordance with the space-merging rules specified in the area model.

conditionality

Controls whether a space-specifier has effect if it is the initial space in a reference-area.

This property may be set to:

discard

This space-specifier will be discarded if it is the initial space in a reference-area.

retain

This space-specifier will be retained if it is the initial space in a reference-area.

7.9.7 "space-after"

XSL Definition:

Value: <space> | inherit
Initial: space.minimum=0pt, .optimum=0pt, .maximum=0pt, .conditionality=discard, .precedence=0
Applies to: All block-level formatting objects
Inherited: no
Percentages: N/A (Differs from margin-bottom in CSS)
Media: visual

Values have the following meanings:

<space>

Specifies the minimum, optimum, and maximum width for the space-after any areas created by this formatting object and any conditionality or precedence determining if/how the widths are used

Specifies additional space that is to be inserted following a block-area.

This space-specifier may be conditional at the end of a reference-area via the conditionality sub-property.

Space-after on one area and space-before on the subsequent area are merged in the manner described in the area model.

Space-after specifies the following values as a set:

optimum

The optimum (or preferred) amount of space to be inserted.

minimum

The minimum amount of space to be inserted. If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum".

maximum

The maximum amount of space to be inserted. If "maximum" is less than optimum, it will be treated as if it had been set to "optimum".

precedence

Controls the merging of space between blocks.

This property may be set to:

force

This space-specifier will be retained and not merged with other space-specifier following this object.

an integer

This space-specifier will be merged with other space-specifier following this object in accordance with the space-merging rules specified in the area model.

conditionality

Controls whether a space-specifier has effect if it is the final space in a reference-area.

This property may be set to:

discard

This space-specifier will be discarded if it is the final space in a reference-area.

retain

This space-specifier will be retained if it is the final space in a reference-area.

7.9.8 "start-indent"

XSL Definition:

Value: <length> | inherit
Initial: 0pt
Applies to: All block-level formatting objects
Inherited: yes
Percentages: refer to width of containing reference-area
Media: visual

Values have the following meanings:

<length>

For each block-area generated by this formatting object, specifies the distance from the start-edge of the content-rectangle of the containing reference-area to the start-edge of the allocation-rectangle of that block-area.

This property may have a negative value, which indicates an outdent.

7.9.9 "end-indent"

XSL Definition:

Value: <length> | inherit
Initial: 0pt
Applies to: All block-level formatting objects
Inherited: yes
Percentages: refer to width of containing reference-area
Media: visual

Values have the following meanings:

<length>

For each block-area generated by this formatting object, specifies the distance from the end-edge of the allocation-rectangle of that block-area to the end-edge of the content-rectangle of the containing reference-area.

This property may have a negative value, which indicates an outdent.

7.10 Common Margin Properties-Inline

This group also includes all the properties in the common-margin-properties-block group except end-indent, space-after, space-before, and start-indent

7.10.1 "space-end"

XSL Definition:

Value: <space> | inherit
Initial: space.minimum=0pt, .optimum=0pt, .maximum=0pt, .conditionality=discard, .precedence=0
Applies to: All inline-level formatting objects
Inherited: no
Percentages: refer to the width of the containing area
Media: visual

Values have the following meanings:

<space>

Specifies the minimum, optimum, and maximum width for the space-end any areas created by this formatting object and any conditionality or precedence determining if/how the widths are used.

Specifies additional space that is to be inserted following an inline-area.

This space-specifier may be conditional at the end of a line via the conditionality sub-property.

Space-end on one area and space-start on the subsequent area are merged in the manner described in the area model.

Space-end specifies the following values as a set:

optimum

The optimum (or preferred) amount of space to be inserted.

minimum

The minimum amount of space to be inserted. If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum".

maximum

The maximum amount of space to be inserted. If "maximum" is less than optimum, it will be treated as if it had been set to "optimum".

precedence

Controls the merging of space-specifier between inlines.

This property may be set to:

force

This space-specifier will be retained and not merged with other space-specifier following this object.

an integer

This space-specifier will be merged with other space-specifier following this object in accordance with the space merging rules specified in the area model.

conditionality

Controls the space-end if it is the final space in a line-area.

This property may be set to:

discard

This space-specifier will be discarded if it is the final space in a line-area.

retain

This space-specifier will be retained if it is the final space in a line-area.

7.10.2 "space-start"

XSL Definition:

Value: <space> | inherit
Initial: space.minimum=0pt, .optimum=0pt, .maximum=0pt, .conditionality=discard, .precedence=0
Applies to: All inline-level formatting objects
Inherited: no
Percentages: refer to the width of the containing area
Media: visual

Values have the following meanings:

<space>

Specifies the minimum, optimum, and maximum width for the space-start any areas created by this formatting object and any conditionality or precedence determining if/how the widths are used

Specifies additional space that is to be inserted preceding an inline-area.

This space may be conditional at the start of a line via the conditionality sub-property.

Space-end on one area and space-start on the subsequent area are merged in the manner described in the area model.

Space-start specifies the following values as a set:

optimum

The optimum (or preferred) amount of space to be inserted.

minimum

The minimum amount of space to be inserted. If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum".

maximum

The maximum amount of space to be inserted. If "maximum" is less than optimum, it will be treated as if it had been set to "optimum".

precedence

Controls the merging of space-specifier between inlines.

This property may be set to:

force

This space-specifier will be retained and not merged with other space-specifier preceding this object.

an integer

This space-specifier will be merged with other space-specifier preceding this object in accordance with the space merging rules specified in the area model.

conditionality

Controls the space-start if it is the initial space in a line-area.

This property may be set to:

discard

This space-specifier will be discarded if it is the initial space in a line-area.

retain

This space-specifier will be retained if it is the initial space in a line-area.

7.11 Pagination and Layout Properties

The following pagination and layout properties are all XSL only.

7.11.1 "column-count"

XSL Definition:

Value: <number> | inherit
Initial: 1
Applies to: fo:body-region
Inherited: no
Percentages: N/A
Media: paged

Values have the following meanings:

<integer>

A positive integer. (If a negative or non-integer value is provided, the value will be rounded to the nearest integer value greater than or equal to 1.

Specifies the number of columns in the region.

A value of 1 indicates that this is not a multi-column region.

7.11.2 "column-gap"

XSL Definition:

Value: <length> | inherit
Initial: 12.0pt
Applies to: fo:body-region
Inherited: no
Percentages: refer to width of the region being divided into columns.
Media: paged

Values have the following meanings:

<length>

This is an unsigned length (may not be negative, but may be 0).

Specifies the width of the gutter separation between adjacent columns in a multi-column region.

7.11.3 "extent"

XSL Definition:

Value: <length> | inherit
Initial: 0.0pt
Applies to: fo:before-region, fo:after-region, fo:start-region, fo:end-region
Inherited: no
Percentages: refer to the corresponding height or width of the page region.
Media: paged

Values have the following meanings:

<length>

This is an unsigned length (may not be negative, but may be 0).

Specifies the width of the region-start or region-end or the height of the region-before or region-after. If the corresponding content in an fo:flow formatting object is absent, this space will still be reserved.

7.11.4 "flow-name"

XSL Definition:

Value: <name> | inherit
Initial: an empty name
Applies to: fo:flow, fo:static-content
Inherited: no, a value is required
Percentages: N/A
Media: paged

Values have the following meanings:

<name>

Names used as identifiers must be unique within a usage context. Thus all flows within a given parent must have unique names.

Uses of the flow-name to reference a given flow need not be unique, but must refer to a flow that is visible in the current context.

Issue (current-context):

Does the following sentence: "Uses of the flow-name to reference a given flow need not be unique, but must refer to a flow that is visible in the current context." convey the meaning we want appropriately? Language also used on "region-name" property.

Though the value "inherit" may be specified for this property when naming flows, care must be taken to avoid name conflict errors.

If the name is empty or if a name-conflict is encountered, an error shall be reported. A processor may then continue processing.

Defines the name of the flow.

The flow-name and region-name are used to assign the flow's content (or static-content's content) to a specific region or series of regions in the layout. In XSL this is done by specifying the name of the target region as the flow-name. (For example, text placed in the body-region would specify flow-name="xsl-region-body".)

The value "inherit" may not be specified for this property.

7.11.5 "master-name"

XSL Definition:

Value: <name> | inherit
Initial: an empty name
Applies to: fo:simple-page-master, fo:single-page-master-reference, fo:repeatable-page-master-reference, fo:conditional-page-master-reference
Inherited: no
Percentages: N/A
Media: paged

Values have the following meanings:

<name>

Names used as master identifiers may not be empty and must be unique.

Uses of the name to reference a given named object need not be unique, but may not be empty and must refer to a master-name that exists within the document.

This property is used for two purposes:

7.11.6 "region-name"

XSL Definition:

Value: xsl-region-body | xsl-region-start | xsl-region-end | xsl-region-before | xsl-region-after | <name> | inherit
Initial: see prose
Applies to: fo:region-body, fo:region-start, fo:region-end, fo:region-before, and fo:region-after
Inherited: no
Percentages: N/A
Media: paged

Values have the following meanings:

xsl-region-body

Reserved region-name for use as default name of fo:region-body. This name may not be used on any other class of region.

xsl-region-start

Reserved region-name for use as default name of fo:region-start. This name may not be used on any other class of region.

xsl-region-end

Reserved region-name for use as default name of fo:region-end. This name may not be used on any other class of region.

xsl-region-before

Reserved region-name for use as default name of fo:region-before. This name may not be used on any other class of region.

xsl-region-after

Reserved region-name for use as default name of fo:region-after. This name may not be used on any other class of region.

<name>

Names used as identifiers must be unique within a usage context.

Uses of the name to reference a given named object need not be unique, but must refer to a name of the appropriate class that is visible in the current context.

This property is used to identify a region within a simple-page-master.

The "region-name" may be used to differentiate a region that lies on a page-master for an odd page from a region that lies on a page-master for an even page. In this usage, once a name is used for a specific class of region (start, end, before, after, or body), that name may only be used for regions of the same class in any other page-master. The reserved names may only be used in the manner described above.

7.11.7 "initial-page-number"

XSL Definition:

Value: auto | <number> | inherit
Initial: auto
Applies to: fo:page-sequence
Inherited: no
Percentages: N/A
Media: paged

Values have the following meanings:

auto

The initial number shall be set to 1 if no previous fo:page-sequence exists in the document.

If a preceding page-sequence exists, the initial number will be one greater than the last number for that section.

<integer>

A positive integer. If a negative or non-integer value is provided, the value will be rounded to the nearest integer value greater than or equal to 1.

Sets the initial page number to be used on this page-sequence.

7.11.8 "force-page-count"

XSL Definition:

Value: even | odd | no-force | inherit
Initial: no-force
Applies to: fo:page-sequence
Inherited: no
Percentages: N/A
Media: paged

Force-page-count is used to impose a constraint on the number of pages in a page-sequence. In the event that this constraint is not satisfied, an additional page will be added to the end of the sequence. This page becomes the "last" page of that sequence.

The values have the following meanings:

even

Force an even number of pages in this page-sequence.

odd

Force an odd number of pages in this page-sequence.

no-force

Do not force either an even or an odd number of pages in this page-sequence

If this property is not supported, it shall be treated as if "no-force" had been specified.

7.11.9 "maximum-repeats"

XSL Definition:

Value: <number> | no-limit | inherit
Initial: no-limit
Applies to: fo:repeatable-page-master-reference, fo:repeatable-page-master-alternatives
Inherited: no
Percentages: N/A
Media: paged

Specifies the constraint on the maximum number of pages in the subsequence of pages that may be generated by an fo:page-sequence that uses the fo:repeatable-page-master-reference or fo:repeatable-page-master-alternatives on which this property is specified.

The values have the following meanings:

no-limit

No constraint is specified.

<integer>

The maximum number of pages in the subsequence.

The value is an integer greater than or equal to 0.

If a fractional value or a value less than 0 is specified, it will be rounded to the nearest integer greater than or equal to 0.

A value of 0 indicates this master-reference will be skipped.

Issue (repeatable-master-reference):

Does the following sentence adequately explain the desired semantic: "A value of 0 indicates this master-reference will be skipped."

If this property is not supported, it shall be treated as if "no-limit" had been specified.

7.11.10 "page-position"

XSL Definition:

Value: first | last | rest | any | inherit
Initial: any
Applies to: fo:conditional-page-master-reference
Inherited: no
Percentages: N/A
Media: paged

This property forms part of a selection rule to determine if the referenced page-master is eligible for selection at this point in the page-sequence.

The values have the following meanings:

first

This master is eligible for selection if this is the first page in the page-sequence.

last

This master is eligible for selection if this is the last page in the page-sequence.

rest

This master is eligible for selection if this is not the first page nor the last page in the page-sequence.

any

This master is eligible for selection regardless of page positioning within the page-sequence.

If this property is not supported, it shall be treated as if "any" had been specified.

7.11.11 "odd-or-even"

XSL Definition:

Value: odd | even | any | inherit
Initial: any
Applies to: fo:conditional-page-master-reference
Inherited: no
Percentages: N/A
Media: paged

This property forms part of a selection rule to determine if the referenced page-master is eligible for selection at this point in the page-sequence.

The values have the following meanings:

odd

This master is eligible for selection for odd-phased pages within the page-sequence.

even

This master is eligible for selection for even-phased pages within the page-sequence.

any

This master is eligible for selection regardless of the page-phase within the page-sequence.

If this property is not supported, it shall be treated as if "any" had been specified.

7.11.12 "blank-page"

XSL Definition:

Value: blank | nonblank | any | inherit
Initial: any
Applies to: fo:conditional-page-master-reference
Inherited: no
Percentages: N/A
Media: paged

This property forms part of a selection rule to determine if the referenced page-master is eligible for selection at this point in the page-sequence.

The values have the following meanings:

blank

This master is eligible for selection if a blank filler page is needed to start or end the page-sequence on a specific page phase.

nonblank

This master is eligible for selection if this page is not a blank filler page in the page-sequence.

any

This master is eligible for selection regardless of whether the page has content or is a blank filler page.

If this property is not supported, it shall be treated as if "any" had been specified.

7.11.13 "page-height"

XSL Definition:

Value: auto | indefinite | <length> | inherit
Initial: auto
Applies to: fo:simple-page-master
Inherited: no
Percentages: N/A
Media: visual

Values have the following meanings:

auto

The "page-height" shall be determined by the formatter from the height of the media or browser window. If media information is not available this dimension shall be implementation defined.

NOTE:

A fallback to 11.0in would fit on both 8+1/2x11 and A4 pages).

indefinite

The height of the page is determined from the size of the laid-out content.

Page-width and page-height may not both be set to indefinite. Should that occur, page-width will revert to auto and page-height will remain indefinite.

<length>

Specifies a fixed height for the page.

Specifies the height of a page-area.

7.11.14 "page-width"

XSL Definition:

Value: auto | indefinite | <length> | inherit
Initial: auto
Applies to: fo:simple-page-master
Inherited: no
Percentages: N/A
Media: visual

Values have the following meanings:

auto

The "page-width" shall be determined by the formatter from the width of the media or browser window. If media information is not available this dimension shall be implementation defined.

NOTE:

A fallback to 11.0in would fit on both 8+1/2x11 and A4 pages).

indefinite

The width of the page is determined from the size of the laid-out content.

"Page-width" and "page-height" properties may not both be set to indefinite. Should that occur, "page-width will" revert to "auto" and "page-height" will remain indefinite.

<length>

Specifies a fixed width for the page-area.

Specifies the width of a page-area. (Size is a shorthand property to set both "page-width" and "page-height" properties simultaneously.)

The "page-width" property may be set directly or may be set via the "size" shorthand property.

7.11.15 "precedence"

XSL Definition:

Value: true | false | inherit
Initial: false
Applies to: fo:before-region, fo:after-region, fo:start-region, fo:end-region
Inherited: no
Percentages: N/A
Media: visual

Values have the following meanings:

false

A value of false specifies that this region does not extend to the page margins. This region has the same width or height as the body.

true

A value of true specifies that this region takes precedence and extends across the full size of the page or view.

Specifies which region (i.e., region-before, region-after, region-start, or region-end) takes precedence in terms of which may extend into the corners of the simple-page-master.

If both adjacent regions have equal precedence, the before-region or after-region is treated as if 'true' had been specified and the start-region or end-region will be treated as if 'false' had been specified.

7.12 Table Properties

7.12.1 "border-collapse"

CSS2 Definition:

Value: collapse | separate | inherit
Initial: collapse
Applies to: table
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/tables.html#propdef-border-collapse.

collapse

The value "collapse" selects the collapsing borders model.

separate

The value "separate" selects the separated borders border model.

This property selects a table's border model. The value "separate" selects the separated borders border model. The value "collapse" selects the collapsing borders model.

7.12.2 "border-spacing"

CSS2 Definition:

Value: <length> <length>? | inherit
Initial: 0pt
Applies to: table
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/tables.html#propdef-border-spacing.

<length>

The lengths specify the distance that separates adjacent cell borders. If one length is specified, it gives both the horizontal and vertical spacing. If two are specified, the first gives the horizontal spacing and the second the vertical spacing. Lengths may not be negative.

In the separate borders model, each cell has an individual border. The "border-spacing" property specifies the distance between the borders of adjacent cells. This space is filled with the background of the table element. Rows, columns, row groups, and column groups cannot have borders (i.e., user agents must ignore the border properties for those elements).

7.12.3 "caption-side"

CSS2 Definition:

Value: before | after | start | end | top | bottom | left | right | inherit
Initial: before
Applies to: table-caption
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/tables.html#q6.

top

Positions the caption box above the table box.

bottom

Positions the caption box below the table box.

left

Positions the caption box to the left of the table box.

right

Positions the caption box to the right of the table box.

This property specifies the position of the caption box with respect to the table box.

Captions above or below a "table" element are formatted very much as if they were a block element before or after the table, except that (1) they inherit inheritable properties from the table, and (2) they are not considered to be a block box for the purposes of any "compact" or "run-in" element that may precede the table.

A caption that is above or below a table box also behaves like a block box for width calculations; the width is computed with respect to the width of the table box's containing block.

For a caption that is on the left or right side of a table box, on the other hand, a value other than "auto" for "width" sets the width explicitly, but "auto" tells the user agent to chose a "reasonable width". This may vary between "the narrowest possible box" to "a single line", so we recommend that users do not specify "auto" for left and right caption widths.

To align caption content horizontally within the caption box, use the "text-align" property. For vertical alignment of a left or right caption box with respect to the table box, use the "vertical-align" property. The only meaningful values in this case are "top", "middle", and "bottom". All other values are treated the same as "top".

XSL modifications to the CSS definition:

Insert the following writing-mode relative values:

before

Positions the caption before the table in the block-progression-direction.

after

Positions the caption after the table in the block-progression-direction.

start

Positions the caption before the table in the inline-progression-direction.

end

Positions the caption after the table in the inline-progression-direction.

7.12.4 "column-number"

XSL Definition:

Value: <number>
Initial: see prose
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual
<integer>

A positive integer. If a negative or non-integer value is provided, the value will be rounded to the nearest integer value greater than or equal to 1.

For an fo:table-column formatting object, it specifies the column-number of the table cells that are to inherit their characteristics from this fo:table-column formatting object. The default value is 1 plus the column-number of the previous table-column, if there is a previous table-column, and otherwise 1.

For an fo:table-cell it specifies the number of the first column to be spanned by the table-cell. 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 cell.

7.12.5 "column-width"

XSL Definition:

Value: <length>
Initial: undefined
Applies to: fo:table-column
Inherited: no
Percentages: N/A
Media: visual
<length>

The "column-width" property specifies the width of the column whose value is given by the "column-number" property. This property, if present, is ignored if the "number-columns-spanned" property is greater than 1. The "width" property must be specified for every column, unless the "table-width" property has the value "auto".

Issue (column-width-and-datatypes):

Are the various possible specifications - fixed length, x*, % etc covered in the datatype descriptions? Do we need to specify it here?

7.12.6 "empty-cells"

CSS2 Definition:

Value: show | hide | inherit
Initial: show
Applies to: table-cell
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/tables.html#propdef-empty-cells.

show

When this property has the value "show", borders are drawn around empty cells (like normal cells).

hide

A value of "hide" means that no borders are drawn around empty cells. Furthermore, if all the cells in a row have a value of "hide" and have no visible content, the entire row behaves as if it had "display: none".

In the separated borders model, this property controls the rendering of borders around cells that have no visible content. Empty cells and cells with the "visibility" property set to "hidden" are considered to have no visible content. Visible content includes "&&nbsp;" (non-breaking-space) and other whitespace except ASCII CR ("\0D"), LF ("\0A"), tab ("\09"), and space ("\20").

7.12.7 "table-layout"

CSS2 Definition:

Value: auto | fixed | inherit
Initial: auto
Applies to: table
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/tables.html#propdef-table-layout.

fixed

Use the fixed table layout algorithm

auto

Use any automatic table layout algorithm

The "table-layout" property controls the algorithm used to lay out the table cells, rows, and columns.

7.12.8 "table-omit-header-at-break"

XSL Definition:

Value: yes | no
Initial: no
Applies to: fo:table
Inherited: no
Percentages: N/A
Media: visual
yes

This property specifies that the header should be omitted.

no

This property specifies that the header should not be omitted.

The "table-omit-middle-header-at-break" property specifies if a table whose first area is not at the beginning of an area produced by the table should start with the content of the fo:table-header formatting object or not.

7.12.9 "table-omit-footer-at-break"

XSL Definition:

Value: yes | no
Initial: no
Applies to: fo:table
Inherited: no
Percentages: N/A
Media: visual
yes

This property specifies that the footer should be omitted.

no

This property specifies that the footer should not be omitted.

The "table-omit-middle-footer-at-break" property specifies if a table whose last area is not at the end of an area produced by the table should end with the content of the fo:table-header formatting object or not.

7.12.10 "number-columns-spanned"

XSL Definition:

Value: <number>
Initial: 1
Applies to: fo:table-column, fo:table-cell
Inherited: no
Percentages: N/A
Media: visual
<integer>

A positive integer. If a negative or non-integer value is provided, the value will be rounded to the nearest integer value greater than or equal to 1.

For an fo:table-column the "number-columns-spanned" property specifies the number of columns spanned by table-cells that are to inherit their column characteristics from this fo:table-column formatting object.

For an fo:table-cell the "number-columns-spanned" property specifies the number of columns which this cell spans in the column-progression-direction starting with the current column.

7.12.11 "number-rows-spanned"

XSL Definition:

Value: <number>
Initial: 1
Applies to: fo:table-cell
Inherited: no
Percentages: N/A
Media: visual
<integer>

A positive integer. If a negative or non-integer value is provided, the value will be rounded to the nearest integer value greater than or equal to 1.

The "number-rows-spanned" property specifies the number of rows which this cell spans in the row-progression-direction starting with the current row.

7.12.12 "number-columns-repeated"

XSL Definition:

Value: <number>
Initial: 1
Applies to: fo:table-column
Inherited: no
Percentages: N/A
Media: visual
<integer>

A positive integer. If a negative or non-integer value is provided, the value will be rounded to the nearest integer value greater than or equal to 1.

The "number-columns-repeated" property specifies the repetition of a table-column specification n times; with the same effect as if the fo:table-column formatting object had been repeated n times in the result tree. The "column-number" property, for all but the first, is the column-number of the previous one plus its value of the "number-columns-spanned" property.

NOTE:

This handles HTML's "colgroup" element.

7.12.13 "may-break-after-row"

XSL Definition:

Value: yes | no
Initial: yes
Applies to: fo:table
Inherited: no
Percentages: N/A
Media: visual
yes

The table may be broken after this row.

no

The table may not be broken after this row.

Specifies if the table may be broken after this row.

7.12.14 "may-break-before-row"

XSL Definition:

Value: yes | no
Initial: yes
Applies to: fo:table
Inherited: no
Percentages: N/A
Media: visual
yes

The table may be broken before this row.

no

The table may not be broken before this row.

Specifies if the table may be broken after this row.

7.12.15 "ends-row"

XSL Definition:

Value: yes | no
Initial: no
Applies to: fo:table-cell
Inherited: no
Percentages: N/A
Media: visual
yes

This cell ends a row.

no

This cell does not end a row.

Specifies whether this cell ends a row. This is only allowed for table-cells that are not in table-rows.

7.12.16 "starts-row"

XSL Definition:

Value: yes | no
Initial: no
Applies to: fo:table-cell
Inherited: no
Percentages: N/A
Media: visual
yes

This cell starts a row.

no

This cell does not start a row.

Specifies whether this cell starts a row. This is only allowed for table-cells that are not in table-rows.

7.13 Character Properties

7.13.1 "character"

XSL Definition:

Value: <string>
Initial: N/A, value is required
Applies to: fo:character
Inherited: no, a value is required
Percentages: N/A
Media: visual

Values have the following meanings:

<char>

Specifies the Unicode character to be presented.

7.13.2 "letter-spacing"

CSS2 Definition:

Value: normal | <length> | <space> | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-letter-spacing.

This property specifies spacing behavior between text characters. Values have the following meanings:

normal

The spacing is the normal spacing for the current font. This value allows the user agent to alter the space between characters in order to justify text.

<length>

This value indicates inter-character space in addition to the default space between characters. Values may be negative, but there may be implementation-specific limits. User agents may not further increase or decrease the inter-character space in order to justify text.

Character-spacing algorithms are user agent dependent. Character spacing may also be influenced by justification (see the "text-align" property).

When the resultant space between two characters is not the same as the default space, user agents should not use ligatures.

Conforming user agents may consider the value of the 'letter-spacing' property to be 'normal'.

XSL modifications to the CSS definition:

The following value type has been added for XSL:

<space>

This allows the user to specify the range of adjustment allowed for letter-spacing.

The optimum value is used when 'text-align' is any value other than 'justify'.

The optimum value is used as the starting value when 'text-align' is 'justify'. The minimum and maximum values specify the limits of adjustment. The interaction between word-spacing and letter-spacing is user agent dependent.

Letter-spacing, word-spacing, space-end, and space-start on adjacent areas are merged in the manner described in the area model.

Space-start specifies the following values as a set:

optimum

The optimum (or preferred) amount of space to be inserted.

minimum

The minimum amount of space to be inserted. If "minimum" is greater than optimum, it will be treated as if it had been set to "optimum".

maximum

The maximum amount of space to be inserted. If "maximum" is less than optimum, it will be treated as if it had been set to "optimum".

precedence

Controls the merging of space-specifiers between characters.

This property may be set to:

force

This space-specifier will be retained and not merged with other space-specifier preceding this object.

an integer

This space-specifier will be merged with other space-specifier preceding this object in accordance with the space-merging rules specified in the area model.

conditionality

Controls letterspacing if it is the initial or final space in a line-area.

This property may be set to:

discard

This space-specifier will be discarded if it is the initial or final space in a line-area.

retain

This space-specifier will be retained if it is the initial or final space in a line-area.

The following paragraphs should be added at the end of the CSS description:

The CSS statement that "Conforming user agents may consider the value of the 'letter-spacing' property to be 'normal'." is deprecated in XSL.

7.13.3 "word-spacing"

CSS2 Definition:

Value: normal | <length> | <space> | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-word-spacing.

This property specifies spacing behavior between words. Values have the following meanings:

normal

The normal inter-word space, as defined by the current font and/or the UA.

<length>

This value indicates inter-word space in addition to the default space between words. Values may be negative, but there may be implementation-specific limits.

Word spacing algorithms are user agent dependent. Word spacing is also influenced by justification (see the 'text-align' property).

XSL modifications to the CSS definition:

Issue (word-spacing):

This property needs review and rewording to fit in with the model.

The following value type has been added for XSL:

<space>

This allows the user to specify a range of adjustments to the width of word spaces.

The optimum value is used when 'text-align' is any value other than 'justify'.

The optimum value is used as the base adjustment when 'text-align' is 'justify'. The minimum and maximum values specify the limits of adjustment. The interaction between word-spacing and letter-spacing is user agent dependent.

Letter-spacing, word-spacing, space-end, and space-start on adjacent areas are merged in the manner described in the area model.

Space-start specifies the following values as a set:

optimum

The optimum (or preferred) amount of space to be added to the nominal width of the space character/glyph. Values may be negative, but there may be implementation-specific limits.

minimum

The minimum amount of space to be added to the nominal width of the space character/glyph. If "minimum" is greater than "optimum", it will be treated as if it had been set to "optimum". Values may be negative, but there may be implementation-specific limits.

maximum

The maximum amount of space to be added to the nominal width of the space character/glyph. If "maximum" is less than "optimum", it will be treated as if it had been set to "optimum". Values may be negative, but there may be implementation-specific limits.

precedence

Controls the merging of space-specifiers between words.

This property may be set to:

force

This space-specifier will be retained and not merged with other space-specifier preceding this object.

<integer>

This space-specifier will be merged with other space-specifier preceding this object in accordance with the space merging rules specified in the area model.

conditionality

Controls word-spacing if it is the initial or final space in a line-area.

This property may be set to:

discard

This space-specifier will be discarded if it is the initial or final space in a line-area.

retain

This space-specifier will be retained if it is the initial or final space in a line-area.

For XSL, the following paragraphs should be added at the end of the CSS description:

7.13.4 "apply-word-spacing"

XSL Definition:

Value: auto | yes | no | inherit
Initial: auto
Applies to: fo:character
Inherited: no
Percentages: N/A
Media: visual

Issue (apply-word-spacing):

It has been suggested to name this "treat-as-wordspace", since formatters may use this information as input in line-breaking.

This property determines if the character shall be treated as a word-space or as a normal letter.

This property has the following values:

auto

The value of this property is determined by the Unicode codepoint for the character.

As the default behavior:

yes

This character's width shall be adjusted as described in the "word-spacing" property.

no

This character shall not have a word-spacing adjustment applied to its width.

7.13.5 "suppress-at-eol"

XSL Definition:

Value: auto | suppress | retain | inherit
Initial: auto
Applies to: fo:character
Inherited: no
Percentages: N/A
Media: visual

Issue (suppress-at-eol):

This property needs review and rewording to fit in with the model.

This property determines if the character's presentation shall be suppressed if it appears as the last non-control character in a line.

This property has the following values:

auto

The value of this property is determined by the Unicode codepoint for the character. The character at codepoints u+0020 is treated as if 'yes' had been specified. All other characters are treated as if 'no' had been specified.

This property does not automatically suppress the presentation of the non-breaking-space (u+00a0), the fixed spaces (U+2000 thru u+200a), or the ideographic-space (u+3000).

suppress

If this character is the last visibly renderable (non-control) character in the line (preceding either a hard or a soft line-break), then its glyph representation shall not be presented and its width shall not be considered in the line justification.

If multiple suppressible characters are present at the end of the line, the are all suppressed.

retain

This character shall be presented if it is the last visibly renderable (non-control) character in the line.

7.13.6 "text-decoration"

CSS2 Definition:

Value: none | [ underline || overline || line-through || blink ] | inherit
Initial: none
Applies to: all elements
Inherited: no, but see prose
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-text-decoration.

This property describes decorations that are added to the text of an element. If the property is specified for a block-level element, it affects all inline-level descendants of the element. If it is specified for (or affects) an inline-level element, it affects all boxes generated by the element. If the element has no content or no text content (e.g., the IMG element in HTML), user agents must ignore this property.

Values have the following meanings:

none

Produces no text decoration.

underline

Each line of text is underlined.

overline

Each line of text has a line above it.

line-through

Each line of text has a line through the middle

blink

Text blinks (alternates between visible and invisible). Conforming user agents are not required to support this value.

The color(s) required for the text decoration should be derived from the "color" property value.

This property is not inherited, but descendant boxes of a block box should be formatted with the same decoration (e.g., they should all be underlined). The color of decorations should remain the same even if descendant elements have different "color" values.

XSL modifications to the CSS definition:

NOTE:

To specify multiple text-decorations on the same span of text, use nested fo:inline objects.

7.13.7 "text-shadow"

CSS2 Definition:

Value: none | [<color> || <length> <length> <length>? ,]* [<color> || <length> <length> <length>?] | inherit
Initial: none
Applies to: all elements
Inherited: no, see prose
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-text-shadow.

This property accepts a comma-separated list of shadow effects to be applied to the text of the element. The shadow effects are applied in the order specified and may thus overlay each other, but they will never overlay the text itself. Shadow effects do not alter the size of a box, but may extend beyond its boundaries. The stack level of the shadow effects is the same as for the element itself.

Each shadow effect must specify a shadow offset and may optionally specify a blur radius and a shadow color.

A shadow offset is specified with two "length" values that indicate the distance from the text. The first length value specifies the horizontal distance to the right of the text. A negative horizontal length value places the shadow to the left of the text. The second length value specifies the vertical distance below the text. A negative vertical length value places the shadow above the text.

A blur radius may optionally be specified after the shadow offset. The blur radius is a length value that indicates the boundaries of the blur effect. The exact algorithm for computing the blur effect is not specified.

A color value may optionally be specified before or after the length values of the shadow effect. The color value will be used as the basis for the shadow effect. If no color is specified, the value of the "color" property will be used instead.

7.13.8 "text-transform"

CSS2 Definition:

Value: capitalize | uppercase | lowercase | none |
Initial: none
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-text-transform.

This property controls capitalization effects of an element's text. Values have the following meanings:

capitalize

Puts the first character of each word in uppercase.

uppercase

Puts all characters of each word in uppercase.

lowercase

Puts all characters of each word in lowercase.

none

No capitalization effects.

The actual transformation in each case is written language dependent. See RFC 2070 ([RFC2070]) for ways to find the language of an element.

Conforming user agents may consider the value of "text-transform" to be "none" for characters that are not from the ISO Latin-1 repertoire and for elements in languages for which the transformation is different from that specified by the case-conversion tables of Unicode or ISO 10646 ([Reference to ISO10646]).

XSL modifications to the CSS definition:

There are severe internationalization issues with the use of this property. It has been retained for CSS compatibility, but its use is not recommended in XSL.

7.14 Rule and Leader Properties

7.14.1 "leader-alignment"

XSL Definition:

Value: none | reference-area | page | inherit
Initial: none
Applies to: fo:leader
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

none

Leader-pattern has no special alignment.

reference-area

Leader-pattern is aligned as if it began on the current reference-area's content-rectangle start-edge.

page

Leader-pattern is aligned as if it began on the current page's start-edge.

Specifies whether fo:leaders having identical content and property values shall have their patterns aligned with each other, with respect to their common reference-area or page.

For fo:leaders where the "leader-pattern" property is specified as "dot" or as "use-content", this property will be honored. For leaders with a "leader-pattern" of "rule", if the "rule-style" property has a patterned structure, the user agent may choose to honor the this property.

If the fo:leader is aligned, the start-edge of each cycle of the repeated pattern will be placed on the start-edge of the next cycle in the appropriate pattern-alignment grid.

7.14.2 "leader-pattern"

XSL Definition:

Value: space | rule | dots | use-content | inherit
Initial: space
Applies to: fo:leader
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

space

Leader is to be filled with blank space.

rule

Leader is to be filled with a rule.

If this choice is selected, the rule-thickness and rule-style properties are used to set the leader's style.

dots

Leader is to be filled with a repeating sequence of dots. The choice of dot character is dependent on the user agent.

use-content

Leader is to be filled with a repeating pattern as specified by the children of the fo:leader.

Provides the specification of how to fill in the leader.

If the leader is aligned, the start-edge of each cycle of each repeating pattern component will be placed on the start-edge of the next cycle in the pattern-alignment grid.

7.14.3 "leader-pattern-width"

XSL Definition:

Value: use-font-metrics | <length> | inherit
Initial: use-font-metrics
Applies to: fo:leader
Inherited: yes
Percentages: Refer to width of containing box
Media: visual

Values have the following meanings:

use-font-metrics

Use the width of the leader-pattern as determined from its font metrics.

<length>

Sets length for leader-pattern-repeating.

The leader will have an inline-space inserted after each pattern cycle to account for any difference between the width of the pattern as determined by the font metrics and the width specified in this property.

If the length specified is less than the value that would be determined via the use-font-metrics choice, this value will be treated as if use-font-metrics choice had been specified.

Specifies the length of each repeat cycle in a repeating leader.

For leaders where the "leader-pattern" property is specified as "dot" or as "use-content", this property will be honored. For leaders with a leader-pattern of "rule", if the rule-style has a patterned structure, the user agent may choose to honor this property.

7.14.4 "leader-length"

XSL Definition:

Value: <length-range> | inherit
Initial: leader-length.minimum=0pt, .optimum=12.0pt, .maximum=100%
Applies to: fo:leader
Inherited: yes
Percentages: Refer to width of containing box
Media: visual

Values have the following meanings:

<length-range>

leader-length.minimum=sets minimum length for a leader

leader-length.optimum=sets optimum length for a leader

leader-length.maximum=sets maximum length for a leader

Specifies the minimum, optimum, and maximum length of an fo:leader.

The specification of a minimum and maximum range of lengths allows leaders and inline rules to be used to "fill" or "justify" a line or to "fill" the remaining width of a table-cell. It also allows for specification of how multiple leaders appearing in a given line-area are to be balanced.

7.14.5 "rule-style"

XSL Definition:

Value: none | dotted | dashed | solid | double | groove | ridge | inherit
Initial: solid
Applies to: fo:leader
Inherited: yes
Percentages: N/A
Media: visual

Specifies the style (pattern) of the rule.

This property applies only if the "leader-pattern" property is specified as "rule".

Values have the following meanings:

none

No rule, forces rule-thickness to 0.

dotted

The rule is a series of dots.

dashed

The rule is a series of short line segments.

solid

The rule is a single line segment.

double

The rule is two solid lines. The sum of the two lines and the space between them equals the value of "rule-thickness".

groove

The rule looks as though it were carved into the canvas. (Top/left half of the rule's thickness is the color specified, the other half is white.)

ridge

The opposite of "groove", the rule looks as though it were coming out of the canvas. (Bottom/right half of the rule's thickness is the color specified, the other half is white.)

7.14.6 "rule-thickness"

XSL Definition:

Value: <length>
Initial: 1.0pt
Applies to: fo:leader
Inherited: yes
Percentages: refers to the height of containing box
Media: visual

Specifies the overall thickness of the rule.

This property applies only if the "leader-pattern" property is specified as "rule".

Values have the following meanings:

<length>

The "rule-thickness" is always perpendicular to its length-axis.

The the rule is thickened equally above and below the line's alignment position. This can be adjusted through the "baseline-shift" property.

7.15 Page-related Properties

The following are page-related properties that are not common to all formatting objects. See common-keep-and-breaks-properties.

7.15.1 "page-break-inside"

CSS2 Definition:

Value: avoid | auto | inherit
Initial: auto
Applies to: block-level elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/page.html#propdef-page-break-inside.

NOTE:

The CSS definition for page-break-inside was shared with the definitions of page-break-before and page-break-after. The text here has been edited to include only the value choices valid for page-break-inside and to remove the before/after/inside triplet.

Values for this property have the following meanings:

auto

Neither force nor forbid a page break inside the generated box.

avoid

Avoid a page break inside the generated box.

A potential page break location is typically under the influence of the parent element's 'page-break-inside' property, the 'page-break-after' property of the preceding element, and the 'page-break-before' property of the following element. When these properties have values other than 'auto', values 'always', 'left', and 'right' take precedence over 'avoid'. See the section on allowed page breaks for the exact rules on how these properties may force or suppress a page break.

XSL modifications to the CSS definition:

XSL treats this as a shorthand and maps it as follows.

auto

keep = "auto"

avoid

keep = "always"

7.15.2 "keep"

XSL Definition:

Value: auto | always | column | page | inherit
Initial: auto
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values for this property have the following meanings:

auto

Neither force nor forbid a page/column/region break inside the generated box.

This allows the block-level object to be broken if so allowed by the "widow" and "orphan" properties.

always

No page/column/region break is allowed inside the generated box.

If the block is larger than any region on the current or immediately subsequent page, the user agent is not allowed to break the block and must rely on the "overflow" property.

column

The areas produced by the formatting object shall lie within the same column

If the block is larger than any available column on the current or immediately subsequent page, the user agent is not allowed to break the block and must rely on the "overflow" property.

page

The areas produced by the formatting object shall lie within the same page, but may break across columns on the page

If the block is larger than can be placed on the current or immediately subsequent page, the user agent is not allowed to break the block across a page boundary and must rely on the "overflow" property.

Issue (keep-prop-regarding-area-model):

Property description needs to be cast in terms of areas.

7.15.3 "orphans"

CSS2 Definition:

Value: <integer> | inherit
Initial: 2
Applies to: block-level elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/page.html#propdef-orphans.

See definition of property widows ([7.15.4 "widows"]).

7.15.4 "widows"

CSS2 Definition:

Value: <integer> | inherit
Initial: 2
Applies to: block-level elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/page.html#propdef-widows.

The "orphans" property specifies the minimum number of lines of a paragraph that must be left at the bottom of a page. The "widows" property specifies the minimum number of lines of a paragraph that must be left at the top of a page.

7.16 Float-related Properties

The following properties are all taken from CSS2. The reference is: http://www.w3.org/TR/REC-CSS2/visuren.html#floats

Issue (unify-float-description):

Shall XSL top-floats and CSS "horizontal-floats" be unified?

7.16.1 "float"

CSS2 Definition:

Value: left | right | none | inherit
Initial: none
Applies to: all but positioned elements and generated content
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-float.

This property specifies whether a box should float to the left, right, or not at all. It may be set for elements that generate boxes that are not absolutely positioned. Values have the following meanings:

left

The element generates a block box that is floated to the left. Content flows on the right side of the box, starting at the top (subject to the "clear" property). The "display" is ignored, unless it has the value "none".

right

Same as "left", but content flows on the left side of the box, starting at the top.

none

The box is not floated.

Here are the precise rules that govern the behavior of floats:

1.The left outer edge of a left-floating box may not be to the left of the left edge of its containing block. An analogous rule holds for right-floating elements.

2.If the current box is left-floating, and there are any left floating boxes generated by elements earlier in the source document, then for each such earlier box, either the left outer edge of the current box must be to the right of the right outer edge of the earlier box, or its top must be lower than the bottom of the earlier box. Analogous rules hold for right-floating boxes.

3.The right outer edge of a left-floating box may not be to the right of the left outer edge of any right-floating box that is to the right of it. Analogous rules hold for right-floating elements.

4.A floating box's outer top may not be higher than the top of its containing block.

5.The outer top of a floating box may not be higher than the outer top of any block or floated box generated by an element earlier in the source document.

6.The outer top of an element's floating box may not be higher than the top of any line-box containing a box generated by an element earlier in the source document.

7.A left-floating box that has another left-floating box to its left may not have its right outer edge to the right of its containing block's right edge. (Loosely: a left float may not stick out at the right edge, unless it is already as far to the left as possible.) An analogous rule holds for right-floating elements.

8.A floating box must be placed as high as possible.

9.A left-floating box must be put as far to the left as possible, a right-floating box as far to the right as possible. A higher position is preferred over one that is further to the left/right.

XSL modifications to the CSS definition:

Issue (CSS-float-item9):

#9. Needs clarification from the CSS WG. Semantics must be mapped to the XSL model.

There are added values for XSL as "top" floats are combined with "left" and "right" floats. Also need to add the writing mode relative "start" and "end" values.

In XSL this property only applies to fo:float.

7.16.2 "clear"

CSS2 Definition:

Value: none | left | right | both | inherit
Initial: none
Applies to: block-level elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-clear.

This property indicates which sides of an element's box(es) may not be adjacent to an earlier floating box. (It may be that the element itself has floating descendants; the 'clear' property has no effect on those.)

This property may only be specified for block-level elements (including floats). For compact and run-in boxes, this property applies to the final block box to which the compact or run-in box belongs.

Values have the following meanings when applied to non-floating block boxes:

left

The top margin of the generated box is increased enough that the top border edge is below the bottom outer edge of any left-floating boxes that resulted from elements earlier in the source document.

right

The top margin of the generated box is increased enough that the top border edge is below the bottom outer edge of any right-floating boxes that resulted from elements earlier in the source document.

both

The generated box is moved below all floating boxes of earlier elements in the source document.

none

No constraint on the box's position with respect to floats.

When the property is set on floating elements, it results in a modification of the rules for positioning the float. An extra constraint (#10) is added [to those specified in the description of the 'float' property]:

10. The top outer edge of the float must be below the bottom outer edge of all earlier left-floating boxes (in the case of 'clear: left'), or all earlier right-floating boxes (in the case of 'clear: right'), or both ('clear: both').

XSL modifications to the CSS definition:

Issue (CSS-clear):

Semantics must be mapped to the XSL model.

There are added values for XSL: the writing mode relative "start" and "end" values.

In XSL this property only applies to fo:float.

7.17 Properties for Number to String Conversion

7.17.1 "format"

XSL Definition:

Value: <string>
Initial: 1.
Applies to: fo:page-sequence
Inherited: no
Percentages: N/A
Media: all

This property is defined in XSLT: Number to String Conversion Attributes.

7.17.2 "letter-value"

XSL Definition:

Value: alpabetic | traditional
Initial: no value
Applies to: fo:page-sequence
Inherited: no
Percentages: N/A
Media: all

This property is defined in XSLT: Number to String Conversion Attributes.

7.17.3 "grouping-separator"

XSL Definition:

Value: <character>
Initial: no separator
Applies to: fo:page-sequence
Inherited: no
Percentages: N/A
Media: all

This property is defined in XSLT: Number to String Conversion Attributes.

7.17.4 "grouping-size"

XSL Definition:

Value: <number>
Initial: no grouping
Applies to: fo:page-sequence
Inherited: no
Percentages: N/A
Media: all

This property is defined in XSLT: Number to String Conversion Attributes.

7.18 Properties for Links

7.18.1 "external-destination"

XSL Definition:

Value: <uri>
Initial: null string
Applies to: fo:simple-link
Inherited: no
Percentages: N/A
Media: interactive
<uri>

Specifies the destination resource of an fo:simple-link. The URI part specifies the destination document. If the URI is unspecified, the destination document defaults to the current source document.

NOTE:

In this context, a "document" is any resource that can be identified by a URI.

The fragment identifier (portion of the URI following the # symbol) specifies the destination node. If the fragment identifier is unspecified, or that part of the source is not present in the rendered document, the destination node defaults to the root node of the destination document.

The destination node has to be mapped to objects in the result tree.

The destination flow objects are the nodes in the result tree that were generated when the destination node was processed, including all descendant flow objects.

NOTE:

This will give target objects even if no flow objects were directly created when processing the destination node.

If the node never was processed, the system should inform the user.

If the node was processed, but no areas were created, the target is the (empty) point in the flow object tree where the destination node was processed.

If the node was processed at several places in the flow object tree, the system may choose any of them.

The areas created from the destination flow object are the destination areas.

At least one of the external-destination and internal-destination properties should be assigned. If both are assigned, the system may either report the error, or use the internal-destination property.

7.18.2 "internal-destination"

XSL Definition:

Value: <idref>
Initial: null string
Applies to: fo:simple-link
Inherited: no
Percentages: N/A
Media: interactive
<idref>

Specifies the destination flow object of an an fo:simple-link. This property allows the destination flow object node to be explicitly specified.

At least one of the external-destination and internal-destination properties should be assigned. If both are assigned, the system may either report the error, or use the internal-destination property.

7.18.3 "show-destination"

XSL Definition:

Value: replace | new
Initial: replace
Applies to: fo:simple-link
Inherited: no
Percentages: N/A
Media: interactive
replace

The current document view should be replaced. However, if the destination area(s) are already available in a page/region, those areas should simply be moved/scrolled "into sight".

new

A new (additional) document view should always be opened.

Specifies where the destination resource should be displayed.

7.18.4 "indicate-destination"

XSL Definition:

Value: yes | no
Initial: no
Applies to: fo:simple-link
Inherited: no
Percentages: N/A
Media: interactive
yes

The areas that belong to the link target when traversed should, in a system-dependent manner, be indicated.

no

No special indication should be made.

NOTE:

This could be indicated in any feasible way, e.g., by reversed video, etc.

7.18.5 "destination-placement-offset"

XSL Definition:

Value: <length>
Initial: 0pt
Applies to: fo:simple-link
Inherited: no
Percentages: N/A
Media: interactive
<length>

The "destination-placement-offset" property specifies the distance from the beginning (top) of the page to the innermost line-area that contains the first destination area. If the first destination area is not contained in a line-area, the "destination-placement-offset" property instead directly specifies the distance to the top of the destination area.

If the specification of destination-placement-offset would result in a distance longer than the distance from the start of the document, the distance from the start of the document should be used.

If the specified distance would push the first destination area below the page-area, the distance should be decreased so the whole first destination area becomes visible, if possible. If the first destination area is higher than the page, the top of the area should be aligned with the top of the page.

7.18.6 "auto-restore"

XSL Definition:

Value: yes | no
Initial: no
Applies to: fo:multi-switch
Inherited: yes
Percentages: N/A
Media: interactive
yes

If this fo:multi-switch is contained in another fo:multi-switch, and that fo:multi-switch changes the active fo:multi-case (hiding this fo:multi-switch), then this fo:multi-switch should restore its initial fo:multi-case.

no

This fo:multi-switch should retain its current fo:multi-case.

Specifies if the initial fo:multi-case should be restored when the fo:multi-switch gets hidden by an ancestor fo:multi-switch.

NOTE:

A common case of using this property with a "yes" value is when several nested fo:multi-switch objects builds an expandable/collapsible table-of-contents view. If the table-of-contents is expanded far down the hierarchy, and an (far above) ancestor is closed, one would want all sub-titles to have restored to their original state when that ancestor is opened again.

7.18.7 "starting-state"

XSL Definition:

Value: show | hide
Initial: show
Applies to: fo:multi-case
Inherited: no
Percentages: N/A
Media: interactive
show

The content of the fo:multi-case is a candidate for being displayed initially.

hide

The content of the fo:multi-case is not a candidate for being displayed initially.

Specifies if the fo:multi-case can be initially displayed.

The parent fo:multi-switch shall choose the first fo:multi-case child where the property "starting-state" has the value equal to "show".

NOTE:

Any number of the fo:multi-case objects may assign "starting-state" to "show".

If no fo:multi-case has "starting-state" property value of "show", the contents of any fo:multi-case should not be displayed.

NOTE:

If no multi-case is displayed, the entire fo:multi-switch will effectively be hidden.

7.18.8 "case-name"

XSL Definition:

Value: <name>
Initial: none, a value is required
Applies to: fo:multi-case
Inherited: no, a value is required
Percentages: N/A
Media: interactive
<name>

Specifies a name for an fo:multi-case. The name must be unique among the current fo:multi-case siblings, i.e., in the scope of the fo:multi-switch object that (directly) contains them. Other instances of fo:multi-switch objects may well use the same names for its fo:multi-case objects.

The purpose of this property is to allow fo:multi-toggle objects to select fo:multi-case objects to switch to.

7.18.9 "case-title"

XSL Definition:

Value: <name>
Initial: none, a value is required
Applies to: fo:multi-case
Inherited: no, a value is required
Percentages: N/A
Media: interactive
<string>

Specifies a descriptive title for the fo:multi-case. The title can be displayed in a menu to represent this fo:multi-case when an fo:multi-toggle object names several fo:multi-case objects as allowed destinations.

7.18.10 "switch-to"

XSL Definition:

Value: xsl-preceding | xsl-following | xsl-any | <name>[ <name>]*
Initial: xsl-any
Applies to: fo:multi-toggle
Inherited: no
Percentages: N/A
Media: interactive
xsl-preceding

Activating the switch should result in that the current fo:multi-case is replaced by its preceding sibling.

NOTE:

The current fo:multi-case is the closest ancestor fo:multi-case.

In other words, the current fo:multi-switch should switch to the previous sibling of the fo:multi-case that is currently selected.

NOTE:

The current fo:multi-switch is the closest ancestor fo:multi-switch.

It the current fo:multi-case is the first sibling, xsl-preceding should switch to the last fo:multi-case sibling.

xsl-following

Activating the switch should result in that the current fo:multi-case is replaced by its next sibling.

It the current fo:multi-case is the last sibling, xsl-following should switch to the first fo:multi-case sibling.

xsl-any

Activating the switch should allow the user to select any other fo:multi-case sibling.

If there is only a single other fo:multi-case, the toggle should immediately switch to it (and not show that single choice to the user).

<name>

A name matching a case-name of an fo:multi-case.

Specifies what fo:multi-case object(s) this fo:multi-toggle shall switch to.

If switch-to is a name list, the user can switch to any of the named multi-case objects. If a multi-toggle with a single name is activated, it should immediately switch to the named multi-case.

NOTE:

How to actually select the multi-case from a list is system dependent.

7.18.11 "dom-state"

XSL Definition:

Value: TBD
Initial: TBD
Applies to: fo:multi-properties
Inherited: no
Percentages: N/A
Media: interactive
a DOM state (or event)

The "dom-state" property is used to control which of the fo:multi-property-sets are used to format the child flow objects within an fo:multi-properties formatting object. The states (or at least the events that cause the state to be entered) are defined by the DOM.

Issue (dom-states):

Identify appropriate datatypes once the enumerated list of DOM states is developed.

7.19 Miscellaneous Properties

The properties that follow have only been partially updated. Even though the text on properties such as Unicode-bidi say that they have been updated, the updates are not current. Discussion is still pending on direction, and writing mode related properties.

7.19.1 "clip"

CSS2 Definition:

Value: <shape> | auto | inherit
Initial: auto
Applies to: block-level and replaced elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visufx.html#propdef-clip.

The 'clip' property applies to elements that have a 'overflow' property with a value other than 'visible'. Values have the following meanings:

auto

The clipping region has the same size and location as the element's box(es).

<shape>

In CSS2, the only valid <shape> value is: rect (<top> <right> <bottom> <left>) where <top>, <bottom> <right>, and <left> specify offsets from the respective sides of the box.

<top>, <right>, <bottom>, and <left> may either have a <length> value or "auto". Negative lengths are permitted. The value "auto" means that a given edge of the clipping region will be the same as the edge of the element's generated box (i.e., "auto" means the same as "0".)

When coordinates are rounded to pixel coordinates, care should be taken that no pixels remain visible when <left> + <right> is equal to the element's width (or <top> + <bottom> equals the element's height), and conversely that no pixels remain hidden when these values are 0.

The element's ancestors may also have clipping regions (in case their "overflow" property is not "visible"); what is rendered is the intersection of the various clipping regions.

If the clipping region exceeds the bounds of the UA's document window, content may be clipped to that window by the native operating environment.

7.19.2 "baseline-shift"

XSL Definition:

Value: none | sub | super | <length> | inherit
Initial: none
Applies to: see prose
Inherited: no, special (see prose)
Percentages: N/A
Media: visual

Values have the following meanings:

none

Use the the current predominant-baseline.

sub

Use the distance from the current predominant-baseline to the current-font's subscript position.

super

Use the distance from the current predominant-baseline to the current-font's superscript position.

<length>

User may specify a shift-amount. A positive value causes a the baseline to be moved the distance specified in the current shift-direction as established by the current "writing-mode".

This property specifies the distance that the current set of baselines are to be displaced from the default predominant-baseline position.

All baselines in the current applicable set are shifted by the same amount. The relative distances between reference-baselines may be adjusted prior to shifting through the use of the baseline-reset property.

7.19.3 "color"

CSS2 Definition:

Value: <color> | inherit
Initial: depends on user agent
Applies to: all elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/colors.html#propdef-color.

EdNote: Changed datatype to <color> from <unknown>

<color>

Any valid color specification.

This property describes the foreground color of an element's text content.

XSL modifications to the CSS definition:

Issue (color-props-new):

Add two color properties from SVG: color-profile and rendering-intent.

NOTE:

For XSL, do we want to add:

7.19.4 "direction"

CSS2 Definition:

Value: ltr | rtl | inherit
Initial: ltr
Applies to: all elements, but see prose
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-direction.

This property still needs further updating due to continued discussions with I18N, CSS, and SVG.

This property specifies the base writing direction of blocks and the direction of embeddings and overrides (see 'unicode-bidi') for the Unicode bidirectional algorithm. In addition, it specifies the direction of table column layout, the direction of horizontal overflow, and the position of an incomplete last line in a block in case of 'text-align: justify'.

Values for this property have the following meanings:

ltr

Left to right direction.

rtl

Right to left direction.

For the 'direction' property to have any effect on inline-level elements, the 'unicode-bidi' property's value must be 'embed' or 'override'.

NOTE:

The 'direction' property, when specified for table column elements, is not inherited by cells in the column since columns don't exist in the document tree. Thus, CSS cannot easily capture the "dir" attribute inheritance rules described in [HTML40], section 11.3.2.1.

XSL modifications to the CSS definition:

7.19.5 "unicode-bidi"

CSS2 Definition:

Value: normal | embed | bidi-override | inherit
Initial: normal
Applies to: all elements, but see prose
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-unicode-bidi.

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, & SVG.

Values have the following meanings:

normal

The element does not open an additional level of embedding with respect to the bidirectional algorithm.

For inline-level elements, implicit reordering works across element boundaries.

embed

If the element is inline-level, this value opens an additional level of embedding with respect to the bidirectional algorithm. The direction of this embedding level is given by the 'direction' property. Inside the element, reordering is done implicitly. This corresponds to adding a LRE (U+202A; for 'direction: ltr') or RLE (U+202B; for 'direction: rtl') at the start of the element and a PDF (U+202C) at the end of the element.

bidi-override

If the element is inline-level or a block-level element that contains only inline-level elements, this creates an override. This means that inside the element, reordering is strictly in sequence according to the 'direction' property; the implicit part of the bidirectional algorithm is ignored. This corresponds to adding a LRO (U+202D; for 'direction: ltr') or RLO (U+202E; for 'direction: rtl') at the start of the element and a PDF (U+202C) at the end of the element.

The final order of characters in each block-level element is the same as if the bidi control codes had been added as described above, markup had been stripped, and the resulting character sequence had been passed to an implementation of the Unicode bidirectional algorithm for plain text that produced the same line-breaks as the styled text. In this process, non-textual entities such as images are treated as neutral characters, unless their 'unicode-bidi' property has a value other than 'normal', in which case they are treated as strong characters in the 'direction' specified for the element.

Please note that in order to be able to flow inline boxes in a uniform direction (either entirely left-to-right or entirely right-to-left), more inline boxes (including anonymous inline boxes) may have to be created, and some inline boxes may have to be split up and reordered before flowing.

Because the Unicode algorithm has a limit of 15 levels of embedding, care should be taken not to use 'unicode-bidi' with a value other than 'normal' unless appropriate. In particular, a value of 'inherit' should be used with extreme caution. However, for elements that are, in general, intended to be displayed as blocks, a setting of 'unicode-bidi: embed' is preferred to keep the element together in case display is changed to inline.

XSL modifications to the CSS definition:

The phasing of the first paragraph of the general description (following the value breakouts) should read "The final order of presentation of the characters...".

Issue (Unicode3.0-15-level-limit):

In Unicode 3.0, the Unicode Consortium has removed the 15-level limit on embedding. The text here is a reference to the CSS specification and should be changed in both W3C documents to reflect (or refer to) the current Unicode document.

7.19.6 "glyph-orientation-horizontal"

XSL Definition:

Value: <angle> | inherit
Initial: 0
Applies to: fo:character
Inherited: yes
Percentages: N/A
Media: visual

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, & SVG.

Values have the following meanings:

<angle>

The angle is restricted to a range of -360 to +360 in 90-degree increments.

A value of "0" indicates that all glyphs are set with the top of the glyphs toward the top of the reference-area. Top of the reference-area is defined by the reference-area's 'reference-orientation'.

A value of "90" indicates a rotation of 90-degrees clockwise from the "0" orientation.

The angle value is computed modulo 360; thus a value of "-90" or a value of "270" indicates a rotation of 90-degrees counter-clockwise from the "0" orientation.

This property specifies the orientation of text glyphs relative to the path direction specified by the 'writing-mode'. This property is applied only to horizontally written text.

Conformance: This property is in the extended set.

Fallback: If not supported the behavior shall be as if "glyph-orientation='0'" had been specified.

7.19.7 "glyph-orientation-vertical"

XSL Definition:

Value: auto | <angle> | inherit
Initial: auto
Applies to: fo:character
Inherited: yes
Percentages: N/A
Media: visual

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, & SVG.

Values have the following meanings:

auto
<angle>

The angle is restricted to a range of -360 to +360 in 90-degree increments.

A value of "0" indicates that all glyphs are set with the top of the glyphs toward the top of the reference-area. Top of the reference-area is defined by the reference-area's 'reference-orientation'.

A value of "90" indicates a rotation of 90-degrees clockwise from the "0" orientation.

The angle value is computed modulo 360; thus a value of "-90" or a value of "270" indicates a rotation of 90-degrees counter-clockwise from the "0" orientation.

This property specifies the orientation of text glyphs relative to the path direction specified by the writing-mode. This property is applied only to vertically written text.

Its most common usage is to differentiate between the preferred orientation of Roman text in vertically written Japanese documents (glyph-orientation="auto") vs. the orientation of Roman text in western signage and advertising (glyph-orientation="0").

Conformance: This property is required if one supports any of the vertical writing modes.

Fallback: This property is non-core. If not supported the behavior shall be as if "glyph-orientation='0'" had been specified.

7.19.8 "font-height-override-after"

XSL Definition:

Value: use-font-metrics | <length> | inherit
Initial: use-font-metrics
Applies to: see prose
Inherited: no
Percentages: refer to font's em-height
Media: visual

Values have the following meanings:

use-font-metrics

Uses the font's value for the height of the font below the baseline.

<length>

Replaces the height value found in the font.

Specifies the height to be used for line-spacing that lies below/after the font's reference-position (baseline).

7.19.9 "font-height-override-before"

XSL Definition:

Value: use-font-metrics | <length> | inherit
Initial: use-font-metrics
Applies to: see prose
Inherited: no
Percentages: refer to font's em-height
Media: visual

Values have the following meanings:

use-font-metrics

Uses the font's value for the height of the font above the baseline.

<length>

Replaces the height value found in the font.

Specifies the height to be used for line-spacing that lies above/before the font's reference-position (baseline).

7.19.10 "height"

CSS2 Definition:

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: all elements but non-replaced inline elements, table columns, and column groups
Inherited: no
Percentages: see prose
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-height.

This property specifies the content height of boxes generated by block-level and replaced elements.

This property does not apply to non-replaced inline-level elements. The height of a non replaced inline element's boxes is given by the element's (possibly inherited) 'line-height' value.

Values have the following meanings:

auto

The height depends on the values of other properties.

<length>

Specifies a fixed height.

<percent>

Specifies a percentage height. The percentage is calculated with respect to the height of the generated box's containing block. If the height of the containing block is not specified explicitly (i.e., it depends on content height), the value is interpreted like "auto".

Negative values for 'height' are illegal.

XSL modifications to the CSS definition:

In XSL, this property is mapped to either "inline-progression-dimension" or "block-progression-dimension", based on the applicable values of the "writing-mode" and "reference-orientation" properties.

For a discussion of the "height" property in tables see:

Issue (height):

Need to describe if W/H are interior or exterior.

Issue (height-width-rel-1):

Not all references to height and width in the document have been made consistent with the introduction of the writing mode relative ones. This is work to be done.

7.19.11 "min-height"

CSS2 Definition:

Value: <length> | <percentage> | inherit
Initial: 0pt
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-min-height.

XSL modifications to the CSS definition:

See definition of property max-height ([7.19.12 "max-height"]).

7.19.12 "max-height"

CSS2 Definition:

Value: <length> | <percentage> | none | inherit
Initial: 0pt
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to height of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-max-height.

These two properties allow authors to constrain box heights to a certain range. Values have the following meanings:

none

(Only on "max-height") No limit on the height of the box.

<length>

Specifies a fixed minimum or maximum computed height.

<percent>

Specifies a percentage for determining the computed value. The percentage is calculated with respect to the height of the generated box's containing block. If the height of the containing block is not specified explicitly (i.e., it depends on content height), the percentage value is interpreted like "auto".

XSL modifications to the CSS definition:

In XSL, this property is mapped to either "maximum-inline-progression-dimension" or "maximum-block-progression-dimension", based on the applicable values of the "writing-mode" and "reference-orientation" properties. Similarly, "min-height" is mapped to "minimum-inline-progression-dimension" or "minimum-block-progression-dimension", based on the applicable values of the "writing-mode" and "reference-orientation" properties.

7.19.13 "block-progression-dimension"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: all elements but non-replaced inline elements, table columns, and column groups
Inherited: no
Percentages: see prose
Media: visual

This property specifies the content-area's block-progression-dimension of areas generated by block-level and replaced elements.

This property does not apply when the "line-height" property applies to the same dimension of the block-level area.

Values have the following meanings:

auto

The block-progression-dimension depends on the values of other properties.

<length>

Specifies a fixed block-progression-dimension.

<percent>

Specifies a percentage block-progression-dimension. The percentage is calculated with respect to the block-progression-dimension of the generated area's containing block. If the block-progression-dimension of the containing block is not specified explicitly (i.e., it depends on content block-progression-dimension), the value is interpreted like "auto".

Negative values for 'block-progression-dimension' are illegal.

Issue (block-progression-dimension):

Need to describe if *-dimensions are interior or exterior.

Issue (height-width-rel-2):

Not all references to height and width in the document have been made consistent with the introduction of the writing mode relative ones. This is work to be done.

7.19.14 "minimum-block-progression-dimension"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <length> | <percentage> | inherit
Initial: 0
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to block-progression-dimension of containing block
Media: visual

This property allows authors to constrain an area's block-progression-dimensions to a certain range. Values have the following meanings:

<length>

Specifies a fixed minimum computed block-progression-dimension.

<percent>

Specifies a percentage for determining the computed value. The percentage is calculated with respect to the block-progression-dimension of the generated area's containing block. If the block-progression-dimension of the containing block is not specified explicitly (i.e., it depends on content block-progression-dimension), the percentage value is interpreted like "auto".

See definition of property maximum-block-progression-dimension ([7.19.15 "maximum-block-progression-dimension"]).

7.19.15 "maximum-block-progression-dimension"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <length> | <percentage> | none | inherit
Initial: none
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to block-progression-dimension of containing block
Media: visual

This property allows authors to constrain an area's block-progression-dimensions to a certain range. Values have the following meanings:

none

No limit on the block-progression-dimension of the area.

<length>

Specifies a fixed maximum computed block-progression-dimension.

<percent>

Specifies a percentage for determining the computed value. The percentage is calculated with respect to the block-progression-dimension of the generated area's containing block. If the block-progression-dimension of the containing block is not specified explicitly (i.e., it depends on content block-progression-dimension), the percentage value is interpreted like "auto".

7.19.16 "href"

XSL Definition:

Value: <url> | inherit
Initial: none, value required
Applies to: fo:external-graphic
Inherited: no
Percentages: N/A
Media: visual

Values have the following meanings:

<uri>

Specifies the URL to locate a link destination or the image/graphic data to be included as the content of this object.

7.19.17 "hyphenation-keep"

XSL Definition:

Value: none | colun | page | spread | inherit
Initial: none
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

none

No restriction applies. The word may be hyphenated at the end of any region.

column

Both parts of a hyphenated word shall lie within a single column.

page

Both parts of a hyphenated word shall lie within a single page.

spread

Both parts of a hyphenated word shall lie within a single spread.

Controls whether hyphenation can be performed on the last line that fits in a given reference-area.

7.19.18 "hyphenation-ladder-count"

XSL Definition:

Value: none | <number> | inherit
Initial: none
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

none

Any number of successive lines may be hyphenated.

<integer>

An integer greater than or equal to 1.

1 means that if a line is hyphenated, the immediately-subsequent and immediately-preceding lines within the same block may not be hyphenated.

2 means you may have 2 hyphenated lines in succession, if there are more than 1 immediately-subsequent line in the block, the 2 hyphenataed lines must be followed by at least 1 non-hyphenated line, before any subsequent hyphenated lines may occur.

Limits the number of successive hyphenated line-areas the formatter may generate in a block-area.

7.19.19 "id"

XSL Definition:

Value: <id>
Initial: see prose
Applies to: all formatting objects
Inherited: no, see prose
Percentages: N/A
Media: all

Values have the following meanings:

<id>

An identifier unique within all objects in the result tree with the fo: namespace. It allows references to this formatting object by other objects.

The "inherit" value is not allowed on this property.

The initial value of this property is random and unique identifier. The algorithm to generate this identifier is system-dependent.

7.19.20 "inhibit-line-breaks"

XSL Definition:

Value: false | true | inherit
Initial: false
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

false

True indicates line breaks shall be inhibited within the inline-area produced by this formatting object. This applies only to line breaks introduced by the formatter to make line-areas fit in the available space.

true

False indicates that breaks are allowed within the inline area.

Nested inlines may allow breaks, which would cause a break in the containing inline.

7.19.21 "last-line-end-indent"

XSL Definition:

Value: <length> | <percent> | inherit
Initial: 0pt
Applies to: see prose
Inherited: yes
Percentages: width of containing block
Media: visual

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, & SVG.

Values have the following meanings:

<length>

The "last-line-end-indent" is specified as a length.

<percent>

The "last-line-end-indent" is specified as a percentage of the current-block's content-rectangle width.

Specifies an indent to be applied to the end-edge of the last (or only) line of a block-area. It is added to the current block's end-edge. Positive values indent the edge, negative values outdent the edge. Unlike 'text-indent', the actual result depends on how much flexibility there is in the block of text, except when 'last-line-align' is 'justify'.

This is often used with a negative value specified for generating a table-of-contents with the page number hanging in an "outdent" and in similar semi-tabular material.

7.19.22 "line-height-shift-adjustment"

XSL Definition:

Value: consider-shifts | disregard-shifts | inherit
Initial: consider-shifts
Applies to: fo:block
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

consider-shifts

In determining the line-height, include the adjusted top-edge and bottom-edge of any characters that have a baseline-shift.

disregard-shifts

In determining the line-height, include the unshifted top-edge and bottom-edge of any characters that have a baseline-shift.

This property is used to control if the line-height is adjusted for content that has a baseline-shift.

NOTE:

This property can be used to prevent superscript and subscript characters from disrupting the line spacing.

7.19.23 "line-height"

CSS2 Definition:

Value: normal | <length> | <number> | <percentage> | <space> | inherit
Initial: normal
Applies to: all elements
Inherited: yes
Percentages: refer to the font size of the element itself
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-line-height.

Values have the following meanings:

normal

Tells user agents to set the computed value to a "reasonable" value based on the font size of the element. The value has the same meaning as <number>. We recommend a computed value for "normal" between 1.0 to 1.2.

<length>

The box height is set to this length. Negative values are illegal.

<real>

The computed value of the property is this number multiplied by the element's font size. Negative values are illegal. However, the number, not the computed value, is inherited.

<percent>

The computed value of the property is this percentage multiplied by the element's computed font size. Negative values are illegal.

If the property is set on a block-level element whose content is composed of inline-level elements, it specifies the minimal height of each generated inline box.

If the property is set on an inline-level element, it specifies the exact height of each box generated by the element. (Except for inline replaced elements, where the height of the box is given by the "height" property.)

When an element contains text that is rendered in more than one font, user agents should determine the "line-height" value according to the largest font size.

Generally, when there is only one value of "line-height" for all inline boxes in a paragraph (and no tall images), the above will ensure that baselines of successive lines are exactly "line-height" apart. This is important when columns of text in different fonts have to be aligned, for example in a table.

Note that replaced elements have a "font-size" and a "line-height" property, even if they are not used directly to determine the height of the box. The "font-size" is, however, used to define the "em" and "ex" units, and the "line-height" has a role in the "vertical-align" property.

XSL modifications to the CSS definition:

XSL adds the following value with the following meanings:

<space>

The inline-area's height is normally set to the line-height.optimum value, but may be further adjusted between line-height.minimum and line-height.maximum for column justification or widow/orphan/keep accommodation.

The difference between the inline-area's actual height and the line-height's space-specifier's three lengths are used to set three half-leading values (optimum, minimum, and maximum). The resultant line-height is then determined as described in [4 Area Model].

Negative values for line-height.minimum, line-height.optimum, and line-height.maximum are illegal.

If the value of line-height.maximum is less than the value of line-height.optimum, it is treated as if the value of line-height.optimum had been specified. If the _-value of line-height.minimum is greater than the value of line-height.optimum, it is treated as if the value of line-height.optimum had been specified. The line-height.conditionality setting can be used to control the half-leading above the first line or after the last line that is placed in a column.

The line-height.precedence setting can be used to control the merging of the half-leading with other spacing adjustments between two lines as described in the Area Model.

7.19.24 "line-stacking-strategy"

XSL Definition:

Value: line-height | font-height | max-height | inherit
Initial: line-height
Applies to: fo:block
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

line-height

Matches CSS's line height and positioning strategy. (Uses the per-inline-height-rectangle as described in the area-model.)

font-height

Uses the block's font height as adjusted by the font-height-override-before and font-height-override-after properties. (Uses the nominal-requested-line-rectangle as described in the area-model.)

max-height

Uses the adjusted maximum ascender-heights and maximum descender-depth for the actual fonts and inline-areas placed on the line. This value may be further influenced by the line-height-shift-adjustment property. (Uses the maximal-line-rectangle as described in the area-model).

Selects the strategy for positioning adjacent lines, relative to each other.

7.19.25 "overflow"

CSS2 Definition:

Value: visible | hidden | scroll | auto | inherit
Initial: visible
Applies to: block-level and replaced elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visufx.html#propdef-overflow.

This property specifies whether the content of a block-level element is clipped when it overflows the element's box (which is acting as a containing block for the content). Values have the following meanings:

visible

This value indicates that content is not clipped, i.e., it may be rendered outside the block box.

hidden

This value indicates that the content is clipped and that no scrolling mechanism should be provided to view the content outside the clipping region; users will not have access to clipped content. The size and shape of the clipping region is specified by the "clip" property.

scroll

This value indicates that the content is clipped and that if the user agent uses scrolling mechanism that is visible on the screen (such as a scroll bar or a panner), that mechanism should be displayed for a box whether or not any of its content is clipped. This avoids any problem with scrollbars appearing and disappearing in a dynamic environment. When this value is specified and the target medium is "print" or 'projection', overflowing content should be printed.

auto

The behavior of the "auto" value is user agent dependent, but should cause a scrolling mechanism to be provided for overflowing boxes.

Even if "overflow" is set to "visible", content may be clipped to a UA's document window by the native operating environment.

7.19.26 "provisional-label-separation"

XSL Definition:

Value: <length> | inherit
Initial: 6.0pt
Applies to: fo:list-block
Inherited: yes
Percentages: refer to width of the containing box
Media: visual

Values have the following meanings:

<length>

Specifies the provisional distance between the end of the list-item-label and the start of the list-item-body. The value is not directly used during formatting, but is used in the computation of the value of the label-end variable.

NOTE:

label-end() = width of the content-rectangle of the reference-area into which the list-block is placed - (the value of the provisional-distance-between-starts + the value of the start-indent - the value of the provisional-label-separation) of the closest ancestor fo:list-block.

7.19.27 "provisional-distance-between-starts"

XSL Definition:

Value: <length> | inherit
Initial: 24.0pt
Applies to: fo:list-block
Inherited: yes
Percentages: refer to width of the containing box
Media: visual

Values have the following meanings:

<length>

Specifies the provisional distance between the start-indents of the list-item-label and the list-item-body. The value is not directly used during formatting, but is used in the computation of the value of the body-start variable.

NOTE:

body-start() = the value of the start-indent + the value of the provisional-distance-between-starts of the closest ancestor fo:list-block.

7.19.28 "ref-id"

XSL Definition:

Value: <idref> | inherit
Initial: none, value required
Applies to: fo:page-number-citations
Inherited: no
Percentages: N/A
Media: all

Values have the following meanings:

<idref>

The "id" of an object in the formatting-object tree.

Reference to the object having the specified unique identifier.

7.19.29 "reference-orientation"

XSL Definition:

Value: 0 | 90 | 180 | 270 | -90 | -180 | -270 | inherit
Initial: 0
Applies to: see prose
Inherited: yes (see prose)
Percentages: N/A
Media: visual

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, & SVG.

Issue:

In glyph-orientation-*, we chose to define this as:

<angle>

The angle is restricted to a range of -360 to +360 in 90-degree increments.

A value of "0" indicates that all glyphs are set with the top of the glyphs toward the top of the reference-area. Top of the reference-area is defined by the reference-area's 'reference-orientation'.

A value of "90" indicates a rotation of 90-degrees clockwise from the "0" orientation.

The angle value is computed modulo 360; thus a value of "-90" or a value of "270" indicates a rotation of 90-degrees counter-clockwise from the "0" orientation.

Should we do the same for all orientations.

Values have the following meanings:

0

The reference-orientation of this reference-area has the same reference-orientation (direction) as the containing reference-area.

90

The reference-orientation of this reference-area is rotated 90 degrees counter-clockwise from the reference-orientation of the containing reference-area.

180

The reference-orientation of this reference-area is rotated 180 degrees counter-clockwise from the reference-orientation of the containing reference-area.

270

The reference-orientation of this reference-area is rotated 270 degrees counter-clockwise from the reference-orientation of the containing reference-area.

-90

The reference-orientation of this reference-area is rotated 270 degrees counter-clockwise from the reference-orientation of the containing reference-area.

NOTE:

This is equivalent to specifying "270".

-180

The reference-orientation of this reference-area is rotated 180 degrees counter-clockwise from the reference-orientation of the containing reference-area.

NOTE:

This is equivalent to specifying "180".

-270

The reference-orientation of this reference-area is rotated 90 degrees counter-clockwise from the reference-orientation of the containing reference-area.

NOTE:

This is equivalent to specifying "90".

The reference-orientation specifies the direction for "top" for the content-rectangle of the "reference-area". This is used as the reference for deriving directions, such as the block-progression-direction, inline-progression-direction, etc. as specified by the "writing-mode" and "direction" properties.

NOTE:

Issue: Do the CSS2 "absolute" (top, bottom, left, right) directions change if the reference-orientation is not 0?

The "reference-orientation" property is applied only on formatting objects that set up a reference-area (for XSL these are: fo:simple-page-master, fo:*-region, fo:flow, fo:static-content, fo:table, fo:table-cell, fo:display-included-container, & fo:inline-included-container). Each value of "reference-orientation" sets the absolute direction for "top", "left", "bottom", and "right"; which is used by "writing-mode", "direction", and all positioning operations that are referenced to the reference-area or are nested within it.

The "reference-orientation" trait on an area are indirectly derived from the "reference-orientation" property on the formatting object that generates the area or the formatting object ancestors of that formatting object. The exact derivation is as follows:

Conformance:

7.19.30 "scale"

XSL Definition:

Value: <number>{1,2} | maximum | maximum-uniform | inherit
Initial: 1.0
Applies to: fo:external-graphic, fo:instream-graphic
Inherited: no
Percentages: N/A
Media: visual

Issue (scale):

This property needs reviewing.

Values have the following meanings:

maximum

The content of the graphic shall be scaled independently in each direction so that its size in the horizontal and vertical directions is as large as allowed.

maximum-uniform

The content of the graphic 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. The "non-fitting" axis will under-fill the available size.

<real>

Specifies a scaling factor to be applied to the content of the graphic. Numbers less than 1 shall make the content smaller. Numbers greater than 1 shall make it larger. The value must be greater than zero.

Sets the scale factor for an embedded graphic.

7.19.31 "score-spaces"

XSL Definition:

Value: true | false | inherit
Initial: true
Applies to: see prose
Inherited: yes
Percentages: see prose
Media: visual

Datatype showed default as false, text shows as true. Which is correct.

Issue: Should we change the property name to "decorate-spaces"?

Values have the following meanings:

true

Text-decoration will be applied to spaces

false

Text-decoration will not be applied to spaces

Specifies whether the text-decoration property shall be applied to spaces.

7.19.32 "size"

CSS2 Definition:

Value: <length>{1,2} | auto | landscape | portrait | inherit
Initial: auto
Applies to: the page context
Inherited: N/A [XSL:no, is optional]
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/page.html#propdef-size.

Restructured to use Ccc-text/Xsl-mod wrappers and intro before datatype breakout.

Changed datatype to remove [unknown] and moved descriptions into each datatype.

Added all of the <Desc> content (all text after after datatype breakout).

Issue: If 2 lengths are specified, which is height?

This property specifies the size and orientation of a page box.

The size of a page box may either be "absolute" (fixed size) or "relative" (scalable, i.e., fitting available sheet sizes). Relative page boxes allow user agents to scale a document and make optimal use of the target size.

[The first] Three values for the 'size' property create a relative page box:

auto

The page box will be set to the size and orientation of the target sheet.

landscape

Overrides the target's orientation. The page box is the same size as the target, and the longer sides are horizontal.

portrait

Overrides the target's orientation. The page box is the same size as the target, and the shorter sides are horizontal.

<length>

Length values for the "size" property create an absolute page box. If only one length value is specified, it sets both the width and height of the page box (i.e., the box is a square). Since the page box is the initial containing block, percentage values are not allowed for the "size" property.

User agents may allow users to control the transfer of the page box to the sheet (e.g., rotating an absolute page box that's being printed).

XSL modifications to the CSS definition:

This is treated as a CSS shorthand property that is mapped to XSL's "page-height" and "page-width" properties.

Issue: We should describe the mapping of landscape & portrait into XSL.

7.19.33 "span"

XSL Definition:

Value: none | all | inherit
Initial: none
Applies to: see prose
Inherited: no
Percentages: N/A
Media: visual

Values have the following meanings:

none

This object does not span multiple columns.

all

The areas resulting from this flow object shall span all the columns of a multi-column region.

Specifies if a block-level object should be placed in the current column or should span all columns of a multi-column region.

7.19.34 "text-align"

CSS2 Definition:

Value: start | center | end | justify | inside | outside | left | right | <string> | inherit
Initial: start (see note on "CSS2 Compatibility")
Applies to: block-level elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-text-align.

This property describes how inline content of a block is aligned. Values have the following meanings:

left
center
right
justify

Left, right, center, and double justify text, respectively.

<string>

Specifies a string on which cells in a table column will align (see the section on horizontal alignment in a column for details and an example). This value applies only to table cells. If set on other elements, it will be treated as 'left' or 'right', depending on whether 'direction' is 'ltr', or 'rtl', respectively.

A block of text is a stack of line boxes. In the case of 'left', 'right' and 'center', this property specifies how the inline boxes within each line box align with respect to the line box's left and right sides; alignment is not with respect to the viewport. In the case of 'justify', the UA may stretch the inline boxes in addition to adjusting their positions. (See also 'letter-spacing' and 'word-spacing'.)

NOTE:

The actual justification algorithm used is user agent and written language dependent.

Conforming user agents may interpret the value 'justify' as 'left' or 'right', depending on whether the element's default writing direction is left-to-right or right-to-left, respectively.

XSL modifications to the CSS definition:

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, and SVG.

Values have the following meanings:

start

Specifies that the contents is to be start-aligned in the inline-progression-direction. Any overflow is placed onto the end edge of the contents.

center

Specifies that the contents is to be centered in the inline-progression-direction. Any overflow is distributed equally onto the start and end edges of the contents.

end

Specifies that the contents is to be end-aligned in the inline-progression-direction. Any overflow placed onto the start edge of the contents.

justify

Specifies that the contents is to be expanded to fill the available width in the inline-progression-direction. Any overflow is placed onto the end edge of the contents.

The last (or only) line of any block will be set start-aligned. If you wish to force-justify the line, you must specify "text-align-last='justify'".

inside

If the page binding edge is the start-side, the alignment will be start. If the binding-edge is the end-side, the alignment will be end. If neither, use start-side.

outside

If the page binding edge is the start-side, the alignment will be end. If the binding-edge is the end-side the alignment will be start. If neither, use end alignment.

left

Interpreted as "text-align='start'".

right

Interpreted as "text-align='end'".

<string>

Specifies a string on which cells in a table column will align (see the section on horizontal alignment in a column for details and an example). This value applies only to table cells. If set on other elements, it will be treated as "start".

This property describes how inline content of a block is aligned.

A block of text is a stack of line boxes. In the case of "left", "right" and "center", this property specifies how the inline boxes within each line box align with respect to the line box's left and right sides; alignment is not with respect to the viewport. In the case of "justify", the UA may stretch the inline boxes in addition to adjusting their positions. (See also "letter-spacing" and "word-spacing".)

7.19.35 "text-align-last"

XSL Definition:

Value: relative | start | center | end | justify | inside | outside | left | right | <string> | inherit
Initial: start
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Needs full FO-SG discussion:

Same issues as text-align.

Values have the following meanings:

relative

If text-align is justify, then the alignment of the last line will be start. If text-align is not justify, text-align-last will use the value of text-align.

start

Specifies that the contents is to be start-aligned in the inline-progression-direction. Any overflow is placed onto the end edge of the contents.

center

Specifies that the contents is to be centered in the inline-progression-direction. Any overflow is distributed equally onto the start and end edges of the contents.

end

Specifies that the contents is to be end-aligned in the inline-progression-direction. Any overflow placed onto the start edge of the contents.

justify

Specifies that the contents is to be expanded to fill the available width in the inline-progression-direction. Any overflow is placed onto the end edge of the contents.

This setting will force-justify the last (or only) line of a block.

inside

If the page binding edge is the start-side, the alignment will be start. If the binding-edge is the end-side, the alignment will be end. If neither, use start-side.

outside

If the page binding edge is the start-side, the alignment will be end. If the binding-edge is the end-side the alignment will be start. If neither, use end alignment.

left

Interpreted as "text-align='start'". (See "CSS2 Compatibility Note" in the "text-align property description.)

right

Interpreted as "text-align='end'".

<string>

Specifies a string on which cells in a table column will align (see the section on horizontal alignment in a column for details and an example). This value applies only to table cells. If set on other elements, it will be treated as "start".

Specifies the alignment of the last textline in the block.

A value of relative specifies that the value of the text-align property shall be used, except when that value is justify, in which case a value of start shall be used.

7.19.36 "text-indent"

CSS2 Definition:

Value: <length> | <percentage> | inherit
Initial: 0pt
Applies to: block-level elements
Inherited: yes
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-text-indent.

This property specifies the indentation of the first line of text in a block. More precisely, it specifies the indentation of the first box that flows into the block's first line box. The box is indented with respect to the left (or right, for right-to-left layout) edge of the line box. User agents should render this indentation as blank space.

Values have the following meanings:

<length>

The indentation is a fixed length.

<percent>

The indentation is a percentage of the containing block width

The value of 'text-indent' may be negative, but there may be implementation-specific limits.

XSL modifications to the CSS definition:

The "text-indent" property specifies an adjustment to the start-indent of the first line of text in a block-area. This indent is added to the block's start-indent.

A negative value specifies a hanging indent (outdent) on the first line.

7.19.37 "vertical-align"

CSS2 Definition:

Value: baseline | middle | sub | super | text-top | text-bottom | <percentage> | <length> | top | bottom | inherit
Initial: baseline
Applies to: inline-level and 'table-cell' elements
Inherited: no
Percentages: refer to the 'line-height' of the element itself
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-vertical-align.

Issue (vertical-align):

There are several properties grouped with vertical-align that have not been included in this draft.

This property affects the vertical positioning inside a line box of the boxes generated by an inline-level element. The following values only have meaning with respect to a parent inline-level element, or to a parent block-level element, if that element generates anonymous inline boxes; they have no effect if no such parent exists.

NOTE:

Values of this property have slightly different meanings in the context of tables. Please consult the section on table height algorithms for details.

Values have the following meanings:

baseline

Align the baseline of the box with the baseline of the parent box. If the box doesn't have a baseline, align the bottom of the box with the parent's baseline.

middle

Align the vertical midpoint of the box with the baseline of the parent box plus half the x-height of the parent.

sub

Lower the baseline of the box to the proper position for subscripts of the parent's box. (This value has no effect on the font size of the element's text.)

super

Raise the baseline of the box to the proper position for superscripts of the parent's box. (This value has no effect on the font size of the element's text.)

text-top

Align the top of the box with the top of the parent element's font.

text-bottom

Align the bottom of the box with the bottom of the parent element's font.

top

Align the top of the box with the top of the line box.

bottom

Align the bottom of the box with the bottom of the line box.

<percent>

Raise (positive value) or lower (negative value) the box by this distance (a percentage of the "line-height" value). The value "0%" means the same as "baseline".

<length>

Raise (positive value) or lower (negative value) the box by this distance. The value "0cm" means the same as "baseline".

NOTE:

Values of this property have slightly different meanings in the context of tables. Please consult the section on table height algorithms for details.

7.19.38 "visibility"

CSS2 Definition:

Value: visible | hidden | collapse | inherit
Initial: visible
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visufx.html#propdef-visibility.

The 'visibility' property specifies whether the boxes generated by an element are rendered. Invisible boxes still affect layout (set the 'display' property to 'none' to suppress box generation altogether). Values have the following meanings:

visible

The generated box is visible.

hidden

The generated box is invisible (fully transparent), but still affects layout.

collapse

Please consult the section on dynamic row and column effects in tables. If used on elements other than rows or columns, "collapse" has the same meaning as "hidden".

This property may be used in conjunction with scripts to create dynamic effects.

XSL modifications to the CSS definition:

Changed initial=visible (is "inherit" in CSS).

7.19.39 "width"

CSS2 Definition:

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: all elements but non-replaced inline elements, table-rows, and row groups
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-width.

This property specifies the content width of boxes generated by block-level and replaced elements.

This property does not apply to non-replaced inline-level elements. The width of a non-replaced inline element's boxes is that of the rendered content within them (before any relative offset of children). Recall that inline boxes flow into line boxes. The width of line boxes is given by the their containing block, but may be shorted by the presence of floats.

The width of a replaced element's box is intrinsic and may be scaled by the user agent if the value of this property is different than 'auto'.

Values have the following meanings:

auto

The width depends on the values of other properties.

<length>

Specifies a fixed width.

<percent>

Specifies a percentage width. The percentage is calculated with respect to the width of the generated box's containing block.

Negative values for "width" are illegal.

XSL modifications to the CSS definition:

In XSL, this property is mapped to either "inline-progression-dimension" or "block-progression-dimension", based on the applicable values of the "writing-mode" and "reference-orientation" properties.

Issue (width):

Need to describe if W/H are interior or exterior.

Issue (height-width-rel-3):

Not all references to height and width in the document have been made consistent with the introduction of the writing mode relative ones. This is work to be done.

7.19.40 "min-width"

CSS2 Definition:

Value: <length> | <percentage> | inherit
Initial: depends on UA
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-min-width.

XSL modifications to the CSS definition:

See definition of property max-width ([7.19.41 "max-width"]).

7.19.41 "max-width"

CSS2 Definition:

Value: <length> | <percentage> | none | inherit
Initial: none
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to width of containing block
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-max-width.

These two properties allow authors to constrain box widths to a certain range. Values have the following meanings:

none

(Only on "max-width") No limit on the width of the box.

<length>

Specifies a fixed minimum or maximum computed width.

<percent>

Specifies a percentage for determining the computed value. The percentage is calculated with respect to the width of the generated box's containing block.

XSL modifications to the CSS definition:

In XSL, this property is mapped to either "maximum-inline-progression-dimension" or "maximum-block-progression-dimension", based on the applicable values of the "writing-mode" and "reference-orientation" properties. Similarly, "min-width" is mapped to "minimum-inline-progression-dimension" or "minimum-block-progression-dimension", based on the applicable values of the "writing-mode" and "reference-orientation" properties.

7.19.42 "inline-progression-dimension"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <length> | <percentage> | auto | inherit
Initial: auto
Applies to: all elements but non-replaced inline elements, table rows, and row groups
Inherited: no
Percentages: refer to inline-progression-dimension of containing block
Media: visual

This property specifies the content inline-progression-dimension of areas generated by block-level and replaced elements.

The inline-progression-dimension of a replaced element's areas is intrinsic and may be scaled by the user agent if the value of this property is different than 'auto'.

This property does not apply when the "line-height" property applies to the same dimension of the block-level area.

Values have the following meanings:

auto

The inline-progression-dimension depends on the values of other properties.

<length>

Specifies a fixed inline-progression-dimension.

<percent>

Specifies a percentage inline-progression-dimension. The percentage is calculated with respect to the inline-progression-dimension of the generated area's containing block.

Negative values for "inline-progression-dimension" are illegal.

Issue (inline-progression-dimension):

Need to describe if *-dimensions are interior or exterior.

Issue (height-width-rel-4):

Not all references to height and width in the document have been made consistent with the introduction of the writing mode relative ones. This is work to be done.

7.19.43 "minimum-inline-progression-dimension"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <length> | <percentage> | inherit
Initial: depends on UA
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to inline-progression-dimension of containing block
Media: visual

See definition of property maximum-inline-progression-dimension ([7.19.44 "maximum-inline-progression-dimension"]).

7.19.44 "maximum-inline-progression-dimension"

Writing-mode Relative Equivalent of CSS2 Property.

Value: <length> | <percentage> | none | inherit
Initial: none
Applies to: all elements except non-replaced inline elements and table elements
Inherited: no
Percentages: refer to inline-progression-dimension of containing block
Media: visual

These two properties allow authors to constrain an area's inline-progression-dimensions to a certain range. Values have the following meanings:

none

(Only on "maximum-inline-progression-dimension") No limit on the inline-progression-dimension of the area.

<length>

Specifies a fixed minimum or maximum computed inline-progression-dimension.

<percent>

Specifies a percentage for determining the computed value. The percentage is calculated with respect to the inline-progression-dimension of the generated area's containing block.

7.19.45 "white-space"

CSS2 Definition:

Value: normal | pre | nowrap | inherit
Initial: normal
Applies to: block-level elements
Inherited: yes
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/text.html#propdef-white-space.

This property declares how whitespace inside the element is handled. Values have the following meanings:

normal

This value directs user agents to collapse sequences of whitespace, and break lines as necessary to fill line boxes. Additional line breaks may be created by occurrences of "\A" in generated content (e.g., for the BR element in HTML).

pre

This value prevents user agents from collapsing sequences of whitespace. Lines are only broken at newlines in the source, or at occurrences of "\A" in generated content.

nowrap

This value collapses whitespace as for 'normal', but suppresses line breaks within text except for those created by "\A" in generated content (e.g., for the BR element in HTML).

Conforming user agents may ignore the 'white-space' property in author and user style sheets but must specify a value for it in the default style sheet.

XSL modifications to the CSS definition:

XSL splits control of space stripping, EOL stripping, and wrap into separate properties.

This property is treated like a shorthand in XSL. It sets the white-space-treatment and wrap properties ase described in the following sections:

normal

linefeed-treatment="treat-as-space"

whitespace-collapse="true"

wrap-option="wrap"

pre

linefeed-treatment="preserve"

whitespace-collapse="false"

wrap-option="no-wrap"

nowrap

linefeed-treatment="treat-as-space"

whitespace-collapse="true"

wrap-option="no-wrap"

7.19.46 "white-space-treatment"

XSL Definition:

Value: preserve | collapse | ignore | inherit
Initial: collapse
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

collapse

Specifies that any character flow object whose character is of the Unicode character class "whitespace" shall be ignored if the preceding flow object was a character flow object also with a character of class whitespace.

preserve

Specifies no special action.

ignore

Specifies that any character flow object whose character is of Unicode character class "whitespace" should be discarded.

The "white-space-treatment" property specifies the treatment of whitespace.

7.19.47 "linefeed-treatment"

XSL Definition:

Value: ignore | preserve | treat-as-space | inherit
Initial: treat-as-space
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

ignore

Specifies that any character flow object whose Unicode character is #xA shall be discarded.

preserve

Specifies no special action.

treat-as-space

Specifies that any character flow object whose Unicode character code is #xA shall be treated by subsequent XSL processing (including collapsing) and the formatter as if its Unicode character code were #x20.

The "linefeed-treatment" property specifies the treatment of linefeeds (#xA characters).

7.19.48 "space-treatment"

XSL Definition:

Value: ignore | preserve | inherit
Initial: preserve
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

ignore

Specifies that any character flow object whose character is of Unicode character class "whitespace", except for #xA (linefeed) characters (since their treatment is determine by the linefeed-treatment property), shall be discarded.

preserve

Specifies no special action.

The "space-treatment" property specifies the treatment of space (#x20) and other whitespace characters except for linefeeds (#xA characters).

7.19.49 "white-space-collapse"

XSL Definition:

Value: false | true | inherit
Initial: true
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

false

Specifies no special action.

true

Specifies, for any character flow object such that:

that flow object shall be ignored.

The "white-space-collapse" property specifies the treatment of consecutive whitespace. The effect is as follows: after all ignored whitespace is discarded and all "treat-as-space" whitespace is turned into a space, all resulting runs of two or more consecutive spaces are replaced by a single space, then any remaining space immediately adjacent to a remaining linefeed is also discarded. An implementation is free to use any algorithm to achieve an equivalent effect.

7.19.50 "wrap-option"

XSL Definition:

Value: no-wrap | wrap | inherit
Initial: wrap
Applies to: see prose
Inherited: yes
Percentages: N/A
Media: visual

Values have the following meanings:

nowrap

No line-wrapping will be performed.

In the case when lines are longer than the available width of the content-rectangle, the overflow will be treated in accordance with the "overflow" property specified on the reference-area.

wrap

Line-breaking will occur if the line overflows the available block width. No special markers or other treatment will occur.

Specifies how line-wrapping (line-breaking) of the content of the formatting object is to be handled.

7.19.51 "writing-mode"

XSL Definition:

Value: lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit
Initial: lr-tb
Applies to: see prose
Inherited: yes (see prose)
Percentages: N/A
Media: visual

This is an updated version of this property, including proposed changes and discussion notes from our current joint discussions with I18N, CSS, & SVG. These discussions continue.

NOTE:

This version of the writing-mode property covers the base writing-modes that are used as the official languages of the United Nations. For information regarding additional writing-modes, please see the "Internationalization Appendix".

Values have the following meanings:

lr-tb

Inline components and text within a line are written left-to-right. Lines and blocks are placed top-to-bottom.

NOTE:

Typically, this is the writing-mode for normal Roman text.

Establishes the following directions:

See "Conformance" section if the Unicode bidi algorithm is supported.

rl-tb

Inline components and text within a line are written right-to-left. Lines and blocks are placed top-to-bottom.

NOTE:

Typically, this writing mode is used in Arabic and Hebrew text.

Establishes the following directions:

See "Conformance" section if it is not possible to fully support the rl-tb setting of 'writing-mode'.

tb-rl

Inline components and text within a line are written top-to-bottom. Lines and blocks are placed right-to-left.

NOTE:

Typically, this writing mode is used in Chinese and Japanese text.

Establishes the following directions:

See "Conformance" section if it is not possible to fully support the tb-rl setting of 'writing-mode'.

lr

Shorthand for lr-tb.

rl

Shorthand for rl-tb.

tb

Shorthand for tb-rl.

The "writing-mode" property is inherited and may be specified on any object.

The "writing-mode" property is applied (processed and converted to the 3 direction traits) only on formatting objects that set up a reference-area (for XSL these are: fo:simple-page-master, fo:*-region, fo:table, fo:table-cell, fo:display-included-container, & fo:inline-included-container. Each value of writing-mode sets all 3 of the direction traits indicated in each of the value descriptions above on the reference-area. (See the area model for a description of the direction traits and their usage.)

NOTE:

EdNote: In the XSL specification, the items in the list above will be moved to the individual FO descriptions.

The direction traits on an area are indirectly derived from the 'writing-mode', 'direction' and 'unicode-bidi' properties on the formatting object that generates the area or the formatting object ancestors of that formatting object. The exact derivation depends on the trait.

Conformance:

7.19.52 "z-index"

CSS2 Definition:

Value: auto | <integer> | inherit
Initial: auto
Applies to: positioned elements
Inherited: no
Percentages: N/A
Media: visual

CSS2 Reference: http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-z-index.

For a positioned box, the "z-index" property specifies:

1. The stack level of the box in the current stacking context.

2. Whether the box establishes a local stacking context.

Values have the following meanings:

auto

The stack level of the generated box in the current stacking context is the same as its parent's box. The box does not establish a new local stacking context.

<integer>

This integer is the stack level of the generated box in the current stacking context. The box also establishes a local stacking context in which its stack level is "0".

This example [see the CSS specification] demonstrates the notion of transparency. The default behavior of a box is to allow boxes behind it to be visible through transparent areas in its content. In the example, each box transparently overlays the boxes below it. This behavior can be overridden by using one of the existing background properties.


A Internationalization

A.1 Additional "writing-mode" values

The following additional values for the "writing-mode" property provide for more extensive internationalization support.

The values have the following meanings:

tb-lr

Inline components and text within a line are stacked top-to-bottom. Lines and blocks are stacked left-to-right.

Establishes the following directions:

bt-lr

Inline components and text within a line are stacked bottom-to-top. Lines and blocks are stacked left-to-right.

Establishes the following directions:

bt-rl

Inline components and text within a line are stacked bottom-to-top. Lines and blocks are stacked right-to-left.

Establishes the following directions:

lr-bt

Inline components and text within a line are stacked left-to-right. Lines and blocks are stacked bottom-to-top.

Establishes the following directions:

rl-bt

Inline components and text within a line are stacked right-to-left. Lines and blocks are stacked bottom-to-top.

Establishes the following directions:

lr-alternating-rl-bt

Inline components and text within the first line are stacked left-to-right, within the second line they are stacked right-to-left; continuing in alternation. Lines and blocks are stacked bottom-to-top.

Establishes the following directions:

lr-alternating-rl-tb

Inline components and text within the first line are stacked left-to-right, within the second line they are stacked right-to-left; continuing in alternation. Lines and blocks are stacked top-to-bottom.

Establishes the following directions:

lr-inverting-rl-bt

Inline components and text within the first line are stacked left-to-right, within the second line they inverted and are stacked right-to-left; continuing in alternation. Lines and blocks are stacked bottom-to-top.

Establishes the following directions:

lr-inverting-rl-tb

Inline components and text within the first line are stacked left-to-right, within the second line they inverted and are stacked right-to-left; continuing in alternation. Lines and blocks are stacked top-to-bottom.

Establishes the following directions:

tb-rl-in-rl-pairs

Text is written in two character, right-to-left pairs. The pairs are then stacked top-to-bottom to form a line. Lines and blocks are stacked right-to-left.

Establishes the following directions:

B Formatting Object Summary

This section contains tables summarizing the conformance level of each of the defined formatting objects. Included with each formatting object name is a designation of its inclusion or exclusion from the basic set of formatting objects for the particular class, e.g., aural. A proposed fallback treatment is specified wherever possible.

NOTE:

This is a draft version and is subject to change by by the XSL WG.

B.1 Pagination and Layout Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:root basic basic basic
fo:page-sequence basic basic basic
fo:page-sequence-master basic basic basic
fo:single-page-master-reference basic basic basic
fo:repeatable-page-master-reference basic basic basic
fo:repeatable-page-master-alternatives

extended

fallback: use the page-master referenced in the first fo:conditional-page-master-reference child

extended

fallback: use the page-master referenced in the first fo:conditional-page-master-reference child

extended

fallback: use the page-master referenced in the first fo:conditional-page-master-reference child

fo:conditional-page-master-reference

extended

fallback: use the page-master referenced in the first fo:conditional-page-master-reference child

extended

fallback: use the page-master referenced in the first fo:conditional-page-master-reference child

extended

fallback: use the page-master referenced in the first fo:conditional-page-master-reference child

fo:layout-master-set basic basic basic
fo:simple-page-master basic basic basic
fo:region-body basic basic basic
fo:region-before

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is spoken

fo:region-after

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is spoken

fo:region-start

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is spoken

fo:region-end

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is spoken

fo:flow basic basic basic
fo:static-content

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is placed

extended

fallback: include after content of body region is spoken

B.2 Block Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:block N/A basic basic
fo:block-container N/A

extended

fallback: display indication that content cannot be correctly rendered

basic

B.3 Inline Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:bidi-override N/A

extended

fallback: display indication that content cannot be correctly rendered.

basic
fo:character N/A basic basic
fo:initial-property-set N/A

extended

fallback: ignore any properties specified on this object.

basic

fo:external-graphic N/A basic basic
fo:instream-graphic N/A

extended

fallback: display an indication that content cannot be correctly rendered.

extended

fallback: speak an indication that content cannot be correctly spoken.

fo:inline-container N/A

extended

fallback: display indication that content cannot be correctly rendered.

extended

fallback: speak an indication that content cannot be correctly spoken.

fo:leader N/A basic basic
fo:page-number basic

extended

fallback: display an indication that content cannot be correctly rendered.

extended

fallback: speak an indication that content cannot be correctly spoken.

fo:page-number-citation basic

extended

fallback: display an indication that content cannot be correctly rendered.

extended

fallback: speak an indication that content cannot be correctly spoken.

B.4 Table Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:table-and-caption N/A basic basic
fo:table N/A basic basic
fo:table-column N/A basic basic
fo:table-caption N/A

extended

fallback:

  • caption-side="start" becomes caption-side="before"

  • caption-side="end" becomes caption-side="after"

  • caption-side="left" becomes caption-side="before"

  • caption-side="right" becomes caption-side="after"

extended

fallback:

  • caption-side="start" becomes caption-side="before"

  • caption-side="end" becomes caption-side="after"

  • caption-side="left" becomes caption-side="before"

  • caption-side="right" becomes caption-side="after"

fo:table-header N/A basic basic
fo:table-footer N/A

extended

fallback: place at end of table.

extended

fallback: speak at end of table

fo:table-body N/A basic basic
fo:table-row N/A basic basic
fo:table-cell N/A basic basic

B.5 List Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:list-block N/A basic basic
fo:list-item N/A basic basic
fo:list-item-body N/A basic basic
fo:list-item-label N/A

extended

fallback: labels that break across multiple lines are treated as separate blocks before list-item-body.

basic

B.6 Link and Multi Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:simple-link N/A

extended

fallback: promote content to parent formatting object.

extended

fallback: promote content to parent formatting object..

fo:multi-switch N/A

extended

fallback: utilize the contents of the first eligible multi-case formatting object.

extended

fallback: utilize the contents of the first eligible multi-case formatting object.

fo:multi-case N/A basic: needed as wrapper for fallback for multi-switch basic: needed as wrapper for fallback for multi-switch
fo:multi-toggle N/A

extended

fallback: promote content to parent formatting object.

extended

fallback: promote content to parent formatting object.

fo:multi-properties N/A

extended

fallback: promote content to parent formatting object.

extended

fallback: promote content to parent formatting object.

fo:multi-property-set N/A

extended

fallback: ignore.

extended

fallback: ignore.

B.7 Out-of-line Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:float

extended

fallback: place inline.

extended

fallback: place inline.

extended

fallback: place inline.

fo:footnote

extended

fallback: place inline.

extended

fallback: place inline.

extended

fallback: place inline..

fo:footnote-body

extended

fallback: place inline.

extended

fallback: place inline.

extended

fallback: place inline.

B.8 Other Formatting Objects

Formatting ObjectLayout and PaginationVisualAural
fo:wrapper basic basic basic

C Property Index

C.1 Explanation of Trait Mapping Values:

Rendering

Maps directly into a rendering trait of the same name.

Disappears

There is no trait mapping.

Shorthand

A shorthand that is mapped into one or more properties. There are no traits associated with a shorthand property. The traits are associated with the individual properties.

Refine

Disappears in Refinement. During refinement it sets up one or more other traits.

Formatting

Maps directly into a formatting trait of the same name.

Specification

Sub-class of formatting. It is the same as a formatting trait, but is specified on formatting objects that are referenced.

See prose

Used to calculate a formatting trait, which does not have the same name as the property. Other properties may also influence the trait value. See the property description for details.

Font selection

Property that participates in font selection.

Value change

Maps to a trait of the same name, but the value is not just copied.

Reference

An association between two names. Establishes a reference within the formatting-object tree.

Action

Behavior trait.

Magic

Handled by the formatter in an implementation-defined way. There are no specific traits for this property.

C.2 Property Table: Part I

NameValuesInitial ValueInheritedPercentages
apply-word-spacingauto | yes | no | inheritautonoN/A
auto-restoreyes | nonoyesN/A
azimuth<angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inheritcenteryesN/A
background[<background-color> || <background-image> || <background-repeat> || <background-attachment> || <background-position> | ]]inheritnot defined for shorthand propertiesnoallowed on 'background-position'
background-attachmentscroll | fixed | inheritscrollnoN/A
background-color<color> | transparent | inherittransparentnoN/A
background-image<uri> | none | inheritnonenoN/A
background-position[ [<percentage> | <length> ]{1,2} | [ [top | center | bottom] || [left | center | right] ] ] | inherit0% 0%norefer to the size of the box itself
background-repeatrepeat | repeat-x | repeat-y | no-repeat | inheritrepeatnoN/A
baseline-shiftnone | sub | super | <length> | inheritnoneno, special (see prose)N/A
blank-pageblank | nonblank | any | inheritanynoN/A
block-progression-dimension<length> | <percentage> | auto | inheritautonosee prose
border[ <border-width> || <border-style> || <color> ] | inheritsee individual propertiesnoN/A
border-after-color<color> | inheritthe value of the 'color' propertynoN/A
border-after-style<border-style> | inheritnonenoN/A
border-after-width<border-width> | inheritmediumnoN/A
border-before-color<color> | inheritthe value of the 'color' propertynoN/A
border-before-style<border-style> | inheritnonenoN/A
border-before-width<border-width> | inheritmediumnoN/A
border-bottom[ <border-top-width> || <border-style> || <color> ] | inheritsee individual propertiesnoN/A
border-bottom-color<color> | inheritthe value of the 'color' propertynoN/A
border-bottom-style<border-style> | inheritnonenoN/A
border-bottom-width<border-width> | inheritmediumnoN/A
border-collapsecollapse | separate | inheritcollapseyesN/A
border-color<color>{1,4} | transparent | inheritsee individual propertiesnoN/A
border-end-color<color> | inheritthe value of the 'color' propertynoN/A
border-end-style<border-style> | inheritnonenoN/A
border-end-width<border-width> | inheritmediumnoN/A
border-left[ <border-top-width> || <border-style> || <color> ] | inheritsee individual propertiesnoN/A
border-left-color<color> | inheritthe value of the 'color' propertynoN/A
border-left-style<border-style> | inheritnonenoN/A
border-left-width<border-width> | inheritmediumnoN/A
border-right[ <border-top-width> || <border-style> || <color> ] | inheritsee individual propertiesnoN/A
border-right-color<color> | inheritthe value of the 'color' propertynoN/A
border-right-style<border-style> | inheritnonenoN/A
border-right-width<border-width> | inheritmediumnoN/A
border-spacing<length> <length>? | inherit0ptyesN/A
border-start-color<color> | inheritthe value of the 'color' propertynoN/A
border-start-style<border-style> | inheritnonenoN/A
border-start-width<border-width> | inheritmediumnoN/A
border-style<border-style>{1,4} | inheritsee individual propertiesnoN/A
border-top[ <border-top-width> || <border-style> || <color> ] | inheritsee individual propertiesnoN/A
border-top-color<color> | inheritthe value of the 'color' propertynoN/A
border-top-style<border-style> | inheritnonenoN/A
border-top-width<border-width> | inheritmediumnoN/A
border-width<border-width>{1,4} | inheritsee individual propertiesnoN/A
bottom<length> | <percentage> | auto | inheritautonorefer to height of containing block
break-afterauto | column | page | even-page | odd-page | inheritautonoN/A
break-beforeauto | column | page | even-page | odd-page | inheritautonoN/A
caption-sidebefore | after | start | end | top | bottom | left | right | inheritbeforeyesN/A
case-name<name>none, a value is requiredno, a value is requiredN/A
case-title<name>none, a value is requiredno, a value is requiredN/A
character<string>N/A, value is requiredno, a value is requiredN/A
clearnone | left | right | both | inheritnonenoN/A
clip<shape> | auto | inheritautonoN/A
color<color> | inheritdepends on user agentyesN/A
column-count<number> | inherit1noN/A
column-gap<length> | inherit12.0ptnorefer to width of the region being divided into columns.
column-number<number>see prosenoN/A
column-width<length>undefinednoN/A
countrynone | <country> | inheritnoneyesN/A
cue<cue-before> || <cue-after> | inheritnot defined for shorthand propertiesnoN/A
cue-after<uri> | none | inherit nonenoN/A
cue-before<uri> | none | inherit nonenoN/A
destination-placement-offset<length>0ptnoN/A
directionltr | rtl | inheritltryesN/A
dom-stateTBDTBDnoN/A
elevation<angle> | below | level | above | higher | lower | inheritlevelyesN/A
empty-cellsshow | hide | inheritshowyesN/A
end-indent<length> | inherit0ptyesrefer to width of containing reference-area
ends-rowyes | nononoN/A
extent<length> | inherit0.0ptnorefer to the corresponding height or width of the page region.
external-destination<uri>null stringnoN/A
floatleft | right | none | inheritnonenoN/A
flow-name<name> | inheritan empty nameno, a value is requiredN/A
font[ [ <font-style> || <font-variant> || <font-weight> ]? <font-size> [ / <line-height>]? <font-family> ] | caption | icon | menu | message-box | small-caption | status-bar | inheritsee individual propertiesyesN/A
font-family[[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inheritdepends on user agentyesN/A
font-height-override-afteruse-font-metrics | <length> | inherituse-font-metricsnorefer to font's em-height
font-height-override-beforeuse-font-metrics | <length> | inherituse-font-metricsnorefer to font's em-height
font-size<absolute-size> | <relative-size> | <length> | <percentage> | inheritmediumyes, the computed value is inheritedrefer to parent element's font size
font-size-adjust<number> | none | inheritnoneyesN/A
font-stretchnormal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded |inheritnormalyesN/A
font-stylenormal | italic | oblique | backslant | inheritnormalyesN/A
font-variantnormal | small-caps | inheritnormalyesN/A
font-weightnormal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inheritnormalyesN/A
force-page-counteven | odd | no-force | inheritno-forcenoN/A
format<string>1.noN/A
glyph-orientation-horizontal<angle> | inherit0yesN/A
glyph-orientation-verticalauto | <angle> | inheritautoyesN/A
grouping-separator<character>no separatornoN/A
grouping-size<number>no groupingnoN/A
height<length> | <percentage> | auto | inheritautonosee prose
href <url> | inheritnone, value requirednoN/A
hyphenatefalse | true | inheritfalseyesN/A
hyphenation-character<character> | inheritThe unicode hyphen character u+2010yesN/A
hyphenation-keepnone | colun | page | spread | inheritnoneyesN/A
hyphenation-ladder-countnone | <number> | inheritnoneyesN/A
hyphenation-push-character-count<number> | inherit2yesN/A
hyphenation-remain-character-count<number> | inherit2yesN/A
id <id>see proseno, see proseN/A
indicate-destinationyes | nononoN/A
inhibit-line-breaksfalse | true | inheritfalseyesN/A
initial-page-numberauto | <number> | inheritautonoN/A
inline-progression-dimension<length> | <percentage> | auto | inheritautonorefer to inline-progression-dimension of containing block
internal-destination<idref>null stringnoN/A
keepauto | always | column | page | inheritautoyesN/A
keep-with-nextauto | always | column | page | inheritautonoN/A
keep-with-previousauto | always | column | page | inheritfalsenoN/A
languagenone | <language> | inheritnoneyesN/A
last-line-end-indent<length> | <percent> | inherit0ptyeswidth of containing block
leader-alignmentnone | reference-area | page | inheritnoneyesN/A
leader-length<length-range> | inheritleader-length.minimum=0pt, .optimum=12.0pt, .maximum=100% yesRefer to width of containing box
leader-patternspace | rule | dots | use-content | inheritspaceyesN/A
leader-pattern-widthuse-font-metrics | <length> | inherituse-font-metrics yesRefer to width of containing box
left<length> | <percentage> | auto | inheritautonorefer to height of containing block
letter-spacingnormal | <length> | <space> | inheritnormalyesN/A
letter-valuealpabetic | traditionalno valuenoN/A
linefeed-treatmentignore | preserve | treat-as-space | inherittreat-as-spaceyesN/A
line-heightnormal | <length> | <number> | <percentage> | <space> | inheritnormalyesrefer to the font size of the element itself
line-height-shift-adjustmentconsider-shifts | disregard-shifts | inheritconsider-shiftsyesN/A
line-stacking-strategyline-height | font-height | max-height | inheritline-heightyesN/A
margin<margin-width>{1,4} | inherit not defined for shorthand properties norefer to width of containing block
margin-bottom<margin-width> | inherit0norefer to width of containing block
margin-left<margin-width> | inherit0ptno