</p>
</section>
<section>
- <title>The Construction Hierarchy</title>
+ <title>The construction hierarchy</title>
<p>
Properties are resoved in the <strong>FO tree</strong> in a
strictly hierarchical manner. Nodes are detected in the
</dl>
</section>
<section>
- <title>Representing Properties: <property> Classes</title>
+ <title>Representing properties: <property> classes</title>
<section>
<title>Class vs instance</title>
<p>
More particularly, what information is particular to the
<property> classes, and what to the instantiated
objects? The answer to this question depend largely on
- how the <poroperty> objects are used in the context
+ how the <property> objects are used in the context
of layout and Area tree construction. The approach taken
in this implementation is that properties are simply flags
on certain data values associated with FOs. The semantics
</p>
<ul>
<li>
- explicitly, the <strong>PropertyValue</strong> datum of
+ explicitly, the <code>PropertyValue</code> datum of
the property, and
</li>
<li>
<menu label="Properties">
<menu-item label="alt.properties" href="alt-properties.html"/>
<menu-item label="Classes overview" href="classes-overview.html"/>
- <!--
<menu-item label="Properties classes" href="properties-classes.html"/>
<menu-item label="Property parsing" href="propertyExpressions.html"/>
- -->
<menu-item label="Compound types" href="compound-properties.html"/>
<menu-item label="Traits" href="traits.html"/>
</menu>
+ <menu label="Prop class details">
+ <menu-item label="PropertyConsts" href="PropertyConsts-class.html"/>
+ </menu>
<menu label="Other">
<menu-item label="User agent refs" href="user-agent-refs.html"/>
</menu>
<body>
<section>
<title>Properties: packages</title>
- <ul>
- <li>
- org.apache.fop.fo
- <dl>
- <dt><fork href="PropNames.html">PropNames</fork></dt>
- <dd>
- This class maintains an array of <fork href=
- "PropNames.html#propertyNames" >property names</fork>,
- synchronized to a complete set of property name <fork
- href= "PropNames.html#NO_PROPERTY" >constants</fork> for
- indexing property-based arrays. It includes methods to
- <fork href= "PropNames.html#getPropertyName" >convert an
- index to a name</fork> and to <fork href=
- "PropNames.html#getPropertyIndex" >convert a property
- name to an index</fork>.
- </dd>
-
- <dt>
- <fork href= "PropertyConsts.html" >PropertyConsts</fork>
- </dt>
- <dd>
- A singleton instance of <strong>PropertyConsts</strong>
- is created by the static initializer of the <fork href=
- "PropertyConsts.html#pconsts" >pconsts</fork> field.
- Working from the <property> indices defined in
- PropNames, the methods in this class collect and supply
- the values of fields defined in <property> objects
- into arrays.<br/>
-
- The heart of this class in the method <fork href=
- "PropertyConsts.html#setupProperty"
- >setupProperty</fork>, which constructs the
- <property> name from the index, instantiates a
- singleton of the appropriate class, and extracts static
- fields by reflection from that instance into the arrays
- of field values.
- </dd>
-
- <dt><fork href= "PropertySets.html" >PropertySets</fork></dt>
- <dd>
- This class provides a number of
- <strong>ROBitSet</strong>s representing many of the sets
- of properties defined in <em>Section 7</em> of the
- specification. Note that the <em>Border</em>,
- <em>Padding</em> and <em>Background</em> sets are
- defined separately.
- </dd>
-
- <dt><fork href= "FOPropertySets.html"
- >FOPropertySets</fork></dt>
- <dd>
- This class provides a number of
- <strong>ROBitSet</strong>s representing sets of
- properties which are applicable in particular subtrees
- of the FO tree. These sets are provided so that other
- properties can be ignored during processing of the
- subtrees.
- </dd>
-
- <dt><fork href= "ShorthandPropSets.html"
- >ShorthandPropSets</fork></dt>
- <dd>
- This class contains arrays of <fork href=
- "ShorthandPropSets.html#shorthands" >shorthand property
- indices</fork> and <fork href=
- "ShorthandPropSets.html#compounds" >compound property
- indices</fork>, and <strong>ROBitSet</strong>s
- representing the expansion sets of these shorthands and
- compounds. Various methods useful in the expansion of
- these properties are also included.
- </dd>
-
- <dt>FOAttributes</dt>
- <dd></dd>
- </dl>
- </li>
- <li>
- org.apache.fop.fo.properties
- <dl>
- <dt>Property</dt>
- <dd>
- The base class for all individual <property> classes.
- </dd>
- <dt>ColumnNumber</dt>
- <dd>
- The actual <property> class with the lowest index
- number, followed in the oindex order by properties
- required for further processing, e.g. FontSize.
- </dd>
- <dt>....</dt>
- <dd>....</dd>
- <dt>Background</dt>
- <dd>
- First in index order of the remainining shorthand
- properties, followed in index order by all other
- remaining shorthands.
- </dd>
- <dt>....</dt>
- <dd>....</dd>
- <dt>AbsolutePosition</dt>
- <dd>
- First in index order of the remaining properties.
- Within this ordering, compound properties precede their
- expansion properties, and corresponding relative
- properties precede corresponding absolute properties.
- </dd>
- <dt>....</dt>
- <dd>....</dd>
- <dt>ZIndex</dt>
- <dd>
- The <property> class with the highest index
- number.
- </dd>
- </dl>
- </li>
- <li>
- org.apache.fop.fo.expr
- <dl>
- <dt><fork href= "PropertyTokenizer.html"
- >PropertyTokenizer</fork></dt>
- <dd>
- The tokenizer for the <property> expression
- parser. Defines a set of <fork href=
- "PropertyTokenizer.html#EOF" >token constants</fork> and
- returns these with associated token values.
- </dd>
-
- <dt><fork href= "PropertyParser.html"
- >PropertyParser</fork></dt>
- <dd>
- This extends <strong>PropertyTokenizer</strong>. It
- parses <property> expressions on the basis of the
- tokens passed to it by its superclass, generating
- <strong>PropertyValue</strong>s, including
- <strong>PropertyValueList</strong>s.
- </dd>
-
- <dt>PropertyException</dt>
- <dd>
- The basic class for all <property>-related
- exceptions. It extends
- <strong>FOPException</strong>. It is housed in this
- package by historical accident.
- </dd>
-
- <dt>
- DataTypeNotImplementedException<br/>
- FunctionNotImplementedException<br/>
- PropertyNotImplementedException
- </dt>
- <dd>
- A set of particular exceptions extending
- <strong>PropertyException</strong>. Also in this package
- by accident.
- </dd>
-
- </dl>
- </li>
- <li>org.apache.fop.datatypes</li>
- <li>org.apache.fop.datatypes.indirect</li>
- </ul>
+ <section>
+ <title>org.apache.fop.fo</title>
+ <dl>
+ <dt>
+ <fork href="PropNames.html"><em>PropNames</em></fork>
+ </dt>
+ <dd>
+ This class maintains an array of <fork href=
+ "PropNames.html#propertyNames" >property names</fork>,
+ synchronized to a complete set of property name <fork
+ href= "PropNames.html#NO_PROPERTY" >constants</fork> for
+ indexing property-based arrays. It includes methods to
+ <fork href= "PropNames.html#getPropertyName" >convert an
+ index to a name</fork> and to <fork href=
+ "PropNames.html#getPropertyIndex" >convert a property name
+ to an index</fork>.
+ </dd>
+
+ <dt>
+ <fork href= "PropertyConsts-class.html"
+ ><em>PropertyConsts</em></fork>
+ </dt>
+ <dd>
+ A singleton instance of <code>PropertyConsts</code> is
+ created by the static initializer of the <fork href=
+ "PropertyConsts.html#pconsts" >pconsts</fork> field.
+ Working from the <property> indices defined in
+ PropNames, the methods in this class collect and supply
+ the values of fields defined in <property> objects
+ into arrays.<br/>
+
+ The heart of this class in the method <fork href=
+ "PropertyConsts.html#setupProperty" >setupProperty</fork>,
+ which constructs the <property> name from the index,
+ instantiates a singleton of the appropriate class, and
+ extracts static fields by reflection from that instance
+ into the arrays of field values.
+ </dd>
+
+ <dt>
+ <fork href= "PropertySets.html"
+ ><em>PropertySets</em></fork>
+ </dt>
+ <dd>
+ This class provides a number of
+ <code>ROBitSet</code>s representing many of the sets
+ of properties defined in <em>Section 7</em> of the
+ specification. Note that the <em>Border</em>,
+ <em>Padding</em> and <em>Background</em> sets are
+ defined separately.
+ </dd>
+
+ <dt><fork href= "FOPropertySets.html"
+ ><em>FOPropertySets</em></fork></dt>
+ <dd>
+ This class provides a number of
+ <code>ROBitSet</code>s representing sets of
+ properties which are applicable in particular subtrees
+ of the FO tree. These sets are provided so that other
+ properties can be ignored during processing of the
+ subtrees.
+ </dd>
+
+ <dt><fork href= "ShorthandPropSets.html"
+ ><em>ShorthandPropSets</em></fork></dt>
+ <dd>
+ This class contains arrays of <fork href=
+ "ShorthandPropSets.html#shorthands" >shorthand property
+ indices</fork> and <fork href=
+ "ShorthandPropSets.html#compounds" >compound property
+ indices</fork>, and <code>ROBitSet</code>s representing
+ the expansion sets of these shorthands and compounds.
+ Various methods useful in the expansion of these
+ properties are also included.
+ </dd>
+
+ <dt>
+ <fork href= "FOAttributes.html"
+ ><em>FOAttributes</em></fork>
+ </dt>
+ <dd>
+ This class manages the attribute set that is associated
+ with a SAX <code>startElement</code> event. <em>fo:</em>
+ namespace attributes are entered into a
+ <code>HashMap</code>, indexed by the <em>fo:</em>
+ <property> index. As other namespaces are
+ encountered, the values are entered into
+ namespace-specific <code>HashMap</code>s, indexed by the
+ <em>local name</em> of the attribute.
+ </dd>
+
+ </dl>
+ </section>
+ <section>
+ <title>org.apache.fop.fo.properties</title>
+ <dl>
+ <dt><em>Property</em></dt>
+ <dd>
+ The base class for all individual <property>
+ classes. There are 320 properties in all.
+ </dd>
+ <dt><em>ColumnNumber</em></dt>
+ <dd>
+ The actual <property> class with the lowest index
+ number, followed in the index order by properties
+ required for further processing, e.g. FontSize.
+ </dd>
+ <dt><em>....</em></dt>
+ <dd>....</dd>
+ <dt><em>Background</em></dt>
+ <dd>
+ First in index order of the remainining shorthand
+ properties, followed in index order by all other
+ remaining shorthands.
+ </dd>
+ <dt><em>....</em></dt>
+ <dd>....</dd>
+ <dt><em>AbsolutePosition</em></dt>
+ <dd>
+ First in index order of the remaining properties.
+ Within this ordering, compound properties precede their
+ expansion properties, and corresponding relative
+ properties precede corresponding absolute properties.
+ </dd>
+ <dt><em>....</em></dt>
+ <dd>....</dd>
+ <dt><em>ZIndex</em></dt>
+ <dd>
+ The <property> class with the highest index
+ number.
+ </dd>
+ </dl>
+ </section>
+ <section>
+ <title>org.apache.fop.fo.expr</title>
+ <dl>
+ <dt><fork href= "PropertyTokenizer.html"
+ ><em>PropertyTokenizer</em></fork></dt>
+ <dd>
+ The tokenizer for the <property> expression parser.
+ Defines a set of <fork href= "PropertyTokenizer.html#EOF"
+ >token constants</fork> and returns these with associated
+ token values.
+ </dd>
+
+ <dt><fork href= "PropertyParser.html"
+ ><em>PropertyParser</em></fork></dt>
+ <dd>
+ This extends <code>PropertyTokenizer</code>. It
+ parses <property> expressions on the basis of the
+ tokens passed to it by its superclass, generating
+ <code>PropertyValue</code>s, including
+ <code>PropertyValueList</code>s.
+ </dd>
+
+ <dt><em>PropertyException</em></dt>
+ <dd>
+ The basic class for all <property>-related
+ exceptions. It extends
+ <code>FOPException</code>. It is housed in this
+ package by historical accident.
+ </dd>
+
+ <dt>
+ <em>DataTypeNotImplementedException</em><br/>
+ <em>FunctionNotImplementedException</em><br/>
+ <em>PropertyNotImplementedException</em>
+ </dt>
+ <dd>
+ A set of particular exceptions extending
+ <code>PropertyException</code>. Also in this package
+ by accident.
+ </dd>
+
+ </dl>
+ </section>
+ <section>
+ <title>org.apache.fop.datatypes</title>
+ <dl>
+ <dt>
+ <fork href= "PropertyValue.html"
+ ><em>PropertyValue</em></fork>
+ </dt>
+ <dd>
+ An <em>interface</em> which all
+ <code>PropertyValue</code> classes must implement. In
+ addition to a few methods, <code>PropertyValue</code>
+ defines the set of <fork href=
+ "PropertyValue.html#NO_TYPE" >constants</fork> which the
+ <code>getType()</code> method may return; i.e. the valid
+ set of <code>PropertyValue</code> types.
+ </dd>
+
+ <dt><em>AbstractPropertyValue</em></dt>
+ <dd>
+ An abstract implementation of the
+ <code>PropertyValue</code> interface. Most actual
+ property value classes extend
+ <code>AbstractPropertyValue</code>.
+ </dd>
+
+ <dt><em>PropertyValueList</em></dt>
+ <dd>
+ This class extends <code>LinkedList</code> and implements
+ <code>PropertyValue</code>. It is used whenever the
+ process of resolving a property expression yields a list
+ of <code>PropertyValue</code> elements; notably during the
+ processing of shorthands and "compound" properties.
+ </dd>
+
+ <dt><em>StringType</em></dt>
+ <dd>
+ A basic type extending <code>AbstractPropertyValue</code>.
+ Extended by <code>NCName</code>.
+ </dd>
+
+ <dt><em>NCName</em></dt>
+ <dd>
+ Extends <code>StringType</code> to represent
+ NCName strings.
+ </dd>
+
+ <dt><em>EnumType</em></dt>
+ <dd>
+ Extends <code>AbstractPropertyValue</code> to represented
+ enumerated types.
+ </dd>
+
+ <dt>
+ <em>Other types</em>
+ </dt>
+ <dd>
+ All other types extend one of the above classes.
+ </dd>
+
+ </dl>
+ </section>
+ <section>
+ <title>org.apache.fop.datatypes.indirect</title>
+ <dl>
+ <dt><em>IndirectValue</em></dt>
+ <dd>
+ The base type for all indirect value types; extends
+ <code>AbstractPropertyValue</code>.
+ </dd>
+ </dl>
+ </section>
</section>
- <p>
- <strong>Previous:</strong> <link href= "alt-properties.html"
- >alt.properties</link>
- </p>
+ <p>
+ <strong>Previous:</strong> <link href= "alt-properties.html"
+ >alt.properties</link>
+ </p>
<!--
<p>
<strong>Next:</strong> <link href= "properties-classes.html"
<document>
<header>
- <title>Properties$classes</title>
+ <title>Properties classes</title>
<authors>
<person name="Peter B. West" email="pbwest@powerup.com.au"/>
</authors>
</header>
<body>
<section>
- <title>fo.Properties and the nested properties classes</title>
- <figure src= "images/design/alt.design/PropertyClasses.png" alt=
- "Nested property and top-level classes"/>
+ <title>The <em>org.apache.fop.fo.properties</em> classes</title>
<section>
- <title>Nested property classes</title>
+ <title>Introduction</title>
<p>
- Given the intention that individual properties have only a
- <em>virtual</em> instantiation in the arrays of
- <code>PropertyConsts</code>, these classes are intended to
+ In respect of their fields and data structures, the
+ <property> classes have a <em>virtual</em>
+ instantiation in the arrays of the <em>singleton</em> <fork
+ href= "PropertyConsts.html"
+ ><code>PropertyConsts</code></fork> object, created during
+ the <fork href= "PropertyConsts.html#pconsts" >static
+ initialization</fork> of the class. The methods of these
+ classes are accessed through these classes are intended to
remain as repositories of static data and methods. The name
of each property is entered in the
<code>PropNames.propertyNames</code> array of
"http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-forrest/src/resources/schema/dtd/document-v11.dtd">
<document>
- <header>
- <title>Property Expression Parsing</title>
+ <header>
+ <title>Property Expression Parsing</title>
<authors>
- <person id="pbw" name="Peter B. West" email="pbwest@powerup.com.au"/>
+ <person id="pbw" name="Peter B. West" email="pbwest@powerup.com.au"/>
</authors>
- </header>
- <body>
+ </header>
+ <body>
<section>
<title>Property expression parsing</title>
<note>
- The following discussion of the experiments with alternate
- property expression parsing is very much a work in progress,
- and subject to sudden changes.
+ The following discussion of the experiments with alternate
+ property expression parsing is very much a work in progress,
+ and subject to sudden changes.
</note>
<p>
- The parsing of property value expressions is handled by two
- closely related classes: <code>PropertyTokenizer</code> and its
- subclass, <code>PropertyParser</code>.
- <code>PropertyTokenizer</code>, as the name suggests, handles
- the tokenizing of the expression, handing <em>tokens</em>
- back to its subclass,
- <code>PropertyParser</code>. <code>PropertyParser</code>, in
- turn, returns a <code>PropertyValueList</code>, a list of
- <code>PropertyValue</code>s.
+ The parsing of property value expressions is handled by two
+ closely related classes: <code>PropertyTokenizer</code> and its
+ subclass, <code>PropertyParser</code>.
+ <code>PropertyTokenizer</code>, as the name suggests, handles
+ the tokenizing of the expression, handing <em>tokens</em>
+ back to its subclass,
+ <code>PropertyParser</code>. <code>PropertyParser</code>, in
+ turn, returns a <code>PropertyValueList</code>, a list of
+ <code>PropertyValue</code>s.
</p>
<p>
- The tokenizer and parser rely in turn on the datatype
- definition from the <code>org.apache.fop.datatypes</code>
- package and the datatype <code>static final int</code>
- constants from <code>PropertyConsts</code>.
+ The tokenizer and parser rely in turn on the datatype
+ definition from the <code>org.apache.fop.datatypes</code>
+ package and the datatype <code>static final int</code>
+ constants from <code>PropertyConsts</code>.
</p>
<section>
<title>Data types</title>
- <p>
- The data types currently defined in
- <code>org.apache.fop.datatypes</code> include:
- </p>
- <table>
- <tr><th colspan="2">Numbers and lengths</th></tr>
- <tr>
- <th>Numeric</th>
- <td colspan="3">
- The fundamental numeric data type. <em>Numerics</em> of
- various types are constructed by the classes listed
- below.
- </td>
- </tr>
- <tr>
- <td/>
- <th colspan="3">Constructor classes for <em>Numeric</em></th>
- </tr>
- <tr>
- <td/><td>Angle</td>
- <td colspan="2">In degrees(deg), gradients(grad) or
- radians(rad)</td>
- </tr>
- <tr>
- <td/><td>Ems</td>
- <td colspan="2">Relative length in <em>ems</em></td>
- </tr>
- <tr>
- <td/><td>Frequency</td>
- <td colspan="2">In hertz(Hz) or kilohertz(kHz)</td>
- </tr>
- <tr>
- <td/><td>IntegerType</td><td/>
- </tr>
- <tr>
- <td/><td>Length</td>
- <td colspan="2">In centimetres(cm), millimetres(mm),
- inches(in), points(pt), picas(pc) or pixels(px)</td>
- </tr>
- <tr>
- <td/><td>Percentage</td><td/>
- </tr>
- <tr>
- <td/><td>Time</td>
- <td>In seconds(s) or milliseconds(ms)</td>
- </tr>
- <tr><th colspan="2">Strings</th></tr>
- <tr>
- <th>StringType</th>
- <td colspan="3">
- Base class for data types which result in a <em>String</em>.
- </td>
- </tr>
- <tr>
- <td/><th>Literal</th>
- <td colspan="2">
- A subclass of <em>StringType</em> for literals which
- exceed the constraints of an <em>NCName</em>.
- </td>
- </tr>
- <tr>
- <td/><th>MimeType</th>
- <td colspan="2">
- A subclass of <em>StringType</em> for literals which
- represent a mime type.
- </td>
- </tr>
- <tr>
- <td/><th>UriType</th>
- <td colspan="2">
- A subclass of <em>StringType</em> for literals which
- represent a URI, as specified by the argument to
- <em>url()</em>.
- </td>
- </tr>
- <tr>
- <td/><th>NCName</th>
- <td colspan="2">
- A subclass of <em>StringType</em> for literals which
- meet the constraints of an <em>NCName</em>.
- </td>
- </tr>
- <tr>
- <td/><td/><th>Country</th>
- <td>An RFC 3066/ISO 3166 country code.</td>
- </tr>
- <tr>
- <td/><td/><th>Language</th>
- <td>An RFC 3066/ISO 639 language code.</td>
- </tr>
- <tr>
- <td/><td/><th>Script</th>
- <td>An ISO 15924 script code.</td>
- </tr>
- <tr><th colspan="2">Enumerated types</th></tr>
- <tr>
- <th>EnumType</th>
- <td colspan="3">
- An integer representing one of the tokens in a set of
- enumeration values.
- </td>
- </tr>
- <tr>
- <td/><th>MappedEnumType</th>
- <td colspan="2">
- A subclass of <em>EnumType</em>. Maintains a
- <em>String</em> with the value to which the associated
- "raw" enumeration token maps. E.g., the
- <em>font-size</em> enumeration value "medium" maps to
- the <em>String</em> "12pt".
- </td>
- </tr>
- <tr><th colspan="2">Colors</th></tr>
- <tr>
- <th>ColorType</th>
- <td colspan="3">
- Maintains a four-element array of float, derived from
- the name of a standard colour, the name returned by a
- call to <em>system-color()</em>, or an RGB
- specification.
- </td>
- </tr>
- <tr><th colspan="2">Fonts</th></tr>
- <tr>
- <th>FontFamilySet</th>
- <td colspan="3">
- Maintains an array of <em>String</em>s containing a
- prioritized list of possibly generic font family names.
- </td>
- </tr>
- <tr><th colspan="2">Pseudo-types</th></tr>
- <tr>
- <td colspan="4">
- A variety of pseudo-types have been defined as
- convenience types for frequently appearing enumeration
- token values, or for other special purposes.
- </td>
- </tr>
- <tr>
- <th>Inherit</th>
- <td colspan="3">
- For values of <em>inherit</em>.
- </td>
- </tr>
- <tr>
- <th>Auto</th>
- <td colspan="3">
- For values of <em>auto</em>.
- </td>
- </tr>
- <tr>
- <th>None</th>
- <td colspan="3">
- For values of <em>none</em>.
- </td>
- </tr>
- <tr>
- <th>Bool</th>
- <td colspan="3">
- For values of <em>true/false</em>.
- </td>
- </tr>
- <tr>
- <th>FromNearestSpecified</th>
- <td colspan="3">
- Created to ensure that, when associated with
- a shorthand, the <em>from-nearest-specified-value()</em>
- core function is the sole component of the expression.
- </td>
- </tr>
- <tr>
- <th>FromParent</th>
- <td colspan="3">
- Created to ensure that, when associated with
- a shorthand, the <em>from-parent()</em>
- core function is the sole component of the expression.
- </td>
- </tr>
- </table>
+ <p>
+ The data types currently defined in
+ <code>org.apache.fop.datatypes</code> include:
+ </p>
+ <table>
+ <tr><th colspan="2">Numbers and lengths</th></tr>
+ <tr>
+ <th>Numeric</th>
+ <td colspan="3">
+ The fundamental numeric data type. <em>Numerics</em> of
+ various types are constructed by the classes listed
+ below.
+ </td>
+ </tr>
+ <tr>
+ <td/>
+ <th colspan="3">Constructor classes for <em>Numeric</em></th>
+ </tr>
+ <tr>
+ <td/><td>Angle</td>
+ <td colspan="2">In degrees(deg), gradients(grad) or
+ radians(rad)</td>
+ </tr>
+ <tr>
+ <td/><td>Ems</td>
+ <td colspan="2">Relative length in <em>ems</em></td>
+ </tr>
+ <tr>
+ <td/><td>Frequency</td>
+ <td colspan="2">In hertz(Hz) or kilohertz(kHz)</td>
+ </tr>
+ <tr>
+ <td/><td>IntegerType</td><td/>
+ </tr>
+ <tr>
+ <td/><td>Length</td>
+ <td colspan="2">In centimetres(cm), millimetres(mm),
+ inches(in), points(pt), picas(pc) or pixels(px)</td>
+ </tr>
+ <tr>
+ <td/><td>Percentage</td><td/>
+ </tr>
+ <tr>
+ <td/><td>Time</td>
+ <td>In seconds(s) or milliseconds(ms)</td>
+ </tr>
+ <tr><th colspan="2">Strings</th></tr>
+ <tr>
+ <th>StringType</th>
+ <td colspan="3">
+ Base class for data types which result in a <em>String</em>.
+ </td>
+ </tr>
+ <tr>
+ <td/><th>Literal</th>
+ <td colspan="2">
+ A subclass of <em>StringType</em> for literals which
+ exceed the constraints of an <em>NCName</em>.
+ </td>
+ </tr>
+ <tr>
+ <td/><th>MimeType</th>
+ <td colspan="2">
+ A subclass of <em>StringType</em> for literals which
+ represent a mime type.
+ </td>
+ </tr>
+ <tr>
+ <td/><th>UriType</th>
+ <td colspan="2">
+ A subclass of <em>StringType</em> for literals which
+ represent a URI, as specified by the argument to
+ <em>url()</em>.
+ </td>
+ </tr>
+ <tr>
+ <td/><th>NCName</th>
+ <td colspan="2">
+ A subclass of <em>StringType</em> for literals which
+ meet the constraints of an <em>NCName</em>.
+ </td>
+ </tr>
+ <tr>
+ <td/><td/><th>Country</th>
+ <td>An RFC 3066/ISO 3166 country code.</td>
+ </tr>
+ <tr>
+ <td/><td/><th>Language</th>
+ <td>An RFC 3066/ISO 639 language code.</td>
+ </tr>
+ <tr>
+ <td/><td/><th>Script</th>
+ <td>An ISO 15924 script code.</td>
+ </tr>
+ <tr><th colspan="2">Enumerated types</th></tr>
+ <tr>
+ <th>EnumType</th>
+ <td colspan="3">
+ An integer representing one of the tokens in a set of
+ enumeration values.
+ </td>
+ </tr>
+ <tr>
+ <td/><th>MappedEnumType</th>
+ <td colspan="2">
+ A subclass of <em>EnumType</em>. Maintains a
+ <em>String</em> with the value to which the associated
+ "raw" enumeration token maps. E.g., the
+ <em>font-size</em> enumeration value "medium" maps to
+ the <em>String</em> "12pt".
+ </td>
+ </tr>
+ <tr><th colspan="2">Colors</th></tr>
+ <tr>
+ <th>ColorType</th>
+ <td colspan="3">
+ Maintains a four-element array of float, derived from
+ the name of a standard colour, the name returned by a
+ call to <em>system-color()</em>, or an RGB
+ specification.
+ </td>
+ </tr>
+ <tr><th colspan="2">Fonts</th></tr>
+ <tr>
+ <th>FontFamilySet</th>
+ <td colspan="3">
+ Maintains an array of <em>String</em>s containing a
+ prioritized list of possibly generic font family names.
+ </td>
+ </tr>
+ <tr><th colspan="2">Pseudo-types</th></tr>
+ <tr>
+ <td colspan="4">
+ A variety of pseudo-types have been defined as
+ convenience types for frequently appearing enumeration
+ token values, or for other special purposes.
+ </td>
+ </tr>
+ <tr>
+ <th>Inherit</th>
+ <td colspan="3">
+ For values of <em>inherit</em>.
+ </td>
+ </tr>
+ <tr>
+ <th>Auto</th>
+ <td colspan="3">
+ For values of <em>auto</em>.
+ </td>
+ </tr>
+ <tr>
+ <th>None</th>
+ <td colspan="3">
+ For values of <em>none</em>.
+ </td>
+ </tr>
+ <tr>
+ <th>Bool</th>
+ <td colspan="3">
+ For values of <em>true/false</em>.
+ </td>
+ </tr>
+ <tr>
+ <th>FromNearestSpecified</th>
+ <td colspan="3">
+ Created to ensure that, when associated with
+ a shorthand, the <em>from-nearest-specified-value()</em>
+ core function is the sole component of the expression.
+ </td>
+ </tr>
+ <tr>
+ <th>FromParent</th>
+ <td colspan="3">
+ Created to ensure that, when associated with
+ a shorthand, the <em>from-parent()</em>
+ core function is the sole component of the expression.
+ </td>
+ </tr>
+ </table>
</section>
<section>
<title>Tokenizer</title>
- <p>
- The tokenizer returns one of the following token
- values:
- </p>
- <source>
- static final int
- EOF = 0
- ,NCNAME = 1
- ,MULTIPLY = 2
- ,LPAR = 3
- ,RPAR = 4
- ,LITERAL = 5
- ,FUNCTION_LPAR = 6
- ,PLUS = 7
- ,MINUS = 8
- ,MOD = 9
- ,DIV = 10
- ,COMMA = 11
- ,PERCENT = 12
+ <p>
+ The tokenizer returns one of the following token
+ values:
+ </p>
+ <source>
+ static final int
+ EOF = 0
+ ,NCNAME = 1
+ ,MULTIPLY = 2
+ ,LPAR = 3
+ ,RPAR = 4
+ ,LITERAL = 5
+ ,FUNCTION_LPAR = 6
+ ,PLUS = 7
+ ,MINUS = 8
+ ,MOD = 9
+ ,DIV = 10
+ ,COMMA = 11
+ ,PERCENT = 12
,COLORSPEC = 13
- ,FLOAT = 14
- ,INTEGER = 15
- ,ABSOLUTE_LENGTH = 16
- ,RELATIVE_LENGTH = 17
- ,TIME = 18
- ,FREQ = 19
- ,ANGLE = 20
- ,INHERIT = 21
- ,AUTO = 22
- ,NONE = 23
- ,BOOL = 24
- ,URI = 25
- ,MIMETYPE = 26
- // NO_UNIT is a transient token for internal use only. It is
- // never set as the end result of parsing a token.
- ,NO_UNIT = 27
- ;
- </source>
- <p>
- Most of these tokens are self-explanatory, but a few need
- further comment.
- </p>
- <dl>
- <dt>AUTO</dt>
- <dd>
- Because of its frequency of occurrence, and the fact that
- it is always the <em>initial value</em> for any property
- which supports it, AUTO has been promoted into a
- pseudo-type with its on datatype class. Therefore, it is
- also reported as a token.
- </dd>
- <dt>NONE</dt>
- <dd>
- Similarly to AUTO, NONE has been promoted to a pseudo-type
- because of its frequency.
- </dd>
- <dt>BOOL</dt>
- <dd>
- There is a <em>de facto</em> boolean type buried in the
- enumeration types for many of the properties. It had been
- specified as a type in its own right in this code.
- </dd>
- <dt>MIMETYPE</dt>
- <dd>
- The property <code>content-type</code> introduces this
- complication. It can have two values of the form
- <strong>content-type:</strong><em>mime-type</em>
- (e.g. <code>content-type="content-type:xml/svg"</code>) or
- <strong>namespace-prefix:</strong><em>prefix</em>
- (e.g. <code>content-type="namespace-prefix:svg"</code>). The
- experimental code reduces these options to the payload
- in each case: an <code>NCName</code> in the case of a
- namespace prefix, and a MIMETYPE in the case of a
- content-type specification. <code>NCName</code>s cannot
- contain a "/".
- </dd>
- </dl>
+ ,FLOAT = 14
+ ,INTEGER = 15
+ ,ABSOLUTE_LENGTH = 16
+ ,RELATIVE_LENGTH = 17
+ ,TIME = 18
+ ,FREQ = 19
+ ,ANGLE = 20
+ ,INHERIT = 21
+ ,AUTO = 22
+ ,NONE = 23
+ ,BOOL = 24
+ ,URI = 25
+ ,MIMETYPE = 26
+ // NO_UNIT is a transient token for internal use only. It is
+ // never set as the end result of parsing a token.
+ ,NO_UNIT = 27
+ ;
+ </source>
+ <p>
+ Most of these tokens are self-explanatory, but a few need
+ further comment.
+ </p>
+ <dl>
+ <dt>AUTO</dt>
+ <dd>
+ Because of its frequency of occurrence, and the fact that
+ it is always the <em>initial value</em> for any property
+ which supports it, AUTO has been promoted into a
+ pseudo-type with its on datatype class. Therefore, it is
+ also reported as a token.
+ </dd>
+ <dt>NONE</dt>
+ <dd>
+ Similarly to AUTO, NONE has been promoted to a pseudo-type
+ because of its frequency.
+ </dd>
+ <dt>BOOL</dt>
+ <dd>
+ There is a <em>de facto</em> boolean type buried in the
+ enumeration types for many of the properties. It had been
+ specified as a type in its own right in this code.
+ </dd>
+ <dt>MIMETYPE</dt>
+ <dd>
+ The property <code>content-type</code> introduces this
+ complication. It can have two values of the form
+ <strong>content-type:</strong><em>mime-type</em>
+ (e.g. <code>content-type="content-type:xml/svg"</code>) or
+ <strong>namespace-prefix:</strong><em>prefix</em>
+ (e.g. <code>content-type="namespace-prefix:svg"</code>). The
+ experimental code reduces these options to the payload
+ in each case: an <code>NCName</code> in the case of a
+ namespace prefix, and a MIMETYPE in the case of a
+ content-type specification. <code>NCName</code>s cannot
+ contain a "/".
+ </dd>
+ </dl>
</section>
<section>
<title>Parser</title>
- <p>
- The parser retuns a <code>PropertyValueList</code>,
- necessary because of the possibility that a list of
- <code>PropertyValue</code> elements may be returned from the
- expressions of soem properties.
- </p>
- <p>
- <code>PropertyValueList</code>s may contain
- <code>PropertyValue</code>s or other
- <code>PropertyValueList</code>s. This latter provision is
- necessitated for the peculiar case of of
- <em>text-shadow</em>, which may contain whitespace separated
- sublists of either two or three elements, separated from one
- another by commas. To accommodate this peculiarity, comma
- separated elements are added to the top-level list, while
- whitespace separated values are always collected into
- sublists to be added to the top-level list.
- </p>
- <p>
- Other special cases include the processing of the core
- functions <code>from-parent()</code> and
- <code>from-nearest-specified-value()</code> when these
- function calls are assigned to a shorthand property, or used
- with a shorthand property name as an argument. In these
- cases, the function call must be the sole component of the
- expression. The pseudo-element classes
- <code>FromParent</code> and
- <code>FromNearestSpecified</code> are generated in these
- circumstances so that an exception will be thrown if they
- are involved in expression evaluation with other
- components. (See Rec. Section 5.10.4 Property Value
- Functions.)
- </p>
- <p>
- The experimental code is a simple extension of the existing
- parser code, which itself borrowed heavily from James
- Clark's XT processor.
- </p>
+ <p>
+ The parser retuns a <code>PropertyValueList</code>,
+ necessary because of the possibility that a list of
+ <code>PropertyValue</code> elements may be returned from the
+ expressions of soem properties.
+ </p>
+ <p>
+ <code>PropertyValueList</code>s may contain
+ <code>PropertyValue</code>s or other
+ <code>PropertyValueList</code>s. This latter provision is
+ necessitated for the peculiar case of of
+ <em>text-shadow</em>, which may contain whitespace separated
+ sublists of either two or three elements, separated from one
+ another by commas. To accommodate this peculiarity, comma
+ separated elements are added to the top-level list, while
+ whitespace separated values are always collected into
+ sublists to be added to the top-level list.
+ </p>
+ <p>
+ Other special cases include the processing of the core
+ functions <code>from-parent()</code> and
+ <code>from-nearest-specified-value()</code> when these
+ function calls are assigned to a shorthand property, or used
+ with a shorthand property name as an argument. In these
+ cases, the function call must be the sole component of the
+ expression. The pseudo-element classes
+ <code>FromParent</code> and
+ <code>FromNearestSpecified</code> are generated in these
+ circumstances so that an exception will be thrown if they
+ are involved in expression evaluation with other
+ components. (See Rec. Section 5.10.4 Property Value
+ Functions.)
+ </p>
+ <p>
+ The experimental code is a simple extension of the existing
+ parser code, which itself borrowed heavily from James
+ Clark's XT processor.
+ </p>
</section>
</section>
- </body>
+ </body>
</document>
"http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-forrest/src/resources/schema/dtd/document-v11.dtd">
<document>
- <header>
- <title>Traits</title>
+ <header>
+ <title>Traits</title>
<authors>
<person name="Peter B. West" email="pbwest@powerup.com.au"/>
</authors>
- </header>
- <body>
+ </header>
+ <body>
<section>
<title>Traits</title>
<table>
<td>All areas</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-common"
- >4.2.2 Common Traits</link><br/>
+ "http://www.w3.org/TR/xsl/slice4.html#area-common"
+ >4.2.2 Common Traits</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#writing-mode"
- >7.27.7 writing-mode</link>
+ "http://www.w3.org/TR/xsl/slice7.html#writing-mode"
+ >7.27.7 writing-mode</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#reference-orientation"
- >7.27.7 reference-orientation</link>
+ "http://www.w3.org/TR/xsl/slice7.html#reference-orientation"
+ >7.27.7 reference-orientation</link>
</td>
</tr>
<tr>
<td>All areas</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-common"
- >4.2.2 Common Traits</link><br/>
+ "http://www.w3.org/TR/xsl/slice4.html#area-common"
+ >4.2.2 Common Traits</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#writing-mode"
- >7.27.7 writing-mode</link>
+ "http://www.w3.org/TR/xsl/slice7.html#writing-mode"
+ >7.27.7 writing-mode</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#reference-orientation"
- >7.27.7 reference-orientation</link>
+ "http://www.w3.org/TR/xsl/slice7.html#reference-orientation"
+ >7.27.7 reference-orientation</link>
</td>
</tr>
<tr>
<td>Glyph-areas</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-common"
- >4.2.2 Common Traits</link><br/>
+ "http://www.w3.org/TR/xsl/slice4.html#area-common"
+ >4.2.2 Common Traits</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-glyph"
- >4.6.2 Glyph-areas</link><br/>
+ "http://www.w3.org/TR/xsl/slice4.html#area-glyph"
+ >4.6.2 Glyph-areas</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-linebuild"
- >4.7.2 Line-building</link><br/>
+ "http://www.w3.org/TR/xsl/slice4.html#area-linebuild"
+ >4.7.2 Line-building</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#rend-intrinsic"
- >4.9.5 Intrinsic Marks</link><br/>
+ "http://www.w3.org/TR/xsl/slice4.html#rend-intrinsic"
+ >4.9.5 Intrinsic Marks</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#font-model"
- >7.8.1 Fonts and Font Data</link><br/>
+ "http://www.w3.org/TR/xsl/slice7.html#font-model"
+ >7.8.1 Fonts and Font Data</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#writing-mode-related"
- >7.27 Writing-mode-related Properties</link>
+ "http://www.w3.org/TR/xsl/slice7.html#writing-mode-related"
+ >7.27 Writing-mode-related Properties</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#glyph-orientation-horizontal"
- >7.27.2 glyph-orientation-horizontal</link><br/>
+ "http://www.w3.org/TR/xsl/slice7.html#glyph-orientation-horizontal"
+ >7.27.2 glyph-orientation-horizontal</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#glyph-orientation-vertical"
- >7.27.3 glyph-orientation-vertical</link><br/>
- <link href=
- "http://www.w3.org/TR/xsl/slice7.html#direction"
- >7.27.1 direction</link><br/>
+ "http://www.w3.org/TR/xsl/slice7.html#glyph-orientation-vertical"
+ >7.27.3 glyph-orientation-vertical</link><br/>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#writing-mode"
- >7.27.7 writing-mode</link>
+ "http://www.w3.org/TR/xsl/slice7.html#direction"
+ >7.27.1 direction</link><br/>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice7.html#writing-mode"
+ >7.27.7 writing-mode</link>
</td>
</tr>
<tr>
<td>All areas</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#section-N6691-Non-property-Based-Trait-Generation"
- >5.6 Non-property Based Trait Generation</link>
+ "http://www.w3.org/TR/xsl/slice5.html#section-N6691-Non-property-Based-Trait-Generation"
+ >5.6 Non-property Based Trait Generation</link>
</td>
<td>
- Set "true" on:<br/>
+ Set "true" on:<br/>
simple-page-master<br/>
title<br/>
region-body<br/>
table<br/>
table-caption<br/>
table-cell
- </td>
+ </td>
</tr>
<tr>
<td>is-viewport-area</td>
<td></td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-common"
- >4.2.2 Common Traits</link>
+ "http://www.w3.org/TR/xsl/slice4.html#area-common"
+ >4.2.2 Common Traits</link>
</td>
</tr>
<tr>
<td></td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
<td></td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
<td></td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
<td></td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
<td></td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
- >5.5.6 Text-decoration Property
+ "http://www.w3.org/TR/xsl/slice5.html#refine-text-decoration"
+ >5.5.6 Text-decoration Property
</link>
</td>
<td>
<link href=
- "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
- >7.16.4 "text-decoration"
+ "http://www.w3.org/TR/xsl/slice7.html#text-decoration"
+ >7.16.4 "text-decoration"
</link>
</td>
</tr>
- <tr>
- <th>Other Indirectly Derived Traits</th>
- </tr>
- <tr>
- <td>alignment-point</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>alignment-baseline</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>baseline-shift</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>dominant-baseline-identifier</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>actual-baseline-table</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>start-intrusion-adjustment</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>end-intrusion-adjustment</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>page-number</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
- <tr>
- <td>script</td>
- <td/>
- <td>
- <link href=
- "http://www.w3.org/TR/xsl/slice4.html#area-intro"
- >4.1 Introduction</link>
- </td>
- </tr>
+ <tr>
+ <th>Other Indirectly Derived Traits</th>
+ </tr>
+ <tr>
+ <td>alignment-point</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>alignment-baseline</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>baseline-shift</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>dominant-baseline-identifier</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>actual-baseline-table</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>start-intrusion-adjustment</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>end-intrusion-adjustment</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>page-number</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
+ <tr>
+ <td>script</td>
+ <td/>
+ <td>
+ <link href=
+ "http://www.w3.org/TR/xsl/slice4.html#area-intro"
+ >4.1 Introduction</link>
+ </td>
+ </tr>
</table>
</section>
- </body>
+ </body>
</document>
"http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-forrest/src/resources/schema/dtd/document-v11.dtd">
<document>
- <header>
- <title>User agent refs</title>
+ <header>
+ <title>User agent refs</title>
<authors>
<person name="Peter B. West" email="pbwest@powerup.com.au"/>
</authors>
- </header>
- <body>
+ </header>
+ <body>
<section>
<title>User Agent references in XSLFO</title>
<section>
<title>4.9.2 Viewport Geometry</title>
- <p>
- If the block-progression-dimension of the reference-area is
- larger than that of the viewport-area and the overflow trait
- for the reference-area is scroll, then the
- inline-scroll-amount and block-scroll-amount are determined
- by a scrolling mechanism, if any, provided by the
- <strong>user agent</strong>. Otherwise, both are zero.
- </p>
+ <p>
+ If the block-progression-dimension of the reference-area is
+ larger than that of the viewport-area and the overflow trait
+ for the reference-area is scroll, then the
+ inline-scroll-amount and block-scroll-amount are determined
+ by a scrolling mechanism, if any, provided by the
+ <strong>user agent</strong>. Otherwise, both are zero.
+ </p>
</section>
<section>
<title>5.1.3 Actual Values</title>
- <p>
- 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 <strong>user
- agent</strong> 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.
- </p>
+ <p>
+ 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 <strong>user
+ agent</strong> 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.
+ </p>
</section>
<section>
<title>5.5.7 Font Properties</title>
- <p>
- There is no XSL mechanism to specify a particular font;
- instead, a selected font is chosen from the fonts available
- to the <strong>User Agent</strong> based on a set of
- selection criteria. The selection criteria are the following
- font properties: "font-family", "font-style",
- "font-variant", "font-weight", "font-stretch", and
- "font-size", plus, for some formatting objects, one or more
- characters.
- </p>
+ <p>
+ There is no XSL mechanism to specify a particular font;
+ instead, a selected font is chosen from the fonts available
+ to the <strong>User Agent</strong> based on a set of
+ selection criteria. The selection criteria are the following
+ font properties: "font-family", "font-style",
+ "font-variant", "font-weight", "font-stretch", and
+ "font-size", plus, for some formatting objects, one or more
+ characters.
+ </p>
</section>
<section>
<title>5.9.13.1 Pixels</title>
- <p>
- If the <strong>User Agent</strong> chooses a measurement for
- a 'px' that does not match an integer number of device dots
- in each axis it may produce undesirable effects...
- </p>
+ <p>
+ If the <strong>User Agent</strong> chooses a measurement for
+ a 'px' that does not match an integer number of device dots
+ in each axis it may produce undesirable effects...
+ </p>
</section>
<section>
<title>5.10.4 Property Value Functions</title>
- <section>
- <title>Function: object merge-property-values( NCName)</title>
- <p>
- The merge-property-values function returns a value of the
- property whose name matches the argument, or if omitted
- for the property for which the expression is being
- evaluated. The value returned is the specified value on
- the last fo:multi-property-set, of the parent
- fo:multi-properties, that applies to the <strong>User
- Agent</strong> state. If there is no such value, the
- computed value of the parent fo:multi-properties is
- returned...
- </p>
- <p>
- The test for applicability of a <strong>User
- Agent</strong> state is specified using the "active-state"
- property.
- </p>
- </section>
+ <section>
+ <title>Function: object merge-property-values( NCName)</title>
+ <p>
+ The merge-property-values function returns a value of the
+ property whose name matches the argument, or if omitted
+ for the property for which the expression is being
+ evaluated. The value returned is the specified value on
+ the last fo:multi-property-set, of the parent
+ fo:multi-properties, that applies to the <strong>User
+ Agent</strong> state. If there is no such value, the
+ computed value of the parent fo:multi-properties is
+ returned...
+ </p>
+ <p>
+ The test for applicability of a <strong>User
+ Agent</strong> state is specified using the "active-state"
+ property.
+ </p>
+ </section>
</section>
<section>
<title>6.3 Formatting Objects Summary</title>
- <section>
- <title>multi-property-set</title>
- <p>
- The fo:multi-property-set is used to specify an
- alternative set of formatting properties that, dependent
- on a <strong>User Agent</strong> state, are applied to the
- content.
- </p>
- </section>
- <section>
- <title>title</title>
- <p>
- The fo:title formatting object is used to associate a
- title with a given page-sequence. This title may be used
- by an interactive <strong>User Agent</strong> to identify
- the pages. For example, the content of the fo:title can be
- formatted and displayed in a "title" window or in a "tool
- tip".
- </p>
- </section>
+ <section>
+ <title>multi-property-set</title>
+ <p>
+ The fo:multi-property-set is used to specify an
+ alternative set of formatting properties that, dependent
+ on a <strong>User Agent</strong> state, are applied to the
+ content.
+ </p>
+ </section>
+ <section>
+ <title>title</title>
+ <p>
+ The fo:title formatting object is used to associate a
+ title with a given page-sequence. This title may be used
+ by an interactive <strong>User Agent</strong> to identify
+ the pages. For example, the content of the fo:title can be
+ formatted and displayed in a "title" window or in a "tool
+ tip".
+ </p>
+ </section>
</section>
<section>
<title>6.4.1.2 Page-masters</title>
- <p>
- ... When pages are used with a <strong>User Agent</strong>
- 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.
- </p>
+ <p>
+ ... When pages are used with a <strong>User Agent</strong>
+ 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.
+ </p>
</section>
<section>
<title>6.4.20 fo:title</title>
- <section>
- <title>Common Usage:</title>
- <p>
- ... This title may be used by an interactive <strong>User
- Agent</strong> to identify the pages.
- </p>
- </section>
+ <section>
+ <title>Common Usage:</title>
+ <p>
+ ... This title may be used by an interactive <strong>User
+ Agent</strong> to identify the pages.
+ </p>
+ </section>
</section>
<section>
<title>6.6.3 fo:character</title>
- <section>
- <title>Constraints:</title>
- <p>
- The dimensions of the areas are determined by the font
- metrics for the glyph.
- </p>
- <p>
- When formatting an fo:character with a
- "treat-as-word-space" value of "true", the <strong>User
- Agent</strong> may use a different method for determining
- the inline-progression-dimension of the area.
- </p>
- </section>
+ <section>
+ <title>Constraints:</title>
+ <p>
+ The dimensions of the areas are determined by the font
+ metrics for the glyph.
+ </p>
+ <p>
+ When formatting an fo:character with a
+ "treat-as-word-space" value of "true", the <strong>User
+ Agent</strong> may use a different method for determining
+ the inline-progression-dimension of the area.
+ </p>
+ </section>
</section>
<section>
<title>6.9 Dynamic Effects: Link and Multi Formatting
- Objects</title>
- <section>
- <title>6.9.1 Introduction</title>
- <p>
- Dynamic effects, whereby user actions (including
- <strong>User Agent</strong> state) can influence the
- behavior and/or representation of portions of a document,
- can be achieved through the use of the formatting objects
- included in this section:
- </p>
- <ul>
- <li>One-directional single-target links.</li>
- <li>
- The ability to switch between the display of two or more
- formatting object subtrees. This can be used for, e.g.,
- expandable/collapsible table of contents, display of an
- icon or a full table or graphic.
- </li>
- <li>
- The ability to switch between different property values,
- such as color or font-weight, depending on a
- <strong>User Agent</strong> state, such as "hover".
- </li>
- </ul>
- </section>
+ Objects</title>
+ <section>
+ <title>6.9.1 Introduction</title>
+ <p>
+ Dynamic effects, whereby user actions (including
+ <strong>User Agent</strong> state) can influence the
+ behavior and/or representation of portions of a document,
+ can be achieved through the use of the formatting objects
+ included in this section:
+ </p>
+ <ul>
+ <li>One-directional single-target links.</li>
+ <li>
+ The ability to switch between the display of two or more
+ formatting object subtrees. This can be used for, e.g.,
+ expandable/collapsible table of contents, display of an
+ icon or a full table or graphic.
+ </li>
+ <li>
+ The ability to switch between different property values,
+ such as color or font-weight, depending on a
+ <strong>User Agent</strong> state, such as "hover".
+ </li>
+ </ul>
+ </section>
</section>
<section>
<title>6.10 Out-of-Line Formatting Objects</title>
- <section>
- <title>6.10.1.3 Conditional Sub-Regions</title>
- <p>
- ... There may be limits on how much space conditionally
- generated areas can borrow from the
- region-reference-area. It is left to the <strong>user
- agent</strong> to decide these limits.
- </p>
- <p>
- ... An interactive <strong>user agent</strong> may choose
- to create "hot links" to the footnotes from the
- footnote-citation, or create "hot links" to the
- before-floats from an implicit citation, instead of
- realizing conditional sub-regions.
- </p>
- </section>
+ <section>
+ <title>6.10.1.3 Conditional Sub-Regions</title>
+ <p>
+ ... There may be limits on how much space conditionally
+ generated areas can borrow from the
+ region-reference-area. It is left to the <strong>user
+ agent</strong> to decide these limits.
+ </p>
+ <p>
+ ... An interactive <strong>user agent</strong> may choose
+ to create "hot links" to the footnotes from the
+ footnote-citation, or create "hot links" to the
+ before-floats from an implicit citation, instead of
+ realizing conditional sub-regions.
+ </p>
+ </section>
</section>
<section>
<title>6.10.2 fo:float</title>
- <section>
- <title>Constraints:</title>
- <p>
- ... The <strong>user agent</strong> may make its own
- determination, after taking into account the intrusion
- adjustments caused by one or more overlapping side-floats,
- that the remaining space in the
- inline-progression-direction is insufficient for the next
- side-float or normal block-area. The <strong>user
- agent</strong> may address this by causing the next
- side-float or normal block-area to "clear" one of the
- relevant side-floats, as described in the "clear" property
- description, so the intrusion adjustment is sufficiently
- reduced. Of the side-floats that could be cleared to meet
- this constraint, the side-float that is actually cleared
- must be the one whose after-edge is closest to the
- before-edge of the parent reference-area.
- </p>
- <p>
+ <section>
+ <title>Constraints:</title>
+ <p>
+ ... The <strong>user agent</strong> may make its own
+ determination, after taking into account the intrusion
+ adjustments caused by one or more overlapping side-floats,
+ that the remaining space in the
+ inline-progression-direction is insufficient for the next
+ side-float or normal block-area. The <strong>user
+ agent</strong> may address this by causing the next
+ side-float or normal block-area to "clear" one of the
+ relevant side-floats, as described in the "clear" property
+ description, so the intrusion adjustment is sufficiently
+ reduced. Of the side-floats that could be cleared to meet
+ this constraint, the side-float that is actually cleared
+ must be the one whose after-edge is closest to the
+ before-edge of the parent reference-area.
+ </p>
+ <p>
The <strong>user agent</strong> may determine sufficiency
of space by using a fixed length, or by some heuristic
such as whether an entire word fits into the available
space, or by some combination, in order to handle text and
images.
- </p>
- </section>
+ </p>
+ </section>
</section>
<section>
<title>6.10.3 fo:footnote</title>
- <section>
- <title>Constraints:</title>
- <p>
- ... The second block-area and any additional block-areas
- returned by an fo:footnote must be placed on the
- immediately subsequent pages to the page containing the
- first block-area returned by the fo:footnote, before any
- other content is placed. If a subsequent page does not
- contain a region-body, the <strong>user agent</strong>
- must use the region-master of the last page that did
- contain a region-body to hold the additional block-areas.
- </p>
- </section>
+ <section>
+ <title>Constraints:</title>
+ <p>
+ ... The second block-area and any additional block-areas
+ returned by an fo:footnote must be placed on the
+ immediately subsequent pages to the page containing the
+ first block-area returned by the fo:footnote, before any
+ other content is placed. If a subsequent page does not
+ contain a region-body, the <strong>user agent</strong>
+ must use the region-master of the last page that did
+ contain a region-body to hold the additional block-areas.
+ </p>
+ </section>
</section>
<section>
<title>7.3 Reference Rectangle for Percentage Computations</title>
- <p>...</p>
- <section>
- <title>Exceptions ...</title>
- <p>
- 5. When the absolute-position is "fixed", the containing
- block is defined by the nearest ancestor viewport area. If
- there is no ancestor viewport area, the containing block
- is defined by the <strong>user agent</strong>.
- </p>
- </section>
+ <p>...</p>
+ <section>
+ <title>Exceptions ...</title>
+ <p>
+ 5. When the absolute-position is "fixed", the containing
+ block is defined by the nearest ancestor viewport area. If
+ there is no ancestor viewport area, the containing block
+ is defined by the <strong>user agent</strong>.
+ </p>
+ </section>
</section>
<section>
- <title>7.6.5 "pause-after" 7.6.6 "pause-before" 7.6.17 "voice-family"</title>
- <p>Initial: depends on <strong>user agent</strong></p>
+ <title>7.6.5 "pause-after" 7.6.6 "pause-before" 7.6.17
+ "voice-family"</title>
+ <p>
+ Initial: depends on <strong>user agent</strong>
+ </p>
</section>
<section>
<title>7.7.1 "background-attachment"</title>
- <section>
- <title>fixed</title>
- <p>
- ... <strong>User agents</strong> 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.
- </p>
- </section>
+ <section>
+ <title>fixed</title>
+ <p>
+ ... <strong>User agents</strong> 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.
+ </p>
+ </section>
</section>
<section>
<title>7.7.9 "border-before-width"</title>
- <section>
- <title><length-conditional></title>
- <p>
- ... If border-before-width is specified using one of the
- width keywords the .conditional component is set to
- "discard" and the .length component to a <strong>User
- Agent</strong> dependent length.
- </p>
- </section>
+ <section>
+ <title><length-conditional></title>
+ <p>
+ ... If border-before-width is specified using one of the
+ width keywords the .conditional component is set to
+ "discard" and the .length component to a <strong>User
+ Agent</strong> dependent length.
+ </p>
+ </section>
</section>
<section>
<title>7.7.19 "border-top-color"</title>
- <section>
- <title><color></title>
- <p>
- ... If an element's border color is not specified with a
- "border" property, <strong>user agents</strong> must use
- the value of the element's "color" property as the
- computed value for the border color.
- </p>
- </section>
+ <section>
+ <title><color></title>
+ <p>
+ ... If an element's border color is not specified with a
+ "border" property, <strong>user agents</strong> must use
+ the value of the element's "color" property as the
+ computed value for the border color.
+ </p>
+ </section>
</section>
<section>
<title>7.7.20 "border-top-style"</title>
- <p>
- Conforming HTML <strong>user agents</strong> may interpret
- 'dotted', 'dashed', 'double', 'groove', 'ridge', 'inset',
- and 'outset' to be 'solid'.
- </p>
+ <p>
+ Conforming HTML <strong>user agents</strong> may interpret
+ 'dotted', 'dashed', 'double', 'groove', 'ridge', 'inset',
+ and 'outset' to be 'solid'.
+ </p>
</section>
<section>
<title>7.7.21 "border-top-width"</title>
- <section>
- <title>thin ... medium ... thick ...</title>
- <p>
- ... The interpretation of the first three values depends
- on the <strong>user agent</strong>.
- </p>
- </section>
+ <section>
+ <title>thin ... medium ... thick ...</title>
+ <p>
+ ... The interpretation of the first three values depends
+ on the <strong>user agent</strong>.
+ </p>
+ </section>
</section>
<section>
<title>7.8.2 "font-family"</title>
- <p>Initial: depends on <strong>user agent</strong></p>
+ <p>Initial: depends on <strong>user agent</strong></p>
</section>
<section>
<title>7.8.3 "font-selection-strategy"</title>
- <p>
- There is no XSL mechanism to specify a particular font;
- instead, a selected font is chosen from the fonts available
- to the <strong>User Agent</strong> based on a set of
- selection criteria. The selection criteria are the following
- font properties: "font-family", "font-style",
- "font-variant", "font-weight", "font-stretch", and
- "font-size", plus, for some formatting objects, one or more
- characters.
- </p>
- <p>
- ... This fallback may be to seek a match using a
- <strong>User Agent</strong> default "font-family", or it may
- be a more elaborate fallback strategy where, for example,
- "Helvetica" would be used as a fallback for "Univers".
- </p>
- <p>
- If no match has been found for a particular character, there
- is no selected font and the <strong>User Agent</strong>
- should provide a visual indication that a character is not
- being displayed (for example, using the 'missing character'
- glyph).
- </p>
+ <p>
+ There is no XSL mechanism to specify a particular font;
+ instead, a selected font is chosen from the fonts available
+ to the <strong>User Agent</strong> based on a set of
+ selection criteria. The selection criteria are the following
+ font properties: "font-family", "font-style",
+ "font-variant", "font-weight", "font-stretch", and
+ "font-size", plus, for some formatting objects, one or more
+ characters.
+ </p>
+ <p>
+ ... This fallback may be to seek a match using a
+ <strong>User Agent</strong> default "font-family", or it may
+ be a more elaborate fallback strategy where, for example,
+ "Helvetica" would be used as a fallback for "Univers".
+ </p>
+ <p>
+ If no match has been found for a particular character, there
+ is no selected font and the <strong>User Agent</strong>
+ should provide a visual indication that a character is not
+ being displayed (for example, using the 'missing character'
+ glyph).
+ </p>
</section>
<section>
<title>7.8.4 "font-size"</title>
- <section>
- <title><absolute-size></title>
- <p>
- An <absolute-size> keyword refers to an entry in a
- table of font sizes computed and kept by the <strong>user
- agent</strong>. Possible values are:<br/>[ xx-small |
- x-small | small | medium | large | x-large | xx-large ]
- </p>
- </section>
- <section>
- <title><relative-size></title>
- <p>
- A <relative-size> keyword is interpreted relative to
- the table of font sizes and the font size of the parent
- element. Possible values are:<br/>[ larger | smaller
- ]<br/>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 <strong>user
- agent</strong> is free to interpolate between table
- entries or round off to the closest one. The <strong>user
- agent</strong> may have to extrapolate table values if the
- numerical value goes beyond the keywords.
- </p>
- </section>
- <section>
- <title><length></title>
- <p>
- A length value specifies an absolute font size (that is
- independent of the <strong>user agent</strong>'s font
- table).
- </p>
- </section>
+ <section>
+ <title><absolute-size></title>
+ <p>
+ An <absolute-size> keyword refers to an entry in a
+ table of font sizes computed and kept by the <strong>user
+ agent</strong>. Possible values are:<br/>[ xx-small |
+ x-small | small | medium | large | x-large | xx-large ]
+ </p>
+ </section>
+ <section>
+ <title><relative-size></title>
+ <p>
+ A <relative-size> keyword is interpreted relative to
+ the table of font sizes and the font size of the parent
+ element. Possible values are:<br/>[ larger | smaller
+ ]<br/>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 <strong>user
+ agent</strong> is free to interpolate between table
+ entries or round off to the closest one. The <strong>user
+ agent</strong> may have to extrapolate table values if the
+ numerical value goes beyond the keywords.
+ </p>
+ </section>
+ <section>
+ <title><length></title>
+ <p>
+ A length value specifies an absolute font size (that is
+ independent of the <strong>user agent</strong>'s font
+ table).
+ </p>
+ </section>
</section>
<section>
<title>7.8.8 "font-variant"</title>
- <section>
- <title>small-caps</title>
- <p>
- ... If a genuine small-caps font is not available,
- <strong>user agents</strong> should simulate a small-caps
- font...
- </p>
- </section>
+ <section>
+ <title>small-caps</title>
+ <p>
+ ... If a genuine small-caps font is not available,
+ <strong>user agents</strong> should simulate a small-caps
+ font...
+ </p>
+ </section>
</section>
<section>
<title>7.8.9 "font-weight"</title>
- <section>
- <title>XSL modifications to the CSS definition:</title>
- <p>
- ... The association of other weights within a family to
- the numerical weight values is intended only to preserve
- the ordering of weights within that family. <strong>User
- agents</strong> must map names to values in a way that
- preserves visual order; a face mapped to a value must not
- be lighter than faces mapped to lower values. There is no
- guarantee on how a <strong>user agent</strong> will map
- fonts within a family to weight values. However, the
- following heuristics...
- </p>
- </section>
+ <section>
+ <title>XSL modifications to the CSS definition:</title>
+ <p>
+ ... The association of other weights within a family to
+ the numerical weight values is intended only to preserve
+ the ordering of weights within that family. <strong>User
+ agents</strong> must map names to values in a way that
+ preserves visual order; a face mapped to a value must not
+ be lighter than faces mapped to lower values. There is no
+ guarantee on how a <strong>user agent</strong> will map
+ fonts within a family to weight values. However, the
+ following heuristics...
+ </p>
+ </section>
</section>
<section>
<title>7.13.1 "alignment-adjust"</title>
- <section>
- <title>auto</title>
- <p>
- ... If the baseline-identifier does not exist in the
- baseline-table for the glyph or other inline-area, then
- the <strong>User Agent</strong> may either use heuristics
- to determine where that missing baseline would be or may
- use the dominant-baseline as a fallback.
- </p>
- </section>
+ <section>
+ <title>auto</title>
+ <p>
+ ... If the baseline-identifier does not exist in the
+ baseline-table for the glyph or other inline-area, then
+ the <strong>User Agent</strong> may either use heuristics
+ to determine where that missing baseline would be or may
+ use the dominant-baseline as a fallback.
+ </p>
+ </section>
</section>
<section>
<title>7.13.3 "baseline-shift"</title>
- <section>
- <title>sub/super</title>
- <p>
- ... Because in most fonts the subscript position is
- normally given relative to the "alphabetic" baseline, the
- <strong>User Agent</strong> may compute the effective
- position for sub/superscripts <em>[sub: spec typo!]</em>
- when some other baseline is dominant. ... If there is no
- applicable font data the <strong>User Agent</strong> may
- use heuristics to determine the offset.
- </p>
- </section>
+ <section>
+ <title>sub/super</title>
+ <p>
+ ... Because in most fonts the subscript position is
+ normally given relative to the "alphabetic" baseline, the
+ <strong>User Agent</strong> may compute the effective
+ position for sub/superscripts <em>[sub: spec typo!]</em>
+ when some other baseline is dominant. ... If there is no
+ applicable font data the <strong>User Agent</strong> may
+ use heuristics to determine the offset.
+ </p>
+ </section>
</section>
<section>
<title>7.13.5 "dominant-baseline"</title>
- <p>
- ... If there is no baseline-table in the nominal font or if
- the baseline-table lacks an entry for the desired baseline,
- then the <strong>User Agent</strong> may use heuristics to
- determine the position of the desired baseline.
- </p>
+ <p>
+ ... If there is no baseline-table in the nominal font or if
+ the baseline-table lacks an entry for the desired baseline,
+ then the <strong>User Agent</strong> may use heuristics to
+ determine the position of the desired baseline.
+ </p>
</section>
<section>
<title>7.14.11 "scaling-method"</title>
- <section>
- <title>auto</title>
- <p>
- The <strong>User Agent</strong> is free to choose either
- resampling, integer scaling, or any other scaling method.
- </p>
- </section>
- <section>
- <title>integer-pixels</title>
- <p>
- The <strong>User Agent</strong> should scale the image
- such that each pixel in the original image is scaled to
- the nearest integer number of device-pixels that yields an
- image less-then-or-equal-to the image size derived from
- the content-height, content-width, and scaling properties.
- </p>
- </section>
- <section>
- <title>resample-any-method</title>
- <p>
- The <strong>User Agent</strong> should resample the
- supplied image to provide an image that fills the size
- derived from the content-height, content-width, and
- scaling properties. The <strong>user agent</strong> may
- use any sampling method.
- </p>
- </section>
- <p>
- ... This is defined as a preference to allow the
- <strong>user agent</strong> the flexibility to adapt to
- device limitations and to accommodate over-constrained
- situations involving min/max dimensions and scale factors.
- </p>
+ <section>
+ <title>auto</title>
+ <p>
+ The <strong>User Agent</strong> is free to choose either
+ resampling, integer scaling, or any other scaling method.
+ </p>
+ </section>
+ <section>
+ <title>integer-pixels</title>
+ <p>
+ The <strong>User Agent</strong> should scale the image
+ such that each pixel in the original image is scaled to
+ the nearest integer number of device-pixels that yields an
+ image less-then-or-equal-to the image size derived from
+ the content-height, content-width, and scaling properties.
+ </p>
+ </section>
+ <section>
+ <title>resample-any-method</title>
+ <p>
+ The <strong>User Agent</strong> should resample the
+ supplied image to provide an image that fills the size
+ derived from the content-height, content-width, and
+ scaling properties. The <strong>user agent</strong> may
+ use any sampling method.
+ </p>
+ </section>
+ <p>
+ ... This is defined as a preference to allow the
+ <strong>user agent</strong> the flexibility to adapt to
+ device limitations and to accommodate over-constrained
+ situations involving min/max dimensions and scale factors.
+ </p>
</section>
<section>
<title>7.14.12 "width"</title>
- <p>
- ... The width of a replaced element's box is intrinsic and
- may be scaled by the <strong>user agent </strong> if the
- value of this property is different than 'auto'.
- </p>
+ <p>
+ ... The width of a replaced element's box is intrinsic and
+ may be scaled by the <strong>user agent </strong> if the
+ value of this property is different than 'auto'.
+ </p>
</section>
<section>
<title>7.15.4 "line-height"</title>
- <section>
- <title>normal</title>
- <p>
- Tells <strong>user agents</strong> to set the computed
- value to a "reasonable" value based on the font size of
- the element.
- </p>
- </section>
- <p>
- ... When an element contains text that is rendered in more
- than one font, <strong>user agents</strong> should determine
- the "line-height" value according to the largest font size.
- </p>
+ <section>
+ <title>normal</title>
+ <p>
+ Tells <strong>user agents</strong> to set the computed
+ value to a "reasonable" value based on the font size of
+ the element.
+ </p>
+ </section>
+ <p>
+ ... When an element contains text that is rendered in more
+ than one font, <strong>user agents</strong> should determine
+ the "line-height" value according to the largest font size.
+ </p>
</section>
<section>
<title>7.15.9 "text-align"</title>
- <p>
- ... The actual justification algorithm used is <strong>user
- agent</strong> and written language dependent.<br/>
- Conforming <strong>user agents</strong> 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.
- </p>
+ <p>
+ ... The actual justification algorithm used is <strong>user
+ agent</strong> and written language dependent.<br/>
+ Conforming <strong>user agents</strong> 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.
+ </p>
</section>
<section>
<title>7.15.11 "text-indent"</title>
- <p>
- ... <strong>User agents</strong> should render this
- indentation as blank space.
- </p>
+ <p>
+ ... <strong>User agents</strong> should render this
+ indentation as blank space.
+ </p>
</section>
<section>
<title>7.16.2 "letter-spacing"</title>
- <section>
- <title>normal</title>
- <p>
- The spacing is the normal spacing for the current
- font. This value allows the <strong>user agent</strong> to
- alter the space between characters in order to justify
- text.
- </p>
- </section>
- <section>
- <title><length></title>
- <p>
- 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. <strong>User agents</strong> may not further
- increase or decrease the inter-character space in order to
- justify text.
- </p>
- </section>
- <p>
- Character-spacing algorithms are <strong>user agent</strong>
- dependent. Character spacing may also be influenced by
- justification (see the "text-align" property).<br/> When the
- resultant space between two characters is not the same as
- the default space, <strong>user agents</strong> should not
- use ligatures.<br/> Conforming <strong>user agents</strong>
- may consider the value of the 'letter-spacing' property to
- be 'normal'.
- </p>
- <section>
- <title>XSL modifications to the CSS definition:</title>
- <p>
- ... For "normal": .optimum = "the normal spacing for the
- current font" / 2, .maximum = auto, .minimum = auto,
- .precedence = force, and .conditionality = discard. A
- value of auto for a component implies that the limits are
- <strong>User Agent</strong> specific.
- </p>
- <p>
- ... The CSS statement that "Conforming <strong>user
- agents</strong> may consider the value of the
- 'letter-spacing' property to be 'normal'." does not apply
- in XSL, if the <strong>User Agent</strong> implements the
- "Extended" property set.
- </p>
- <p>
- ... The algorithm for resolving the adjusted values
- between word spacing and letter spacing is <strong>User
- Agent</strong> dependent.
- </p>
- </section>
+ <section>
+ <title>normal</title>
+ <p>
+ The spacing is the normal spacing for the current
+ font. This value allows the <strong>user agent</strong> to
+ alter the space between characters in order to justify
+ text.
+ </p>
+ </section>
+ <section>
+ <title><length></title>
+ <p>
+ 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. <strong>User agents</strong> may not further
+ increase or decrease the inter-character space in order to
+ justify text.
+ </p>
+ </section>
+ <p>
+ Character-spacing algorithms are <strong>user agent</strong>
+ dependent. Character spacing may also be influenced by
+ justification (see the "text-align" property).<br/> When the
+ resultant space between two characters is not the same as
+ the default space, <strong>user agents</strong> should not
+ use ligatures.<br/> Conforming <strong>user agents</strong>
+ may consider the value of the 'letter-spacing' property to
+ be 'normal'.
+ </p>
+ <section>
+ <title>XSL modifications to the CSS definition:</title>
+ <p>
+ ... For "normal": .optimum = "the normal spacing for the
+ current font" / 2, .maximum = auto, .minimum = auto,
+ .precedence = force, and .conditionality = discard. A
+ value of auto for a component implies that the limits are
+ <strong>User Agent</strong> specific.
+ </p>
+ <p>
+ ... The CSS statement that "Conforming <strong>user
+ agents</strong> may consider the value of the
+ 'letter-spacing' property to be 'normal'." does not apply
+ in XSL, if the <strong>User Agent</strong> implements the
+ "Extended" property set.
+ </p>
+ <p>
+ ... The algorithm for resolving the adjusted values
+ between word spacing and letter spacing is <strong>User
+ Agent</strong> dependent.
+ </p>
+ </section>
</section>
<section>
<title>7.16.4 "text-decoration"</title>
- <p>
- ... If the element has no content or no text content (e.g.,
- the IMG element in HTML), <strong>user agents</strong> must
- ignore this property.
- </p>
- <section>
- <title>blink</title>
- <p>
- ... Conforming <strong>user agents</strong> are not
- required to support this value.
- </p>
- </section>
+ <p>
+ ... If the element has no content or no text content (e.g.,
+ the IMG element in HTML), <strong>user agents</strong> must
+ ignore this property.
+ </p>
+ <section>
+ <title>blink</title>
+ <p>
+ ... Conforming <strong>user agents</strong> are not
+ required to support this value.
+ </p>
+ </section>
</section>
<section>
<title>7.16.6 "text-transform"</title>
- <p>
- ... Conforming <strong>user agents</strong> 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.
- </p>
+ <p>
+ ... Conforming <strong>user agents</strong> 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.
+ </p>
</section>
<section>
<title>7.16.8 "word-spacing"</title>
- <p>
- ... Word spacing algorithms are <strong>user
- agent</strong>-dependent.
- </p>
- <section>
- <title>XSL modifications to the CSS definition:</title>
- <p>
- ... The algorithm for resolving the adjusted values
- between word spacing and letter spacing is <strong>User
- Agent</strong> dependent.
- </p>
- </section>
+ <p>
+ ... Word spacing algorithms are <strong>user
+ agent</strong>-dependent.
+ </p>
+ <section>
+ <title>XSL modifications to the CSS definition:</title>
+ <p>
+ ... The algorithm for resolving the adjusted values
+ between word spacing and letter spacing is <strong>User
+ Agent</strong> dependent.
+ </p>
+ </section>
</section>
<section>
<title>7.17.1 "color"</title>
- <p>Initial: depends on <strong>user agent</strong></p>
+ <p>Initial: depends on <strong>user agent</strong></p>
</section>
<section>
<title>7.17.3 "rendering-intent"</title>
- <section>
- <title>auto</title>
- <p>
- This is the default behavior. The <strong>User
- Agent</strong> determines the best intent based on the
- content type. For image content containing an embedded
- profile, it shall be assumed that the intent specified
- within the profile is the desired intent. Otherwise, the
- <strong>user agent</strong> shall use the current profile
- and force the intent, overriding any intent that might be
- stored in the profile itself.
- </p>
- </section>
+ <section>
+ <title>auto</title>
+ <p>
+ This is the default behavior. The <strong>User
+ Agent</strong> determines the best intent based on the
+ content type. For image content containing an embedded
+ profile, it shall be assumed that the intent specified
+ within the profile is the desired intent. Otherwise, the
+ <strong>user agent</strong> shall use the current profile
+ and force the intent, overriding any intent that might be
+ stored in the profile itself.
+ </p>
+ </section>
</section>
<section>
<title>7.20.2 "overflow"</title>
- <section>
- <title>scroll</title>
- <p>
- This value indicates that the content is clipped and that
- if the <strong>user agent</strong> uses a 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.
- </p>
- </section>
- <section>
- <title>auto</title>
- <p>
- The behavior of the "auto" value is <strong>user
- agent</strong> dependent, but should cause a scrolling
- mechanism to be provided for overflowing boxes.
- </p>
- </section>
+ <section>
+ <title>scroll</title>
+ <p>
+ This value indicates that the content is clipped and that
+ if the <strong>user agent</strong> uses a 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.
+ </p>
+ </section>
+ <section>
+ <title>auto</title>
+ <p>
+ The behavior of the "auto" value is <strong>user
+ agent</strong> dependent, but should cause a scrolling
+ mechanism to be provided for overflowing boxes.
+ </p>
+ </section>
</section>
<section>
<title>7.21.2 "leader-pattern"</title>
- <section>
- <title>dots</title>
- <p>
- ... The choice of dot character is dependent on the
- <strong>user agent</strong>.
- </p>
- </section>
+ <section>
+ <title>dots</title>
+ <p>
+ ... The choice of dot character is dependent on the
+ <strong>user agent</strong>.
+ </p>
+ </section>
</section>
<section>
<title>7.21.4 "leader-length"</title>
- <p>
- ... <strong>User agents</strong> may choose to use the value
- of "leader-length.optimum" to determine where to break the
- line, then use the minimum and maximum values during line
- justification.
- </p>
+ <p>
+ ... <strong>User agents</strong> may choose to use the value
+ of "leader-length.optimum" to determine where to break the
+ line, then use the minimum and maximum values during line
+ justification.
+ </p>
</section>
<section>
<title>7.25.11 "media-usage"</title>
- <section>
- <title>auto</title>
- <p>
- The <strong>User Agent</strong> determines which value of
- "media-usage" (other than the "auto" value) is used. The
- <strong>User Agent</strong> may consider the type of media
- on which the presentation is to be placed in making this
- determination.<br/> NOTE:<br/> For example, the
- <strong>User Agent </strong> could use the following
- decision process. If the media is not continuous and is of
- fixed bounded size, then the "paginate" (described below)
- is used. Otherwise, the "bounded-in-one-dimension" is
- used.
- </p>
- </section>
- <section>
- <title>bounded-in-one-dimension</title>
- <p>
- ... It is an error if more or less than one of
- "page-height" or "page-width" is specified on the first
- page master that is used. The <strong>User Agent</strong>
- may recover as follows:...
- </p>
- </section>
- <section>
- <title>unbounded</title>
- <p>
- Only one page is generated per fo:page-sequence descendant
- from the fo:root. Neither "page-height" nor "page-width"
- may be specified on any page master that is used. If a
- value is specified for either property, it is an error and
- a <strong>User Agent</strong> may recover by ignoring the
- specified value. ...
- </p>
- </section>
+ <section>
+ <title>auto</title>
+ <p>
+ The <strong>User Agent</strong> determines which value of
+ "media-usage" (other than the "auto" value) is used. The
+ <strong>User Agent</strong> may consider the type of media
+ on which the presentation is to be placed in making this
+ determination.<br/> NOTE:<br/> For example, the
+ <strong>User Agent </strong> could use the following
+ decision process. If the media is not continuous and is of
+ fixed bounded size, then the "paginate" (described below)
+ is used. Otherwise, the "bounded-in-one-dimension" is
+ used.
+ </p>
+ </section>
+ <section>
+ <title>bounded-in-one-dimension</title>
+ <p>
+ ... It is an error if more or less than one of
+ "page-height" or "page-width" is specified on the first
+ page master that is used. The <strong>User Agent</strong>
+ may recover as follows:...
+ </p>
+ </section>
+ <section>
+ <title>unbounded</title>
+ <p>
+ Only one page is generated per fo:page-sequence descendant
+ from the fo:root. Neither "page-height" nor "page-width"
+ may be specified on any page master that is used. If a
+ value is specified for either property, it is an error and
+ a <strong>User Agent</strong> may recover by ignoring the
+ specified value. ...
+ </p>
+ </section>
</section>
<section>
<title>7.25.13 "page-height"</title>
- <section>
- <title>auto</title>
- <p>
- The "page-height" shall be determined, in the case of
- continuous media, from the size of the <strong>User
- Agent</strong> window...
- </p>
- </section>
- <section>
- <title>NOTE:</title>
- <p>
- A <strong>User Agent</strong> may provide a way to declare
- the media for which formatting is to be done. This may be
- different from the media on which the formatted result is
- viewed. For example, a browser <strong>User Agent</strong>
- may be used to preview pages that are formatted for sheet
- media. In that case, the size calculation is based on the
- media for which formatting is done rather than the media
- being currently used.
- </p>
- </section>
+ <section>
+ <title>auto</title>
+ <p>
+ The "page-height" shall be determined, in the case of
+ continuous media, from the size of the <strong>User
+ Agent</strong> window...
+ </p>
+ </section>
+ <section>
+ <title>NOTE:</title>
+ <p>
+ A <strong>User Agent</strong> may provide a way to declare
+ the media for which formatting is to be done. This may be
+ different from the media on which the formatted result is
+ viewed. For example, a browser <strong>User Agent</strong>
+ may be used to preview pages that are formatted for sheet
+ media. In that case, the size calculation is based on the
+ media for which formatting is done rather than the media
+ being currently used.
+ </p>
+ </section>
</section>
<section>
<title>7.25.15 "page-width"</title>
- <section>
- <title>auto</title>
- <p>
- The "page-width" shall be determined, in the case of
- continuous media, from the size of the <strong>User
- Agent</strong> window...
- </p>
- </section>
+ <section>
+ <title>auto</title>
+ <p>
+ The "page-width" shall be determined, in the case of
+ continuous media, from the size of the <strong>User
+ Agent</strong> window...
+ </p>
+ </section>
</section>
<section>
<title>7.26.5 "border-separation"</title>
- <section>
- <title><length-bp-ip-direction></title>
- <p>
- ... Rows, columns, row groups, and column groups cannot
- have borders (i.e., <strong>user agents</strong> must
- ignore the border properties for those elements).
- </p>
- </section>
+ <section>
+ <title><length-bp-ip-direction></title>
+ <p>
+ ... Rows, columns, row groups, and column groups cannot
+ have borders (i.e., <strong>user agents</strong> must
+ ignore the border properties for those elements).
+ </p>
+ </section>
</section>
<section>
<title>7.26.7 "caption-side"</title>
- <p>
- ... 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
- <strong>user agent</strong> to chose a "reasonable width".
- </p>
+ <p>
+ ... 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
+ <strong>user agent</strong> to chose a "reasonable width".
+ </p>
</section>
<section>
<title>7.27.2 "glyph-orientation-horizontal"</title>
- <section>
- <title><angle></title>
- <p>
- ... The <strong>User Agent</strong> shall round the value
- of the angle to the closest of the permitted values.
- </p>
- </section>
+ <section>
+ <title><angle></title>
+ <p>
+ ... The <strong>User Agent</strong> shall round the value
+ of the angle to the closest of the permitted values.
+ </p>
+ </section>
</section>
<section>
<title>7.27.3 "glyph-orientation-vertical"</title>
- <section>
- <title>auto</title>
- <p>
- ... The determination of which characters should be
- auto-rotated may vary across <strong>User Agents</strong>.
- </p>
- </section>
- <section>
- <title><angle></title>
- <p>
- ... The <strong>User Agent</strong> shall round the value
- of the angle to the closest of the permitted values.
- </p>
- </section>
+ <section>
+ <title>auto</title>
+ <p>
+ ... The determination of which characters should be
+ auto-rotated may vary across <strong>User Agents</strong>.
+ </p>
+ </section>
+ <section>
+ <title><angle></title>
+ <p>
+ ... The <strong>User Agent</strong> shall round the value
+ of the angle to the closest of the permitted values.
+ </p>
+ </section>
</section>
<section>
<title>7.27.6 "unicode-bidi"</title>
- <section>
- <title>XSL modifications to the CSS definition:</title>
- <p>
- ... Fallback:<br/> If it is not possible to present the
- characters in the correct order, then the
- <strong>UserAgent </strong> should display either a
- 'missing character' glyph or display some indication that
- the content cannot be correctly rendered.
- </p>
- </section>
+ <section>
+ <title>XSL modifications to the CSS definition:</title>
+ <p>
+ ... Fallback:<br/> If it is not possible to present the
+ characters in the correct order, then the
+ <strong>UserAgent </strong> should display either a
+ 'missing character' glyph or display some indication that
+ the content cannot be correctly rendered.
+ </p>
+ </section>
</section>
<section>
<title>7.28.1 "content-type"</title>
- <p>
- ... This property specifies the content-type and may be used
- by a <strong>User Agent</strong> to select a rendering
- processor for the object.
- </p>
- <section>
- <title>auto</title>
- <p>
- No identification of the content-type. The <strong>User
- Agent</strong> may determine it by "sniffing" or by other
- means.
- </p>
- </section>
+ <p>
+ ... This property specifies the content-type and may be used
+ by a <strong>User Agent</strong> to select a rendering
+ processor for the object.
+ </p>
+ <section>
+ <title>auto</title>
+ <p>
+ No identification of the content-type. The <strong>User
+ Agent</strong> may determine it by "sniffing" or by other
+ means.
+ </p>
+ </section>
</section>
<section>
<title>7.29.5 "border-color"</title>
- <p>
- ... If an element's border color is not specified with a
- "border" property, <strong>user agents</strong> must use the
- value of the element's "color" property as the computed
- value for the border color.
- </p>
+ <p>
+ ... If an element's border color is not specified with a
+ "border" property, <strong>user agents</strong> must use the
+ value of the element's "color" property as the computed
+ value for the border color.
+ </p>
</section>
<section>
<title>7.29.9 "border-spacing"</title>
- <p>
- ... Rows, columns, row groups, and column groups cannot have
- borders (i.e., <strong>user agents</strong> must ignore the
- border properties for those elements).
- </p>
+ <p>
+ ... Rows, columns, row groups, and column groups cannot have
+ borders (i.e., <strong>user agents</strong> must ignore the
+ border properties for those elements).
+ </p>
</section>
<section>
<title>7.29.13 "font"</title>
- <p>
- ... If no font with the indicated characteristics exists on
- a given platform, the <strong>user agent</strong> should
- either intelligently substitute (e.g., a smaller version of
- the "caption" font might be used for the "small-caption"
- font), or substitute a <strong>user agent</strong> default
- font.
- </p>
+ <p>
+ ... If no font with the indicated characteristics exists on
+ a given platform, the <strong>user agent</strong> should
+ either intelligently substitute (e.g., a smaller version of
+ the "caption" font might be used for the "small-caption"
+ font), or substitute a <strong>user agent</strong> default
+ font.
+ </p>
</section>
<section>
<title>7.29.19 "pause"</title>
- <p>Initial: depends on <strong>user agent</strong></p>
+ <p>Initial: depends on <strong>user agent</strong></p>
</section>
<section>
<title>7.29.21 "size"</title>
- <p>
- ... Relative page boxes allow <strong>user agents</strong>
- to scale a document and make optimal use of the target size.
- </p>
- <p>
- ... <strong>User agents</strong> 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).
- </p>
- <ul>
- <li>
- Rendering page boxes that do not fit a target sheet<br/>
- If a page box does not fit the target sheet dimensions,
- the <strong>user agent</strong> may choose to:
- <ul>
- <li>
- Rotate the page box 90 degrees if this will make the
- page box fit.
- </li>
- <li>Scale the page to fit the target.</li>
- </ul>
- The <strong>user agent</strong> should consult the user
- before performing these operations.
- </li>
- <li>
- Positioning the page box on the sheet<br/> When the page
- box is smaller than the target size, the <strong>user
- agent</strong> is free to place the page box anywhere on
- the sheet.
- </li>
- </ul>
+ <p>
+ ... Relative page boxes allow <strong>user agents</strong>
+ to scale a document and make optimal use of the target size.
+ </p>
+ <p>
+ ... <strong>User agents</strong> 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).
+ </p>
+ <ul>
+ <li>
+ Rendering page boxes that do not fit a target sheet<br/>
+ If a page box does not fit the target sheet dimensions,
+ the <strong>user agent</strong> may choose to:
+ <ul>
+ <li>
+ Rotate the page box 90 degrees if this will make the
+ page box fit.
+ </li>
+ <li>Scale the page to fit the target.</li>
+ </ul>
+ The <strong>user agent</strong> should consult the user
+ before performing these operations.
+ </li>
+ <li>
+ Positioning the page box on the sheet<br/> When the page
+ box is smaller than the target size, the <strong>user
+ agent</strong> is free to place the page box anywhere on
+ the sheet.
+ </li>
+ </ul>
</section>
<section>
<title>7.29.23 "white-space"</title>
- <section>
- <title>normal</title>
- <p>
- This value directs <strong>user agents</strong> to
- collapse sequences of whitespace, and break lines as
- necessary to fill line boxes. ...
- </p>
- </section>
- <section>
- <title>pre</title>
- <p>
- This value prevents <strong>user agents</strong> from
- collapsing sequences of whitespace. ...
- </p>
- </section>
- <p>
- ... Conforming <strong>user agents</strong> may ignore the
- 'white-space' property in author and user style sheets but
- must specify a value for it in the default style sheet.
- </p>
+ <section>
+ <title>normal</title>
+ <p>
+ This value directs <strong>user agents</strong> to
+ collapse sequences of whitespace, and break lines as
+ necessary to fill line boxes. ...
+ </p>
+ </section>
+ <section>
+ <title>pre</title>
+ <p>
+ This value prevents <strong>user agents</strong> from
+ collapsing sequences of whitespace. ...
+ </p>
+ </section>
+ <p>
+ ... Conforming <strong>user agents</strong> may ignore the
+ 'white-space' property in author and user style sheets but
+ must specify a value for it in the default style sheet.
+ </p>
</section>
</section>
- </body>
+ </body>
</document>
"http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-forrest/src/resources/schema/dtd/document-v11.dtd">
<document>
- <header>
- <title>Integrating XML Parsing</title>
+ <header>
+ <title>Integrating XML Parsing</title>
<authors>
<person name="Peter B. West" email="pbwest@powerup.com.au"/>
</authors>
- </header>
- <body>
+ </header>
+ <body>
<section>
<title>An alternative parser integration</title>
<p>
- This note proposes an alternative method of integrating the
- output of the SAX parsing of the Flow Object (FO) tree into
- FOP processing. The pupose of the proposed changes is to
- provide for better decomposition of the process of analysing
- and rendering an fo tree such as is represented in the output
- from initial (XSLT) processing of an XML source document.
+ This note proposes an alternative method of integrating the
+ output of the SAX parsing of the Flow Object (FO) tree into
+ FOP processing. The pupose of the proposed changes is to
+ provide for better decomposition of the process of analysing
+ and rendering an fo tree such as is represented in the output
+ from initial (XSLT) processing of an XML source document.
</p>
<section>
<title>Structure of SAX parsing</title>
- <p>
- Figure 1 is a schematic representation of the process of SAX
- parsing of an input source. SAX parsing involves the
- registration, with an object implementing the
- <code>XMLReader</code> interface, of a
- <code>ContentHandler</code> which contains a callback
- routine for each of the event types encountered by the
- parser, e.g., <code>startDocument()</code>,
- <code>startElement()</code>, <code>characters()</code>,
- <code>endElement()</code> and <code>endDocument()</code>.
- Parsing is initiated by a call to the <code>parser()</code>
- method of the <code>XMLReader</code>. Note that the call to
- <code>parser()</code> and the calls to individual callback
- methods are synchronous: <code>parser()</code> will only
- return when the last callback method returns, and each
- callback must complete before the next is called.<br/><br/>
- <strong>Figure 1</strong>
- </p>
- <figure src="images/design/alt.design/SAXParsing.png" alt="SAX parsing schematic"/>
- <p>
- In the process of parsing, the hierarchical structure of the
- original FO tree is flattened into a number of streams of
- events of the same type which are reported in the sequence
- in which they are encountered. Apart from that, the API
- imposes no structure or constraint which expresses the
- relationship between, e.g., a startElement event and the
- endElement event for the same element. To the extent that
- such relationship information is required, it must be
- managed by the callback routines.
- </p>
- <p>
- The most direct approach here is to build the tree
- "invisibly"; to bury within the callback routines the
- necessary code to construct the tree. In the simplest case,
- the whole of the FO tree is built within the call to
- <code>parser()</code>, and that in-memory tree is subsequently
- processed to (a) validate the FO structure, and (b)
- construct the Area tree. The problem with this approach is
- the potential size of the FO tree in memory. FOP has
- suffered from this problem in the past.
- </p>
+ <p>
+ Figure 1 is a schematic representation of the process of SAX
+ parsing of an input source. SAX parsing involves the
+ registration, with an object implementing the
+ <code>XMLReader</code> interface, of a
+ <code>ContentHandler</code> which contains a callback
+ routine for each of the event types encountered by the
+ parser, e.g., <code>startDocument()</code>,
+ <code>startElement()</code>, <code>characters()</code>,
+ <code>endElement()</code> and <code>endDocument()</code>.
+ Parsing is initiated by a call to the <code>parser()</code>
+ method of the <code>XMLReader</code>. Note that the call to
+ <code>parser()</code> and the calls to individual callback
+ methods are synchronous: <code>parser()</code> will only
+ return when the last callback method returns, and each
+ callback must complete before the next is called.<br/><br/>
+ <strong>Figure 1</strong>
+ </p>
+ <figure src= "images/design/alt.design/SAXParsing.png" alt=
+ "SAX parsing schematic"/>
+ <p>
+ In the process of parsing, the hierarchical structure of the
+ original FO tree is flattened into a number of streams of
+ events of the same type which are reported in the sequence
+ in which they are encountered. Apart from that, the API
+ imposes no structure or constraint which expresses the
+ relationship between, e.g., a startElement event and the
+ endElement event for the same element. To the extent that
+ such relationship information is required, it must be
+ managed by the callback routines.
+ </p>
+ <p>
+ The most direct approach here is to build the tree
+ "invisibly"; to bury within the callback routines the
+ necessary code to construct the tree. In the simplest case,
+ the whole of the FO tree is built within the call to
+ <code>parser()</code>, and that in-memory tree is subsequently
+ processed to (a) validate the FO structure, and (b)
+ construct the Area tree. The problem with this approach is
+ the potential size of the FO tree in memory. FOP has
+ suffered from this problem in the past.
+ </p>
</section>
<section>
<title>Cluttered callbacks</title>
- <p>
- On the other hand, the callback code may become increasingly
- complex as tree validation and the triggering of the Area
- tree processing and subsequent rendering is moved into the
- callbacks, typically the <code>endElement()</code> method.
- In order to overcome acute memory problems, the FOP code was
- recently modified in this way, to trigger Area tree building
- and rendering in the <code>endElement()</code> method, when
- the end of a page-sequence was detected.
- </p>
- <p>
- The drawback with such a method is that it becomes difficult
- to detemine the order of events and the circumstances in
- which any particular processing events are triggered. When
- the processing events are inherently self-contained, this is
- irrelevant. But the more complex and context-dependent the
- relationships are among the processing elements, the more
- obscurity is engendered in the code by such "side-effect"
- processing.
- </p>
+ <p>
+ On the other hand, the callback code may become increasingly
+ complex as tree validation and the triggering of the Area
+ tree processing and subsequent rendering is moved into the
+ callbacks, typically the <code>endElement()</code> method.
+ In order to overcome acute memory problems, the FOP code was
+ recently modified in this way, to trigger Area tree building
+ and rendering in the <code>endElement()</code> method, when
+ the end of a page-sequence was detected.
+ </p>
+ <p>
+ The drawback with such a method is that it becomes difficult
+ to detemine the order of events and the circumstances in
+ which any particular processing events are triggered. When
+ the processing events are inherently self-contained, this is
+ irrelevant. But the more complex and context-dependent the
+ relationships are among the processing elements, the more
+ obscurity is engendered in the code by such "side-effect"
+ processing.
+ </p>
</section>
<section>
<title>From passive to active parsing</title>
- <p>
- In order to solve the simultaneous problems of exposing the
- structure of the processing and minimising in-memory
- requirements, the experimental code separates the parsing of
- the input source from the building of the FO tree and all
- downstream processing. The callback routines become
- minimal, consisting of the creation and buffering of
- <code>XMLEvent</code> objects as a <em>producer</em>. All
- of these objects are effectively merged into a single event
- stream, in strict event order, for subsequent access by the
- FO tree building process, acting as a
- <em>consumer</em>. In itself, this does not reduce the
- footprint. This occurs when the approach is generalised to
- modularise FOP processing.<br/><br/> <strong>Figure 2</strong>
- </p>
- <figure src="images/design/alt.design/XML-event-buffer.png" alt="XML event buffer"/>
- <p>
- The most useful change that this brings about is the switch
- from <em>passive</em> to <em>active</em> XML element
- processing. The process of parsing now becomes visible to
- the controlling process. All local validation requirements,
- all object and data structure building, is initiated by the
- process(es) <em>get</em>ting from the queue - in the case
- above, the FO tree builder.
- </p>
+ <p>
+ In order to solve the simultaneous problems of exposing the
+ structure of the processing and minimising in-memory
+ requirements, the experimental code separates the parsing of
+ the input source from the building of the FO tree and all
+ downstream processing. The callback routines become
+ minimal, consisting of the creation and buffering of
+ <code>XMLEvent</code> objects as a <em>producer</em>. All
+ of these objects are effectively merged into a single event
+ stream, in strict event order, for subsequent access by the
+ FO tree building process, acting as a
+ <em>consumer</em>. In itself, this does not reduce the
+ footprint. This occurs when the approach is generalised to
+ modularise FOP processing.<br/><br/> <strong>Figure 2</strong>
+ </p>
+ <figure src= "images/design/alt.design/XML-event-buffer.png"
+ alt= "XML event buffer"/>
+ <p>
+ The most useful change that this brings about is the switch
+ from <em>passive</em> to <em>active</em> XML element
+ processing. The process of parsing now becomes visible to
+ the controlling process. All local validation requirements,
+ all object and data structure building, is initiated by the
+ process(es) <em>get</em>ting from the queue - in the case
+ above, the FO tree builder.
+ </p>
</section>
<section>
<title>XMLEvent methods</title>
- <anchor id="XMLEvent-methods"/>
- <p>
- The experimental code uses a class <strong>XMLEvent</strong>
- to provide the objects which are placed in the queue.
- <em>XMLEvent</em> includes a variety of methods to access
- elements in the queue. Namespace URIs encountered in
- parsing are maintined in a <code>static</code>
- <code>HashMap</code> where they are associated with a unique
- integer index. This integer value is used in the signature
- of some of the access methods.
- </p>
- <dl>
- <dt>XMLEvent getEvent(SyncedCircularBuffer events)</dt>
- <dd>
- This is the basis of all of the queue access methods. It
- returns the next element from the queue, which may be a
- pushback element.
- </dd>
- <dt>XMLEvent getEndDocument(events)</dt>
- <dd>
- <em>get</em> and discard elements from the queue
- until an ENDDOCUMENT element is found and returned.
- </dd>
- <dt> XMLEvent expectEndDocument(events)</dt>
- <dd>
- If the next element on the queue is an ENDDOCUMENT event,
- return it. Otherwise, push the element back and throw an
- exception. Each of the <em>get</em> methods (except
- <em>getEvent()</em> itself) has a corresponding
- <em>expect</em> method.
- </dd>
- <dt>XMLEvent get/expectStartElement(events)</dt>
- <dd> Return the next STARTELEMENT event from the queue.</dd>
- <dt>XMLEvent get/expectStartElement(events, String
- qName)</dt>
- <dd>
- Return the next STARTELEMENT with a QName matching
- <em>qName</em>.
- </dd>
- <dt>
- XMLEvent get/expectStartElement(events, int uriIndex,
- String localName)
- </dt>
- <dd>
- Return the next STARTELEMENT with a URI indicated by the
- <em>uriIndex</em> and a local name matching <em>localName</em>.
- </dd>
- <dt>
- XMLEvent get/expectStartElement(events, LinkedList list)
- </dt>
- <dd>
- <em>list</em> contains instances of the nested class
- <code>UriLocalName</code>, which hold a
- <em>uriIndex</em> and a <em>localName</em>. Return
- the next STARTELEMENT with a URI indicated by the
- <em>uriIndex</em> and a local name matching
- <em>localName</em> from any element of
- <em>list</em>.
- </dd>
- <dt>XMLEvent get/expectEndElement(events)</dt>
- <dd>Return the next ENDELEMENT.</dd>
- <dt>XMLEvent get/expectEndElement(events, qName)</dt>
- <dd>Return the next ENDELEMENT with QName
- <em>qname</em>.</dd>
- <dt>XMLEvent get/expectEndElement(events, uriIndex, localName)</dt>
- <dd>
- Return the next ENDELEMENT with a URI indicated by the
- <em>uriIndex</em> and a local name matching
- <em>localName</em>.
- </dd>
- <dt>
- XMLEvent get/expectEndElement(events, XMLEvent event)
- </dt>
- <dd>
- Return the next ENDELEMENT with a URI matching the
- <em>uriIndex</em> and <em>localName</em>
- matching those in the <em>event</em> argument. This
- is intended as a quick way to find the ENDELEMENT matching
- a previously returned STARTELEMENT.
- </dd>
- <dt>XMLEvent get/expectCharacters(events)</dt>
- <dd>Return the next CHARACTERS event.</dd>
- </dl>
+ <anchor id="XMLEvent-methods"/>
+ <p>
+ The experimental code uses a class <strong>XMLEvent</strong>
+ to provide the objects which are placed in the queue.
+ <em>XMLEvent</em> includes a variety of methods to access
+ elements in the queue. Namespace URIs encountered in
+ parsing are maintined in a <code>static</code>
+ <code>HashMap</code> where they are associated with a unique
+ integer index. This integer value is used in the signature
+ of some of the access methods.
+ </p>
+ <dl>
+ <dt>XMLEvent getEvent(SyncedCircularBuffer events)</dt>
+ <dd>
+ This is the basis of all of the queue access methods. It
+ returns the next element from the queue, which may be a
+ pushback element.
+ </dd>
+ <dt>XMLEvent getEndDocument(events)</dt>
+ <dd>
+ <em>get</em> and discard elements from the queue
+ until an ENDDOCUMENT element is found and returned.
+ </dd>
+ <dt> XMLEvent expectEndDocument(events)</dt>
+ <dd>
+ If the next element on the queue is an ENDDOCUMENT event,
+ return it. Otherwise, push the element back and throw an
+ exception. Each of the <em>get</em> methods (except
+ <em>getEvent()</em> itself) has a corresponding
+ <em>expect</em> method.
+ </dd>
+ <dt>XMLEvent get/expectStartElement(events)</dt>
+ <dd> Return the next STARTELEMENT event from the queue.</dd>
+ <dt>XMLEvent get/expectStartElement(events, String
+ qName)</dt>
+ <dd>
+ Return the next STARTELEMENT with a QName matching
+ <em>qName</em>.
+ </dd>
+ <dt>
+ XMLEvent get/expectStartElement(events, int uriIndex,
+ String localName)
+ </dt>
+ <dd>
+ Return the next STARTELEMENT with a URI indicated by the
+ <em>uriIndex</em> and a local name matching <em>localName</em>.
+ </dd>
+ <dt>
+ XMLEvent get/expectStartElement(events, LinkedList list)
+ </dt>
+ <dd>
+ <em>list</em> contains instances of the nested class
+ <code>UriLocalName</code>, which hold a
+ <em>uriIndex</em> and a <em>localName</em>. Return
+ the next STARTELEMENT with a URI indicated by the
+ <em>uriIndex</em> and a local name matching
+ <em>localName</em> from any element of
+ <em>list</em>.
+ </dd>
+ <dt>XMLEvent get/expectEndElement(events)</dt>
+ <dd>Return the next ENDELEMENT.</dd>
+ <dt>XMLEvent get/expectEndElement(events, qName)</dt>
+ <dd>Return the next ENDELEMENT with QName
+ <em>qname</em>.</dd>
+ <dt>XMLEvent get/expectEndElement(events, uriIndex, localName)</dt>
+ <dd>
+ Return the next ENDELEMENT with a URI indicated by the
+ <em>uriIndex</em> and a local name matching
+ <em>localName</em>.
+ </dd>
+ <dt>
+ XMLEvent get/expectEndElement(events, XMLEvent event)
+ </dt>
+ <dd>
+ Return the next ENDELEMENT with a URI matching the
+ <em>uriIndex</em> and <em>localName</em>
+ matching those in the <em>event</em> argument. This
+ is intended as a quick way to find the ENDELEMENT matching
+ a previously returned STARTELEMENT.
+ </dd>
+ <dt>XMLEvent get/expectCharacters(events)</dt>
+ <dd>Return the next CHARACTERS event.</dd>
+ </dl>
</section>
<section>
<title>FOP modularisation</title>
- <p>
- This same principle can be extended to the other major
- sub-systems of FOP processing. In each case, while it is
- possible to hold a complete intermediate result in memory,
- the memory costs of that approach are too high. The
- sub-systems - xml parsing, FO tree construction, Area tree
- construction and rendering - must run in parallel if the
- footprint is to be kept manageable. By creating a series of
- producer-consumer pairs linked by synchronized buffers,
- logical isolation can be achieved while rates of processing
- remain coupled. By introducing feedback loops conveying
- information about the completion of processing of the
- elements, sub-systems can dispose of or precis those
- elements without having to be tightly coupled to downstream
- processes.<br/><br/>
- <strong>Figure 3</strong>
- </p>
- <figure src="images/design/alt.design/processPlumbing.png" alt="FOP modularisation"/>
+ <p>
+ This same principle can be extended to the other major
+ sub-systems of FOP processing. In each case, while it is
+ possible to hold a complete intermediate result in memory,
+ the memory costs of that approach are too high. The
+ sub-systems - xml parsing, FO tree construction, Area tree
+ construction and rendering - must run in parallel if the
+ footprint is to be kept manageable. By creating a series of
+ producer-consumer pairs linked by synchronized buffers,
+ logical isolation can be achieved while rates of processing
+ remain coupled. By introducing feedback loops conveying
+ information about the completion of processing of the
+ elements, sub-systems can dispose of or precis those
+ elements without having to be tightly coupled to downstream
+ processes.<br/><br/>
+ <strong>Figure 3</strong>
+ </p>
+ <figure src= "images/design/alt.design/processPlumbing.png"
+ alt= "FOP modularisation"/>
</section>
</section>
- </body>
+ </body>
</document>