You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by pb...@apache.org on 2003/03/06 06:23:02 UTC
cvs commit: xml-fop/src/documentation/content/xdocs/design/alt.design/properties book.xml classes-overview.ehtml enumerated-values.ehtml getInitialValue.ehtml index.xml PropertyConsts-class.ehtml propertyExpressions.ehtml simple-properties.ehtml
pbwest 2003/03/05 21:23:01
Added: src/documentation/content/xdocs/design/alt.design/properties
book.xml classes-overview.ehtml
enumerated-values.ehtml getInitialValue.ehtml
index.xml PropertyConsts-class.ehtml
propertyExpressions.ehtml simple-properties.ehtml
Log:
Using .ehtml files
Revision Changes Path
1.4 +0 -0 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/book.xml
1.1 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/classes-overview.ehtml
Index: classes-overview.ehtml
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv= "Content-Type" content= "text/html; charset=ISO-8859-1" >
<title>Property classes overview</title>
<script type="text/javascript" src="resources/codedisplay.js">
</script>
</head>
<body marginheight= "0" marginwidth= "0" topmargin= "0" leftmargin= "0" text= "#000000" bgcolor= "#FFFFFF" >
<div class= "content" >
<h1>Property classes overview</h1>
<p>
<font size= "-2" >by Peter B. West</font>
</p>
<ul class= "minitoc" >
<li>
<a href = "#N10014" >Properties: packages</a>
<ul class= "minitoc" >
<li>
<a href = "#N10019" >org.apache.fop.fo</a>
</li>
<li>
<a href = "#N100AC" >org.apache.fop.fo.properties</a>
</li>
<li>
<a href = "#N100EE" >org.apache.fop.fo.expr</a>
</li>
<li>
<a href = "#N10134" >org.apache.fop.datatypes</a>
</li>
<li>
<a href = "#N101A2"
>org.apache.fop.datatypes.indirect</a>
</li>
</ul>
</li>
</ul>
<a name= "N10014" ></a> <h3>Properties: packages</h3> <a name=
"N10019" ></a> <h4>org.apache.fop.fo</h4>
<dl>
<dt>
<span id="span00" ></span>
<a href = "javascript:toggleCode('span00',
'PropNames.html#PropNamesClass', '50%', '100%'
)" ><em>PropNames</em></a>
</dt>
<dd>
This class maintains an array of <span id="span01"
></span><a href= "javascript:toggleCode( 'span01',
'PropNames.html#propertyNames', '50%', '100%' )" >property
names</a>, synchronized to a complete set of property name
<span id="span02" ></span><a href = "javascript:toggleCode(
'span02', 'PropNames.html#NO_PROPERTY', '50%', '100%' )"
>constants</a> for indexing property-based arrays. It
includes methods to <span id="span03" ></span><a href =
"javascript:toggleCode( 'span03',
'PropNames.html#getPropertyName', '50%', '100%' )" >convert
an index to a name</a> and to <span id="span04" ></span><a
href = "javascript:toggleCode( 'span04',
'PropNames.html#getPropertyIndex', '50%', '100%' )" >convert
a property name to an index</a>.
</dd>
<dt>
<a href = "PropertyConsts-class.html" ><em>PropertyConsts</em></a>
</dt>
<dd>
A singleton instance of <span class= "codefrag"
>PropertyConsts</span> is created by the static initializer
of the <span id="span05" ></span><a href =
"javascript:toggleCode( 'span05',
'PropertyConsts.html#pconsts', '50%', '100%' )" >pconsts</a>
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 <span
id="span06" ></span><a href = "javascript:toggleCode(
'span06', 'PropertyConsts.html#setupProperty', '50%', '100%'
)" >setupProperty</a>, 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>
<span id="span07" ></span><a href = "javascript:toggleCode(
'span07', 'PropertySets.html#PropertySetsClass', '50%',
'100%' )" ><em>PropertySets</em></a>
</dt>
<dd>
This class provides a number of <span class= "codefrag"
>ROBitSet</span>s representing many of the sets of
properties defined in <em>Section 7</em> of the
specification. Note that the <span id="span08" ></span
><a href= "javascript:toggleCode( 'span08',
'PropertySets.html#borderProps', '50%', '100%' )"
><em>Border</em></a>, <span id="span09" ></span ><a href=
"javascript:toggleCode( 'span09',
'PropertySets.html#paddingProps', '50%', '100%' )"
><em>Padding</em></a> and <span id="span10" ></span><a
href= "javascript:toggleCode( 'span10',
'PropertySets.html#backgroundProps', '50%', '100%'
)"><em>Background</em></a> sets are defined separately.
</dd>
<dt>
<span id="span11" ></span><a href = "javascript:toggleCode(
'span11', '../FOPropertySets.html#FOPropertySetsClass',
'50%', '100%' )"><em>FOPropertySets</em></a>
</dt>
<dd>
This class provides a number of <span class= "codefrag"
>ROBitSet</span>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>
<span id="span12" ></span><a href = "javascript:toggleCode(
'span12', 'ShorthandPropSets.html#ShorthandPropSetsClass',
'50%', '100%' )"><em>ShorthandPropSets</em></a>
</dt>
<dd>
This class contains arrays of <span id="span13" ></span><a
href = "javascript:toggleCode( 'span13',
'ShorthandPropSets.html#shorthands', '50%', '100%' )"
>shorthand property indices</a> and <span id="span14"
></span><a href = "javascript:toggleCode( 'span14',
'ShorthandPropSets.html#compounds', '50%', '100%' )"
>compound property indices</a>, and <span class= "codefrag"
>ROBitSet</span>s representing the expansion sets of these
shorthands and compounds. Various methods useful in the
expansion of these properties are also included.
</dd>
<dt>
<span id="span15" ></span><a href = "javascript:toggleCode(
'span15', 'FOAttributes.html#FOAttributesClass', '50%',
'100%' )"><em>FOAttributes</em></a>
</dt>
<dd>
This class manages the attribute set that is associated with
a SAX <span class= "codefrag" >startElement</span> event.
<em>fo:</em> namespace attributes are entered into a <span
id = "span16" ></span ><a href = "javascript:toggleCode(
'span16', 'FOAttributes.html#foAttrMap', '50%', '100%' )"
><span class= "codefrag" >HashMap</span></a>, indexed by the
<em>fo:</em> property index. As other namespaces are
encountered, the values are entered into namespace-specific
<span id="span17" ></span><a href = "javascript:toggleCode(
'span17', 'FOAttributes.html#nSpaceAttrMaps', '50%', '100%'
)"><span class= "codefrag" >HashMap</span>s</a>, indexed by
the <em>local name</em> of the attribute.
</dd>
</dl>
<a name= "N100AC" ></a><a name= "property-classes" ></a>
<h4>org.apache.fop.fo.properties</h4>
<dl>
<dt>
<span id="span18" ></span><a href="javascript:toggleCode(
'span18', 'Property.html#PropertyClass', '50%', '100%' )"
><em>Property</em></a>
</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>
<a name= "N100EE" ></a>
<h4>org.apache.fop.fo.expr</h4>
<dl>
<dt>
<span id="span19" ></span><a href = "javascript:toggleCode(
'span19', 'PropertyTokenizer.html#PropertyTokenizerClass',
'50%', '100%' )"><em>PropertyTokenizer</em></a>
</dt>
<dd>
The tokenizer for the property expression parser. Defines a
set of <span id="span20" ></span><a href =
"javascript:toggleCode( 'span20',
'PropertyTokenizer.html#EOF', '50%', '100%' )" >token
constants</a> and returns these with associated token
values.
</dd>
<dt>
<span id="span21" ></span><a href = "javascript:toggleCode(
'span21', 'PropertyParser.html#PropertyParserClass', '50%',
'100%' )"><em>PropertyParser</em></a>
</dt>
<dd>
This extends <span class= "codefrag"
>PropertyTokenizer</span>. It parses property
expressions on the basis of the tokens passed to it by its
superclass, generating <span class= "codefrag"
>PropertyValue</span>s, including <span class= "codefrag"
>PropertyValueList</span>s.
</dd>
<dt>
<em>PropertyException</em>
</dt>
<dd>
The basic class for all property-related exceptions.
It extends <span class= "codefrag" >FOPException</span>. 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 <span class=
"codefrag" >PropertyException</span>. Also in this package
by accident.
</dd>
</dl>
<a name= "N10134" ></a>
<h4>org.apache.fop.datatypes</h4>
<dl>
<dt>
<span id="span22" ></span><a href = "javascript:toggleCode(
'span22', 'PropertyValue.html#PropertyValueInterface',
'50%', '100%' )"><em>PropertyValue</em></a>
</dt>
<dd>
An <em>interface</em> which all <span class= "codefrag"
>PropertyValue</span> classes must implement. In addition
to a few methods, <span class= "codefrag"
>PropertyValue</span> defines the set of <span id="span23"
></span><a href = "javascript:toggleCode( 'span23',
'PropertyValue.html#NO_TYPE', '50%', '100%' )"
>constants</a> which the <span class= "codefrag"
>getType()</span> method may return; i.e. the valid set of
<span class= "codefrag" >PropertyValue</span> types.
</dd>
<dt>
<span id="span24" ></span><a href = "javascript:toggleCode(
'span24',
'AbstractPropertyValue.html#AbstractPropertyValueClass',
'50%', '100%' )"><em>AbstractPropertyValue</em></a>
</dt>
<dd>
An abstract implementation of the <span class= "codefrag"
>PropertyValue</span> interface. Most actual property value
classes extend <span class= "codefrag"
>AbstractPropertyValue</span>.
</dd>
<dt>
<span id="span25" ></span><a href = "javascript:toggleCode(
'span25', 'PropertyValueList.html#PropertyValueListClass',
'50%', '100%' )"><em>PropertyValueList</em></a>
</dt>
<dd>
This class extends <span class= "codefrag"
>LinkedList</span> and implements <span class= "codefrag"
>PropertyValue</span>. It is used whenever the process of
resolving a property expression yields a list of <span
class= "codefrag" >PropertyValue</span> elements; notably
during the processing of shorthands and "compound"
properties.
</dd>
<dt>
<em>StringType</em>
</dt>
<dd>
A basic type extending <span class= "codefrag"
>AbstractPropertyValue</span>. Extended by <span class=
"codefrag" >NCName</span>.
</dd>
<dt>
<em>NCName</em>
</dt>
<dd>
Extends <span class= "codefrag" >StringType</span> to represent
NCName strings.
</dd>
<dt>
<em>EnumType</em>
</dt>
<dd>
Extends <span class= "codefrag"
>AbstractPropertyValue</span> to represented enumerated
types.
</dd>
<dt>
<em>Other types</em>
</dt>
<dd>
All other types extend one of the above classes.
</dd>
</dl>
<a name= "N101A2" ></a>
<h4>org.apache.fop.datatypes.indirect</h4>
<dl>
<dt>
<em>IndirectValue</em>
</dt>
<dd>
The base type for all indirect value types; extends
<span class= "codefrag" >AbstractPropertyValue</span>.
</dd>
</dl>
<p>
<strong>Previous:</strong> <a href = "introduction.html"
>Introduction</a>
</p>
<p>
<strong>Next:</strong> <a href= "PropertyConsts-class.html"
>The PropertyConsts class</a>
</p>
</div>
</body>
</html>
1.1 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/enumerated-values.ehtml
Index: enumerated-values.ehtml
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Enumerated Data Values</title>
<script type="text/javascript" src="resources/codedisplay.js">
</script>
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" text="#000000" bgcolor="#FFFFFF">
<div class="content">
<h1>Enumerated Data Values</h1>
<ul class="minitoc">
<li>
<a href="#N1000C">Enumerated Data Values</a>
<ul class="minitoc">
<li>
<a href="#N10020">Array representation</a>
</li>
<li>
<a href="#N1005C">HashMap representation</a>
</li>
<li>
<a href="#N1009D">
Factoring Out Common Enumeration Values
</a>
</li>
<li>
<a href="#N100DD">Mapped Numeric Values</a>
</li>
</ul>
</li>
</ul>
<a name="N1000C"></a>
<h3>Enumerated Data Values</h3>
<p>
Property classes which allow enumerated data types must encode
integer constants representing the enumeration tokens, and
must provide a way of translating between the tokens and the
integers, and <em>vice versa</em>. Depending on the number of
tokens in an enumeration set, the mapping from token to
integer is maintained in an array or a <span
class="codefrag">HashMap</span>. The switch-over point from
array to <span class="codefrag">HashMap</span> was determined
by some highly implementation-dependent testing to be in the
region of four to five elements.
</p>
<p>
Many properties share common sets of enumeration tokens,
e.g. those which allow color values, and those applying to
borders and padding. A special case of enumerated value is
the mapped numeric enumeration, in which a token maps to a
Numeric value. These situations are discussed below.
</p>
<a name="N10020"></a>
<h4>Array representation</h4>
<p>
<span id = "span00" ></span ><a href= "javascript:toggleCode(
'span00', 'Direction.html#DirectionClass', '50%', '100%' )"
><span
class="codefrag">org.apache.fop.fo.properties.Direction</span></a>
is an example of a class which supports an enumerated value
with a small set of tokens. The <span id = "span01" ></span
><a href= "javascript:toggleCode( 'span01',
'Direction.html#dataTypes', '50%', '100%' )" ><span
class="codefrag">dataTypes</span></a> field contains the <span
id = "span02" ></span ><a href= "javascript:toggleCode(
'span02', 'Property.html#NOTYPE', '50%', '100%' )" ><span
class="codefrag">ENUM</span> data type constant, defined in
<span class="codefrag">Property</span></a>. The enumeration
integer constants are defined as <span class="codefrag">public
static final int</span> values, <span id = "span03" ></span
><a href= "javascript:toggleCode( 'span03',
'Direction.html#LTR', '50%', '100%') "><span class="codefrag'
)" >LTR</span> and <span class="codefrag">RTL</span></a>.
Associating enumeration tokens with these integer constants
occurs in the array <a href=
"javascript:window.top.displayCode( 'Direction.html#rwEnums'
)" ><span class="codefrag">String[] rwEnums</span></a>, which
is initialized with the token strings. By convention, zero is
never used to represent a valid enumeration constant, anywhere
in this code. It is, of course, critical that synchronization
between <span class="codefrag">rwEnums</span> and the
enumeration constants be maintained.
</p>
<p>
The publicly accessible mapping from enumeration token to
enumeration constant is achieved through the method <span id =
"span04" ></span ><a href= "javascript:toggleCode( 'span04',
'Direction.html#getEnumIndex', '50%', '100%' )" ><span
class="codefrag">int getEnumIndex(String)</span></a>. The
corresponding mapping from enumeration constant to enumeration
token is achieved through the method <span id = "span05"
></span ><a href= "javascript:toggleCode( 'span05',
'Direction.html#getEnumText', '50%', '100%' )" ><span
class="codefrag">String getEnumText(int)</span></a>.
</p>
<a name="N1005C"></a>
<h4>HashMap representation</h4>
<p>
<span id = "span06" ></span ><a href= "javascript:toggleCode(
'span06', 'RenderingIntent.html#RenderingIntentClass', '50%',
'100%' )" ><span class="codefrag"
>org.apache.fop.fo.properties.RenderingIntent</span ></a> is
an example of a class which supports an enumerated value with
a larger set of tokens. The <span id = "span07" ></span ><a
href= "javascript:toggleCode( 'span07',
'RenderingIntent.html#dataTypes', '50%', '100%' )" ><span
class="codefrag">dataTypes</span></a> field contains the <span
id = "span08" ></span ><a href= "javascript:toggleCode(
'span08', 'Property.html#NOTYPE', '50%', '100%' )" ><span
class="codefrag">ENUM</span> data type constant, defined in
<span class="codefrag">Property</span></a>. Enumeration
integer constants are defined as <span id = "span09" ></span
><a href= "javascript:toggleCode( 'span09',
'RenderingIntent.html#PERCEPTUAL', '50%', '100%' )" ><span
class="codefrag">public static final int</span></a> values.
Zero is never used to represent a valid enumeration constant.
The enumeration tokens are stored in the array <span id =
"span10" ></span ><a href= "javascript:toggleCode( 'span10',
'RenderingIntent.html#rwEnums', '50%', '100%' )" ><span
class="codefrag">String[] rwEnums</span></a>, which is
initialized with the token strings. Association of
enumeration tokens with the integer constants occurs in the
<span class="codefrag">HashMap</span> <span id = "span11"
></span ><a href= "javascript:toggleCode( 'span11',
'RenderingIntent.html#rwEnumHash"><span class="codefrag',
'50%', '100%' )" > rwEnumHash</span></a>, which is initialized
from the token array in a <span class="codefrag">static
{}</span> initializer. It is, of course, critical that
synchronization between <span class="codefrag">rwEnums</span>
and the enumeration constants be maintained.
</p>
<p>
The publicly accessible mapping from enumeration token to
enumeration constant is achieved through the method <span id =
"span12" ></span ><a href= "javascript:toggleCode( 'span12',
'RenderingIntent.html#getEnumIndex', '50%', '100%' )" ><span
class="codefrag">int getEnumIndex(String)</span></a>. The
corresponding mapping from enumeration constant to enumeration
token is achieved through the method <span id = "span13"
></span ><a href= "javascript:toggleCode( 'span13',
'RenderingIntent.html#getEnumText', '50%', '100%' )" ><span
class="codefrag">String getEnumText(int)</span></a>.
</p>
<a name="N1009D"></a>
<h4 id="common-enum-values">
Factoring Out Common Enumeration Values
</h4>
<p>
When a number of properties support a common enumerated value,
that value and its associated access methods may be factored
out to a new class, which each of the properties then extends.
An example of such a common super-class is <span id = "span14"
></span ><a href= "javascript:toggleCode( 'span14',
'BorderCommonStyle.html#BorderCommonStyleClass', '50%', '100%'
)" ><span class="codefrag">BorderCommonStyle</span></a>. Like
a property with a normal HashMap representation of an
enumerated value, BorderCommonStyle defines <span id =
"span15" ></span ><a href= "javascript:toggleCode( 'span15',
'BorderCommonStyle.html#HIDDEN', '50%', '100%' )" ><span
class="codefrag">public static final int</span></a>
enumeration integer constants. Similarly, the enumeration
tokens are stored in the array <span id = "span16" ></span ><a
href= "javascript:toggleCode( 'span16',
'BorderCommonStyle.html#rwEnums', '50%', '100%' )" ><span
class="codefrag">String[] rwEnums</span></a>, and the
association of enumeration tokens with the integer constants
occurs in the <span class="codefrag">HashMap</span> <span id =
"span17" ></span ><a href= "javascript:toggleCode( 'span17',
'BorderCommonStyle.html#rwEnumHash', '50%', '100%' )" ><span
class="codefrag"> rwEnumHash</span></a>, initialized in a
<span class="codefrag">static {}</span> initializer. The
mapping methods <span id = "span18" ></span ><a href=
"javascript:toggleCode( 'span18',
'BorderCommonStyle.html#getEnumIndex', '50%', '100%' )" ><span
class="codefrag">int getEnumIndex(String)</span></a> and <span
id = "span19" ></span ><a href= "javascript:toggleCode(
'span19', 'BorderCommonStyle.html#getEnumText', '50%', '100%'
)" ><span class="codefrag">String getEnumText(int)</span></a>
are also present.
</p>
<p>
Notice, however, that the class has none of the static data
constants described in the discussion of <a
href="simple-properties.html">simple properties</a>. These
values are defined in the individual sub-classes of this
class, e.g. <span id = "span20" ></span ><a href=
"javascript:toggleCode( 'span20',
'BorderLeftStyle.html#BorderLeftStyleClass', '50%', '100%' )"
><span class="codefrag">BorderLeftStyle</span></a>. None of
the above fields or methods occur, and <span
class="codefrag">BorderLeftStyle</span> is left looking like
an example of a simple property. The enumeration mapping
methods are, however, available through the super-class <span
class="codefrag">BorderCommonStyle</span>.
</p>
<a name="N100DD"></a>
<h4>Mapped Numeric Values</h4>
<p>
In "normal" enumerated values, the token is, effectively,
passed directly into the layout operation of the flow object
to which the property is applied. Some enumerated values,
however, generate a <span class="codefrag">Numeric</span>
result. Their resolution involves mapping the token to the
indicated <span class="codefrag">Numeric</span> value.
</p>
<p>
An example is the <span id = "span21" ></span ><a href=
"javascript:toggleCode( 'span21',
'BorderCommonWidth.html#BorderCommonWidthClass', '50%', '100%'
)" ><span class="codefrag">BorderCommonWidth</span></a>
property. This, like the example of <a
href="#common-enum-values"><span
class="codefrag">BorderCommonStyle</span></a> above, also
represents common enumerated values which have been factored
out to form a super-class for particular properties. <span
class="codefrag">BorderCommonWidth</span>, therefore, also
defines <span id = "span22" ></span ><a href=
"javascript:toggleCode( 'span22',
'BorderCommonWidth.html#THIN', '50%', '100%' )" ><span
class="codefrag">enumeration constant values</span></a> and an
array of tokens. In this case, there is no <span
class="codefrag">HashMap</span>, because of the limited number
of tokens, but the mapping methods <span id = "span23" ></span
><a href= "javascript:toggleCode( 'span23',
'BorderCommonWidth.html#getEnumIndex', '50%', '100%' )" ><span
class="codefrag">int getEnumIndex(String)</span></a> and <span
id = "span24" ></span ><a href= "javascript:toggleCode(
'span24', 'BorderCommonWidth.html#getEnumText', '50%', '100%'
)" ><span class="codefrag">String getEnumText(int)</span></a>
are present.
</p>
<p>
The added element in this property is the array <span id =
"span25" ></span ><a href= "javascript:toggleCode( 'span25',
'BorderCommonWidth.html#mappedPoints', '50%', '100%' )" ><span
class="codefrag">double[] mappedPoints</span></a>. The
entries in this array must by maintained in syncronization
with the <span id = "span26" ></span ><a href=
"javascript:toggleCode( 'span26',
'BorderCommonWidth.html#rwEnums', '50%', '100%' )" ><span
class="codefrag">String[] rwEnums</span></a> array of tokens
and the set of <span id = "span27" ></span ><a href=
"javascript:toggleCode( 'span27',
'BorderCommonWidth.html#THIN', '50%', '100%' )" >enumeration
constants</a>. The mapping from token to Numeric value is
achieved by the <span id = "span28" ></span ><a href=
"javascript:toggleCode( 'span28',
'BorderCommonWidth.html#getMappedLength', '50%', '100%' )"
><span class="codefrag">Numeric getMappedLength(FONode, int,
int)</span></a> method.
</p>
<p>
<span id = "span29" ></span ><a href= "javascript:toggleCode(
'span29', 'BorderLeftWidth.html#BorderLeftWidthClass', '50%',
'100%' )" ><span class="codefrag">BorderLeftWidth</span></a>
extends <span id = "span30" ></span ><a href=
"javascript:toggleCode( 'span30', 'BorderCommonWidth.html',
'50%', '100%' )" ><span
class="codefrag">BorderCommonWidth</span></a>. It includes
the basic static data, like <a
href="simple-properties.html">simple properties</a>, and, in
this case, the <span id = "span31" ></span ><a href=
"javascript:toggleCode( 'span31',
'BorderLeftWidth.html#getInitialValue', '50%', '100%' )"
><span class="codefrag">PropertyValue
getInitialValue(int)</span></a> method to derive the initial
value.
</p>
<a name="N10139"></a>
<h4>Deriving Mapped Numeric Values</h4>
<p>
As usual with property values, the usual method of deriving a
mapped numeric value is by calling the <span id = "span32"
></span ><a href= "javascript:toggleCode( 'span32',
'../PropertyConsts.html#getMappedNumeric', '50%', '100%' )"
><span class="codefrag">Numeric getMappedNumeric(FONode, int,
int)</span></a> method in <span id = "span33" ></span ><a
href= "javascript:toggleCode( 'span33',
'../PropertyConsts.html#pconsts', '50%', '100%' )" ><span
class="codefrag">pconsts</span></a>. All properties which
support a mapped numeric value must have a <span
class="codefrag">Numeric getMappedNumeric(FONode, int)</span>
method, which will be called through its singleton instance,
stored in the <span id = "span34" ></span ><a href=
"javascript:toggleCode( 'span34',
'PropertyConsts.html#properties', '50%', '100%' )" ><span
class= "codefrag" >properties</span ></a> array, by the <span
class="codefrag">PropertyConsts</span> method.
</p>
<p>
<strong>Previous:</strong> <a href= "getInitialValue.html"
>getInitialValue()</a>
</p>
<!--
<p>
<strong>Next:</strong> <a href= "getInitialValue.html"
>getInitialValue()</a>
</p>
-->
</div>
</body>
</HTML>
1.1 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/getInitialValue.ehtml
Index: getInitialValue.ehtml
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Generating Initial Values</title>
<script type="text/javascript" src="resources/codedisplay.js">
</script>
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" text="#000000" bgcolor="#FFFFFF">
<div class="content">
<h1>Generating Initial Values</h1>
<p>
<font size="-2">by Peter B. West</font>
</p>
<ul class="minitoc">
<li>
<a href="#N10014">Introduction</a>
</li>
<li>
<a href="#N10021">
Generating & Accessing Initial Values
</a>
<ul class="minitoc">
<li>
<a href="#N10062">Properties without
getInitialValue()</a>
</li>
</ul>
</li>
</ul>
<a name="N10014"></a>
<h3>Introduction</h3>
<p>
The <a href="simple-properties.html">previous section</a>
discussed the common data elements in the simplest examples of
property classes. This section discusses more complex classes
whose facilities are accessed only through various methods.
</p>
<a name="N10021"></a>
<h3>
Generating & Accessing Initial Values
</h3>
<p>
<span id = "span00" ></span ><a href= "javascript:toggleCode(
'span00', 'AutoRestore.html', '50%', '100%' )" ><span
class="codefrag"
>org.apache.fop.fo.properties.AutoRestore</span></a> is an
example of the next most complex property class. In addition
to all of the common static fields, these classes have initial
data value types which require the dynamic generation of a
PropertyValue instance.
</p>
<p>
The method <span id = "span01" ></span ><a href=
"javascript:toggleCode( 'span01',
'AutoRestore.html#getInitialValue', '50%', '100%' )" ><span
class="codefrag">PropertyValue getInitialValue(int)</span></a>
returns an instance of PropertyValue of the appropriate
subclass containing the initial value for this property. Like
the static data fields, this value is, in turn, stored in the
array of initial values maintained in the <span id = "span02"
></span ><a href= "javascript:toggleCode( 'span02',
'PropertyConsts.html#PropertyConstsClass', '50%', '100%' )"
><span class="codefrag">PropertyConsts</span></a> singleton
<span id = "span03" ></span ><a href= "javascript:toggleCode(
'span03', 'PropertyConsts.html#pconsts', '50%', '100%' )"
><span class="codefrag">pconsts</span></a>.` As with the
fields, the first invocation of the method <span id = "span04"
></span ><a href= "javascript:toggleCode( 'span04',
'PropertyConsts.html#setupProperty', '50%', '100%' )" ><span
class="codefrag">setupProperty</span></a> on the property
instantiates the singleton instance of the class, and stores
that instance in the in the <span id = "span05" ></span ><a
href= "javascript:toggleCode( 'span05',
'PropertyConsts.html#properties', '50%', '100%' )" ><span
class="codefrag">Property[] properties</span></a> array of
<span id = "span06" ></span ><a href= "javascript:toggleCode(
'span06', 'PropertyConsts.html#pconsts', '50%', '100%' )"
><span class="codefrag">pconsts</span></a>.
</p>
<p>
Unlike the static data fields, however, the initial value is
not immediately generated. It is generated by a call to <span
id = "span07" ></span ><a href= "javascript:toggleCode(
'span07', 'PropertyConsts.html#getInitialValue', '50%', '100%'
)" ><span class="codefrag">PropertyValue
getInitialValue(int)</span></a> in <span id = "span08" ></span
><a href= "javascript:toggleCode( 'span08',
'PropertyConsts.html#pconsts', '50%', '100%' )" ><span
class="codefrag">pconsts</span></a>. This call, in turn,
locates the relevant instance of the particular property class
in the <span id = "span09" ></span ><a href=
"javascript:toggleCode( 'span09',
'PropertyConsts.html#properties', '50%', '100%' )" ><span
class= "codefrag" >properties</span> array of <span class=
"codefrag" >PropertyConsts</span></a>, and invokes the <span
class= "codefrag" >getInitialValue()</span> of that instance.
A side-effect of this call is to store the initial value in
<span id = "span10" ></span ><a href= "javascript:toggleCode(
'span10', 'PropertyConsts.html#initialValues', '50%', '100%'
)" ><span class="codefrag">PropertyValue[]
initialValues</span></a>.
</p>
<a name="N10062"></a>
<h4>Properties without
getInitialValue()</h4>
<p>
What about property classes which have no <span
class="codefrag">getInitialValue()</span> method? The
simplest classes, e.g. <span
class="codefrag">Character</span>, fall into this category.
As <a href="classes-overview.html#property-classes">noted
previously</a>, all of the property classes extend <span
class="codefrag">org.apache.fop.fo.properties.Property</span>.
<span id = "span11" ></span ><a href= "javascript:toggleCode(
'span11', 'Property.html#PropertyClass', '50%', '100%' )"
><span class="codefrag">Property</span></a> provides a base
<span id = "span12" ></span ><a href= "javascript:toggleCode(
'span12', 'Property.html#getInitialValue', '50%', '100%' )"
><span class="codefrag">PropertyValue
getInitialValue(int)</span></a> method to which the simple
classes fall back. Note that it is only valid for <span
class="codefrag">NOTYPE_IT</span>, <span
class="codefrag">AUTO_IT</span>, <span
class="codefrag">NONE_IT</span> and <span
class="codefrag">AURAL_IT</span> initial value types, so all
classes which have any other initial value type must override
this method.
</p>
<p>
<strong>Previous:</strong> <a href = "simple-properties.html"
>Simple property classes</a>
</p>
<p>
<strong>Next:</strong> <a href= "enumerated-values.html"
>Enumerated values</a>
</p>
</div>
</body>
</HTML>
1.4 +7 -7 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/index.xml
1.1 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/PropertyConsts-class.ehtml
Index: PropertyConsts-class.ehtml
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>PropertyConsts Description</title>
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"
text="#000000" bgcolor="#FFFFFF">
<div class="content">
<h1>PropertyConsts Description</h1>
<p>
<font size="-2">by Peter B. West</font>
</p>
<ul class="minitoc">
<li>
<a href="#N10014">Introduction</a>
</li>
</ul>
<a name="N10014"></a>
<h3>Introduction</h3>
<p>
<a href="javascript:window.top.displayCode(
'PropertyConsts.html#PropertyConstsClass'
)">This class</a>, and the singleton object which is <a
href="javascript:window.top.displayCode(
'PropertyConsts.html#pconsts' )">generated by the static
initializer</a>, is essentially a repository of
<property> class instances and the static data from
those classes of <span
class="codefrag">org.apache.fop.fo.property</span>.
The heart of this class is the method <a href=
"javascript:window.top.displayCode(
'PropertyConsts.html#setupProperty' )"><span class="codefrag"
>setupProperty</span ></a>. Whenever access to the data or
methods of a property class is required, this method in the
singleton must be called to ensure that an instance of the
property exists and that the static data from that instance
has been extracted.
</p>
<div class="frame note">
<div class="label">Note</div>
<div class="content">
An alternative to this requirement would be to pre-load all
of the individual property classes during the system
initialization phase. This is not done currently because of
the start-up expense of the required class loading for over
three hundred classes, and the relatively low added expense
of checking for the existence of a property instance before
every access. Given that FOP is increasingly used in a
server environment, it may prove acceptable in the long run
to change to pre-loading.
</div>
</div>
<p>
The class name is generated and stored in the <a
href="javascript:window.top.displayCode(
'PropertyConsts.html#classNames' )"><span class="codefrag"
>classNames</span ></a> array; a class instance is generated
from the name and stored in the <a
href="javascript:window.top.displayCode(
'PropertyConsts.html#classes' )"><span class="codefrag"
>classes</span ></a> array; and an instance of the class is
generated from the class object and stored in the <a
href="javascript:window.top.displayCode(
'PropertyConsts.html#properties' )"><span class="codefrag"
>properties</span ></a> array.
</p>
<p>
The other data gathering facilities and access methods of this
class will be examined in conjunction with the various types
of property classes.
</p>
<p>
<strong>Previous:</strong> <a href = "classes-overview.html"
>Property classes overview</a>
</p>
<p>
<strong>Next:</strong> <a href= "simple-properties.html"
>Simple property classes</a>
</p>
</div>
</body>
</html>
1.1 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/propertyExpressions.ehtml
Index: propertyExpressions.ehtml
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Property Expression Parsing</title>
<script type="text/javascript" src="resources/codedisplay.js">
</script>
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" text="#000000" bgcolor="#FFFFFF">
<div class="content">
<h1>Property Expression Parsing</h1>
<p>
<font size="-2">by Peter B. West</font>
</p>
<ul class="minitoc">
<li>
<a href="#N10014">Property expression parsing</a>
<ul class="minitoc">
<li>
<a href="#N10044">Data types</a>
</li>
<li>
<a href="#N10252">Tokenizer</a>
</li>
<li>
<a href="#N1029C">Parser</a>
</li>
</ul>
</li>
</ul>
<a name="N10014"></a>
<h3>Property expression parsing</h3>
<p>
The parsing of property value expressions is handled by two
closely related classes: <span id = "span00" ></span ><a href=
"javascript:toggleCode( 'span00',
'PropertyTokenizer.html#PropertyTokenizerClass', '50%', '100%'
)" ><span class= "codefrag"
>org.apache.fop.fo.expr.PropertyTokenizer</span></a> and its
subclass, <span id = "span01" ></span ><a href=
"javascript:toggleCode( 'span01',
'PropertyParser.html#PropertyParserClass', '50%', '100%' )"
><span class= "codefrag"
>org.apache.fop.fo.expr.PropertyParser</span></a>, and by
<span class= "codefrag" >refineParsing(int, FONode,
PropertyValue)</span> methods in the individual property
classes. <span class= "codefrag" >PropertyTokenizer</span>,
as the name suggests, handles the tokenizing of the
expression, handing <span id = "span02" ></span ><a href=
"javascript:toggleCode( 'span02',
'PropertyTokenizer.html#EOF', '50%', '100%' )"
><em>tokens</em></a> back to its subclass, <span class=
"codefrag" >PropertyParser</span>. <span class= "codefrag"
>PropertyParser</span>, in turn, returns a <span id = "span03"
></span ><a href= "javascript:toggleCode( 'span03',
'PropertyValueList.html#PropertyValueListClass', '50%', '100%'
)" ><span class= "codefrag">PropertyValueList</span></a>, a
list of <span id = "span04" ></span ><a href=
"javascript:toggleCode( 'span04',
'PropertyValue.html#PropertyValueInterface', '50%', '100%' )"
><span class= "codefrag">PropertyValue</span></a>s.
</p>
<p>
The tokenizer and parser rely in turn on the datatype
definitions from the <span class= "codefrag"
>org.apache.fop.datatypes</span> package, which include the
<span id = "span05" ></span ><a href= "javascript:toggleCode(
'span05', 'PropertyValue.html#NO_TYPE', '50%', '100%' )"
><span class= "codefrag" >PropertyValue</span> datatype
constant definitions</a>.
</p>
<a name="N10044"></a>
<h4>Data types</h4>
<p>
The data types currently defined in
<span class= "codefrag" >org.apache.fop.datatypes</span> include:
</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<th colspan="2" rowspan="1">Numbers and lengths</th>
</tr>
<tr>
<th colspan="1" rowspan="1">Numeric</th>
<td colspan="3" rowspan="1">
The fundamental length data type. <em>Numerics</em> of
various types are constructed by the classes listed
below.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<th colspan="3"
rowspan="1">Constructor classes for <em>Numeric</em></th>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">Ems</td>
<td colspan="2" rowspan="1">Relative length in <em>ems</em></td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">IntegerType</td>
<td colspan="1" rowspan="1"></td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">Length</td>
<td colspan="2" rowspan="1">In centimetres(cm), millimetres(mm),
inches(in), points(pt), picas(pc) or pixels(px)</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">Percentage</td>
<td colspan="1" rowspan="1"></td>
</tr>
<tr>
<th colspan="1" rowspan="1">Other Numeric</th>
<td colspan="3" rowspan="1">
Other numeric vaues which do not interact with the
lengths represented by <em>Numeric</em> values.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">Angle</td>
<td colspan="2" rowspan="1">In degrees(deg), gradients(grad) or
radians(rad)</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">Frequency</td>
<td colspan="2" rowspan="1">In hertz(Hz) or kilohertz(kHz)</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1">Time</td>
<td colspan="1" rowspan="1">In seconds(s) or milliseconds(ms)</td>
</tr>
<tr>
<th colspan="2" rowspan="1">Strings</th>
</tr>
<tr>
<th colspan="1" rowspan="1">StringType</th>
<td colspan="3" rowspan="1">
Base class for data types which result in a <em>String</em>.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">Literal</th>
<td colspan="2" rowspan="1">
A subclass of <em>StringType</em> for literals which
exceed the constraints of an <em>NCName</em>.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">MimeType</th>
<td colspan="2" rowspan="1">
A subclass of <em>StringType</em> for literals which
represent a mime type.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">UriType</th>
<td colspan="2" rowspan="1">
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 colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">NCName</th>
<td colspan="2" rowspan="1">
A subclass of <em>StringType</em> for literals which
meet the constraints of an <em>NCName</em>.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">Country</th>
<td colspan="1" rowspan="1">An RFC 3066/ISO 3166 country code.</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">Language</th>
<td colspan="1" rowspan="1">An RFC 3066/ISO 639 language code.</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">Script</th>
<td colspan="1" rowspan="1">An ISO 15924 script code.</td>
</tr>
<tr>
<th colspan="2" rowspan="1">Enumerated types</th>
</tr>
<tr>
<th colspan="1" rowspan="1">EnumType</th>
<td colspan="3" rowspan="1">
An integer representing one of the tokens in a set of
enumeration values.
</td>
</tr>
<tr>
<td colspan="1" rowspan="1"></td>
<th colspan="1" rowspan="1">MappedNumeric</th>
<td colspan="2" rowspan="1">
A subclass of <em>EnumType</em>. Maintains a
<em>Numeric</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>Numeric</em> "12pt".
</td>
</tr>
<tr>
<th colspan="2" rowspan="1">Colors</th>
</tr>
<tr>
<th colspan="1" rowspan="1">ColorType</th>
<td colspan="3" rowspan="1">
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" rowspan="1">Fonts</th>
</tr>
<tr>
<th colspan="1" rowspan="1">FontFamilySet</th>
<td colspan="3" rowspan="1">
Maintains an array of <em>String</em>s containing a
prioritized list of possibly generic font family names.
</td>
</tr>
<tr>
<th colspan="2" rowspan="1">Pseudo-types</th>
</tr>
<tr>
<td colspan="4" rowspan="1">
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 colspan="1" rowspan="1">Inherit</th>
<td colspan="3" rowspan="1">
For values of <em>inherit</em>.
</td>
</tr>
<tr>
<th colspan="1" rowspan="1">Auto</th>
<td colspan="3" rowspan="1">
For values of <em>auto</em>.
</td>
</tr>
<tr>
<th colspan="1" rowspan="1">None</th>
<td colspan="3" rowspan="1">
For values of <em>none</em>.
</td>
</tr>
<tr>
<th colspan="1" rowspan="1">Bool</th>
<td colspan="3" rowspan="1">
For values of <em>true/false</em>.
</td>
</tr>
<tr>
<th colspan="1" rowspan="1">FromNearestSpecified</th>
<td colspan="3" rowspan="1">
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 colspan="1" rowspan="1">FromParent</th>
<td colspan="3" rowspan="1">
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>
<a name="N10252"></a>
<h4>Tokenizer</h4>
<p>
As mentioned above, the <span class= "codefrag"
>PropertyTokenizer</span> hands <span id = "span06" ></span
><a href= "javascript:toggleCode( 'span06',
'PropertyTokenizer.html#EOF', '50%', '100%' )"
><em>tokens</em></a> back to its subclass, <span class=
"codefrag" >PropertyParser</span>. 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 <span class= "codefrag" >content-type</span>
introduces this complication. It can have two values of the
form <strong>content-type:</strong><em>mime-type</em>
(e.g. <span class= "codefrag"
>content-type="content-type:xml/svg"</span>) or
<strong>namespace-prefix:</strong><em>prefix</em>
(e.g. <span class= "codefrag"
>content-type="namespace-prefix:svg"</span>). The
experimental code reduces these options to the payload in
each case: an <span class= "codefrag" >NCName</span> in the
case of a namespace prefix, and a MIMETYPE in the case of a
content-type specification. <span class= "codefrag"
>NCName</span>s cannot contain a "/".
</dd>
</dl>
<a name="N1029C"></a>
<h4>Parser</h4>
<p>
The parser returns a <span id = "span07" ></span ><a href=
"javascript:toggleCode( 'span07',
'PropertyValueList.html#PropertyValueListClass', '50%', '100%'
)" ><span class= "codefrag" >PropertyValueList</span ></a>,
necessary because of the possibility that a list of <span id =
"span08" ></span ><a href= "javascript:toggleCode( 'span08',
'PropertyValue.html#PropertyValueInterface', '50%', '100%' )"
><span class= "codefrag" >PropertyValue</span ></a> elements
may be returned from the expressions of some properties.
</p>
<p>
<span class= "codefrag" >PropertyValueList</span>s may contain
<span class= "codefrag" >PropertyValue</span>s or other <span
class= "codefrag" >PropertyValueList</span>s. This latter
provision is necessitated by some of the more peculiar
expression possibilities, <em>e.g.</em> <em>font</em> and
<em>text-shadow</em>. <em>text-shadow</em> 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 <span class= "codefrag" >from-parent()</span> and
<span class= "codefrag" >from-nearest-specified-value()</span>
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 <span
class= "codefrag" >FromParent</span> and <span
class= "codefrag" >FromNearestSpecified</span> 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>
</div>
</body>
</html>
1.1 xml-fop/src/documentation/content/xdocs/design/alt.design/properties/simple-properties.ehtml
Index: simple-properties.ehtml
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Simple <property> Classes</title>
<script type="text/javascript" src="resources/codedisplay.js">
</script>
</head>
<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" text="#000000" bgcolor="#FFFFFF">
<div class="content">
<h1>Simple <property> Classes</h1>
<p>
<font size="-2">by Peter B. West</font>
</p>
<ul class="minitoc">
<li>
<a href="#N10014">Introduction</a>
</li>
<li>
<a href="#N10026">Common data</a>
</li>
<li>
<a href="#N10075">Accessing <property> Data Constants</a>
</li>
</ul>
<a name="N10014"></a>
<h3>Introduction</h3>
<p>
An <a href="classes-overview.html">overview of the properties
and classes</a> involved in handling properties has already
been given. This discussion will go in detail into the way
data are represented within properties. Iit is important to
keep in mind that the primary avenue of access to the data and
the methods of property classes is the <span id = "span00"
></span ><a href= "javascript:toggleCode( 'span00',
'PropertyConsts.html#PropertyConstsClass', '50%', '100%' )"
><span class="codefrag">PropertyConsts</span></a> class and
its singleton object.
</p>
<a name="N10026"></a>
<h3>Common data</h3>
<p>
<span id = "span01" ></span ><a href= "javascript:toggleCode(
'span01', 'Character.html', '50%', '100%' )" ><span
class="codefrag">org.apache.fop.fo.properties.Character</span></a>
is an example of a basic property class. The data fields
common to all properties are:
</p>
<dl>
<dt>
<span class="codefrag">final int dataTypes</span>
</dt>
<dd>
This field defines the allowable data types which may be
assigned to the property. The value is chosen from the data
type constants defined in <span id = "span02" ></span ><a
href= "javascript:toggleCode( 'span02',
'Property.html#NOTYPE', '50%', '100%' )" ><span
class="codefrag">org.apache.fop.fo.properties.Property</span></a>,
and may consist of more than one of those constants,
bit-ORed together.
</dd>
<dt>
<span class="codefrag">final int traitMapping</span>
</dt>
<dd>
This field defines the mapping of properties to traits in
the <span class="codefrag">Area tree</span>. The value is
chosen from the trait mapping constants defined in <span id
= "span03" ></span ><a href= "javascript:toggleCode(
'span03', 'Property.html#NO_TRAIT', '50%', '100%' )" ><span
class="codefrag">org.apache.fop.fo.properties.Property</span></a>,
and may consist of more than one of those constants,
bit-ORed together.
</dd>
<dt>
<span class="codefrag">final int initialValueType</span>
</dt>
<dd>
This field defines the data type of the initial value
assigned to the property. The value is chosen from the
initial value type constants defined in <span id = "span04"
></span ><a href= "javascript:toggleCode( 'span04',
'Property.html#NOTYPE_IT', '50%', '100%' )" ><span
class="codefrag">org.apache.fop.fo.properties.Property</span></a>.
In the simplest property classes, such as <span
class="codefrag">Character</span>, there is no defined
initial value type.
</dd>
<dt>
<span class="codefrag">final int inherited</span>
</dt>
<dd>
This field defines the kind of inheritance applicable to the
property. The value is chosen from the inheritance
constants defined in <span id = "span05" ></span ><a href=
"javascript:toggleCode( 'span05', 'Property.html#NO', '50%',
'100%' )" ><span
class="codefrag">org.apache.fop.fo.properties.Property</span></a>.
</dd>
</dl>
<a name="N10075"></a>
<h3>Accessing <property> Data Constants</h3>
<p>
The constants above are generally accessed through the arrays
maintained in the <span id = "span06" ></span ><a href=
"javascript:toggleCode( 'span06',
'PropertyConsts.html#PropertyConstsClass', '50%', '100%' )"
><span class="codefrag">PropertyConsts</span></a> singleton
<span id = "span07" ></span ><a href= "javascript:toggleCode(
'span07', 'PropertyConsts.html#pconsts', '50%', '100%' )"
><span class="codefrag">pconsts</span></a>. The first
invocation of the method <span id = "span08" ></span ><a href=
"javascript:toggleCode( 'span08',
'PropertyConsts.html#setupProperty', '50%', '100%' )" ><span
class="codefrag">setupProperty</span></a> on the property
generates a <span class="codefrag">Class</span> instance for
the class, and stores it in the array <span id = "span09"
></span ><a href= "javascript:toggleCode( 'span09',
'PropertyConsts.html#classes', '50%', '100%' )" ><span
class="codefrag">classes</span></a>. This <span
class="codefrag">Class</span> object is used, in turn, to
instantiate the singleton instance of the class, which is
stored in the <span id = "span10" ></span ><a href=
"javascript:toggleCode( 'span10',
'PropertyConsts.html#properties', '50%', '100%' )" ><span
class="codefrag">Property[] properties</span></a> array of
<span id = "span11" ></span ><a href= "javascript:toggleCode(
'span11', '../PropertyConsts.html#pconsts', '50%', '100%' )"
><span class="codefrag">pconsts</span></a>.
</p>
<p>
<em>Reflection</em> methods are then used, via the same <span
class="codefrag">Class</span> instance, to extract and store
the static data fields. These arrays and associated access
methods are:
</p>
<dl>
<dt>
<span id = "span12" ></span ><a href=
"javascript:toggleCode( 'span12',
'PropertyConsts.html#datatypes', '50%', '100%' )" ><span
class="codefrag">int[] datatypes</span></a>
</dt>
<dd>
<span id = "span13" ></span ><a href=
"javascript:toggleCode( 'span13',
'PropertyConsts.html#getDataTypes', '50%', '100%' )" ><span
class="codefrag">int getDataTypes(int)</span></a>
</dd>
<dt>
<span id = "span14" ></span ><a href=
"javascript:toggleCode( 'span14',
'PropertyConsts.html#traitMappings', '50%', '100%' )" ><span
class="codefrag">int[] traitMappings</span></a>
</dt>
<dd>
<em>No access method yet defined.</em>
</dd>
<dt>
<span id = "span15" ></span ><a href=
"javascript:toggleCode( 'span15',
'PropertyConsts.html#initialValueTypes', '50%', '100%' )"
><span class="codefrag">int[] initialValueTypes</span></a>
</dt>
<dd>
<span id = "span16" ></span ><a href=
"javascript:toggleCode( 'span16',
'PropertyConsts.html#getInitialValueType', '50%', '100%' )"
><span class="codefrag">int
getInitialValueType(int)</span></a>
</dd>
<dt>
<span id = "span17" ></span ><a href=
"javascript:toggleCode( 'span17',
'PropertyConsts.html#inherited', '50%', '100%' )" ><span
class="codefrag">int[] inherited</span></a>
</dt>
<dd>
<span id = "span18" ></span ><a href=
"javascript:toggleCode( 'span18',
'PropertyConsts.html#inheritance', '50%', '100%' )" ><span
class="codefrag">int inheritance(int)</span></a>
</dd>
</dl>
<p>
<strong>Previous:</strong> <a href = "PropertyConsts-class.html"
>PropertyConsts class</a>
</p>
<p>
<strong>Next:</strong> <a href= "getInitialValue.html"
>getInitialValue()</a>
</p>
</div>
</body>
</HTML>
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org