Conformance

The XSL Recommendation defines the behaviors of two classes of formatters based on their media type: visual and aural. It further divides the class of visual formatters into interactive media and non-interactive media formatters.

xmlroff is a visual formatter for non-interactive media.

xmlroff implements a range of formatting objects and properties from the Basic, Extended, and Complete conformance levels.

xmlroff does not claim Basic conformance to the XSL Recommendation since it does not yet implement all of the Basic level formatting objects and properties.

xmlroff supports both "lr-tb" and "rl-tb" values of the writing-mode property (and the "lr" and "rl" shorthands).

Conformance Levels

From Section 8, Conformance, of the XSL Recommendation:

This specification defines three levels of conformance, in order of completeness:

LevelDescription
BasicIncludes the set of formatting objects and properties needed to support a minimum level of pagination or aural rendering.
ExtendedIncludes everything else, except for shorthands. It is intended for applications whose goal is to provide sophisticated pagination.
CompleteIncludes everything.

Conformance to this specification is expressed in terms of conformance to any of the above levels.

An application that claims conformance to a given level of this specification must implement all the formatting objects and properties that apply to it for a given medium.

Conformance for visual and aural XSL formatters is defined separately for each formatting object. For example, implementing fo:page-number is necessary for Basic level conformance for a visual formatter, but only necessary for Extended level conformance for an aural formatter.

In contrast, formatting object properties only have one defined conformance level, but there are also some properties that apply to only one class of formatter. For example, page-height and voice-family are both in the set of properties for Basic level conformance, but page-height applies only to visual media and voice-family applies only to aural media.

Appendix B and Section C.3 of the XSL Recommendation list a proposed fallback treatment for each Extended level formatting object and property. The fallbacks are defined "[i]n order to ensure interoperability." Also, "[c]orrect processing of fallbacks does not constitute conformance."

All formatting objects are assigned to either Basic or Extended level conformance. There are no Complete level formatting objects.

Some formatting objects are specific to Extended level conformant interactive media formatters. Non-interactive media formatters such as xmlroff, however, must, for Extended level conformance, implement the proposed fallback treatment of the Extended level interactive media formatting objects.

Stated Conformance

The stated conformance also has three levels:

LevelDescription
Yesxmlroff implements the formatting object, property, or fallback behaviour, possibly with some caveats.
Noxmlroff does not implement the formatting object, property, or fallback behaviour, but a workaround may also be suggested.
N/Axmlroff does not need to formatting object, property, or fallback behaviour. For example, xmlroff does not implement properties for aural or interactive presentation, and it does not implement fallback behaviour for implemented formatting objects.

Formatting Objects

All the formatting object specified by the XSL 1.0 Recommendation are accepted. Not all are supported, however.

The following tables are based on the tables in Appendix B of the XSL Recommendation. The conformance level and proposed fallback treatment for visual processors are shown along with an indication of whether xmlroff implements the formatting object or the fallback treatment. Conformance level and fallbacks for aural processors are not shown.

Declaration and Pagination and Layout Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:rootBasicYes-N/A
fo:page-sequenceBasicYes-N/A
fo:page-sequence-masterBasicYes-N/A
fo:single-page-master-referenceBasicNo-N/A
fo:repeatable-page-master-referenceBasicNo-N/A
fo:repeatable-page-master-alternativesExtendedNoUse the page-master referenced in the first fo:conditional-page-master-reference childNo
fo:conditional-page-master-referenceExtendedNoUse the page-master referenced in the first fo:conditional-page-master-reference childNo
fo:layout-master-setBasicYes-N/A
fo:simple-page-masterBasicYes-N/A
fo:region-bodyBasicYes-N/A
fo:region-beforeExtendedNoInclude after content of body region is placedNo
fo:region-afterExtendedNoInclude after content of body region is placed.No
fo:region-startExtendedNoInclude after content of body region is placedNo
fo:region-endExtendedNoInclude after content of body region is placedNo
fo:declarationsBasicYes-N/A
fo:color-profileExtendedNoIgnore, use the sRGB fallback of the rgb-icc functionNo
fo:flowBasicYes-N/A
fo:static-contentExtendedNoInclude after content of body region is placedNo
fo:titleExtendedNoInclude before content of body region is placedNo

Block Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:blockBasicYes-N/A
fo:block-containerExtendedNoDisplay indication that content cannot be correctly renderedNo

Inline Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:bidi-overrideExtendedYesDisplay indication that content cannot be correctly rendered.N/A
fo:characterBasicYes-N/A
fo:initial-property-setExtendedNoIgnore any properties specified on this object.Yes
fo:external-graphicBasicYes. Supported formats determined by underlying graphics library.-N/A
fo:instream-foreign-objectExtendedNoDisplay an indication that content cannot be correctly rendered.No
fo:inlineBasicYes-N/A
fo:inline-containerExtendedNoDisplay indication that content cannot be correctly rendered. No
fo:leaderBasicNo-N/A
fo:page-numberBasicNo-N/A
fo:page-number-citationExtendedNoDisplay an indication that content cannot be correctly rendered.No

Table Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:table-and-captionBasicNo-N/A
fo:tableBasicYes-N/A
fo:table-columnBasicYes-N/A
fo:table-captionExtendedNo
  • 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"

No
fo:table-headerBasicNo-N/A
fo:table-footerExtendedNoPlace at end of table. No
fo:table-bodyBasicYes-N/A
fo:table-rowBasicYes-N/A
fo:table-cellBasicYes-N/A

List Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:list-blockBasicYes-N/A
fo:list-itemBasicYes-N/A
fo:list-item-bodyBasicYes-N/A
fo:list-item-labelExtendedYesLabels that break across multiple lines are treated as separate blocks before list-item-body. N/A

Link and Multi Formatting Objects

xmlroff is a non-interactive media formatter. Only the fallback treatment for the interactive media formatting objects will be implemented.

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:basic-linkExtendedNoPromote content to parent formatting object.No
fo:multi-switchExtended. Need not be implemented for extended conformance for non-interactive mediaNo For basic conformance and extended conformance for non-interactive media: utilize the contents of the first eligible multi-case formatting object.No
fo:multi-caseBasic Needed as wrapper for fallback for multi-switchNo-N/A
fo:multi-toggleExtended. Need not be implemented for extended conformance for non-interactive mediaNo For basic conformance and extended conformance for non-interactive media: promote content to parent formatting object.No
fo:multi-propertiesExtended. Need not be implemented for extended conformance for non-interactive mediaNo For basic conformance and extended conformance for non-interactive media: promote content to parent formatting object.No
fo:multi-property-set Extended. Need not be implemented for extended conformance for non-interactive mediaNo For basic conformance and extended conformance for non-interactive media: ignore.No

Out-of-line Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:floatExtendedNoPlace inline.No
fo:footnoteExtendedNoPlace inline.No
fo:footnote-bodyExtendedNoPlace inline.No

Other Formatting Objects

Formatting ObjectLevelxmlroffFallbackxmlroff
fo:wrapperBasicYes-N/A
fo:markerExtendedNoIgnore.Yes
fo:retrieve-markerExtendedNoDisplay indication that content cannot be correctly rendered.No

Properties

PropertyValuesLevelxmlroff
absolute-positionauto | absolute | fixed | inheritCompleteNo
active-statelink | visited | active | hover | focusExtendedN/A
alignment-adjustauto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length> | inheritBasicYes
alignment-baselineauto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | inheritBasicYes
auto-restoretrue | falseExtendedN/A
azimuth<angle> | [[ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards | inheritBasicN/A
background[<background-color> || <background-image> || <background-repeat> || <background-attachment> || <background-position> ]] | inheritCompleteNo
background-attachmentscroll | fixed | inheritExtendedNo
background-color<color> | transparent | inheritBasicYes
background-image<uri-specification> | none | inheritExtendedNo
background-position[ [<percentage> | <length> ]{1,2} | [ [top | center | bottom] || [left | center | right] ] ] | inheritCompleteNo
background-position-horizontal<percentage> | <length> | left | center | right | inheritExtendedNo
background-position-vertical<percentage> | <length> | top | center | bottom | inheritExtendedNo
background-repeatrepeat | repeat-x | repeat-y | no-repeat | inheritExtendedNo
baseline-shiftbaseline | sub | super | <percentage> | <length> | inheritBasicYes
blank-or-not-blankblank | not-blank | any | inheritExtendedNo
block-progression-dimensionauto | <length> | <percentage> | <length-range> | inheritBasicYes
border[ <border-width> || <border-style> || <color> ] | inheritCompleteNo. Use individual properties instead.
border-after-color<color> | inheritBasicYes
border-after-precedenceforce | <integer> | inheritBasicNo
border-after-style<border-style> | inheritBasicYes
border-after-width<border-width> | <length-conditional> | inheritBasicYes
border-before-color<color> | inheritBasicYes
border-before-precedenceforce | <integer> | inheritBasicNo
border-before-style<border-style> | inheritBasicYes
border-before-width<border-width> | <length-conditional> | inheritBasicYes
border-bottom[ <border-width> || <border-style> || <color> ] | inheritCompleteNo. Use individual properties instead.
border-bottom-color<color> | inheritBasicYes
border-bottom-style<border-style> | inheritBasicYes
border-bottom-width<border-width> | inheritBasicYes
border-collapsecollapse | collapse-with-precedence | separate | inheritExtendedNo
border-color[ <color> | transparent ]{1,4} | inheritCompleteNo. Use individual properties instead.
border-end-color<color> | inheritBasicYes
border-end-precedenceforce | <integer> | inheritBasicNo
border-end-style<border-style> | inheritBasicYes
border-end-width<border-width> | <length-conditional> | inheritBasicYes
border-left[ <border-width> || <border-style> || <color> ] | inheritCompleteNo. Use individual properties instead.
border-left-color<color> | inheritBasicYes
border-left-style<border-style> | inheritBasicYes
border-left-width<border-width> | inheritBasicYes
border-right[ <border-width> || <border-style> || <color> ] | inheritCompleteNo. Use individual properties instead.
border-right-color<color> | inheritBasicYes
border-right-style<border-style> | inheritBasicYes
border-right-width<border-width> | inheritBasicYes
border-separation<length-bp-ip-direction> | inheritExtendedNo
border-spacing<length> <length>? | inheritCompleteNo
border-start-color<color> | inheritBasicYes
border-start-precedenceforce | <integer> | inheritBasicNo
border-start-style<border-style> | inheritBasicYes
border-start-width<border-width> | <length-conditional> | inheritBasicYes
border-style<border-style>{1,4} | inheritCompleteNo. Use individual properties instead.
border-top[ <border-width> || <border-style> || <color> ] | inheritCompleteNo. Use individual properties instead.
border-top-color<color> | inheritBasicYes
border-top-style<border-style> | inheritBasicYes
border-top-width<border-width> | inheritBasicYes
border-width<border-width>{1,4} | inheritCompleteNo. Use individual properties instead.
bottom<length> | <percentage> | auto | inheritExtendedNo. Use individual properties instead.
break-afterauto | column | page | even-page | odd-page | inheritBasicYes
break-beforeauto | column | page | even-page | odd-page | inheritBasicYes
caption-sidebefore | after | start | end | top | bottom | left | right | inheritCompleteNo
case-name<name>ExtendedN/A
case-title<string>ExtendedN/A
character<character>BasicYes
clearstart | end | left | right | both | none | inheritExtendedNo
clip<shape> | auto | inheritExtendedNo
color<color> | inheritBasicYes
color-profile-name<name> | inheritExtendedNo
column-count<number> | inheritExtendedNo
column-gap<length> | <percentage> | inheritExtendedNo
column-number<number>BasicYes
column-width<length> | <percentage>BasicYes
content-heightauto | scale-to-fit | <length> | <percentage> | inheritExtendedNo
content-type<string> | autoExtendedNo. Content type is detected automatically by the image library.
content-widthauto | scale-to-fit | <length> | <percentage> | inheritExtendedNo
countrynone | <country> | inheritExtendedNo
cue<cue-before> || <cue-after> | inheritCompleteN/A
cue-after<uri-specification> | none | inherit BasicN/A
cue-before<uri-specification> | none | inherit BasicN/A
destination-placement-offset<length>ExtendedNo
directionltr | rtl | inheritBasicYes
display-alignauto | before | center | after | inheritExtendedNo
dominant-baselineauto | use-script | no-change | reset-size | ideographic | alphabetic | hanging | mathematical | central | middle | text-after-edge | text-before-edge | inheritBasicYes
elevation<angle> | below | level | above | higher | lower | inheritBasicN/A
empty-cellsshow | hide | inheritExtendedNo
end-indent<length> | <percentage> | inheritBasicYes
ends-rowtrue | falseExtendedNo
extent<length> | <percentage> | inheritExtendedNo
external-destination<uri-specification>ExtendedNo
floatbefore | start | end | left | right | none | inheritExtendedNo
flow-name<name>BasicYes
font[ [ <font-style> || <font-variant> || <font-weight> ]? <font-size> [ / <line-height>]? <font-family> ] | caption | icon | menu | message-box | small-caption | status-bar | inheritCompleteNo. Use individual properties instead.
font-family[[ <family-name> | <generic-family> ],]* [<family-name> | <generic-family>] | inheritBasicYes
font-selection-strategyauto | character-by-character | inheritCompleteNo
font-size<absolute-size> | <relative-size> | <length> | <percentage> | inheritBasicYes
font-size-adjust<number> | none | inheritExtendedNo
font-stretchnormal | wider | narrower | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inheritExtendedYes
font-stylenormal | italic | oblique | backslant | inheritBasicYes
font-variantnormal | small-caps | inheritBasicYes
font-weightnormal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inheritBasicYes
force-page-countauto | even | odd | end-on-even | end-on-odd | no-force | inheritExtendedNo
format<string>BasicYes
glyph-orientation-horizontal<angle> | inheritExtendedNo
glyph-orientation-verticalauto | <angle> | inheritExtendedNo
grouping-separator<character>ExtendedYes
grouping-size<number>ExtendedYes
height<length> | <percentage> | auto | inheritBasicYes
hyphenatefalse | true | inheritExtendedNo
hyphenation-character<character> | inheritExtendedNo
hyphenation-keepauto | column | page | inheritExtendedNo
hyphenation-ladder-countno-limit | <number> | inheritExtendedNo
hyphenation-push-character-count<number> | inheritExtendedNo
hyphenation-remain-character-count<number> | inheritExtendedNo
id <id>BasicYes
indicate-destinationtrue | falseExtendedNo
initial-page-numberauto | auto-odd | auto-even | <number> | inheritBasicYes
inline-progression-dimensionauto | <length> | <percentage> | <length-range> | inheritBasicYes
internal-destinationempty string | <idref>ExtendedNo
intrusion-displaceauto | none | line | indent | block | inheritExtendedNo
keep-together<keep> | inheritExtendedYes
keep-with-next<keep> | inheritBasicYes
keep-with-previous<keep> | inheritBasicYes
languagenone | <language> | inheritExtendedNo
last-line-end-indent<length> | <percentage> | inheritExtendedNo
leader-alignmentnone | reference-area | page | inheritExtendedNo
leader-length<length-range> | <percentage> | inheritBasicNo
leader-patternspace | rule | dots | use-content | inheritBasicNo
leader-pattern-widthuse-font-metrics | <length> | <percentage> | inheritExtendedNo
left<length> | <percentage> | auto | inheritExtendedNo
letter-spacingnormal | <length> | <space> | inheritExtendedNo
letter-valueauto | alphabetic | traditionalBasicYes
linefeed-treatmentignore | preserve | treat-as-space | treat-as-zero-width-space | inheritExtendedNo
line-heightnormal | <length> | <number> | <percentage> | <space> | inheritBasicYes
line-height-shift-adjustmentconsider-shifts | disregard-shifts | inheritExtendedNo
line-stacking-strategyline-height | font-height | max-height | inheritBasicYes
margin<margin-width>{1,4} | inherit CompleteNo. Use individual properties instead.
margin-bottom<margin-width> | inheritBasicYes
margin-left<margin-width> | inheritBasicYes
margin-right<margin-width> | inheritBasicYes
margin-top<margin-width> | inheritBasicYes
marker-class-name<name>ExtendedNo
master-name<name>BasicYes
master-reference<name>BasicYes
max-height<length> | <percentage> | none | inherit CompleteNo
maximum-repeats<number> | no-limit | inheritExtendedNo
max-width<length> | <percentage> | none | inheritCompleteNo
media-usageauto | paginate | bounded-in-one-dimension | unboundedExtendedYes
min-height<length> | <percentage> | inherit CompleteNo
min-width<length> | <percentage> | inheritCompleteNo
number-columns-repeated<number>BasicYes
number-columns-spanned<number>BasicYes
number-rows-spanned<number>BasicYes
odd-or-evenodd | even | any | inheritExtendedNo
orphans<integer> | inheritBasicYes
overflowvisible | hidden | scroll | error-if-overflow | auto | inheritBasicNo
padding<padding-width>{1,4} | inheritCompleteYes
padding-after<padding-width> | <length-conditional> | inheritBasicYes
padding-before<padding-width> | <length-conditional> | inheritBasicYes
padding-bottom<padding-width> | inheritBasicYes
padding-end<padding-width> | <length-conditional> | inheritBasicYes
padding-left<padding-width> | inheritBasicYes
padding-right<padding-width> | inheritBasicYes
padding-start<padding-width> | <length-conditional> | inheritBasicYes
padding-top<padding-width> | inheritBasicYes
page-break-afterauto | always | avoid | left | right | inheritCompleteNo
page-break-beforeauto | always | avoid | left | right | inheritCompleteNo
page-break-insideavoid | auto | inheritCompleteNo
page-heightauto | indefinite | <length> | inheritBasicYes
page-positionfirst | last | rest | any | inheritExtendedNo
page-widthauto | indefinite | <length> | inheritBasicYes
pause[<time> | <percentage>]{1,2} | inheritCompleteN/A
pause-after<time> | <percentage> | inheritBasicN/A
pause-before<time> | <percentage> | inheritBasicN/A
pitch<frequency> | x-low | low | medium | high | x-high | inheritBasicN/A
pitch-range<number> | inheritBasicN/A
play-during<uri-specification> mix? repeat? | auto | none | inherit BasicN/A
positionstatic | relative | absolute | fixed | inheritCompleteNo
precedencetrue | false | inheritExtendedNo
provisional-distance-between-starts<length> | <percentage> | inheritBasicYes
provisional-label-separation<length> | <percentage> | inheritBasicYes
reference-orientation 0 | 90 | 180 | 270 | -90 | -180 | -270 | inheritExtendedNo
ref-id<idref> | inheritExtendedNo
region-namexsl-region-body | xsl-region-start | xsl-region-end | xsl-region-before | xsl-region-after | xsl-before-float-separator | xsl-footnote-separator | <name>BasicYes
relative-alignbefore | baseline | inheritExtendedNo
relative-positionstatic | relative | inheritExtendedNo
rendering-intentauto | perceptual | relative-colorimetric | saturation | absolute-colorimetric | inheritExtendedNo
retrieve-boundarypage | page-sequence | documentExtendedNo
retrieve-class-name<name>ExtendedNo
retrieve-positionfirst-starting-within-page | first-including-carryover | last-starting-within-page | last-ending-within-pageExtendedNo
richness<number> | inheritBasicN/A
right<length> | <percentage> | auto | inheritExtendedNo
role<string> | <uri-specification> | none | inheritBasicYes
rule-stylenone | dotted | dashed | solid | double | groove | ridge | inheritBasicNo
rule-thickness<length>BasicNo
scalinguniform | non-uniform | inheritExtendedNo
scaling-methodauto | integer-pixels | resample-any-method | inheritExtendedNo
score-spacestrue | false | inheritExtendedNo
scriptnone | auto | <script> | inheritExtendedNo
show-destinationreplace | newExtendedNo
size<length>{1,2} | auto | landscape | portrait | inheritCompleteNo
source-document<uri-specification> [<uri-specification>]* | none | inheritBasicYes
space-after<space> | inheritBasicYes
space-before<space> | inheritBasicYes
space-end<space> | <percentage> | inheritBasicYes
space-start<space> | <percentage> | inheritBasicYes
spannone | all | inheritExtendedNo
speaknormal | none | spell-out | inheritBasicN/A
speak-headeronce | always | inheritBasicN/A
speak-numeraldigits | continuous | inheritBasicN/A
speak-punctuationcode | none | inheritBasicN/A
speech-rate<number> | x-slow | slow | medium | fast | x-fast | faster | slower | inheritBasicN/A
src<uri-specification> | inheritBasicYes. Only local files are supported at present.
start-indent<length> | <percentage> | inheritBasicYes
starting-stateshow | hideExtendedNo
starts-rowtrue | falseExtendedNo
stress<number> | inheritBasicN/A
suppress-at-line-breakauto | suppress | retain | inheritExtendedNo
switch-toxsl-preceding | xsl-following | xsl-any | <name>[ <name>]*ExtendedNo
table-layoutauto | fixed | inheritExtended'fixed' only
table-omit-footer-at-breaktrue | falseExtendedNo
table-omit-header-at-breaktrue | falseExtendedNo
target-presentation-contextuse-target-processing-context | <uri-specification>ExtendedNo
target-processing-contextdocument-root | <uri-specification>ExtendedNo
target-stylesheetuse-normal-stylesheet | <uri-specification>ExtendedNo
text-alignstart | center | end | justify | inside | outside | left | right | <string> | inheritBasicYes
text-align-lastrelative | start | center | end | justify | inside | outside | left | right | inheritExtendedNo
text-altitudeuse-font-metrics | <length> | <percentage> | inheritExtendedNo
text-decorationnone | [ [ underline | no-underline] || [ overline | no-overline ] || [ line-through | no-line-through ] || [ blink | no-blink ] ] | inheritExtendedNo
text-depthuse-font-metrics | <length> | <percentage> | inheritExtendedNo
text-indent<length> | <percentage> | inheritBasicYes
text-shadownone | [<color> || <length> <length> <length>? ,]* [<color> || <length> <length> <length>?] | inheritExtendedNo
text-transformcapitalize | uppercase | lowercase | none | inheritExtendedNo
top<length> | <percentage> | auto | inheritExtendedNo
treat-as-word-spaceauto | true | false | inheritExtendedNo
unicode-bidinormal | embed | bidi-override | inheritExtendedYes
vertical-alignbaseline | middle | sub | super | text-top | text-bottom | <percentage> | <length> | top | bottom | inheritCompleteNo
visibilityvisible | hidden | collapse | inheritExtendedNo
voice-family[[<specific-voice> | <generic-voice> ],]* [<specific-voice> | <generic-voice> ] | inheritBasicN/A
volume<number> | <percentage> | silent | x-soft | soft | medium | loud | x-loud | inheritBasicN/A
white-spacenormal | pre | nowrap | inheritCompleteNo
white-space-collapsefalse | true | inheritExtendedNo
white-space-treatmentignore | preserve | ignore-if-before-linefeed | ignore-if-after-linefeed | ignore-if-surrounding-linefeed | inheritExtendedNo
widows<integer> | inheritBasicYes
width<length> | <percentage> | auto | inheritBasicNo
word-spacingnormal | <length> | <space> | inheritExtendedNo
wrap-optionno-wrap | wrap | inheritBasicNo
writing-modelr-tb | rl-tb | tb-rl | lr | rl | tb | inheritBasicYes
xml:lang<country-language> | inheritCompleteNo
z-indexauto | <integer> | inheritExtendedNo

DocBookLibxslt SourceForge