aboutsummaryrefslogtreecommitdiffstats
path: root/fop-core/src/main/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'fop-core/src/main/codegen')
-rw-r--r--fop-core/src/main/codegen/fo/colorkw.xml166
-rw-r--r--fop-core/src/main/codegen/fo/constants.xml21
-rw-r--r--fop-core/src/main/codegen/fo/constants.xsl266
-rw-r--r--fop-core/src/main/codegen/fo/fo-property-mapping.xsl254
-rw-r--r--fop-core/src/main/codegen/fo/foelements.xml1102
-rw-r--r--fop-core/src/main/codegen/fo/foproperties.xml2241
-rw-r--r--fop-core/src/main/codegen/fo/properties.dtd328
-rw-r--r--fop-core/src/main/codegen/fo/property-sets.xsl289
-rw-r--r--fop-core/src/main/codegen/fo/propinc.xsl128
-rw-r--r--fop-core/src/main/codegen/fo/propmaker.xsl47
-rw-r--r--fop-core/src/main/codegen/fonts/Courier.xml267
-rw-r--r--fop-core/src/main/codegen/fonts/CourierBold.xml267
-rw-r--r--fop-core/src/main/codegen/fonts/CourierBoldOblique.xml267
-rw-r--r--fop-core/src/main/codegen/fonts/CourierOblique.xml267
-rw-r--r--fop-core/src/main/codegen/fonts/Helvetica.xml606
-rw-r--r--fop-core/src/main/codegen/fonts/HelveticaBold.xml564
-rw-r--r--fop-core/src/main/codegen/fonts/HelveticaBoldOblique.xml564
-rw-r--r--fop-core/src/main/codegen/fonts/HelveticaOblique.xml606
-rw-r--r--fop-core/src/main/codegen/fonts/Symbol.xml224
-rw-r--r--fop-core/src/main/codegen/fonts/TimesBold.xml645
-rw-r--r--fop-core/src/main/codegen/fonts/TimesBoldItalic.xml645
-rw-r--r--fop-core/src/main/codegen/fonts/TimesItalic.xml645
-rw-r--r--fop-core/src/main/codegen/fonts/TimesRoman.xml645
-rw-r--r--fop-core/src/main/codegen/fonts/ZapfDingbats.xml236
-rw-r--r--fop-core/src/main/codegen/fonts/charlist.xml633
-rw-r--r--fop-core/src/main/codegen/fonts/code-point-mapping.xsl171
-rw-r--r--fop-core/src/main/codegen/fonts/encodings.xml1654
-rw-r--r--fop-core/src/main/codegen/fonts/font-file.xsl234
-rw-r--r--fop-core/src/main/codegen/fonts/glyphlist.xml1293
-rw-r--r--fop-core/src/main/codegen/fonts/t1font-file.xsl225
-rw-r--r--fop-core/src/main/codegen/fonts/ttffontfile.xsl217
-rw-r--r--fop-core/src/main/codegen/jdk13.filter4
-rw-r--r--fop-core/src/main/codegen/jdk14.filter2
-rw-r--r--fop-core/src/main/codegen/unicode/data/LineBreakPairTable.txt29
-rw-r--r--fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiClass.java570
-rw-r--r--fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiTestData.java1265
-rw-r--r--fop-core/src/main/codegen/unicode/java/org/apache/fop/hyphenation/UnicodeClasses.java410
-rw-r--r--fop-core/src/main/codegen/unicode/java/org/apache/fop/text/linebreak/GenerateLineBreakUtils.java704
-rw-r--r--fop-core/src/main/codegen/unicode/java/org/apache/fop/util/License.java122
39 files changed, 18823 insertions, 0 deletions
diff --git a/fop-core/src/main/codegen/fo/colorkw.xml b/fop-core/src/main/codegen/fo/colorkw.xml
new file mode 100644
index 000000000..0a0c2717d
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/colorkw.xml
@@ -0,0 +1,166 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<toto>
+<keyword-equiv match="aliceblue">#f0f8ff</keyword-equiv>
+<keyword-equiv match="antiquewhite">#faebd7</keyword-equiv>
+<keyword-equiv match="aqua">#00ffff</keyword-equiv>
+<keyword-equiv match="aquamarine">#7fffd4</keyword-equiv>
+<keyword-equiv match="azure">#f0ffff</keyword-equiv>
+<keyword-equiv match="beige">#f5f5dc</keyword-equiv>
+<keyword-equiv match="bisque">#ffe4c4</keyword-equiv>
+<keyword-equiv match="black">#000000</keyword-equiv>
+<keyword-equiv match="blanchedalmond">#ffebcd</keyword-equiv>
+<keyword-equiv match="blue">#0000ff</keyword-equiv>
+<keyword-equiv match="blueviolet">#8a2be2</keyword-equiv>
+<keyword-equiv match="brown">#a52a2a</keyword-equiv>
+<keyword-equiv match="burlywood">#deb887</keyword-equiv>
+<keyword-equiv match="cadetblue">#5f9ea0</keyword-equiv>
+<keyword-equiv match="chartreuse">#7fff00</keyword-equiv>
+<keyword-equiv match="chocolate">#d2691e</keyword-equiv>
+<keyword-equiv match="coral">#ff7f50</keyword-equiv>
+<keyword-equiv match="cornflowerblue">#6495ed</keyword-equiv>
+<keyword-equiv match="cornsilk">#fff8dc</keyword-equiv>
+<keyword-equiv match="crimson">#dc143c</keyword-equiv>
+<keyword-equiv match="cyan">#00ffff</keyword-equiv>
+<keyword-equiv match="darkblue">#00008b</keyword-equiv>
+<keyword-equiv match="darkcyan">#008b8b</keyword-equiv>
+<keyword-equiv match="darkgoldenrod">#b8860b</keyword-equiv>
+<keyword-equiv match="darkgray">#a9a9a9</keyword-equiv>
+<keyword-equiv match="darkgreen">#006400</keyword-equiv>
+<keyword-equiv match="darkgrey">#a9a9a9</keyword-equiv>
+<keyword-equiv match="darkkhaki">#bdb76b</keyword-equiv>
+<keyword-equiv match="darkmagenta">#8b008b</keyword-equiv>
+<keyword-equiv match="darkolivegreen">#556b2f</keyword-equiv>
+<keyword-equiv match="darkorange">#ff8c00</keyword-equiv>
+<keyword-equiv match="darkorchid">#9932cc</keyword-equiv>
+<keyword-equiv match="darkred">#8b0000</keyword-equiv>
+<keyword-equiv match="darksalmon">#e9967a</keyword-equiv>
+<keyword-equiv match="darkseagreen">#8fbc8f</keyword-equiv>
+<keyword-equiv match="darkslateblue">#483d8b</keyword-equiv>
+<keyword-equiv match="darkslategray">#2f4f4f</keyword-equiv>
+<keyword-equiv match="darkslategrey">#2f4f4f</keyword-equiv>
+<keyword-equiv match="darkturquoise">#00ced1</keyword-equiv>
+<keyword-equiv match="darkviolet">#9400d3</keyword-equiv>
+<keyword-equiv match="deeppink">#ff1493</keyword-equiv>
+<keyword-equiv match="deepskyblue">#00bfff</keyword-equiv>
+<keyword-equiv match="dimgray">#696969</keyword-equiv>
+<keyword-equiv match="dimgrey">#696969</keyword-equiv>
+<keyword-equiv match="dodgerblue">#1e90ff</keyword-equiv>
+<keyword-equiv match="firebrick">#b22222</keyword-equiv>
+<keyword-equiv match="floralwhite">#fffaf0</keyword-equiv>
+<keyword-equiv match="forestgreen">#228b22</keyword-equiv>
+<keyword-equiv match="fuchsia">#ff00ff</keyword-equiv>
+<keyword-equiv match="gainsboro">#dcdcdc</keyword-equiv>
+<keyword-equiv match="lightpink">#ffb6c1</keyword-equiv>
+<keyword-equiv match="lightsalmon">#ffa07a</keyword-equiv>
+<keyword-equiv match="lightseagreen">#20b2aa</keyword-equiv>
+<keyword-equiv match="lightskyblue">#87cefa</keyword-equiv>
+<keyword-equiv match="lightslategray">#778899</keyword-equiv>
+<keyword-equiv match="lightslategrey">#778899</keyword-equiv>
+<keyword-equiv match="lightsteelblue">#b0c4de</keyword-equiv>
+<keyword-equiv match="lightyellow">#ffffe0</keyword-equiv>
+<keyword-equiv match="lime">#00ff00</keyword-equiv>
+<keyword-equiv match="limegreen">#32cd32</keyword-equiv>
+<keyword-equiv match="linen">#faf0e6</keyword-equiv>
+<keyword-equiv match="magenta">#ff00ff</keyword-equiv>
+<keyword-equiv match="maroon">#800000</keyword-equiv>
+<keyword-equiv match="mediumaquamarine">#66cdaa</keyword-equiv>
+<keyword-equiv match="mediumblue">#0000cd</keyword-equiv>
+<keyword-equiv match="mediumorchid">#ba55d3</keyword-equiv>
+<keyword-equiv match="mediumpurple">#9370db</keyword-equiv>
+<keyword-equiv match="mediumseagreen">#3cb371</keyword-equiv>
+<keyword-equiv match="mediumslateblue">#7b68ee</keyword-equiv>
+<keyword-equiv match="mediumspringgreen">#00fa9a</keyword-equiv>
+<keyword-equiv match="mediumturquoise">#48d1cc</keyword-equiv>
+<keyword-equiv match="mediumvioletred">#c71585</keyword-equiv>
+<keyword-equiv match="midnightblue">#191970</keyword-equiv>
+<keyword-equiv match="mintcream">#f5fffa</keyword-equiv>
+<keyword-equiv match="mistyrose">#ffe4e1</keyword-equiv>
+<keyword-equiv match="moccasin">#ffe4b5</keyword-equiv>
+<keyword-equiv match="navajowhite">#ffdead</keyword-equiv>
+<keyword-equiv match="navy">#000080</keyword-equiv>
+<keyword-equiv match="oldlace">#fdf5e6</keyword-equiv>
+<keyword-equiv match="olive">#808000</keyword-equiv>
+<keyword-equiv match="olivedrab">#6b8e23</keyword-equiv>
+<keyword-equiv match="orange">#ffa500</keyword-equiv>
+<keyword-equiv match="orangered">#ff4500</keyword-equiv>
+<keyword-equiv match="orchid">#da70d6</keyword-equiv>
+<keyword-equiv match="palegoldenrod">#eee8aa</keyword-equiv>
+<keyword-equiv match="palegreen">#98fb98</keyword-equiv>
+<keyword-equiv match="paleturquoise">#afeeee</keyword-equiv>
+<keyword-equiv match="palevioletred">#db7093</keyword-equiv>
+<keyword-equiv match="papayawhip">#ffefd5</keyword-equiv>
+<keyword-equiv match="peachpuff">#ffdab9</keyword-equiv>
+<keyword-equiv match="peru">#cd853f</keyword-equiv>
+<keyword-equiv match="pink">#ffc0cb</keyword-equiv>
+<keyword-equiv match="plum">#dda0dd</keyword-equiv>
+<keyword-equiv match="powderblue">#b0e0e6</keyword-equiv>
+<keyword-equiv match="purple">#800080</keyword-equiv>
+<keyword-equiv match="red">#ff0000</keyword-equiv>
+<keyword-equiv match="rosybrown">#bc8f8f</keyword-equiv>
+<keyword-equiv match="royalblue">#4169e1</keyword-equiv>
+<keyword-equiv match="saddlebrown">#8b4513</keyword-equiv>
+<keyword-equiv match="salmon">#fa8072</keyword-equiv>
+<keyword-equiv match="ghostwhite">#f8f8ff</keyword-equiv>
+<keyword-equiv match="gold">#ffd700</keyword-equiv>
+<keyword-equiv match="goldenrod">#daa520</keyword-equiv>
+<keyword-equiv match="gray">#808080</keyword-equiv>
+<keyword-equiv match="grey">#808080</keyword-equiv>
+<keyword-equiv match="green">#008000</keyword-equiv>
+<keyword-equiv match="greenyellow">#adff2f</keyword-equiv>
+<keyword-equiv match="honeydew">#f0fff0</keyword-equiv>
+<keyword-equiv match="hotpink">#ff69b4</keyword-equiv>
+<keyword-equiv match="indianred">#cd5c5c</keyword-equiv>
+<keyword-equiv match="indigo">#4b0082</keyword-equiv>
+<keyword-equiv match="ivory">#fffff0</keyword-equiv>
+<keyword-equiv match="khaki">#f0e68c</keyword-equiv>
+<keyword-equiv match="lavender">#e6e6fa</keyword-equiv>
+<keyword-equiv match="lavenderblush">#fff0f5</keyword-equiv>
+<keyword-equiv match="lawngreen">#7cfc00</keyword-equiv>
+<keyword-equiv match="lemonchiffon">#fffacd</keyword-equiv>
+<keyword-equiv match="lightblue">#add8e6</keyword-equiv>
+<keyword-equiv match="lightcoral">#f08080</keyword-equiv>
+<keyword-equiv match="lightcyan">#e0ffff</keyword-equiv>
+<keyword-equiv match="lightgoldenrodyellow">#fafad2</keyword-equiv>
+<keyword-equiv match="lightgray">#d3d3d3</keyword-equiv>
+<keyword-equiv match="lightgreen">#90ee90</keyword-equiv>
+<keyword-equiv match="lightgrey">#d3d3d3</keyword-equiv>
+<keyword-equiv match="sandybrown">#f4a460</keyword-equiv>
+<keyword-equiv match="seagreen">#2e8b57</keyword-equiv>
+<keyword-equiv match="seashell">#fff5ee</keyword-equiv>
+<keyword-equiv match="sienna">#a0522d</keyword-equiv>
+<keyword-equiv match="silver">#c0c0c0</keyword-equiv>
+<keyword-equiv match="skyblue">#87ceeb</keyword-equiv>
+<keyword-equiv match="slateblue">#6a5acd</keyword-equiv>
+<keyword-equiv match="slategray">#708090</keyword-equiv>
+<keyword-equiv match="slategrey">#708090</keyword-equiv>
+<keyword-equiv match="snow">#fffafa</keyword-equiv>
+<keyword-equiv match="springgreen">#00ff7f</keyword-equiv>
+<keyword-equiv match="steelblue">#4682b4</keyword-equiv>
+<keyword-equiv match="tan">#d2b48c</keyword-equiv>
+<keyword-equiv match="teal">#008080</keyword-equiv>
+<keyword-equiv match="thistle">#d8bfd8</keyword-equiv>
+<keyword-equiv match="tomato">#ff6347</keyword-equiv>
+<keyword-equiv match="turquoise">#40e0d0</keyword-equiv>
+<keyword-equiv match="violet">#ee82ee</keyword-equiv>
+<keyword-equiv match="wheat">#f5deb3</keyword-equiv>
+<keyword-equiv match="white">#ffffff</keyword-equiv>
+<keyword-equiv match="whitesmoke">#f5f5f5</keyword-equiv>
+<keyword-equiv match="yellow">#ffff00</keyword-equiv>
+<keyword-equiv match="yellowgreen">#9acd32</keyword-equiv>
+</toto>
diff --git a/fop-core/src/main/codegen/fo/constants.xml b/fop-core/src/main/codegen/fo/constants.xml
new file mode 100644
index 000000000..d477506bb
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/constants.xml
@@ -0,0 +1,21 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<allprops>
+<propfile>foproperties.xml</propfile>
+<elementfile>foelements.xml</elementfile>
+</allprops>
diff --git a/fop-core/src/main/codegen/fo/constants.xsl b/fop-core/src/main/codegen/fo/constants.xsl
new file mode 100644
index 000000000..af51489af
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/constants.xsl
@@ -0,0 +1,266 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:include href="./propinc.xsl"/>
+
+<xsl:output method="text" />
+
+<xsl:template match="allprops">
+<xsl:variable name="constlist">
+ <xsl:for-each select="document(propfile)//generic-property-list
+ //enumeration/value">
+ <xsl:sort select="@const"/>
+ <xsl:value-of select="@const"/>:</xsl:for-each>
+</xsl:variable>
+
+<xsl:variable name="propertylist">
+ <xsl:for-each select="document(propfile)//generic-property-list//
+ property[not(@type = 'generic')]">
+ <xsl:sort select="name"/>
+ <xsl:text>PR_</xsl:text>
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="name" />
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ </xsl:for-each>
+</xsl:variable>
+
+<xsl:variable name="compoundpropertylist">
+ <xsl:for-each select="document(propfile)//generic-property-list//
+ property/compound/subproperty">
+ <xsl:sort select="name"/>
+ <xsl:text>CP_</xsl:text>
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="name" />
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ </xsl:for-each>
+</xsl:variable>
+
+<xsl:variable name="elementlist">
+ <xsl:for-each select="document(elementfile)//element">
+ <xsl:sort select="name"/>
+ <xsl:text>FO_</xsl:text>
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="name" />
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ </xsl:for-each>
+</xsl:variable>
+
+<xsl:text>
+
+package org.apache.fop.fo;
+
+public interface Constants {</xsl:text>
+
+ // element constants
+<xsl:call-template name="sortconsts">
+ <xsl:with-param name="consts" select="$elementlist"/>
+ <xsl:with-param name="counter" select="'ELEMENT'"/>
+</xsl:call-template>
+
+ // Masks
+ int COMPOUND_SHIFT = 9;
+ int PROPERTY_MASK = (1 &lt;&lt; COMPOUND_SHIFT)-1;
+ int COMPOUND_MASK = ~PROPERTY_MASK;
+ int COMPOUND_COUNT = 11;
+
+ // property constants
+<xsl:call-template name="sortconsts">
+ <xsl:with-param name="consts" select="$propertylist"/>
+ <xsl:with-param name="counter" select="'PROPERTY'"/>
+</xsl:call-template>
+
+ // compound property constants
+<xsl:call-template name="sortconsts">
+ <xsl:with-param name="consts" select="$compoundpropertylist"/>
+ <xsl:with-param name="suffix" select="' &lt;&lt; COMPOUND_SHIFT'"/>
+</xsl:call-template>
+
+ // Enumeration constants
+<xsl:call-template name="sortconsts">
+ <xsl:with-param name="consts" select="$constlist"/>
+</xsl:call-template>
+
+ // Enumeration Interfaces
+
+ public interface GenericBooleanInterface {
+ int TRUE = Constants.TRUE;
+ int FALSE = Constants.FALSE;
+ }
+
+ public interface GenericBorderStyleInterface {
+ int NONE = Constants.NONE;
+ int HIDDEN = Constants.HIDDEN;
+ int DOTTED = Constants.DOTTED;
+ int DASHED = Constants.DASHED;
+ int SOLID = Constants.SOLID;
+ int DOUBLE = Constants.DOUBLE;
+ int GROOVE = Constants.GROOVE;
+ int RIDGE = Constants.RIDGE;
+ int INSET = Constants.INSET;
+ int OUTSET = Constants.OUTSET;
+ }
+
+ public interface GenericBreakInterface {
+ int AUTO = Constants.AUTO;
+ int COLUMN = Constants.COLUMN;
+ int PAGE = Constants.PAGE;
+ int EVEN_PAGE = Constants.EVEN_PAGE;
+ int ODD_PAGE = Constants.ODD_PAGE;
+ }
+
+ public interface GenericCondBorderWidthInterface {
+ public interface Conditionality {
+ int DISCARD = Constants.DISCARD;
+ int RETAIN = Constants.RETAIN;
+ }
+ }
+
+ public interface GenericCondPaddingInterface {
+ public interface Conditionality {
+ int DISCARD = Constants.DISCARD;
+ int RETAIN = Constants.RETAIN;
+ }
+ }
+
+ public interface GenericKeepInterface {
+ public interface WithinPage {
+ int AUTO = Constants.AUTO;
+ int ALWAYS = Constants.ALWAYS;
+ }
+ public interface WithinLine {
+ int AUTO = Constants.AUTO;
+ int ALWAYS = Constants.ALWAYS;
+ }
+ public interface WithinColumn {
+ int AUTO = Constants.AUTO;
+ int ALWAYS = Constants.ALWAYS;
+ }
+ }
+
+ public interface GenericSpaceInterface {
+ public interface Precedence {
+ int FORCE = Constants.FORCE;
+ }
+ public interface Conditionality {
+ int DISCARD = Constants.DISCARD;
+ int RETAIN = Constants.RETAIN;
+ }
+ }
+
+<xsl:apply-templates select = "document(propfile)//property[not(@type='generic')]">
+ <xsl:sort select="name"/>
+</xsl:apply-templates>
+
+<xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="property">
+ <xsl:variable name="classname">
+ <xsl:choose>
+ <xsl:when test="class-name">
+ <xsl:value-of select="class-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="makeClassName">
+ <xsl:with-param name="propstr" select="name"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="bEnum">
+ <xsl:call-template name="hasEnum"/>
+ </xsl:variable>
+ <xsl:variable name="bSubpropEnum">
+ <xsl:call-template name="hasSubpropEnum"/>
+ </xsl:variable>
+
+ <xsl:if test="$bEnum='true' or contains($bSubpropEnum, 'true')">
+ <!--redirect:write select="concat($classname, '.java')"-->
+ <!-- Handle enumeration values -->
+ <xsl:text>
+ public interface </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:if test="use-generic">
+ <xsl:text> extends </xsl:text>
+ <xsl:value-of select="use-generic"/>
+ <xsl:text>Interface</xsl:text>
+ </xsl:if>
+ <xsl:text> {</xsl:text>
+ <xsl:for-each select="enumeration/value">
+ <xsl:text>
+ int </xsl:text>
+ <xsl:value-of select="@const"/>
+ <xsl:text> = Constants.</xsl:text>
+ <xsl:value-of select="@const"/>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:text> }
+</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="sortconsts">
+<xsl:param name="consts"/>
+<xsl:param name="prevconst"/>
+<xsl:param name="num" select="1"/>
+<xsl:param name="suffix" select="''"/>
+<xsl:param name="counter" select="''"/>
+<xsl:variable name="cval" select="substring-before($consts,':')"/>
+<xsl:choose>
+ <xsl:when test="$consts = ''">
+ <xsl:if test="$counter != ''">
+ <xsl:text>
+ int </xsl:text>
+ <xsl:value-of select="$counter"/>_COUNT = <xsl:value-of select="$num - 1"/>;
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="$cval = $prevconst">
+ <xsl:call-template name="sortconsts">
+ <xsl:with-param name="consts" select="substring-after($consts,concat($cval, ':'))"/>
+ <xsl:with-param name="num" select="$num"/>
+ <xsl:with-param name="prevconst" select="$cval"/>
+ <xsl:with-param name="counter" select="$counter"/>
+ <xsl:with-param name="suffix" select="$suffix"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ int </xsl:text>
+ <xsl:value-of select="$cval"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="$num"/>
+ <xsl:value-of select="$suffix"/>
+ <xsl:text>;</xsl:text>
+ <xsl:call-template name="sortconsts">
+ <xsl:with-param name="consts" select="substring-after($consts,concat($cval, ':'))"/>
+ <xsl:with-param name="num" select="$num + 1"/>
+ <xsl:with-param name="prevconst" select="$cval"/>
+ <xsl:with-param name="counter" select="$counter"/>
+ <xsl:with-param name="suffix" select="$suffix"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/fop-core/src/main/codegen/fo/fo-property-mapping.xsl b/fop-core/src/main/codegen/fo/fo-property-mapping.xsl
new file mode 100644
index 000000000..408144a36
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/fo-property-mapping.xsl
@@ -0,0 +1,254 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt">
+
+<xsl:include href="propinc.xsl"/>
+
+<xsl:output method="text" />
+
+
+<xsl:template name="genmaker">
+ <xsl:param name="prop" select="."/>
+ <xsl:param name="htname"/>
+
+ <xsl:variable name="makerclass">
+ <xsl:choose>
+ <xsl:when test="$prop/use-generic and count($prop/*)=2">
+ <xsl:value-of select="$prop/use-generic"/>
+ </xsl:when>
+ <xsl:when test="$prop/class-name">
+ <xsl:value-of select="$prop/class-name"/><xsl:text>Maker</xsl:text>
+ </xsl:when>
+ <xsl:otherwise> <!-- make from name -->
+ <xsl:call-template name="makeClassName">
+ <xsl:with-param name="propstr" select="$prop/name"/>
+ </xsl:call-template><xsl:text>Maker</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="lcletters" select="'abcdefghijklmnopqrstuvwxyz-:'" />
+ <xsl:variable name="ucletters" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ__'" />
+ <xsl:variable name="enum" select="translate($prop/name, $lcletters, $ucletters)"/>
+<xsl:text> addPropertyName("</xsl:text><xsl:value-of select="$prop/name"/>", PR_<xsl:value-of select="$enum"/>);
+<xsl:text> </xsl:text><xsl:value-of select="$htname"/>[PR_<xsl:value-of select="$enum"/>] =<xsl:value-of select="$makerclass"/>.maker(PR_<xsl:value-of select="$enum"/>);
+</xsl:template>
+
+
+<xsl:template name="genenum">
+ <xsl:param name="prop" select="."/>
+ <xsl:variable name="lcletters" select="'abcdefghijklmnopqrstuvwxyz-:'" />
+ <xsl:variable name="ucletters" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ__'" />
+ <xsl:variable name="num" select="count(preceding-sibling::property)"/>
+ <xsl:variable name="enum" select="translate($prop/name, $lcletters, $ucletters)"/>
+<!--
+<xsl:text> public final static short </xsl:text><xsl:value-of select="$enum"/> = <xsl:value-of select="$num"/>;
+-->
+</xsl:template>
+
+
+<xsl:template match="text()"/>
+<xsl:template match="text()" mode="enums"/>
+
+<xsl:template match="property-list">
+package org.apache.fop.fo.properties;
+
+import java.util.HashMap;
+import java.util.Set;
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.Property;
+//import org.apache.fop.svg.*;
+
+public class <xsl:value-of select="@family"/>PropertyMapping implements Constants {
+
+ private static Property.Maker[] s_htGeneric = new Property.Maker[PROPERTY_COUNT+1];
+ /* s_htElementLists not currently used; apparently for specifying element-specific
+ * property makers (instead of the default maker for a particular property); see
+ * former org.apache.fop.fo.PropertyListBuilder
+ */
+ private static HashMap s_htElementLists = new HashMap();
+ private static HashMap s_htSubPropNames = new HashMap();
+ private static HashMap s_htPropNames = new HashMap();
+ private static HashMap s_htPropIds = new HashMap();
+ <xsl:for-each select="element-property-list">
+ private static HashMap s_ht<xsl:value-of select="localname[1]"/>;</xsl:for-each>
+
+ <xsl:apply-templates/>
+
+ public static Property.Maker[] getGenericMappings() {
+ return s_htGeneric;
+ }
+
+ public static Set getElementMappings() {
+ return s_htElementLists.keySet();
+ }
+
+ public static Property.Maker[] getElementMapping(int elemName) {
+ return (Property.Maker[])s_htElementLists.get(new Integer(elemName));
+ }
+
+ public static int getPropertyId(String name) {
+ // check to see if base.compound or just base property
+ int sepchar = name.indexOf('.');
+
+ if (sepchar > -1) {
+ Integer baseId = (Integer) s_htPropNames.get(name.substring(0, sepchar));
+ if (baseId == null) {
+ return -1;
+ } else {
+ int cmpdId = getSubPropertyId(name.substring(sepchar + 1));
+ if (cmpdId == -1) {
+ return -1;
+ } else {
+ return baseId.intValue() + cmpdId;
+ }
+ }
+ } else {
+ Integer baseId = (Integer) s_htPropNames.get(name);
+ if (baseId == null)
+ return -1;
+ return baseId.intValue();
+ }
+ }
+
+ public static int getSubPropertyId(String name) {
+ Integer i = (Integer) s_htSubPropNames.get(name);
+ if (i == null)
+ return -1;
+ return i.intValue();
+ }
+
+ // returns a property, compound, or property.compound name
+ public static String getPropertyName(int id) {
+ if (((id &amp; Constants.COMPOUND_MASK) == 0)
+ || ((id &amp; Constants.PROPERTY_MASK) == 0)) {
+ return (String) s_htPropIds.get(new Integer(id));
+ } else {
+ return (String) s_htPropIds.get(new Integer(
+ id &amp; Constants.PROPERTY_MASK)) + "." + s_htPropIds.get(
+ new Integer(id &amp; Constants.COMPOUND_MASK));
+ }
+ }
+
+ static {
+ addSubPropertyName("length", CP_LENGTH);
+ addSubPropertyName("conditionality", CP_CONDITIONALITY);
+ addSubPropertyName("block-progression-direction", CP_BLOCK_PROGRESSION_DIRECTION);
+ addSubPropertyName("inline-progression-direction", CP_INLINE_PROGRESSION_DIRECTION);
+ addSubPropertyName("within-line", CP_WITHIN_LINE);
+ addSubPropertyName("within-column", CP_WITHIN_COLUMN);
+ addSubPropertyName("within-page", CP_WITHIN_PAGE);
+ addSubPropertyName("minimum", CP_MINIMUM);
+ addSubPropertyName("maximum", CP_MAXIMUM);
+ addSubPropertyName("optimum", CP_OPTIMUM);
+ addSubPropertyName("precedence", CP_PRECEDENCE);
+
+ }
+
+ public static void addPropertyName(String name, int id) {
+ s_htPropNames.put(name, new Integer(id));
+ s_htPropIds.put(new Integer(id), name);
+ }
+
+ public static void addSubPropertyName(String name, int id) {
+ s_htSubPropNames.put(name, new Integer(id));
+ s_htPropIds.put(new Integer(id), name);
+ }
+}
+</xsl:template>
+
+<xsl:template match="generic-property-list">
+ <xsl:apply-templates mode="enums"/>
+ static {
+ // Generate the generic mapping
+<xsl:apply-templates>
+ <xsl:with-param name="htname" select='"s_htGeneric"'/>
+ </xsl:apply-templates>
+ }
+</xsl:template>
+
+<xsl:template match="element-property-list">
+ <xsl:variable name="ename" select="localname[1]"/>
+ static {
+ s_ht<xsl:value-of select="$ename"/> = new HashMap();
+ <xsl:for-each select="localname">
+ s_htElementLists.put("<xsl:value-of select='.'/>", s_ht<xsl:value-of select='$ename'/>);
+ </xsl:for-each>
+
+<xsl:apply-templates>
+ <xsl:with-param name='htname'>s_ht<xsl:value-of select="$ename"/></xsl:with-param>
+ </xsl:apply-templates>
+ }
+</xsl:template>
+
+<xsl:template match="property[@type='generic']" mode="enums">
+ /* PROPCLASS = <xsl:call-template name="propclass"/> */
+</xsl:template>
+
+<xsl:template match="property" mode="enums">
+ <xsl:param name="htname"/>
+ <xsl:variable name="refname" select="name"/>
+ <xsl:choose>
+ <xsl:when test="@type='ref'">
+ <xsl:call-template name="genenum">
+ <xsl:with-param name="htname" select="$htname"/>
+ <xsl:with-param name="prop"
+ select='document(concat(@family, "properties.xml"))//property[name=$refname]'/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="not(@type)">
+ <xsl:call-template name="genenum">
+ <xsl:with-param name="htname" select="$htname"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="subproperty" mode="enums">
+ <xsl:call-template name="genenum"/>
+</xsl:template>
+
+<xsl:template match="property">
+ <xsl:param name="htname"/>
+ <xsl:variable name="refname" select="name"/>
+ <xsl:choose>
+ <xsl:when test="@type='ref'">
+ <xsl:call-template name="genmaker">
+ <xsl:with-param name="htname" select="$htname"/>
+ <xsl:with-param name="prop"
+ select='document(concat(@family, "properties.xml"))//property[name=$refname]'/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="not(@type)">
+ <xsl:call-template name="genmaker">
+ <xsl:with-param name="htname" select="$htname"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="property[@type='generic']">
+ /* PROPCLASS = <xsl:call-template name="propclass"/> */
+</xsl:template>
+
+</xsl:stylesheet>
+
+
diff --git a/fop-core/src/main/codegen/fo/foelements.xml b/fop-core/src/main/codegen/fo/foelements.xml
new file mode 100644
index 000000000..db1360aab
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/foelements.xml
@@ -0,0 +1,1102 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<root>
+<common>
+ <name>CommonAccessibilityProperties</name>
+ <property>source-document</property>
+ <property>role</property>
+</common>
+
+
+<common>
+ <name>CommonAbsolutePositionProperties</name>
+ <property>absolute-position</property>
+ <property>position</property>
+ <property>top</property>
+ <property>right</property>
+ <property>bottom</property>
+ <property>left</property>
+</common>
+
+<common>
+ <name>CommonAuralProperties</name>
+ <property>azimuth</property>
+ <property>cue-after</property>
+ <property>cue-before</property>
+ <property>cue</property>
+ <property>elevation</property>
+ <property>pause-after</property>
+ <property>pause-before</property>
+ <property>pause</property>
+ <property>pitch</property>
+ <property>pitch-range</property>
+ <property>play-during</property>
+ <property>richness</property>
+ <property>speak</property>
+ <property>speak-header</property>
+ <property>speak-numeral</property>
+ <property>speak-punctuation</property>
+ <property>speech-rate</property>
+ <property>stress</property>
+ <property>voice-family</property>
+ <property>volume</property>
+</common>
+
+<common>
+ <name>CommonBorderPaddingBackgroundProperties</name>
+ <property>background-attachment</property>
+ <property>background-color</property>
+ <property>background-image</property>
+ <property>background-repeat</property>
+ <property>background-position-horizontal</property>
+ <property>background-position-vertical</property>
+ <property>border-before-color</property>
+ <property>border-before-style</property>
+ <property>border-before-width</property>
+ <property>border-after-color</property>
+ <property>border-after-style</property>
+ <property>border-after-width</property>
+ <property>border-start-color</property>
+ <property>border-start-style</property>
+ <property>border-start-width</property>
+ <property>border-end-color</property>
+ <property>border-end-style</property>
+ <property>border-end-width</property>
+ <property>border-top-color</property>
+ <property>border-top-style</property>
+ <property>border-top-width</property>
+ <property>border-bottom-color</property>
+ <property>border-bottom-style</property>
+ <property>border-bottom-width</property>
+ <property>border-left-color</property>
+ <property>border-left-style</property>
+ <property>border-left-width</property>
+ <property>border-right-color</property>
+ <property>border-right-style</property>
+ <property>border-right-width</property>
+ <property>padding-before</property>
+ <property>padding-after</property>
+ <property>padding-start</property>
+ <property>padding-end</property>
+ <property>padding-top</property>
+ <property>padding-bottom</property>
+ <property>padding-left</property>
+ <property>padding-right</property>
+
+ <!-- shorthands -->
+ <property>border</property>
+ <property>border-style</property>
+ <property>border-width</property>
+ <property>border-color</property>
+ <property>border-top</property>
+ <property>border-bottom</property>
+ <property>border-left</property>
+ <property>border-right</property>
+ <property>padding</property>
+
+</common>
+
+<common>
+ <name>CommonFontProperties</name>
+ <property>font</property>
+ <property>font-family</property>
+ <property>font-selection-strategy</property>
+ <property>font-size</property>
+ <property>font-stretch</property>
+ <property>font-size-adjust</property>
+ <property>font-style</property>
+ <property>font-variant</property>
+ <property>font-weight</property>
+</common>
+
+<common>
+ <name>CommonHyphenationProperties</name>
+ <property>country</property>
+ <property>language</property>
+ <property>script</property>
+ <property>hyphenate</property>
+ <property>hyphenation-character</property>
+ <property>hyphenation-push-character-count</property>
+ <property>hyphenation-remain-character-count</property>
+</common>
+
+<common>
+ <name>CommonMarginPropertiesBlock</name>
+ <property>margin</property>
+ <property>margin-top</property>
+ <property>margin-bottom</property>
+ <property>margin-left</property>
+ <property>margin-right</property>
+ <property>space-before</property>
+ <property>space-after</property>
+ <property>start-indent</property>
+ <property>end-indent</property>
+</common>
+
+
+<common>
+ <name>CommonMarginPropertiesInline</name>
+ <property>space-end</property>
+ <property>space-start</property>
+</common>
+
+<common>
+ <name>CommonRelativePositionProperties</name>
+ <property>relative-position</property>
+</common>
+
+
+
+
+<element>
+ <name>root</name>
+ <property>media-usage</property>
+ <content>layout-master-set</content>
+ <content>declaration</content>
+ <content>page-sequence</content>
+</element>
+
+<element>
+ <name>declaration</name>
+ <content>color-profile</content>
+</element>
+
+<element>
+ <name>color-profile</name>
+ <property>src</property>
+ <property>color-profile-name</property>
+ <property>rendering-intent</property>
+</element>
+
+<element>
+ <name>page-sequence</name>
+ <property>country</property>
+ <property>format</property>
+ <property>language</property>
+ <property>letter-value</property>
+ <property>grouping-separator</property>
+ <property>grouping-size</property>
+ <property>id</property>
+ <property>initial-page-number</property>
+ <property>force-page-count</property>
+ <property>master-reference</property>
+ <content>title</content>
+ <content>static-content</content>
+ <content>flow</content>
+</element>
+
+<element>
+ <name>layout-master-set</name>
+ <property>master-name</property>
+ <content>simple-page-master</content>
+ <content>page-sequence-master</content>
+</element>
+
+<element>
+ <name>page-sequence-master</name>
+ <property>master-name</property>
+ <content>single-page-master-reference</content>
+ <content>repeatable-page-master-reference</content>
+ <content>repeatable-page-master-alternatives</content>
+</element>
+
+<element>
+ <name>single-page-master-reference</name>
+ <property>master-reference</property>
+</element>
+
+<element>
+ <name>repeatable-page-master-reference</name>
+ <property>master-reference</property>
+ <property>maximum-repeats</property>
+</element>
+
+<element>
+ <name>repeatable-page-master-alternatives</name>
+ <property>maximum-repeats</property>
+ <content>conditional-page-master-reference</content>
+</element>
+
+<element>
+ <name>conditional-page-master-reference</name>
+ <property>master-reference</property>
+ <property>page-position</property>
+ <property>odd-or-even</property>
+ <property>blank-or-not-blank</property>
+</element>
+
+<element>
+ <name>simple-page-master</name>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <property>master-name</property>
+ <property>page-height</property>
+ <property>page-width</property>
+ <property>reference-orientation</property>
+ <property>writing-mode</property>
+ <content>region-body</content>
+ <content>region-before</content>
+ <content>region-after</content>
+ <content>region-start</content>
+ <content>region-end</content>
+</element>
+
+<element>
+ <name>region-body</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <property>clip</property>
+ <property>column-count</property>
+ <property>column-gap</property>
+ <property>display-align</property>
+ <property>overflow</property>
+ <property>region-name</property>
+ <property>reference-orientation</property>
+ <property>writing-mode</property>
+
+</element>
+
+<element>
+ <name>region-before</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <property>clip</property>
+ <property>display-align</property>
+ <property>extent</property>
+ <property>overflow</property>
+ <property>precedence</property>
+ <property>region-name</property>
+ <property>reference-orientation</property>
+ <property>writing-mode</property>
+
+</element>
+
+<element>
+ <name>region-after</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <property>clip</property>
+ <property>display-align</property>
+ <property>extent</property>
+ <property>overflow</property>
+ <property>precedence</property>
+ <property>region-name</property>
+ <property>reference-orientation</property>
+ <property>writing-mode</property>
+
+</element>
+
+<element>
+ <name>region-start</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <property>clip</property>
+ <property>display-align</property>
+ <property>extent</property>
+ <property>overflow</property>
+ <property>region-name</property>
+ <property>reference-orientation</property>
+ <property>writing-mode</property>
+
+</element>
+
+<element>
+ <name>region-end</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <property>clip</property>
+ <property>display-align</property>
+ <property>extent</property>
+ <property>overflow</property>
+ <property>region-name</property>
+ <property>reference-orientation</property>
+ <property>writing-mode</property>
+
+</element>
+
+<element>
+ <name>flow</name>
+ <property>flow-name</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>static-content</name>
+ <property>flow-name</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>title</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <property>color</property>
+ <property>line-height</property>
+ <property>visibility</property>
+ <content>%inline;</content>
+</element>
+
+<element>
+ <name>block</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonHyphenationProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>color</property>
+ <property>text-depth</property>
+ <property>text-altitude</property>
+ <property>hyphenation-keep</property>
+ <property>hyphenation-ladder-count</property>
+ <property>id</property>
+ <!-- property>intrusion-displace</property -->
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>last-line-end-indent</property>
+ <property>linefeed-treatment</property>
+ <property>line-height</property>
+ <property>line-height-shift-adjustment</property>
+ <property>line-stacking-strategy</property>
+ <property>orphans</property>
+ <property>white-space-treatment</property>
+ <property>span</property>
+ <property>text-align</property>
+ <property>text-align-last</property>
+ <property>text-indent</property>
+ <property>visibility</property>
+ <property>white-space-collapse</property>
+ <property>widows</property>
+ <property>wrap-option</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>block-container</name>
+ <common-ref>CommonAbsolutePositionProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <property>block-progression-dimension</property>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>clip</property>
+ <property>display-align</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <!--property>intrusion-displace</property -->
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>overflow</property>
+ <property>reference-orientation</property>
+ <property>span</property>
+ <property>width</property>
+ <property>writing-mode</property>
+ <property>z-index</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>bidi-override</name>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>color</property>
+ <property>direction</property>
+ <property>id</property>
+ <property>letter-spacing</property>
+ <property>line-height</property>
+ <property>score-spaces</property>
+ <property>unicode-bidi</property>
+ <property>word-spacing</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>character</name>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonHyphenationProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>treat-as-word-space</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>character</property>
+ <property>color</property>
+ <property>dominant-baseline</property>
+ <property>text-depth</property>
+ <property>text-altitude</property>
+ <property>glyph-orientation-horizontal</property>
+ <property>glyph-orientation-vertical</property>
+ <property>id</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>letter-spacing</property>
+ <property>line-height</property>
+ <property>score-spaces</property>
+ <property>suppress-at-line-break</property>
+ <property>text-decoration</property>
+ <property>text-shadow</property>
+ <property>text-transform</property>
+ <property>visibility</property>
+ <property>word-spacing</property>
+
+</element>
+
+<element>
+ <name>initial-property-set</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>color</property>
+ <property>id</property>
+ <property>letter-spacing</property>
+ <property>line-height</property>
+ <property>score-spaces</property>
+ <property>text-decoration</property>
+ <property>text-shadow</property>
+ <property>text-transform</property>
+ <property>word-spacing</property>
+
+</element>
+
+<element>
+ <name>external-graphic</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>block-progression-dimension</property>
+ <property>clip</property>
+ <property>content-height</property>
+ <property>content-type</property>
+ <property>content-width</property>
+ <property>display-align</property>
+ <property>dominant-baseline</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>line-height</property>
+ <property>overflow</property>
+ <property>scaling</property>
+ <property>scaling-method</property>
+ <property>src</property>
+ <property>text-align</property>
+ <property>width</property>
+
+</element>
+
+<element>
+ <name>instream-foreign-object</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>block-progression-dimension</property>
+ <property>clip</property>
+ <property>content-height</property>
+ <property>content-type</property>
+ <property>content-width</property>
+ <property>display-align</property>
+ <property>dominant-baseline</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>line-height</property>
+ <property>overflow</property>
+ <property>scaling</property>
+ <property>scaling-method</property>
+ <property>text-align</property>
+ <property>width</property>
+
+</element>
+
+<element>
+ <name>inline</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>block-progression-dimension</property>
+ <property>color</property>
+ <property>dominant-baseline</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>line-height</property>
+ <property>text-decoration</property>
+ <property>visibility</property>
+ <property>width</property>
+ <property>wrap-option</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>inline-container</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>block-progression-dimension</property>
+ <property>clip</property>
+ <property>display-align</property>
+ <property>dominant-baseline</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>line-height</property>
+ <property>overflow</property>
+ <property>reference-orientation</property>
+ <property>width</property>
+ <property>writing-mode</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>leader</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>color</property>
+ <property>dominant-baseline</property>
+ <property>text-depth</property>
+ <property>text-altitude</property>
+ <property>id</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>leader-alignment</property>
+ <property>leader-length</property>
+ <property>leader-pattern</property>
+ <property>leader-pattern-width</property>
+ <property>rule-style</property>
+ <property>rule-thickness</property>
+ <property>letter-spacing</property>
+ <property>line-height</property>
+ <property>text-shadow</property>
+ <property>visibility</property>
+ <property>word-spacing</property>
+ <content>%inline;</content>
+</element>
+
+<element>
+ <name>page-number</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>dominant-baseline</property>
+ <property>id</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>letter-spacing</property>
+ <property>line-height</property>
+ <property>score-spaces</property>
+ <property>text-altitude</property>
+ <property>text-decoration</property>
+ <property>text-depth</property>
+ <property>text-shadow</property>
+ <property>text-transform</property>
+ <property>visibility</property>
+ <property>word-spacing</property>
+ <property>wrap-option</property>
+
+</element>
+
+<element>
+ <name>page-number-citation</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonFontProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>dominant-baseline</property>
+ <property>id</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>letter-spacing</property>
+ <property>line-height</property>
+ <property>ref-id</property>
+ <property>score-spaces</property>
+ <property>text-altitude</property>
+ <property>text-decoration</property>
+ <property>text-depth</property>
+ <property>text-shadow</property>
+ <property>text-transform</property>
+ <property>visibility</property>
+ <property>word-spacing</property>
+ <property>wrap-option</property>
+
+</element>
+
+<element>
+ <name>table-and-caption</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>caption-side</property>
+ <property>id</property>
+ <!--property>intrusion-displace</property -->
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>text-align</property>
+ <content>table-caption</content>
+ <content>table</content>
+</element>
+
+<element>
+ <name>table</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>block-progression-dimension</property>
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-spacing</property>
+ <property>border-collapse</property>
+ <property>border-end-precedence</property>
+ <property>border-separation</property>
+ <property>border-start-precedence</property>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <!--property>intrusion-displace</property -->
+ <property>height</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>table-layout</property>
+ <property>table-omit-footer-at-break</property>
+ <property>table-omit-header-at-break</property>
+ <property>width</property>
+ <property>writing-mode</property>
+ <content>table-column</content>
+ <content>table-header</content>
+ <content>table-footer</content>
+ <content>table-body</content>
+</element>
+
+<element>
+ <name>table-column</name>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+<!--
+NOTE:
+Only the background properties from this set apply. If the value of border-collapse is "collapse" or "collapse-with-precedence" for the table the border properties also apply.
+-->
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-end-precedence</property>
+ <property>border-start-precedence</property>
+ <property>column-number</property>
+ <property>column-width</property>
+ <property>number-columns-repeated</property>
+ <property>number-columns-spanned</property>
+ <property>visibility</property>
+
+</element>
+
+<element>
+ <name>table-caption</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>block-progression-dimension</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <!--property>intrusion-displace</property -->
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>width</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>table-header</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+<!--
+NOTE:
+Only the background properties from this set apply. If the value of border-collapse is "collapse" or "collapse-with-precedence" for the table the border properties also apply.
+-->
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-end-precedence</property>
+ <property>border-start-precedence</property>
+ <property>id</property>
+ <property>visibility</property>
+ <content>table-row</content>
+ <content>table-cell</content>
+</element>
+
+<element>
+ <name>table-footer</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+<!--
+NOTE:
+Only the background properties from this set apply. If the value of border-collapse is "collapse" or "collapse-with-precedence" for the table the border properties also apply.
+-->
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-end-precedence</property>
+ <property>border-start-precedence</property>
+ <property>id</property>
+ <property>visibility</property>
+ <content>table-row</content>
+ <content>table-cell</content>
+</element>
+
+<element>
+ <name>table-body</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+<!--
+NOTE:
+Only the background properties from this set apply. If the value of border-collapse is "collapse" or "collapse-with-precedence" for the table the border properties also apply.
+-->
+
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-end-precedence</property>
+ <property>border-start-precedence</property>
+ <property>id</property>
+ <property>visibility</property>
+ <content>table-row</content>
+ <content>table-cell</content>
+</element>
+
+<element>
+ <name>table-row</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>block-progression-dimension</property>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+<!--
+NOTE:
+Only the background properties from this set apply. If the value of border-collapse is "collapse" or "collapse-with-precedence" for the table the border properties also apply.
+-->
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-end-precedence</property>
+ <property>border-start-precedence</property>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>id</property>
+ <property>height</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>visibility</property>
+ <content>table-cell</content>
+</element>
+
+<element>
+ <name>table-cell</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>border-after-precedence</property>
+ <property>border-before-precedence</property>
+ <property>border-end-precedence</property>
+ <property>border-start-precedence</property>
+ <property>block-progression-dimension</property>
+ <property>column-number</property>
+ <property>display-align</property>
+ <property>relative-align</property>
+ <property>empty-cells</property>
+ <property>ends-row</property>
+ <property>height</property>
+ <property>id</property>
+ <property>inline-progression-dimension</property>
+ <property>number-columns-spanned</property>
+ <property>number-rows-spanned</property>
+ <property>starts-row</property>
+ <property>width</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>list-block</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>id</property>
+ <!--property>intrusion-displace</property -->
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>provisional-distance-between-starts</property>
+ <property>provisional-label-separation</property>
+ <content>list-item</content>
+</element>
+
+<element>
+ <name>list-item</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesBlock</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>page-break-after</property>
+ <property>page-break-before</property>
+ <property>break-after</property>
+ <property>break-before</property>
+ <property>id</property>
+ <!--property>intrusion-displace</property -->
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>relative-align</property>
+ <content>list-item-label</content>
+ <content>list-item-body</content>
+</element>
+
+<element>
+ <name>list-item-body</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>id</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>list-item-label</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>id</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>basic-link</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <common-ref>CommonAuralProperties</common-ref>
+ <common-ref>CommonBorderPaddingBackgroundProperties</common-ref>
+ <common-ref>CommonMarginPropertiesInline</common-ref>
+ <common-ref>CommonRelativePositionProperties</common-ref>
+ <property>vertical-align</property>
+ <property>alignment-adjust</property>
+ <property>alignment-baseline</property>
+ <property>baseline-shift</property>
+ <property>destination-placement-offset</property>
+ <property>dominant-baseline</property>
+ <property>external-destination</property>
+ <property>id</property>
+ <property>indicate-destination</property>
+ <property>internal-destination</property>
+ <property>page-break-inside</property>
+ <property>keep-together</property>
+ <property>keep-with-next</property>
+ <property>keep-with-previous</property>
+ <property>line-height</property>
+ <property>show-destination</property>
+ <property>target-processing-context</property>
+ <property>target-presentation-context</property>
+ <property>target-stylesheet</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>multi-switch</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>auto-restore</property>
+ <property>id</property>
+ <content>multi-case</content>
+</element>
+
+<element>
+ <name>multi-case</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>id</property>
+ <property>starting-state</property>
+ <property>case-name</property>
+ <property>case-title</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>multi-toggle</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>id</property>
+ <property>switch-to</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>multi-properties</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <property>id</property>
+ <content>multi-property-set</content>
+ <content>wrapper</content>
+</element>
+
+<element>
+ <name>multi-property-set</name>
+ <property>id</property>
+ <property>active-state</property>
+</element>
+
+<element>
+ <name>float</name>
+ <property>float</property>
+ <property>clear</property>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>footnote</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <content>inline</content>
+ <content>footnote-body</content>
+</element>
+
+<element>
+ <name>footnote-body</name>
+ <common-ref>CommonAccessibilityProperties</common-ref>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>wrapper</name>
+ <property>id</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>marker</name>
+ <property>marker-class-name</property>
+ <content>%inline;</content>
+ <content>%block;</content>
+</element>
+
+<element>
+ <name>retrieve-marker</name>
+ <property>retrieve-class-name</property>
+ <property>retrieve-position</property>
+ <property>retrieve-boundary</property>
+</element>
+
+</root>
+
diff --git a/fop-core/src/main/codegen/fo/foproperties.xml b/fop-core/src/main/codegen/fo/foproperties.xml
new file mode 100644
index 000000000..f4a19eb27
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/foproperties.xml
@@ -0,0 +1,2241 @@
+<?xml version="1.0" standalone="yes" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<property-list family="FO">
+ <generic-property-list>
+ <property type="generic">
+ <name>generic-color</name>
+ <class-name>GenericColor</class-name>
+ <datatype>ColorType</datatype>
+ <extfile href="colorkw.xml"/>
+<!--
+ <datatype-conversion from-type="String" varname="strval">
+ new ColorType(strval)</datatype-conversion>
+-->
+ </property>
+ <property type="generic">
+ <name>generic-boolean</name>
+ <class-name>GenericBoolean</class-name>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="TRUE">true</value>
+ <value const="FALSE">false</value>
+ </enumeration>
+ </property>
+ <property type="generic">
+ <name>generic-keep</name>
+ <class-name>GenericKeep</class-name>
+ <datatype>Keep</datatype> <!-- CompoundDatatype -->
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>within-page</name>
+ <datatype>Number</datatype>
+ <default>auto</default>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="ALWAYS">always</value>
+ </enumeration>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>within-line</name>
+ <datatype>Number</datatype>
+ <default>auto</default>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="ALWAYS">always</value>
+ </enumeration>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>within-column</name>
+ <datatype>Number</datatype>
+ <default>auto</default>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="ALWAYS">always</value>
+ </enumeration>
+ </subproperty>
+ </compound>
+ </property>
+ <property type="generic">
+ <name>conditional-length-template</name>
+ <class-name>GenericCondLength</class-name>
+ <datatype>CondLength</datatype>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>length</name>
+ <datatype>Length</datatype>
+ </subproperty>
+ <subproperty>
+ <name>conditionality</name>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="DISCARD">discard</value>
+ <value const="RETAIN">retain</value>
+ </enumeration>
+ </subproperty>
+ </compound>
+ </property>
+ <property type="generic">
+ <name>padding-template</name>
+ <class-name>GenericCondPadding</class-name>
+ <use-generic>GenericCondLength</use-generic>
+ <inherited>false</inherited>
+ <default subproperty="length">0pt</default>
+ </property>
+ <property type="generic">
+ <name>padding-template</name>
+ <class-name>GenericPadding</class-name>
+ <datatype>Length</datatype>
+ <inherited>false</inherited>
+ <default>0pt</default>
+ <shorthand>padding</shorthand>
+ </property>
+
+<!-- Before, After, Start, End border width props -->
+<!-- CondLength, but adds keyword values both to the "shorthand" setting
+ and to the length component. So we redefine the components here,
+ rather than doing a "use-generic" on GenericCondLength.
+-->
+ <property type="generic">
+ <name>border-cond-width-template</name>
+ <class-name>GenericCondBorderWidth</class-name>
+ <keyword-equiv match="thin">0.5pt</keyword-equiv>
+ <keyword-equiv match="medium">1pt</keyword-equiv>
+ <keyword-equiv match="thick">2pt</keyword-equiv>
+ <inherited>false</inherited>
+ <datatype>CondLength</datatype>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>length</name>
+ <datatype>Length</datatype>
+ <keyword-equiv match="thin">0.5pt</keyword-equiv>
+ <keyword-equiv match="medium">1pt</keyword-equiv>
+ <keyword-equiv match="thick">2pt</keyword-equiv>
+ <default>medium</default>
+ </subproperty>
+ <subproperty>
+ <datatype>Enum</datatype>
+ <name>conditionality</name>
+ <enumeration>
+ <value const="DISCARD">discard</value>
+ <value const="RETAIN">retain</value>
+ </enumeration>
+ </subproperty>
+ </compound>
+ </property>
+<!-- Left, Right, Top, Bottom borderwidth props -->
+ <property type="generic">
+ <name>border-width-template</name>
+ <class-name>GenericBorderWidth</class-name>
+ <datatype>Length</datatype>
+ <keyword-equiv match="thin">0.5pt</keyword-equiv>
+ <keyword-equiv match="medium">1pt</keyword-equiv>
+ <keyword-equiv match="thick">2pt</keyword-equiv>
+ <inherited>false</inherited>
+ <default>0pt</default>
+ <shorthand>border-width</shorthand>
+ </property>
+ <property type="generic">
+ <name>border-style-template</name>
+ <class-name>GenericBorderStyle</class-name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ <value const="INSET">inset</value>
+ <value const="OUTSET">outset</value>
+ </enumeration>
+ <default>none</default>
+ <shorthand>border-style</shorthand>
+ </property>
+ <property type="generic">
+ <name>break-template</name>
+ <class-name>GenericBreak</class-name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="COLUMN">column</value>
+ <value const="PAGE">page</value>
+ <value const="EVEN_PAGE">even-page</value>
+ <value const="ODD_PAGE">odd-page</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+ <property type="generic">
+ <name>generic-space</name>
+ <class-name>GenericSpace</class-name>
+ <inherited>false</inherited>
+ <datatype>Space</datatype>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>minimum</name>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>optimum</name>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>maximum</name>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </subproperty>
+ <subproperty>
+ <name>precedence</name>
+ <datatype>Number</datatype>
+ <enumeration>
+ <value const="FORCE">force</value>
+ </enumeration>
+ <default>0</default>
+ </subproperty>
+ <subproperty>
+ <name>conditionality</name>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="DISCARD">discard</value>
+ <value const="RETAIN">retain</value>
+ </enumeration>
+ <default>discard</default>
+ </subproperty>
+ </compound>
+ </property>
+
+<!-- Common Accessibility Properties -->
+
+ <property>
+ <name>source-document</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>role</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>none</default>
+ </property>
+
+<!-- Common Absolute Position Properties -->
+
+ <property>
+ <name>absolute-position</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="FIXED">fixed</value>
+ <value const="ABSOLUTE">absolute</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>top</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>right</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>bottom</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>left</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+
+<!-- Common Aural Properties -->
+
+ <property>
+ <name>azimuth</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>center</default>
+ </property>
+ <property>
+ <name>cue-after</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>cue-before</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>elevation</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>level</default>
+ </property>
+ <property>
+ <name>pause-after</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>pause-before</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>pitch</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>medium</default>
+ </property>
+ <property>
+ <name>pitch-range</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>50</default>
+ </property>
+ <property>
+ <name>play-during</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>richness</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>50</default>
+ </property>
+ <property>
+ <name>speak</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>speak-header</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>once</default>
+ </property>
+ <property>
+ <name>speak-numeral</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>continuous</default>
+ </property>
+ <property>
+ <name>speak-punctuation</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>speech-rate</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>medium</default>
+ </property>
+ <property>
+ <name>stress</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>50</default>
+ </property>
+ <property>
+ <name>voice-family</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>volume</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>medium</default>
+ </property>
+
+<!-- Common Border, Padding, and Background Properties -->
+
+ <property>
+ <name>background-attachment</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>scroll</default>
+ </property>
+ <property>
+ <name>background-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>transparent</default>
+ <!-- Handle transparent -->
+ <datatype-conversion from-type="NCname" vartype="String" varname="nameval">
+ new ColorType(nameval)</datatype-conversion>
+ </property>
+ <property>
+ <name>background-image</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>background-repeat</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="REPEAT">repeat</value>
+ <value const="REPEATX">repeat-x</value>
+ <value const="REPEATY">repeat-y</value>
+ <value const="NOREPEAT">no-repeat</value>
+ </enumeration>
+ <default>repeat</default>
+ </property>
+ <property>
+ <name>background-position-horizontal</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0%</default>
+ </property>
+ <property>
+ <name>background-position-vertical</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0%</default>
+ </property>
+ <property>
+ <name>border-before-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="BEFORE"/>-color</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-before-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="BEFORE"/>-style</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-before-width</name>
+ <use-generic>GenericCondBorderWidth</use-generic>
+ <default subproperty="conditionality">retain</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="BEFORE"/>-width</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-after-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="AFTER"/>-color</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-after-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="AFTER"/>-style</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-after-width</name>
+ <use-generic>GenericCondBorderWidth</use-generic>
+ <default subproperty="conditionality">retain</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="AFTER"/>-width</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-start-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="START"/>-color</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-start-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="START"/>-style</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-start-width</name>
+ <use-generic>GenericCondBorderWidth</use-generic>
+ <default subproperty="conditionality">discard</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="START"/>-width</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-end-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="END"/>-color</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-end-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="END"/>-style</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-end-width</name>
+ <use-generic>GenericCondBorderWidth</use-generic>
+ <default subproperty="conditionality">discard</default>
+ <corresponding use-if-specified="true">
+ <propval>border-<wmrel2abs dir="END"/>-width</propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>border-top-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="TOP"/>-color</propval>
+ </corresponding>
+ <shorthand>border-top</shorthand>
+ <shorthand>border-color</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-top-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="TOP"/>-style</propval>
+ </corresponding>
+ <shorthand>border-top</shorthand>
+ <shorthand>border-style</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-top-width</name>
+ <use-generic>GenericBorderWidth</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="TOP"/>-width</propval>
+ </corresponding>
+ <shorthand>border-top</shorthand>
+ <shorthand>border-width</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-bottom-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="BOTTOM"/>-color</propval>
+ </corresponding>
+ <default>black</default>
+ <shorthand>border-bottom</shorthand>
+ <shorthand>border-color</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-bottom-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="BOTTOM"/>-style</propval>
+ </corresponding>
+ <shorthand>border-bottom</shorthand>
+ <shorthand>border-style</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-bottom-width</name>
+ <use-generic>GenericBorderWidth</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="BOTTOM"/>-width</propval>
+ </corresponding>
+ <shorthand>border-bottom</shorthand>
+ <shorthand>border-width</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-left-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="LEFT"/>-color</propval>
+ </corresponding>
+ <shorthand>border-left</shorthand>
+ <shorthand>border-color</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-left-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="LEFT"/>-style</propval>
+ </corresponding>
+ <shorthand>border-left</shorthand>
+ <shorthand>border-style</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-left-width</name>
+ <use-generic>GenericBorderWidth</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="LEFT"/>-width</propval>
+ </corresponding>
+ <shorthand>border-left</shorthand>
+ <shorthand>border-width</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-right-color</name>
+ <inherited>false</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="RIGHT"/>-color</propval>
+ </corresponding>
+ <shorthand>border-right</shorthand>
+ <shorthand>border-color</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-right-style</name>
+ <use-generic>GenericBorderStyle</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="RIGHT"/>-style</propval>
+ </corresponding>
+ <shorthand>border-right</shorthand>
+ <shorthand>border-style</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>border-right-width</name>
+ <use-generic>GenericBorderWidth</use-generic>
+ <corresponding>
+ <propval>border-<wmabs2rel dir="RIGHT"/>-width</propval>
+ </corresponding>
+ <shorthand>border-right</shorthand>
+ <shorthand>border-width</shorthand>
+ <shorthand>border</shorthand>
+ </property>
+ <property>
+ <name>padding-before</name>
+ <use-generic>GenericCondPadding</use-generic>
+ <default subproperty="conditionality">retain</default>
+ <corresponding use-if-specified="true">
+ <propval>padding-<wmrel2abs dir="BEFORE"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-after</name>
+ <use-generic>GenericCondPadding</use-generic>
+ <default subproperty="conditionality">retain</default>
+ <corresponding use-if-specified="true">
+ <propval>padding-<wmrel2abs dir="AFTER"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-start</name>
+ <use-generic>GenericCondPadding</use-generic>
+ <default subproperty="conditionality">discard</default>
+ <corresponding use-if-specified="true">
+ <propval>padding-<wmrel2abs dir="START"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-end</name>
+ <use-generic>GenericCondPadding</use-generic>
+ <default subproperty="conditionality">discard</default>
+ <corresponding use-if-specified="true">
+ <propval>padding-<wmrel2abs dir="END"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-top</name>
+ <use-generic>GenericPadding</use-generic>
+ <corresponding>
+ <propval>padding-<wmabs2rel dir="TOP"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-bottom</name>
+ <use-generic>GenericPadding</use-generic>
+ <corresponding>
+ <propval>padding-<wmabs2rel dir="BOTTOM"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-left</name>
+ <use-generic>GenericPadding</use-generic>
+ <corresponding>
+ <propval>padding-<wmabs2rel dir="LEFT"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>padding-right</name>
+ <use-generic>GenericPadding</use-generic>
+ <corresponding>
+ <propval>padding-<wmabs2rel dir="RIGHT"/></propval>
+ </corresponding>
+ </property>
+
+<!-- Common Font Properties -->
+
+ <property>
+ <name>font-family</name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>sans-serif</default>
+ </property>
+ <property>
+ <name>font-selection-strategy</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>font-size</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>12pt</default>
+ <!-- percent refers to inherited font size -->
+ <percent-ok base="INH_FONTSIZE"/>
+ </property>
+ <property>
+ <name>font-stretch</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>font-size-adjust</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>font-style</name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>font-variant</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NORMAL">normal</value>
+ <value const="SMALL_CAPS">small-caps</value>
+ </enumeration>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>font-weight</name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <keyword-equiv match="normal">400</keyword-equiv>
+ <keyword-equiv match="bold">700</keyword-equiv>
+ <default>400</default>
+ </property>
+
+<!-- Common Hyphenation Properties -->
+
+ <property>
+ <name>country</name>
+ <class-name>Country</class-name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>language</name>
+ <class-name>Language</class-name>
+ <inherited>true</inherited>
+ <datatype>String</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>script</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>hyphenate</name>
+ <class-name>Hyphenate</class-name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="TRUE">true</value>
+ <value const="FALSE">false</value>
+ </enumeration>
+ <default>false</default>
+ </property>
+ <property>
+ <name>hyphenation-character</name>
+ <class-name>HyphenationCharacter</class-name>
+ <inherited>true</inherited>
+ <datatype>Character</datatype>
+ <default>-</default>
+ </property>
+ <property>
+ <name>hyphenation-push-character-count</name>
+ <class-name>HyphenationPushCharacterCount</class-name>
+ <inherited>true</inherited>
+ <datatype>Number</datatype>
+ <default>2</default>
+ </property>
+ <property>
+ <name>hyphenation-remain-character-count</name>
+ <class-name>HyphenationRemainCharacterCount</class-name>
+ <inherited>true</inherited>
+ <datatype>Number</datatype>
+ <default>2</default>
+ </property>
+
+<!-- Common Margin Properties-Block -->
+
+ <property>
+ <name>margin-top</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>margin-bottom</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>margin-left</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>margin-right</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>space-before</name>
+ <use-generic>GenericSpace</use-generic>
+ <!-- Get corresponding margin property using PARENT's writing-mode -->
+ <corresponding use-if-specified="true">
+ <propval>margin-<parwmrel2abs dir="BEFORE"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>space-after</name>
+ <use-generic>GenericSpace</use-generic>
+ <!-- Get corresponding margin property using PARENT's writing-mode -->
+ <corresponding use-if-specified="true">
+ <propval>margin-<parwmrel2abs dir="AFTER"/></propval>
+ </corresponding>
+ </property>
+ <property>
+ <name>start-indent</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ <corresponding use-if-specified="true">
+ <propval>margin-<wmrel2abs dir="START"/></propval>
+ <propexpr>
+ <propval>margin-<wmrel2abs dir="START"/></propval>+
+ <propval>padding-<wmrel2abs dir="START"/></propval>+
+ <propval>border-<wmrel2abs dir="START"/>-width</propval>
+ <!-- + parent start-indent unless parent generates ref area (?) -->
+ </propexpr>
+ </corresponding>
+ </property>
+ <property>
+ <name>end-indent</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ <corresponding use-if-specified="true">
+ <propval>margin-<wmrel2abs dir="END"/></propval>
+ <propexpr>
+ <propval>margin-<wmrel2abs dir="END"/></propval>+
+ <propval>padding-<wmrel2abs dir="END"/></propval>+
+ <propval>border-<wmrel2abs dir="END"/>-width</propval>
+ </propexpr>
+ </corresponding>
+ </property>
+
+<!-- Common Margin Properties-Inline -->
+
+ <property>
+ <name>space-end</name>
+ <use-generic>GenericSpace</use-generic>
+ </property>
+ <property>
+ <name>space-start</name>
+ <use-generic>GenericSpace</use-generic>
+ </property>
+
+<!-- Common Relative Position Properties -->
+
+ <property>
+ <name>relative-position</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>static</default>
+ </property>
+
+<!-- Area Alignment Properties -->
+
+ <property>
+ <name>alignment-adjust</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>alignment-baseline</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>baseline-shift</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <enumeration>
+ <value const="BASELINE">baseline</value>
+ <value const="SUB">sub</value>
+ <value const="SUPER">super</value>
+ </enumeration>
+ <default>baseline</default>
+ </property>
+ <property>
+ <name>display-align</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="BEFORE">before</value>
+ <value const="AFTER">after</value>
+ <value const="CENTER">center</value>
+ <value const="AUTO">auto</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>dominant-baseline</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>relative-align</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="BEFORE">before</value>
+ <value const="BASELINE">after</value>
+ </enumeration>
+ <default>before</default>
+ </property>
+
+<!-- Area Dimension Properties -->
+
+ <property>
+ <name>block-progression-dimension</name>
+ <inherited>false</inherited>
+ <datatype>LengthRange</datatype>
+ <corresponding use-if-specified="true">
+ <propval><wmrel2abs dir="BLOCKPROGDIM"/></propval>
+ </corresponding>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>minimum</name>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ <auto-ok/>
+ <percent-ok base="CONTAINING_BOX"/>
+ <corresponding>
+ <propval>min-<wmrel2abs dir="BLOCKPROGDIM"/></propval>
+ </corresponding>>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>optimum</name>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ <auto-ok/>
+ <percent-ok base="CONTAINING_BOX"/>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>maximum</name>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ <percent-ok base="CONTAINING_BOX"/>
+ <corresponding>
+ <propval>max-<wmrel2abs dir="BLOCKPROGDIM"/></propval>
+ </corresponding>>
+ </subproperty>
+ </compound>
+ </property>
+ <property>
+ <name>content-height</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>content-width</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>height</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>inline-progression-dimension</name>
+ <inherited>false</inherited>
+ <datatype>LengthRange</datatype>
+ <corresponding use-if-specified="true">
+ <propval><wmrel2abs dir="INLINEPROGDIM"/></propval>
+ </corresponding>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>minimum</name>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ <auto-ok/>
+ <percent-ok base="CONTAINING_BOX"/>
+ <corresponding>
+ <propval>min-<wmrel2abs dir="INLINEPROGDIM"/></propval>
+ </corresponding>>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>optimum</name>
+ <datatype>Length</datatype>
+ <default>auto</default>
+ <auto-ok/>
+ <percent-ok base="CONTAINING_BOX"/>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>maximum</name>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>auto</default>
+ <percent-ok base="CONTAINING_BOX"/>
+ <corresponding>
+ <propval>max-<wmrel2abs dir="INLINEPROGDIM"/></propval>
+ </corresponding>>
+ </subproperty>
+ </compound>
+ </property> <property>
+ <name>max-height</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>max-width</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>min-height</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>min-width</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>scaling</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="UNIFORM">uniform</value>
+ <value const="NON_UNIFORM">non-uniform</value>
+ </enumeration>
+ <default>uniform</default>
+ </property>
+ <property>
+ <name>scaling-method</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>width</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <percent-ok base="CONTAINING_BOX"/>
+ <default>auto</default>
+ </property>
+
+<!-- Block and Line-related Properties -->
+
+ <property>
+ <name>hyphenation-keep</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>hyphenation-ladder-count</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>no-limit</default>
+ </property>
+ <property>
+ <name>last-line-end-indent</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>line-height</name>
+ <inherited type="specified">true</inherited>
+ <datatype>Length</datatype>
+ <default contextdep="true">normal</default>
+ <keyword-equiv match="normal">1.2em</keyword-equiv>
+ <datatype-conversion from-type="Number" varname="numval">
+ new PercentLength(numval.doubleValue(),
+ getPercentBase(fo,propertyList))</datatype-conversion>
+ <!-- percent refers to font size -->
+ <percent-ok base="FONTSIZE"/>
+ </property>
+ <property>
+ <name>line-height-shift-adjustment</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>consider-shifts</default>
+ </property>
+ <property>
+ <name>line-stacking-strategy</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>line-height</default>
+ </property>
+ <property>
+ <name>linefeed-treatment</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="IGNORE">ignore</value>
+ <value const="PRESERVE">preserve</value>
+ <value const="TREAT_AS_SPACE">treat-as-space</value>
+ <value const="TREAT_AS_ZERO_WIDTH_SPACE">treat-as-zero-width-space</value>
+ </enumeration>
+ <default>treat-as-space</default>
+ </property>
+ <property>
+ <name>space-treatment</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>preserve</default>
+ </property>
+ <property>
+ <name>text-align</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+<!-- Note: both 'end' and 'right' are mapped to END -->
+<!-- both 'start' and 'left' are mapped to START -->
+ <enumeration>
+ <value const="CENTER">center</value>
+ <value const="END">end right</value>
+ <value const="START">start left</value>
+ <value const="JUSTIFY">justify</value>
+ </enumeration>
+ <default>start</default>
+ </property>
+ <property>
+ <name>text-align-last</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="CENTER">center</value>
+ <value const="END">end</value>
+ <value const="START">start</value>
+ <value const="JUSTIFY">justify</value>
+ </enumeration>
+ <default>start</default>
+ <derive from="text-align">
+ <if match="TextAlign.JUSTIFY">START</if>
+ <if match="TextAlign.END">END</if>
+ <if match="TextAlign.START">START</if>
+ <if match="TextAlign.CENTER">CENTER</if>
+ </derive>
+ </property>
+ <property>
+ <name>text-indent</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>white-space-collapse</name>
+ <inherited>true</inherited>
+ <use-generic>GenericBoolean</use-generic>
+ <default>true</default>
+ </property>
+ <property>
+ <name>wrap-option</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="WRAP">wrap</value>
+ <value const="NO_WRAP">no-wrap</value>
+ </enumeration>
+ <default>wrap</default>
+ </property>
+
+<!-- Character Properties -->
+
+ <property>
+ <name>character</name>
+ <class-name>Character</class-name>
+ <inherited>false</inherited>
+ <datatype>Character</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>letter-spacing</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>suppress-at-line-break</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>text-decoration</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="UNDERLINE">underline</value>
+ <value const="OVERLINE">overline</value>
+ <value const="LINE_THROUGH">line-through</value>
+ <value const="BLINK">blink</value>
+ <value const="NO_UNDERLINE">no-underline</value>
+ <value const="NO_OVERLINE">no-overline</value>
+ <value const="NO_LINE_THROUGH">no-line-through</value>
+ <value const="NO_BLINK">no-blink</value>
+ </enumeration>
+ <default>none</default>
+ </property>
+ <property>
+ <name>text-shadow</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>text-transform</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="CAPITALIZE">capitalize</value>
+ <value const="UPPERCASE">uppercase</value>
+ <value const="LOWERCASE">lowercase</value>
+ </enumeration>
+ <default>none</default>
+ </property>
+ <property>
+ <name>treat-as-word-space</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>word-spacing</name>
+ <inherited>true</inherited>
+ <use-generic>GenericSpace</use-generic>
+ <default subproperty="precedence">force</default>
+ <default subproperty="conditionality">discard</default>
+ <default>0pt</default>
+ <!-- <default>normal</default> -->
+ </property>
+
+<!-- Color-related Properties -->
+
+ <property>
+ <name>color</name>
+ <inherited>true</inherited>
+ <use-generic>GenericColor</use-generic>
+ <default>black</default>
+ </property>
+ <property>
+ <name>color-profile-name</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>rendering-intent</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="PERCEPTUAL">perceptual</value>
+ <value const="RELATIVE_COLOMETRIC">relative-colorimetric</value>
+ <value const="SATURATION">saturation</value>
+ <value const="ABSOLUTE_COLORMETRIC">absolute-colorimetric</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+
+<!-- Float-related Properties -->
+
+ <property>
+ <name>clear</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>float</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+
+<!-- Keeps and Breaks Properties -->
+
+ <property>
+ <name>break-after</name>
+ <use-generic>GenericBreak</use-generic>
+ </property>
+ <property>
+ <name>break-before</name>
+ <use-generic>GenericBreak</use-generic>
+ </property>
+ <property>
+ <name>keep-together</name>
+ <inherited>false</inherited>
+ <use-generic>GenericKeep</use-generic>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>keep-with-next</name>
+ <inherited>false</inherited>
+ <use-generic>GenericKeep</use-generic>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>keep-with-previous</name>
+ <inherited>false</inherited>
+ <use-generic>GenericKeep</use-generic>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>orphans</name>
+ <inherited>true</inherited>
+ <datatype>Number</datatype>
+ <default>2</default>
+ </property>
+ <property>
+ <name>widows</name>
+ <inherited>true</inherited>
+ <datatype>Number</datatype>
+ <default>2</default>
+ </property>
+
+<!-- Layout-related Properties -->
+
+ <property>
+ <name>clip</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>overflow</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="VISIBLE">visible</value>
+ <value const="HIDDEN">hidden</value>
+ <value const="SCROLL">scroll</value>
+ <value const="ERROR_IF_OVERFLOW">error-if-overflow</value>
+ <value const="AUTO">auto</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>reference-orientation</name>
+ <inherited>true</inherited>
+ <datatype>Number</datatype>
+ <default>0</default>
+ </property>
+ <property>
+ <name>span</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="ALL">all</value>
+ </enumeration>
+ <default>none</default>
+ </property>
+
+<!-- Leader and Rule Properties -->
+
+ <property>
+ <name>leader-alignment</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="REFERENCE_AREA">reference-area</value>
+ <value const="PAGE">page</value>
+ </enumeration>
+ <default>none</default>
+ </property>
+ <property>
+ <name>leader-pattern</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="SPACE">space</value>
+ <value const="RULE">rule</value>
+ <value const="DOTS">dots</value>
+ <value const="USECONTENT">use-content</value>
+ </enumeration>
+ <default>space</default>
+ </property>
+ <property>
+ <name>leader-pattern-width</name>
+ <class-name>LeaderPatternWidth</class-name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default contextdep="true">use-font-metrics</default>
+ <keyword-equiv match="use-font-metrics">0pt</keyword-equiv>
+ <percent-ok base="CONTAINING_BOX"/>
+
+ </property>
+ <property>
+ <name>leader-length</name>
+ <inherited>true</inherited>
+ <datatype>LengthRange</datatype>
+ <percent-ok base="CONTAINING_BOX"/>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>minimum</name>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ <percent-ok base="CONTAINING_BOX"/>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>optimum</name>
+ <datatype>Length</datatype>
+ <default>12.0pt</default>
+ <percent-ok base="CONTAINING_BOX"/>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>maximum</name>
+ <datatype>Length</datatype>
+ <default contextdep="true">100%</default>
+ <percent-ok base="CONTAINING_BOX"/>
+ </subproperty>
+ </compound>
+ </property>
+ <property>
+ <name>rule-style</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="NONE">none</value>
+ <value const="DOTTED">dotted</value>
+ <value const="DASHED">dashed</value>
+ <value const="SOLID">solid</value>
+ <value const="DOUBLE">double</value>
+ <value const="GROOVE">groove</value>
+ <value const="RIDGE">ridge</value>
+ </enumeration>
+ <default>solid</default>
+ </property>
+ <property>
+ <name>rule-thickness</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>1.0pt</default>
+ </property>
+
+<!-- Properties for Dynamic Effects Formatting Objects -->
+
+ <property>
+ <name>active-state</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>auto-restore</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>false</default>
+ </property>
+ <property>
+ <name>case-name</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>case-title</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>destination-placement-offset</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>external-destination</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>indicate-destination</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>false</default>
+ </property>
+ <property>
+ <name>internal-destination</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>show-destination</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>replace</default>
+ </property>
+ <property>
+ <name>starting-state</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>show</default>
+ </property>
+ <property>
+ <name>switch-to</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>xsl-any</default>
+ </property>
+ <property>
+ <name>target-presentation-context</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>use-target-processing-context</default>
+ </property>
+ <property>
+ <name>target-processing-context</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>document-root</default>
+ </property>
+ <property>
+ <name>target-stylesheet</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>use-normal-stylesheet</default>
+ </property>
+
+<!-- Properties for Markers -->
+
+ <property>
+ <name>marker-class-name</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>retrieve-class-name</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>retrieve-position</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="FSWP">first-starting-within-page</value>
+ <value const="FIC">first-including-carryover</value>
+ <value const="LSWP">last-starting-within-page</value>
+ <value const="LEWP">last-ending-within-page</value>
+ </enumeration>
+ <default>first-starting-within-page</default>
+ </property>
+ <property>
+ <name>retrieve-boundary</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="PAGE">page</value>
+ <value const="PAGE_SEQUENCE">page-sequence</value>
+ <value const="DOCUMENT">document</value>
+ </enumeration>
+ <default>page-sequence</default>
+ </property>
+
+<!-- Properties for Number to String Conversion -->
+
+ <property>
+ <name>format</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>1</default>
+ </property>
+ <property>
+ <name>grouping-separator</name>
+ <inherited>false</inherited>
+ <datatype>Character</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>grouping-size</name>
+ <inherited>false</inherited>
+ <datatype>Number</datatype>
+ <!-- 0 means no grouping -->
+ <default>0</default>
+ </property>
+ <property>
+ <name>letter-value</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="ALPHABETIC">alphabetic</value>
+ <value const="TRADITIONAL">traditional</value>
+ <value const="AUTO">auto</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+
+<!-- Pagination and Layout Properties -->
+
+ <property>
+ <name>blank-or-not-blank</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="BLANK">blank</value>
+ <value const="NOT_BLANK">not-blank</value>
+ <value const="ANY">any</value>
+ </enumeration>
+ <default>any</default>
+ </property>
+ <property>
+ <name>column-count</name>
+ <inherited>false</inherited>
+ <datatype>Number</datatype>
+ <default>1</default>
+ </property>
+ <property>
+ <name>column-gap</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>0.25in</default>
+ </property>
+ <property>
+ <name>extent</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>flow-name</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>force-page-count</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="EVEN">even</value>
+ <value const="ODD">odd</value>
+ <value const="END_ON_EVEN">end-on-even</value>
+ <value const="END_ON_ODD">end-on-odd</value>
+ <value const="NO_FORCE">no-force</value>
+ <value const="AUTO">auto</value>
+ </enumeration>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>initial-page-number</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>master-name</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>master-reference</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>maximum-repeats</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default>no-limit</default>
+ </property>
+ <property>
+ <name>media-usage</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>odd-or-even</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="ODD">odd</value>
+ <value const="EVEN">even</value>
+ <value const="ANY">any</value>
+ </enumeration>
+ <default>any</default>
+ </property>
+ <property>
+ <name>page-height</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>11in</default>
+ </property>
+ <property>
+ <name>page-position</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="FIRST">first</value>
+ <value const="LAST">last</value>
+ <value const="REST">rest</value>
+ <value const="ANY">any</value>
+ </enumeration>
+ <default>any</default>
+ </property>
+ <property>
+ <name>page-width</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <auto-ok/>
+ <default>8in</default>
+ </property>
+ <property>
+ <name>precedence</name>
+ <class-name>Precedence</class-name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="TRUE">true</value>
+ <value const="FALSE">false</value>
+ </enumeration>
+ <default>false</default>
+ </property>
+ <property>
+ <name>region-name</name>
+ <class-name>RegionName</class-name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+
+<!-- Table Properties -->
+
+ <property>
+ <name>border-after-precedence</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-before-precedence</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-collapse</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <default>collapse</default>
+ <enumeration>
+ <value const="SEPARATE">separate</value>
+ <value const="COLLAPSE">collapse</value>
+ </enumeration>
+ </property>
+ <property>
+ <name>border-end-precedence</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>border-separation</name>
+ <inherited>true</inherited>
+ <datatype>LengthPair</datatype>
+ <compound>
+ <subproperty set-by-shorthand="true">
+ <name>block-progression-direction</name>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </subproperty>
+ <subproperty set-by-shorthand="true">
+ <name>inline-progression-direction</name>
+ <datatype>Length</datatype>
+ <default>0pt</default>
+ </subproperty>
+ </compound>
+ </property>
+ <property>
+ <name>border-start-precedence</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>caption-side</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="BEFORE">before</value>
+ <value const="AFTER">after</value>
+ <value const="START">start</value>
+ <value const="END">end</value>
+ <value const="TOP">top</value>
+ <value const="BOTTOM">bottom</value>
+ <value const="LEFT">left</value>
+ <value const="RIGHT">right</value>
+ </enumeration>
+ <default>before</default>
+ </property>
+ <property>
+ <name>column-number</name>
+ <inherited>false</inherited>
+ <datatype>Number</datatype>
+ <default>0</default>
+ </property>
+ <property>
+ <name>column-width</name>
+ <inherited>false</inherited>
+ <datatype>Length</datatype>
+ <default contextdep="true">proportional-column-width(1)</default>
+ </property>
+ <property>
+ <name>empty-cells</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>show</default>
+ </property>
+ <property>
+ <name>ends-row</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>false</default>
+ </property>
+ <property>
+ <name>number-columns-repeated</name>
+ <inherited>false</inherited>
+ <datatype>Number</datatype>
+ <default>1</default>
+ </property>
+ <property>
+ <name>number-columns-spanned</name>
+ <inherited>false</inherited>
+ <datatype>Number</datatype>
+ <default>1</default>
+ </property>
+ <property>
+ <name>number-rows-spanned</name>
+ <inherited>false</inherited>
+ <datatype>Number</datatype>
+ <default>1</default>
+ </property>
+ <property>
+ <name>starts-row</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>false</default>
+ </property>
+ <property>
+ <name>table-layout</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <default>auto</default>
+ <enumeration>
+ <value const="AUTO">auto</value>
+ <value const="FIXED">fixed</value>
+ </enumeration> </property>
+ <property>
+ <name>table-omit-footer-at-break</name>
+ <inherited>false</inherited>
+ <use-generic>GenericBoolean</use-generic>
+ <default>false</default>
+ </property>
+ <property>
+ <name>table-omit-header-at-break</name>
+ <inherited>false</inherited>
+ <use-generic>GenericBoolean</use-generic>
+ <default>false</default>
+ </property>
+
+<!-- Writing-mode-related Properties -->
+
+ <property>
+ <name>direction</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>ltr</default>
+ </property>
+ <property>
+ <name>glyph-orientation-horizontal</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0deg</default>
+ </property>
+ <property>
+ <name>glyph-orientation-vertical</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>text-altitude</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>use-font-metrics</default>
+ </property>
+ <property>
+ <name>text-depth</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>use-font-metrics</default>
+ </property>
+ <property>
+ <name>unicode-bidi</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>normal</default>
+ </property>
+ <property>
+ <name>writing-mode</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <default>lr-tb</default>
+ <enumeration>
+ <value const="LR_TB">lr-tb</value>
+ <value const="RL_TB">rl-tb</value>
+ <value const="TB_RL">tb-rl</value>
+ </enumeration>
+ </property>
+
+<!-- Miscellaneous Properties -->
+
+ <property>
+ <name>content-type</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>id</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>provisional-label-separation</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>6pt</default>
+ </property>
+ <property>
+ <name>provisional-distance-between-starts</name>
+ <inherited>true</inherited>
+ <datatype>Length</datatype>
+ <default>24pt</default>
+ </property>
+ <property>
+ <name>ref-id</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>score-spaces</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>true</default>
+ </property>
+ <property>
+ <name>src</name>
+ <inherited>false</inherited>
+ <datatype>String</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>visibility</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>visible</default>
+ </property>
+ <property>
+ <name>z-index</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+
+<!-- Shorthand Properties -->
+
+ <property>
+ <name>background</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>none</default>
+ </property>
+ <property>
+ <name>background-position</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0%</default>
+ </property>
+ <property>
+ <name>border</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>GenericShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-bottom</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>GenericShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-color</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>BoxPropShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-left</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>GenericShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-right</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>GenericShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-style</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>BoxPropShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-spacing</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>0pt</default>
+ </property>
+ <property>
+ <name>border-top</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>GenericShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>border-width</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>BoxPropShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>cue</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>font</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>margin</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>padding</name>
+ <inherited>false</inherited>
+ <datatype>List</datatype>
+ <datatype-parser>BoxPropShorthandParser</datatype-parser>
+ </property>
+ <property>
+ <name>page-break-after</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>page-break-before</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>page-break-inside</name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>pause</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ <property>
+ <name>position</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="STATIC">static</value>
+ <value const="RELATIVE">relative</value>
+ <value const="ABSOLUTE">absolute</value>
+ <value const="FIXED">fixed</value>
+ </enumeration>
+ <default>static</default>
+ </property>
+ <property>
+ <name>size</name>
+ <inherited>false</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default>auto</default>
+ </property>
+ <property>
+ <name>vertical-align</name>
+ <inherited>false</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="BASELINE">baseline</value>
+ <value const="MIDDLE">middle</value>
+ <value const="SUB">sub</value>
+ <value const="SUPER">super</value>
+ <value const="TEXT_TOP">text-top</value>
+ <value const="TEXT_BOTTOM">text-bottom</value>
+ <value const="TOP">top</value>
+ <value const="BOTTOM">bottom</value>
+ </enumeration>
+ <default>baseline</default>
+ </property>
+ <property>
+ <name>white-space-treatment</name>
+ <inherited>true</inherited>
+ <datatype>Enum</datatype>
+ <enumeration>
+ <value const="IGNORE">ignore</value>
+ <value const="PRESERVE">preserve</value>
+ <value const="IGNORE_IF_BEFORE_LINEFEED">ignore-if-before-linefeed</value>
+ <value const="IGNORE_IF_AFTER_LINEFEED">ignore-if-after-linefeed</value>
+ <value const="IGNORE_IF_SURROUNDING_LINEFEED">ignore-if-surrounding-linefeed</value>
+ </enumeration>
+ <default>ignore-if-surrounding-linefeed</default>
+ </property>
+ <property>
+ <name>xml:lang</name>
+ <class-name>XMLLang</class-name>
+ <inherited>true</inherited>
+ <datatype>ToBeImplemented</datatype>
+ <default></default>
+ </property>
+ </generic-property-list>
+</property-list>
+
diff --git a/fop-core/src/main/codegen/fo/properties.dtd b/fop-core/src/main/codegen/fo/properties.dtd
new file mode 100644
index 000000000..8ae36acb0
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/properties.dtd
@@ -0,0 +1,328 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!--
+DTD for foproperties.xml and svgproperties.xml
+-->
+
+<!DOCTYPE property-list [
+<!ELEMENT property-list (generic-property-list?, element-property-list*) >
+
+<!-- This defines properties which are generic: meaning they are valid for
+ any formatting object in the namespace associated with this properties
+ file.
+-->
+<!ELEMENT generic-property-list (property+) >
+
+<!-- This defines properties which are specific to a particular element.
+ The elements are specified in one or more localname elements. This
+ will generate code which can be used to set up element-specific
+ mappings for the PropertyListBuilder object.
+-->
+<!ELEMENT element-property-list (localname+, property+) >
+<!ELEMENT localname (#PCDATA) >
+
+<!-- Define a single property in the current namespace -->
+<!ELEMENT property (name, (use-generic | datatype), class-name?, inherited?,
+ default?, enumeration?, datatype-conversion*, compound?,
+ keyword-equiv*, percent-ok?, auto-ok?, derive?, corresponding? ) >
+
+<!-- If type is set to "ref", then this is not a new property definition,
+ but rather a reference to a property allready defined (should be in
+ another namespace). The "family" attribute then indicates in which
+ other property family the referenced attribute is defined. This is
+ used to let SVG reuse font-related properties defined in FO.
+ The family attribute is ignored if type isn't "ref".
+ If type = "generic", this is not a "real" property but rather a
+ template on which one or usually several other properties are
+ based. This reduces typing in the properties files and can reduce the
+ number and size of property classes created.
+-->
+<!ATTLIST property
+ type (ref|generic|normal) "normal"
+ family (fo|svg) "fo"
+>
+<!-- Sub-elements of property. -->
+<!-- This gives the name of the attribute used to specify values for this
+ property in input FO or SVG files. It MUST be specified.
+-->
+<!ELEMENT name (#PCDATA) >
+
+<!-- This gives the class name of the Java class which will be created to
+ represent values for this property. It doesn't need to be specified if
+ it can be deduced from the "name". The rule is that the first letter
+ of the property name and any name following a "-" are capitalized and
+ the "-" characters are removed. If you want to force a name, use the
+ class-name sub-element.
+-->
+<!ELEMENT class-name (#PCDATA) >
+
+<!-- This indicates that this property is based on a generic property
+ datatype. This may be one hand-coded, such as SVGLengthProperty, or it
+ may be one which is created by a generic property definition in the
+ properties.xml file being processed. The content of this element is
+ the CLASSNAME of the generic property (NOTE: not its name). A property
+ can be based on a generic property and still override certain aspects
+ such as the default value, simply by specifying the appropriate
+ sub-elements.
+ If the "ispropclass" attribute = "true", then the contents of the
+ use-generic element is the name of a hard-coded Property subclass
+ and not of a generated Property.Maker subclass. This is currently
+ only used for the SVG properties, because they don't have a
+ rule-based relationship between the actual Property class name
+ and the name of the datatype stored by objects of that class.
+-->
+<!ELEMENT use-generic (#PCDATA) >
+<!ATTLIST use-generic
+ ispropclass (true | false ) "false"
+>
+
+<!-- This indicates whether the property is inherited or not. Use the value
+ true for inherited and false for non-inherited. If the attribute
+ "type" is set to "specified", the specified rather than the computed
+ value of the property is inherited. An example is line-height, which
+ if specified using relative units or a percent, is recalculated
+ relative to the FONTSIZE of the current FO.
+-->
+<!ELEMENT inherited (#PCDATA) >
+<!ATTLIST inherited
+ type (specified | computed) "computed"
+>
+
+<!-- This gives the datatype of the stored property values. It shouldn't be
+ specified if the property has a use-generic element. The value of this
+ element should be the name of either a basic Java class (String,
+ Integer) or a class defined as a FOP or SVG datatype (eg. ColorType).
+ NOTE: the value "Enum" is special and indicates an enumerated
+ datatype, stored as a Java "int". There is an EnumProperty class, but
+ no corresponding Enum class.
+-->
+<!ELEMENT datatype (#PCDATA) >
+
+<!-- This element is used to specify the allowable values for enumerated
+ datatypes (<datatype>Enum</datatype>). Each value sub-element
+ specifies a possible value for the property. The "const" attribute for
+ each value is used to generate a public static constant value in the
+ class which can be referenced in code to test the property value. It
+ must be a legal Java identifier. By convention, use all caps.
+-->
+<!ELEMENT enumeration (value+) >
+<!ELEMENT value (#PCDATA) >
+<!ATTLIST value
+ const CDATA #REQUIRED
+>
+
+<!-- This gives the default value for a property if it is not specified on
+ a given FO. (The spec calls this the "initial" value.)
+
+ It may also be used to specify a default value for a particular
+ component of a compound property. This is used to give each component
+ its initial value if components are only partially specified in the
+ FO file.
+
+ NOTE: It should be an expression which can be parsed to give a legal
+ value for the property! This can't be checked by the generating
+ script, so if there is a problem, it will only be seen at runtime.
+ If the attribute "contextdep" is present and set to "true", the
+ generated code for the Maker will create a new Property object each
+ time it is asked to make the default value. Otherwise (the usual
+ case), it will only make one Property object with the default value
+ and return it on each call. Context-dependent default values include
+ those specified with relative units (eg. 1em).
+
+ The "subproperty" attribute can be used on properties which are
+ based on generic property specifications to specify a default value
+ for a particular component. For example, the border-end-width property
+ is based on GenericCondBorderWidth and specifies a specific default
+ for the "conditionality" component.
+-->
+<!ELEMENT default (#PCDATA) >
+<!ATTLIST default
+ contextdep (true | false) "false"
+ subproperty CDATA #IMPLIED
+>
+
+
+<!-- The datatype-conversion element(s) specify how to handle property
+ values which can be specified in several ways. For example, the
+ line-height property can be specified as a Length, or as a number or
+ as a percent, which are both interpreted as being a factor of the
+ current font-size. The datatype for this property is Length. The
+ datatype-conversion element is used to handle the cases in which the
+ Property parser returns a type which is not a Length. Each element
+ tests it against a possible property type. The content gives the
+ actual code which should be inserted in the generated class in order
+ to correctly initialize the property value.
+ NOTE: the use of this for Color properties is rather a hack. All color
+ properties can be specified by a large number of keywords. To be
+ consistent with my logic we should use the keyword-equiv element. But
+ that was a lot of work. So for now, if the value evaluates to a String
+ and not to a ColorType, the datatype-conversion just uses it to
+ directly initialize a ColorType object.
+-->
+<!ELEMENT datatype-conversion (#PCDATA) >
+
+<!-- The attribute from-type gives a possible property datatype, such as
+ Number or String. The varname gives the name of a variable which can
+ be used in the content of the datatype-conversion element. If the type
+ of the variable is not the same as from-type, it may be specified with
+ the attribute vartype.
+
+ An example of usage is from the line-height property. This should be
+ a Length object, but may be specified as a Number, which is interpreted
+ as though it were a percentage of the current font-size.
+-->
+<!ATTLIST datatype-conversion
+ from-type CDATA #REQUIRED
+ vartype CDATA #IMPLIED
+ varname CDATA #REQUIRED
+>
+
+<!-- The compound element indicates that the property is a "compound"
+ property as defined in the XSL specification. It is specified as one
+ or more individual attributes whose names are built up from the base
+ property name and the name of a compoent. Each "subproperty" element
+ describes a component of a compound property.
+ An example is space-before.
+-->
+<!ELEMENT compound (subproperty+) >
+
+<!-- Describe one component of a compound property. Only the name and the
+ datatype should be specified. For example, in the space-before
+ property, the optimum component has the name optimum and the datatype
+ Length.
+-->
+<!ELEMENT subproperty (name, datatype, auto-ok?, default?, corresponding?,
+ enumeration?, keyword-equiv? ) >
+
+<!-- This element which may be repeated, specifies keyword shorthands for
+ non-enumerated properties. For example, the border-width family of
+ properties can be specified either by a Length (eg. 1pt) or by one of
+ the keywords "thin", "medium", or "thick", each of which corresponds
+ to a "user-agent specific value" (XSL Spec.) These values are defined
+ by the keyword-equiv element. The "match" attribute gives the string
+ keyword value and the content is the replacement value, which should
+ be able to be evaluated to produce an object of the property's
+ datatype (such as Length). An example is:
+ <keyword-equiv match="thin" eval="true">0.5pt</keyword-equiv>
+ The "eval" attribute indicates whether the specified value must be
+ "parsed" using the Property parser or whether it can be used to
+ directly construct an object of the appropriate datatype. The default
+ is to evaluate the specified value (like the default specification).
+-->
+<!ELEMENT keyword-equiv (#PCDATA) >
+<!ATTLIST keyword-equiv
+ match CDATA #REQUIRED
+ eval (true|false) "true"
+>
+
+<!-- This element if present indicates that percent specifications are
+ allowed as property values. The attribute "base" indicates how the
+ actual value is calculated.
+ FONTSIZE - the value is a percent of the current font-size
+ INH-FONTSIZE - the value is a percent of the inherited
+ font-size. This is necessary because font-size itself can be specified
+ as a percent!
+ CONTAINING-BOX - the value is a percent of the appropriate
+ dimension of the containing box of this FO.
+ If none of these is specified, the content of the element is
+ assumed to be a Java expression which can be used to calculate an
+ absolute value. This expression can assume that the variables
+ propertyList and fo are in scope and refer to the FO on which the
+ property was specified as a percent.
+-->
+<!ELEMENT percent-ok (#PCDATA) >
+<!ATTLIST percent-ok
+ base (FONTSIZE | INH-FONTSIZE | CONTAINING-BOX) #IMPLIED
+>
+
+<!-- This element if present indicates that a value of "auto" for a Length
+ specification is allowed. If "auto" is specified, a LengthProperty object
+ is created which holds a Length object of type "AUTO".
+-->
+<!ELEMENT auto-ok EMPTY >
+
+<!-- This element if present indicates that the value of the property may
+ be computed (derived) from other properties if it isn't specified. It
+ assumes that the property is an Enum datatype. (Currently only used
+ for text-align-last.)
+ The "from" attribute gives the name of the property from which this
+ property is derived.
+ Each "if" sub-element specifies a possible value. The "match"
+ attribute is compared with the value of the "derive-from" property. If
+ it is equal, the value of the current property is set to the value
+ specified by the content of the "if" element.
+-->
+<!ELEMENT derive (if+) >
+<!ATTLIST derive
+ from CDATA #REQUIRED
+>
+<!ELEMENT if (#PCDATA) >
+<!ATTLIST if
+ match CDATA #REQUIRED
+>
+
+<!-- This element indicates that the value of the property is the same as
+ that of a "corresponding" absolute or writing-mode-relative property.
+ if the "use-if-specified" attribute has the value "true", then the
+ corresponding property value takes precedence over the property on
+ which it is specified. To be conformant to the specification, all the
+ the "absolute" versions of properties have precedence.
+ Example: if a get() call is made on padding-end for a FO using lr-tb
+ writing-mode, then the padding-right property will be used if it is
+ specified, even if padding-end is actually specified.
+ However, if a get() is made on padding-right, the value of padding-end
+ will only be used if padding-right isn't specified on the FO.
+-->
+
+<!ELEMENT corresponding (propval, propexpr?) >
+<!ATTLIST corresponding
+ use-if-specified (true|false) "false"
+>
+
+<!-- If the value must be calculated using several other properties, the
+ propexpr element may be used. Then only example I know of are the
+ indent properties which are calculated based on the margin-* values
+ if those are specified, plus the corresponding padding and border-width
+ values.
+-->
+<!ELEMENT propexpr (propval | #PCDATA)+ >
+
+<!-- The name of the corresponding property is given in the propval element.
+ The conversion between absolute and relative property names is
+ made using wmrel2abs or wm2bs2rel elements, intermixed with text.
+ For example, for the property "padding-left", the corresponding
+ property is "padding-start" if the inline progression direction is
+ left to right. This is expressed in the properties file with the
+ expression "padding-<wmabs2rel dir='LEFT'/>". The wmabs2rel element
+ is replaced by the writing-mode relative direction which corresponds
+ to the absolute direction LEFT using the writing-mode in effect for the
+ flow object where this property is specified.
+-->
+<!ELEMENT propval (wmrel2abs | wmabs2rel | #PCDATA)+ >
+
+<!ELEMENT wmrel2abs EMPTY>
+<!ATTLIST wmrel2abs
+ dir (BEFORE | AFTER | START | END | BLOCKPROGDIM | INLINEPROGDIM)
+ #REQUIRED
+>
+
+<!ELEMENT wmabs2rel EMPTY>
+<!ATTLIST wmabs2rel
+ dir (TOP | BOTTOM | LEFT | RIGHT | HEIGHT | WIDTH ) #REQUIRED
+>
+
diff --git a/fop-core/src/main/codegen/fo/property-sets.xsl b/fop-core/src/main/codegen/fo/property-sets.xsl
new file mode 100644
index 000000000..761a2cd23
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/property-sets.xsl
@@ -0,0 +1,289 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" />
+
+<xsl:include href="propinc.xsl"/>
+
+<xsl:template match="root">
+ <xsl:text>
+package org.apache.fop.fo;
+
+import org.apache.fop.fo.Constants;
+import java.util.BitSet;
+import java.util.ArrayList;
+
+public class PropertySets {
+ private static short[][] mapping = null;
+
+ private Element[] elements = new Element[Constants.ELEMENT_COUNT+1];
+ private BitSet block_elems = new BitSet();
+ private BitSet inline_elems = new BitSet();
+
+</xsl:text>
+ <xsl:apply-templates select="common" mode="decl"/>
+<xsl:text>
+ public void initializeElements() {
+ block_elems.set(Constants.FO_BLOCK);
+ block_elems.set(Constants.FO_BLOCK_CONTAINER);
+ block_elems.set(Constants.FO_TABLE_AND_CAPTION);
+ block_elems.set(Constants.FO_TABLE);
+ block_elems.set(Constants.FO_LIST_BLOCK);
+
+ inline_elems.set(Constants.FO_BIDI_OVERRIDE);
+ inline_elems.set(Constants.FO_CHARACTER);
+ inline_elems.set(Constants.FO_EXTERNAL_GRAPHIC);
+ inline_elems.set(Constants.FO_INSTREAM_FOREIGN_OBJECT);
+ inline_elems.set(Constants.FO_INLINE);
+ inline_elems.set(Constants.FO_INLINE_CONTAINER);
+ inline_elems.set(Constants.FO_LEADER);
+ inline_elems.set(Constants.FO_PAGE_NUMBER);
+ inline_elems.set(Constants.FO_PAGE_NUMBER_CITATION);
+ inline_elems.set(Constants.FO_BASIC_LINK);
+ inline_elems.set(Constants.FO_MULTI_TOGGLE);
+ }
+
+ public void initializeCommon() {
+</xsl:text>
+<xsl:apply-templates select="common"/>
+<xsl:text>
+ }
+
+ public void initialize() {
+ // define the fo: elements
+ for (int i = 1; i &lt; elements.length; i++) {
+ elements[i] = new Element(i);
+ }
+
+ // populate the elements with properties and content elements.
+ Element elem;
+</xsl:text>
+
+<xsl:apply-templates select="//element"/>
+<xsl:text>
+
+ // Merge the attributes from the children into the parent.
+ for (boolean dirty = true; dirty; ) {
+ dirty = false;
+ for (int i = 1; i &lt; elements.length; i++) {
+ dirty = dirty || elements[i].merge();
+ }
+ }
+ // Calculate the sparse indices for each element.
+ for (int i = 1; i &lt; elements.length; i++) {
+ mapping[i] = makeSparseIndices(elements[i].valid);
+ }
+ }
+
+ /**
+ * Turn a BitSet into an array of shorts with the first element
+ * on the array the number of set bits in the BitSet.
+ */
+ private static short[] makeSparseIndices(BitSet set) {
+ short[] indices = new short[Constants.PROPERTY_COUNT+1];
+ int j = 1;
+ for (int i = 0; i &lt; Constants.PROPERTY_COUNT+1; i++) {
+ if (set.get(i)) {
+ indices[i] = (short) j++;
+ }
+ }
+ indices[0] = (short)j;
+ return indices;
+ }
+
+
+ public static short[] getPropertySet(int elementId) {
+ if (mapping == null) {
+ mapping = new short[Constants.ELEMENT_COUNT+1][];
+ PropertySets ps = new PropertySets();
+ ps.initializeElements();
+ ps.initializeCommon();
+ ps.initialize();
+ }
+ return mapping[elementId];
+ }
+
+ /**
+ * An object that represent the properties and contents of a fo element
+ */
+ class Element {
+ BitSet relevant = new BitSet();
+ BitSet valid = new BitSet();
+ int elementId;
+ ArrayList children;
+
+ Element(int elementId) {
+ this.elementId = elementId;
+ }
+
+ /**
+ * Add a single property to the element.
+ */
+ public void addProperty(int propId) {
+ relevant.set(propId);
+ valid.set(propId);
+ }
+
+ /**
+ * Add a set of properties to the element.
+ */
+ public void addProperties(BitSet properties) {
+ relevant.or(properties);
+ valid.or(properties);
+ }
+
+ /**
+ * Add a single fo element as a content child.
+ */
+ public void addContent(int elementId) {
+ if (children == null) {
+ children = new ArrayList();
+ }
+ children.add(elements[elementId]);
+ }
+
+ /**
+ * Add a set of fo elements as content children.
+ */
+ public void addContent(BitSet elements) {
+ for (int i = 0; i &lt; elements.size(); i++) {
+ if (elements.get(i)) {
+ addContent(i);
+ }
+ }
+ }
+
+ /**
+ * Merge the properties from the children into the set of valid
+ * properties. Return true if at least one property could be added.
+ */
+ public boolean merge() {
+ if (children == null) {
+ return false;
+ }
+ boolean dirty = false;
+ for (int i = 0; i &lt; children.size(); i++) {
+ Element child = (Element) children.get(i);
+ BitSet childValid = child.valid;
+ int n = childValid.length();
+ for (int j = 0; j &lt; n; j++) {
+ if (childValid.get(j) &amp;&amp; !valid.get(j)) {
+ dirty = true;
+ valid.set(j);
+ }
+ }
+ }
+ return dirty;
+ }
+ }
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="common" mode="decl">
+ <xsl:variable name="name" select="name"/>
+ <xsl:text> BitSet </xsl:text><xsl:value-of select="$name"/>
+ <xsl:text> = new BitSet();
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="common">
+ <xsl:variable name="name" select="name"/>
+ <xsl:apply-templates select="property">
+ <xsl:with-param name="setname" select="$name"/>
+ </xsl:apply-templates>
+ <xsl:text>
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="common/property">
+ <xsl:param name="setname"/>
+
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="../name"/><xsl:text>.set(Constants.PR_</xsl:text>
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="." />
+ </xsl:call-template>);
+</xsl:template>
+
+
+<xsl:template match="element">
+ <xsl:variable name="name">
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="name" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text> elem = elements[Constants.FO_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>];
+</xsl:text>
+ <xsl:apply-templates select="common-ref | property"/>
+ <xsl:apply-templates select="content"/>
+ <xsl:text>
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="element/common-ref">
+ <xsl:param name="setname"/>
+
+ <xsl:text> elem.addProperties(</xsl:text>
+ <xsl:value-of select="."/>);
+</xsl:template>
+
+<xsl:template match="element/property">
+ <xsl:param name="setname"/>
+
+ <xsl:text> elem.addProperty(Constants.PR_</xsl:text>
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="." />
+ </xsl:call-template>);
+</xsl:template>
+
+<xsl:template match="element/content">
+ <xsl:variable name="name">
+ <xsl:text>Constants.FO_</xsl:text>
+ <xsl:call-template name="makeEnumConstant">
+ <xsl:with-param name="propstr" select="." />
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test=". = '%block;'">
+ <xsl:text> elem.addContent(block_elems);
+</xsl:text>
+ </xsl:when>
+ <xsl:when test=". = '%inline;'">
+ <xsl:text> elem.addContent(inline_elems);
+</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> elem.addContent(</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>);
+</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="text()"/>
+
+</xsl:stylesheet>
+
diff --git a/fop-core/src/main/codegen/fo/propinc.xsl b/fop-core/src/main/codegen/fo/propinc.xsl
new file mode 100644
index 000000000..9f9adf9ef
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/propinc.xsl
@@ -0,0 +1,128 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
+
+<xsl:key name="genericref" match="property[@type='generic']" use="class-name"/>
+<xsl:key name="shorthandref" match="property" use="name"/>
+
+<xsl:template name="capfirst">
+ <xsl:param name="str"/>
+ <xsl:variable name="lcletters" select="'abcdefghijklmnopqrstuvwxyz'" />
+ <xsl:variable name="ucletters" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
+ <xsl:value-of select="concat(translate(substring($str, 1, 1),
+ $lcletters, $ucletters), substring($str, 2))"/>
+</xsl:template>
+
+<xsl:template name="makeClassName">
+ <xsl:param name="propstr"/>
+ <xsl:choose>
+ <xsl:when test="contains($propstr, '-')">
+ <xsl:call-template name="capfirst">
+ <xsl:with-param name="str" select="substring-before($propstr, '-')"/>
+ </xsl:call-template>
+ <xsl:call-template name="makeClassName">
+ <xsl:with-param name="propstr" select="substring-after($propstr, '-')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="capfirst">
+ <xsl:with-param name="str" select="$propstr"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- Generate enumeration constants for FO's, Properties, etc. -->
+<xsl:template name="makeEnumConstant">
+ <xsl:param name="propstr"/>
+ <xsl:variable name="lcletters" select="'abcdefghijklmnopqrstuvwxyz-:'" />
+ <xsl:variable name="ucletters" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ__'" />
+ <xsl:value-of select="translate($propstr, $lcletters, $ucletters)"/>
+</xsl:template>
+
+<!-- The name of the subclass of Property to be created -->
+<xsl:template name="propclass">
+ <xsl:param name="prop" select="."/>
+ <xsl:choose>
+ <xsl:when test="$prop/datatype">
+ <xsl:value-of select="$prop/datatype"/><xsl:text>Property</xsl:text>
+ </xsl:when>
+ <xsl:when test="$prop/use-generic[@ispropclass='true']">
+ <xsl:value-of select="$prop/use-generic"/>
+ </xsl:when>
+ <xsl:when test="$prop/use-generic">
+ <!-- If no datatype child, then the prop must use the same datatype as
+ its template. -->
+ <xsl:call-template name="propclass">
+ <xsl:with-param name="prop"
+ select="key('genericref', $prop/use-generic)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- ERROR -->
+ <xsl:message terminate="yes">
+ No datatype found for property: <xsl:value-of select="$prop/name"/>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- return a boolean value -->
+<xsl:template name="hasEnum">
+ <xsl:param name="prop" select="."/>
+ <xsl:choose>
+ <xsl:when test="$prop/enumeration">true</xsl:when>
+ <xsl:when test="$prop/use-generic">
+ <!-- If no datatype child, then the prop must use the same datatype as
+ its template. -->
+ <xsl:call-template name="hasEnum">
+ <xsl:with-param name="prop"
+ select="key('genericref', $prop/use-generic)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>false</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- return a boolean value -->
+<xsl:template name="hasSubpropEnum">
+ <xsl:param name="prop" select="."/>
+ <xsl:choose>
+ <xsl:when test="$prop/compound/subproperty/enumeration">true</xsl:when>
+ <xsl:when test="$prop/use-generic">
+ <!-- If no datatype child, then the prop must use the same datatype as
+ its template. -->
+ <xsl:call-template name="hasSubpropEnum">
+ <xsl:with-param name="prop"
+ select="key('genericref', $prop/use-generic)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$prop/compound/subproperty/use-generic">
+ <xsl:for-each select="$prop/compound/subproperty[use-generic]">
+ <xsl:call-template name="hasEnum">
+ <xsl:with-param name="prop"
+ select="key('genericref', use-generic)"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>false</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/fop-core/src/main/codegen/fo/propmaker.xsl b/fop-core/src/main/codegen/fo/propmaker.xsl
new file mode 100644
index 000000000..21cde4c53
--- /dev/null
+++ b/fop-core/src/main/codegen/fo/propmaker.xsl
@@ -0,0 +1,47 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
+ extension-element-prefixes="redirect">
+
+<xsl:import href="elements.xsl"/>
+
+<xsl:output method="xml" />
+
+<xsl:template match="elements">
+<property-list>
+<xsl:attribute name="family">
+<xsl:call-template name="capall"><xsl:with-param name="str" select="$prefixVal"/></xsl:call-template>
+</xsl:attribute>
+ <generic-property-list>
+ <xsl:apply-templates select="*//attribute"/>
+ </generic-property-list>
+</property-list>
+</xsl:template>
+
+<xsl:template match="*//attribute">
+ <property>
+ <name><xsl:apply-templates/></name>
+ <use-generic ispropclass="true">SVGStringProperty</use-generic>
+ </property>
+</xsl:template>
+
+
+</xsl:stylesheet>
diff --git a/fop-core/src/main/codegen/fonts/Courier.xml b/fop-core/src/main/codegen/fonts/Courier.xml
new file mode 100644
index 000000000..075699427
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/Courier.xml
@@ -0,0 +1,267 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier</font-name>
+ <full-name>Courier</full-name>
+ <family-name>Courier</family-name>
+ <class-name>Courier</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>562</cap-height>
+ <x-height>426</x-height>
+ <ascender>629</ascender>
+ <descender>-157</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="600" llx="3" lly="0" urx="597" ury="562"/>
+ <char name="AE" width="600" llx="3" lly="0" urx="550" ury="562"/>
+ <char name="Aacute" width="600" llx="3" lly="0" urx="597" ury="805"/>
+ <char name="Acircumflex" width="600" llx="3" lly="0" urx="597" ury="787"/>
+ <char name="Adieresis" width="600" llx="3" lly="0" urx="597" ury="753"/>
+ <char name="Agrave" width="600" llx="3" lly="0" urx="597" ury="805"/>
+ <char name="Aring" width="600" llx="3" lly="0" urx="597" ury="750"/>
+ <char name="Atilde" width="600" llx="3" lly="0" urx="597" ury="729"/>
+ <char name="B" width="600" llx="43" lly="0" urx="559" ury="562"/>
+ <char name="C" width="600" llx="41" lly="-18" urx="540" ury="580"/>
+ <char name="Ccedilla" width="600" llx="41" lly="-151" urx="540" ury="580"/>
+ <char name="D" width="600" llx="43" lly="0" urx="574" ury="562"/>
+ <char name="E" width="600" llx="53" lly="0" urx="550" ury="562"/>
+ <char name="Eacute" width="600" llx="53" lly="0" urx="550" ury="805"/>
+ <char name="Ecircumflex" width="600" llx="53" lly="0" urx="550" ury="787"/>
+ <char name="Edieresis" width="600" llx="53" lly="0" urx="550" ury="753"/>
+ <char name="Egrave" width="600" llx="53" lly="0" urx="550" ury="805"/>
+ <char name="Eth" width="600" llx="30" lly="0" urx="574" ury="562"/>
+ <char name="Euro" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="600" llx="53" lly="0" urx="545" ury="562"/>
+ <char name="G" width="600" llx="31" lly="-18" urx="575" ury="580"/>
+ <char name="H" width="600" llx="32" lly="0" urx="568" ury="562"/>
+ <char name="I" width="600" llx="96" lly="0" urx="504" ury="562"/>
+ <char name="Iacute" width="600" llx="96" lly="0" urx="504" ury="805"/>
+ <char name="Icircumflex" width="600" llx="96" lly="0" urx="504" ury="787"/>
+ <char name="Idieresis" width="600" llx="96" lly="0" urx="504" ury="753"/>
+ <char name="Igrave" width="600" llx="96" lly="0" urx="504" ury="805"/>
+ <char name="J" width="600" llx="34" lly="-18" urx="566" ury="562"/>
+ <char name="K" width="600" llx="38" lly="0" urx="582" ury="562"/>
+ <char name="L" width="600" llx="47" lly="0" urx="554" ury="562"/>
+ <char name="Lslash" width="600" llx="47" lly="0" urx="554" ury="562"/>
+ <char name="M" width="600" llx="4" lly="0" urx="596" ury="562"/>
+ <char name="N" width="600" llx="7" lly="-13" urx="593" ury="562"/>
+ <char name="Ntilde" width="600" llx="7" lly="-13" urx="593" ury="729"/>
+ <char name="O" width="600" llx="43" lly="-18" urx="557" ury="580"/>
+ <char name="OE" width="600" llx="7" lly="0" urx="567" ury="562"/>
+ <char name="Oacute" width="600" llx="43" lly="-18" urx="557" ury="805"/>
+ <char name="Ocircumflex" width="600" llx="43" lly="-18" urx="557" ury="787"/>
+ <char name="Odieresis" width="600" llx="43" lly="-18" urx="557" ury="753"/>
+ <char name="Ograve" width="600" llx="43" lly="-18" urx="557" ury="805"/>
+ <char name="Oslash" width="600" llx="43" lly="-80" urx="557" ury="629"/>
+ <char name="Otilde" width="600" llx="43" lly="-18" urx="557" ury="729"/>
+ <char name="P" width="600" llx="79" lly="0" urx="558" ury="562"/>
+ <char name="Q" width="600" llx="43" lly="-138" urx="557" ury="580"/>
+ <char name="R" width="600" llx="38" lly="0" urx="588" ury="562"/>
+ <char name="S" width="600" llx="72" lly="-20" urx="529" ury="580"/>
+ <char name="Scaron" width="600" llx="72" lly="-20" urx="529" ury="802"/>
+ <char name="Scedilla" width="600" llx="72" lly="-151" urx="529" ury="580"/>
+ <char name="T" width="600" llx="38" lly="0" urx="563" ury="562"/>
+ <char name="Thorn" width="600" llx="79" lly="0" urx="538" ury="562"/>
+ <char name="U" width="600" llx="17" lly="-18" urx="583" ury="562"/>
+ <char name="Uacute" width="600" llx="17" lly="-18" urx="583" ury="805"/>
+ <char name="Ucircumflex" width="600" llx="17" lly="-18" urx="583" ury="787"/>
+ <char name="Udieresis" width="600" llx="17" lly="-18" urx="583" ury="753"/>
+ <char name="Ugrave" width="600" llx="17" lly="-18" urx="583" ury="805"/>
+ <char name="V" width="600" llx="-4" lly="-13" urx="604" ury="562"/>
+ <char name="W" width="600" llx="-3" lly="-13" urx="603" ury="562"/>
+ <char name="X" width="600" llx="23" lly="0" urx="577" ury="562"/>
+ <char name="Y" width="600" llx="24" lly="0" urx="576" ury="562"/>
+ <char name="Yacute" width="600" llx="24" lly="0" urx="576" ury="805"/>
+ <char name="Ydieresis" width="600" llx="24" lly="0" urx="576" ury="753"/>
+ <char name="Z" width="600" llx="86" lly="0" urx="514" ury="562"/>
+ <char name="Zcaron" width="600" llx="86" lly="0" urx="514" ury="802"/>
+ <char name="a" width="600" llx="53" lly="-15" urx="559" ury="441"/>
+ <char name="aacute" width="600" llx="53" lly="-15" urx="559" ury="672"/>
+ <char name="acircumflex" width="600" llx="53" lly="-15" urx="559" ury="654"/>
+ <char name="acute" width="600" llx="242" lly="497" urx="469" ury="672"/>
+ <char name="adieresis" width="600" llx="53" lly="-15" urx="559" ury="620"/>
+ <char name="ae" width="600" llx="19" lly="-15" urx="570" ury="441"/>
+ <char name="agrave" width="600" llx="53" lly="-15" urx="559" ury="672"/>
+ <char name="ampersand" width="600" llx="63" lly="-15" urx="538" ury="543"/>
+ <char name="aring" width="600" llx="53" lly="-15" urx="559" ury="627"/>
+ <char name="asciicircum" width="600" llx="94" lly="354" urx="506" ury="622"/>
+ <char name="asciitilde" width="600" llx="63" lly="197" urx="540" ury="320"/>
+ <char name="asterisk" width="600" llx="116" lly="257" urx="484" ury="607"/>
+ <char name="at" width="600" llx="77" lly="-15" urx="533" ury="622"/>
+ <char name="atilde" width="600" llx="53" lly="-15" urx="559" ury="606"/>
+ <char name="b" width="600" llx="14" lly="-15" urx="575" ury="629"/>
+ <char name="backslash" width="600" llx="118" lly="-80" urx="482" ury="629"/>
+ <char name="bar" width="600" llx="275" lly="-250" urx="326" ury="750"/>
+ <char name="braceleft" width="600" llx="182" lly="-108" urx="437" ury="622"/>
+ <char name="braceright" width="600" llx="163" lly="-108" urx="418" ury="622"/>
+ <char name="bracketleft" width="600" llx="269" lly="-108" urx="442" ury="622"/>
+ <char name="bracketright" width="600" llx="158" lly="-108" urx="331" ury="622"/>
+ <char name="breve" width="600" llx="153" lly="501" urx="447" ury="609"/>
+ <char name="brokenbar" width="600" llx="275" lly="-175" urx="326" ury="675"/>
+ <char name="bullet" width="600" llx="172" lly="130" urx="428" ury="383"/>
+ <char name="c" width="600" llx="66" lly="-15" urx="529" ury="441"/>
+ <char name="caron" width="600" llx="124" lly="492" urx="476" ury="669"/>
+ <char name="ccedilla" width="600" llx="66" lly="-151" urx="529" ury="441"/>
+ <char name="cedilla" width="600" llx="224" lly="-151" urx="362" ury="10"/>
+ <char name="cent" width="600" llx="96" lly="-49" urx="500" ury="614"/>
+ <char name="circumflex" width="600" llx="124" lly="477" urx="476" ury="654"/>
+ <char name="colon" width="600" llx="229" lly="-15" urx="371" ury="385"/>
+ <char name="comma" width="600" llx="181" lly="-112" urx="344" ury="122"/>
+ <char name="copyright" width="600" llx="0" lly="-18" urx="600" ury="580"/>
+ <char name="currency" width="600" llx="73" lly="58" urx="527" ury="506"/>
+ <char name="d" width="600" llx="45" lly="-15" urx="591" ury="629"/>
+ <char name="dagger" width="600" llx="141" lly="-78" urx="459" ury="580"/>
+ <char name="daggerdbl" width="600" llx="141" lly="-78" urx="459" ury="580"/>
+ <char name="degree" width="600" llx="123" lly="269" urx="477" ury="622"/>
+ <char name="dieresis" width="600" llx="148" lly="537" urx="453" ury="640"/>
+ <char name="divide" width="600" llx="87" lly="48" urx="513" ury="467"/>
+ <char name="dollar" width="600" llx="105" lly="-126" urx="496" ury="662"/>
+ <char name="dotaccent" width="600" llx="249" lly="537" urx="352" ury="640"/>
+ <char name="dotlessi" width="600" llx="95" lly="0" urx="505" ury="426"/>
+ <char name="e" width="600" llx="66" lly="-15" urx="548" ury="441"/>
+ <char name="eacute" width="600" llx="66" lly="-15" urx="548" ury="672"/>
+ <char name="ecircumflex" width="600" llx="66" lly="-15" urx="548" ury="654"/>
+ <char name="edieresis" width="600" llx="66" lly="-15" urx="548" ury="620"/>
+ <char name="egrave" width="600" llx="66" lly="-15" urx="548" ury="672"/>
+ <char name="eight" width="600" llx="102" lly="-15" urx="498" ury="622"/>
+ <char name="ellipsis" width="600" llx="37" lly="-15" urx="563" ury="111"/>
+ <char name="emdash" width="600" llx="0" lly="231" urx="600" ury="285"/>
+ <char name="endash" width="600" llx="75" lly="231" urx="525" ury="285"/>
+ <char name="equal" width="600" llx="80" lly="138" urx="520" ury="376"/>
+ <char name="eth" width="600" llx="62" lly="-15" urx="538" ury="629"/>
+ <char name="exclam" width="600" llx="236" lly="-15" urx="364" ury="572"/>
+ <char name="exclamdown" width="600" llx="236" lly="-157" urx="364" ury="430"/>
+ <char name="f" width="600" llx="114" lly="0" urx="531" ury="629"/>
+ <char name="fi" width="600" llx="3" lly="0" urx="597" ury="629"/>
+ <char name="five" width="600" llx="92" lly="-15" urx="497" ury="607"/>
+ <char name="fl" width="600" llx="3" lly="0" urx="597" ury="629"/>
+ <char name="florin" width="600" llx="4" lly="-143" urx="539" ury="622"/>
+ <char name="four" width="600" llx="78" lly="0" urx="500" ury="622"/>
+ <char name="fraction" width="600" llx="92" lly="-57" urx="509" ury="665"/>
+ <char name="g" width="600" llx="45" lly="-157" urx="566" ury="441"/>
+ <char name="germandbls" width="600" llx="48" lly="-15" urx="588" ury="629"/>
+ <char name="grave" width="600" llx="151" lly="497" urx="378" ury="672"/>
+ <char name="greater" width="600" llx="66" lly="42" urx="544" ury="472"/>
+ <char name="guillemotleft" width="600" llx="37" lly="70" urx="563" ury="446"/>
+ <char name="guillemotright" width="600" llx="37" lly="70" urx="563" ury="446"/>
+ <char name="guilsinglleft" width="600" llx="149" lly="70" urx="451" ury="446"/>
+ <char name="guilsinglright" width="600" llx="149" lly="70" urx="451" ury="446"/>
+ <char name="h" width="600" llx="18" lly="0" urx="582" ury="629"/>
+ <char name="hungarumlaut" width="600" llx="133" lly="497" urx="540" ury="672"/>
+ <char name="hyphen" width="600" llx="103" lly="231" urx="497" ury="285"/>
+ <char name="i" width="600" llx="95" lly="0" urx="505" ury="657"/>
+ <char name="iacute" width="600" llx="95" lly="0" urx="505" ury="672"/>
+ <char name="icircumflex" width="600" llx="94" lly="0" urx="505" ury="654"/>
+ <char name="idieresis" width="600" llx="95" lly="0" urx="505" ury="620"/>
+ <char name="igrave" width="600" llx="95" lly="0" urx="505" ury="672"/>
+ <char name="j" width="600" llx="82" lly="-157" urx="410" ury="657"/>
+ <char name="k" width="600" llx="43" lly="0" urx="580" ury="629"/>
+ <char name="l" width="600" llx="95" lly="0" urx="505" ury="629"/>
+ <char name="less" width="600" llx="41" lly="42" urx="519" ury="472"/>
+ <char name="logicalnot" width="600" llx="87" lly="108" urx="513" ury="369"/>
+ <char name="lslash" width="600" llx="95" lly="0" urx="505" ury="629"/>
+ <char name="m" width="600" llx="-5" lly="0" urx="605" ury="441"/>
+ <char name="macron" width="600" llx="120" lly="525" urx="480" ury="565"/>
+ <char name="minus" width="600" llx="80" lly="232" urx="520" ury="283"/>
+ <char name="mu" width="600" llx="21" lly="-157" urx="562" ury="426"/>
+ <char name="multiply" width="600" llx="87" lly="43" urx="515" ury="470"/>
+ <char name="n" width="600" llx="26" lly="0" urx="575" ury="441"/>
+ <char name="nine" width="600" llx="96" lly="-15" urx="489" ury="622"/>
+ <char name="ntilde" width="600" llx="26" lly="0" urx="575" ury="606"/>
+ <char name="numbersign" width="600" llx="93" lly="-32" urx="507" ury="639"/>
+ <char name="o" width="600" llx="62" lly="-15" urx="538" ury="441"/>
+ <char name="oacute" width="600" llx="62" lly="-15" urx="538" ury="672"/>
+ <char name="ocircumflex" width="600" llx="62" lly="-15" urx="538" ury="654"/>
+ <char name="odieresis" width="600" llx="62" lly="-15" urx="538" ury="620"/>
+ <char name="oe" width="600" llx="19" lly="-15" urx="559" ury="441"/>
+ <char name="ogonek" width="600" llx="211" lly="-172" urx="407" ury="4"/>
+ <char name="ograve" width="600" llx="62" lly="-15" urx="538" ury="672"/>
+ <char name="one" width="600" llx="96" lly="0" urx="505" ury="622"/>
+ <char name="onehalf" width="600" llx="0" lly="-57" urx="611" ury="665"/>
+ <char name="onequarter" width="600" llx="0" lly="-57" urx="600" ury="665"/>
+ <char name="onesuperior" width="600" llx="172" lly="249" urx="428" ury="622"/>
+ <char name="ordfeminine" width="600" llx="156" lly="249" urx="442" ury="580"/>
+ <char name="ordmasculine" width="600" llx="157" lly="249" urx="443" ury="580"/>
+ <char name="oslash" width="600" llx="62" lly="-80" urx="538" ury="506"/>
+ <char name="otilde" width="600" llx="62" lly="-15" urx="538" ury="606"/>
+ <char name="p" width="600" llx="9" lly="-157" urx="555" ury="441"/>
+ <char name="paragraph" width="600" llx="50" lly="-78" urx="511" ury="562"/>
+ <char name="parenleft" width="600" llx="269" lly="-108" urx="440" ury="622"/>
+ <char name="parenright" width="600" llx="160" lly="-108" urx="331" ury="622"/>
+ <char name="percent" width="600" llx="81" lly="-15" urx="518" ury="622"/>
+ <char name="period" width="600" llx="229" lly="-15" urx="371" ury="109"/>
+ <char name="periodcentered" width="600" llx="222" lly="189" urx="378" ury="327"/>
+ <char name="perthousand" width="600" llx="3" lly="-15" urx="600" ury="622"/>
+ <char name="plus" width="600" llx="80" lly="44" urx="520" ury="470"/>
+ <char name="plusminus" width="600" llx="87" lly="44" urx="513" ury="558"/>
+ <char name="q" width="600" llx="45" lly="-157" urx="591" ury="441"/>
+ <char name="question" width="600" llx="129" lly="-15" urx="492" ury="572"/>
+ <char name="questiondown" width="600" llx="108" lly="-157" urx="471" ury="430"/>
+ <char name="quotedbl" width="600" llx="187" lly="328" urx="413" ury="562"/>
+ <char name="quotedblbase" width="600" llx="143" lly="-134" urx="457" ury="100"/>
+ <char name="quotedblleft" width="600" llx="143" lly="328" urx="471" ury="562"/>
+ <char name="quotedblright" width="600" llx="143" lly="328" urx="457" ury="562"/>
+ <char name="quoteleft" width="600" llx="224" lly="328" urx="387" ury="562"/>
+ <char name="quoteright" width="600" llx="213" lly="328" urx="376" ury="562"/>
+ <char name="quotesinglbase" width="600" llx="213" lly="-134" urx="376" ury="100"/>
+ <char name="quotesingle" width="600" llx="259" lly="328" urx="341" ury="562"/>
+ <char name="r" width="600" llx="60" lly="0" urx="559" ury="441"/>
+ <char name="registered" width="600" llx="0" lly="-18" urx="600" ury="580"/>
+ <char name="ring" width="600" llx="218" lly="463" urx="382" ury="627"/>
+ <char name="s" width="600" llx="80" lly="-15" urx="513" ury="441"/>
+ <char name="scaron" width="600" llx="80" lly="-15" urx="513" ury="669"/>
+ <char name="scedilla" width="600" llx="80" lly="-151" urx="513" ury="441"/>
+ <char name="section" width="600" llx="113" lly="-78" urx="488" ury="580"/>
+ <char name="semicolon" width="600" llx="181" lly="-112" urx="371" ury="385"/>
+ <char name="seven" width="600" llx="82" lly="0" urx="483" ury="607"/>
+ <char name="six" width="600" llx="111" lly="-15" urx="497" ury="622"/>
+ <char name="slash" width="600" llx="125" lly="-80" urx="475" ury="629"/>
+ <char name="space" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="600" llx="84" lly="-21" urx="521" ury="611"/>
+ <char name="t" width="600" llx="87" lly="-15" urx="530" ury="561"/>
+ <char name="thorn" width="600" llx="-6" lly="-157" urx="555" ury="629"/>
+ <char name="three" width="600" llx="75" lly="-15" urx="466" ury="622"/>
+ <char name="threequarters" width="600" llx="8" lly="-56" urx="593" ury="666"/>
+ <char name="threesuperior" width="600" llx="155" lly="240" urx="406" ury="622"/>
+ <char name="tilde" width="600" llx="105" lly="489" urx="503" ury="606"/>
+ <char name="trademark" width="600" llx="-23" lly="263" urx="623" ury="562"/>
+ <char name="two" width="600" llx="70" lly="0" urx="471" ury="622"/>
+ <char name="twosuperior" width="600" llx="177" lly="249" urx="424" ury="622"/>
+ <char name="u" width="600" llx="21" lly="-15" urx="562" ury="426"/>
+ <char name="uacute" width="600" llx="21" lly="-15" urx="562" ury="672"/>
+ <char name="ucircumflex" width="600" llx="21" lly="-15" urx="562" ury="654"/>
+ <char name="udieresis" width="600" llx="21" lly="-15" urx="562" ury="620"/>
+ <char name="ugrave" width="600" llx="21" lly="-15" urx="562" ury="672"/>
+ <char name="underscore" width="600" llx="0" lly="-125" urx="600" ury="-75"/>
+ <char name="v" width="600" llx="10" lly="-10" urx="590" ury="426"/>
+ <char name="w" width="600" llx="-4" lly="-10" urx="604" ury="426"/>
+ <char name="x" width="600" llx="20" lly="0" urx="580" ury="426"/>
+ <char name="y" width="600" llx="7" lly="-157" urx="592" ury="426"/>
+ <char name="yacute" width="600" llx="7" lly="-157" urx="592" ury="672"/>
+ <char name="ydieresis" width="600" llx="7" lly="-157" urx="592" ury="620"/>
+ <char name="yen" width="600" llx="26" lly="0" urx="574" ury="562"/>
+ <char name="z" width="600" llx="99" lly="0" urx="502" ury="426"/>
+ <char name="zcaron" width="600" llx="99" lly="0" urx="502" ury="669"/>
+ <char name="zero" width="600" llx="106" lly="-15" urx="494" ury="622"/>
+ </char-metrics>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/CourierBold.xml b/fop-core/src/main/codegen/fonts/CourierBold.xml
new file mode 100644
index 000000000..c06ef5f23
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/CourierBold.xml
@@ -0,0 +1,267 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier-Bold</font-name>
+ <full-name>Courier Bold</full-name>
+ <family-name>Courier</family-name>
+ <class-name>CourierBold</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>562</cap-height>
+ <x-height>439</x-height>
+ <ascender>626</ascender>
+ <descender>-142</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="600" llx="-9" lly="0" urx="609" ury="562"/>
+ <char name="AE" width="600" llx="-29" lly="0" urx="602" ury="562"/>
+ <char name="Aacute" width="600" llx="-9" lly="0" urx="609" ury="784"/>
+ <char name="Acircumflex" width="600" llx="-9" lly="0" urx="609" ury="780"/>
+ <char name="Adieresis" width="600" llx="-9" lly="0" urx="609" ury="761"/>
+ <char name="Agrave" width="600" llx="-9" lly="0" urx="609" ury="784"/>
+ <char name="Aring" width="600" llx="-9" lly="0" urx="609" ury="801"/>
+ <char name="Atilde" width="600" llx="-9" lly="0" urx="609" ury="759"/>
+ <char name="B" width="600" llx="30" lly="0" urx="573" ury="562"/>
+ <char name="C" width="600" llx="22" lly="-18" urx="560" ury="580"/>
+ <char name="Ccedilla" width="600" llx="22" lly="-206" urx="560" ury="580"/>
+ <char name="D" width="600" llx="30" lly="0" urx="594" ury="562"/>
+ <char name="E" width="600" llx="25" lly="0" urx="560" ury="562"/>
+ <char name="Eacute" width="600" llx="25" lly="0" urx="560" ury="784"/>
+ <char name="Ecircumflex" width="600" llx="25" lly="0" urx="560" ury="780"/>
+ <char name="Edieresis" width="600" llx="25" lly="0" urx="560" ury="761"/>
+ <char name="Egrave" width="600" llx="25" lly="0" urx="560" ury="784"/>
+ <char name="Eth" width="600" llx="30" lly="0" urx="594" ury="562"/>
+ <char name="Euro" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="600" llx="39" lly="0" urx="570" ury="562"/>
+ <char name="G" width="600" llx="22" lly="-18" urx="594" ury="580"/>
+ <char name="H" width="600" llx="20" lly="0" urx="580" ury="562"/>
+ <char name="I" width="600" llx="77" lly="0" urx="523" ury="562"/>
+ <char name="Iacute" width="600" llx="77" lly="0" urx="523" ury="784"/>
+ <char name="Icircumflex" width="600" llx="77" lly="0" urx="523" ury="780"/>
+ <char name="Idieresis" width="600" llx="77" lly="0" urx="523" ury="761"/>
+ <char name="Igrave" width="600" llx="77" lly="0" urx="523" ury="784"/>
+ <char name="J" width="600" llx="37" lly="-18" urx="601" ury="562"/>
+ <char name="K" width="600" llx="21" lly="0" urx="599" ury="562"/>
+ <char name="L" width="600" llx="39" lly="0" urx="578" ury="562"/>
+ <char name="Lslash" width="600" llx="39" lly="0" urx="578" ury="562"/>
+ <char name="M" width="600" llx="-2" lly="0" urx="602" ury="562"/>
+ <char name="N" width="600" llx="8" lly="-12" urx="610" ury="562"/>
+ <char name="Ntilde" width="600" llx="8" lly="-12" urx="610" ury="759"/>
+ <char name="O" width="600" llx="22" lly="-18" urx="578" ury="580"/>
+ <char name="OE" width="600" llx="-25" lly="0" urx="595" ury="562"/>
+ <char name="Oacute" width="600" llx="22" lly="-18" urx="578" ury="784"/>
+ <char name="Ocircumflex" width="600" llx="22" lly="-18" urx="578" ury="780"/>
+ <char name="Odieresis" width="600" llx="22" lly="-18" urx="578" ury="761"/>
+ <char name="Ograve" width="600" llx="22" lly="-18" urx="578" ury="784"/>
+ <char name="Oslash" width="600" llx="22" lly="-22" urx="578" ury="584"/>
+ <char name="Otilde" width="600" llx="22" lly="-18" urx="578" ury="759"/>
+ <char name="P" width="600" llx="48" lly="0" urx="559" ury="562"/>
+ <char name="Q" width="600" llx="32" lly="-138" urx="578" ury="580"/>
+ <char name="R" width="600" llx="24" lly="0" urx="599" ury="562"/>
+ <char name="S" width="600" llx="47" lly="-22" urx="553" ury="582"/>
+ <char name="Scaron" width="600" llx="47" lly="-22" urx="553" ury="790"/>
+ <char name="Scedilla" width="600" llx="47" lly="-206" urx="553" ury="582"/>
+ <char name="T" width="600" llx="21" lly="0" urx="579" ury="562"/>
+ <char name="Thorn" width="600" llx="48" lly="0" urx="557" ury="562"/>
+ <char name="U" width="600" llx="4" lly="-18" urx="596" ury="562"/>
+ <char name="Uacute" width="600" llx="4" lly="-18" urx="596" ury="784"/>
+ <char name="Ucircumflex" width="600" llx="4" lly="-18" urx="596" ury="780"/>
+ <char name="Udieresis" width="600" llx="4" lly="-18" urx="596" ury="761"/>
+ <char name="Ugrave" width="600" llx="4" lly="-18" urx="596" ury="784"/>
+ <char name="V" width="600" llx="-13" lly="0" urx="613" ury="562"/>
+ <char name="W" width="600" llx="-18" lly="0" urx="618" ury="562"/>
+ <char name="X" width="600" llx="12" lly="0" urx="588" ury="562"/>
+ <char name="Y" width="600" llx="12" lly="0" urx="589" ury="562"/>
+ <char name="Yacute" width="600" llx="12" lly="0" urx="589" ury="784"/>
+ <char name="Ydieresis" width="600" llx="12" lly="0" urx="589" ury="761"/>
+ <char name="Z" width="600" llx="62" lly="0" urx="539" ury="562"/>
+ <char name="Zcaron" width="600" llx="62" lly="0" urx="539" ury="790"/>
+ <char name="a" width="600" llx="35" lly="-15" urx="570" ury="454"/>
+ <char name="aacute" width="600" llx="35" lly="-15" urx="570" ury="661"/>
+ <char name="acircumflex" width="600" llx="35" lly="-15" urx="570" ury="657"/>
+ <char name="acute" width="600" llx="205" lly="508" urx="468" ury="661"/>
+ <char name="adieresis" width="600" llx="35" lly="-15" urx="570" ury="638"/>
+ <char name="ae" width="600" llx="-4" lly="-15" urx="601" ury="454"/>
+ <char name="agrave" width="600" llx="35" lly="-15" urx="570" ury="661"/>
+ <char name="ampersand" width="600" llx="36" lly="-15" urx="546" ury="543"/>
+ <char name="aring" width="600" llx="35" lly="-15" urx="570" ury="678"/>
+ <char name="asciicircum" width="600" llx="108" lly="250" urx="492" ury="616"/>
+ <char name="asciitilde" width="600" llx="71" lly="153" urx="530" ury="356"/>
+ <char name="asterisk" width="600" llx="91" lly="219" urx="509" ury="601"/>
+ <char name="at" width="600" llx="16" lly="-15" urx="584" ury="616"/>
+ <char name="atilde" width="600" llx="35" lly="-15" urx="570" ury="636"/>
+ <char name="b" width="600" llx="0" lly="-15" urx="584" ury="626"/>
+ <char name="backslash" width="600" llx="99" lly="-77" urx="503" ury="626"/>
+ <char name="bar" width="600" llx="255" lly="-250" urx="345" ury="750"/>
+ <char name="braceleft" width="600" llx="160" lly="-102" urx="464" ury="616"/>
+ <char name="braceright" width="600" llx="136" lly="-102" urx="440" ury="616"/>
+ <char name="bracketleft" width="600" llx="245" lly="-102" urx="475" ury="616"/>
+ <char name="bracketright" width="600" llx="125" lly="-102" urx="355" ury="616"/>
+ <char name="breve" width="600" llx="83" lly="468" urx="517" ury="631"/>
+ <char name="brokenbar" width="600" llx="255" lly="-175" urx="345" ury="675"/>
+ <char name="bullet" width="600" llx="140" lly="132" urx="460" ury="430"/>
+ <char name="c" width="600" llx="40" lly="-15" urx="545" ury="459"/>
+ <char name="caron" width="600" llx="103" lly="493" urx="497" ury="667"/>
+ <char name="ccedilla" width="600" llx="40" lly="-206" urx="545" ury="459"/>
+ <char name="cedilla" width="600" llx="205" lly="-206" urx="387" ury="0"/>
+ <char name="cent" width="600" llx="66" lly="-49" urx="518" ury="614"/>
+ <char name="circumflex" width="600" llx="103" lly="483" urx="497" ury="657"/>
+ <char name="colon" width="600" llx="191" lly="-15" urx="407" ury="425"/>
+ <char name="comma" width="600" llx="123" lly="-111" urx="393" ury="174"/>
+ <char name="copyright" width="600" llx="0" lly="-18" urx="600" ury="580"/>
+ <char name="currency" width="600" llx="54" lly="49" urx="546" ury="517"/>
+ <char name="d" width="600" llx="20" lly="-15" urx="591" ury="626"/>
+ <char name="dagger" width="600" llx="106" lly="-70" urx="494" ury="580"/>
+ <char name="daggerdbl" width="600" llx="106" lly="-70" urx="494" ury="580"/>
+ <char name="degree" width="600" llx="86" lly="243" urx="474" ury="616"/>
+ <char name="dieresis" width="600" llx="128" lly="498" urx="472" ury="638"/>
+ <char name="divide" width="600" llx="71" lly="16" urx="529" ury="500"/>
+ <char name="dollar" width="600" llx="82" lly="-126" urx="519" ury="666"/>
+ <char name="dotaccent" width="600" llx="230" lly="498" urx="370" ury="638"/>
+ <char name="dotlessi" width="600" llx="77" lly="0" urx="523" ury="439"/>
+ <char name="e" width="600" llx="40" lly="-15" urx="563" ury="454"/>
+ <char name="eacute" width="600" llx="40" lly="-15" urx="563" ury="661"/>
+ <char name="ecircumflex" width="600" llx="40" lly="-15" urx="563" ury="657"/>
+ <char name="edieresis" width="600" llx="40" lly="-15" urx="563" ury="638"/>
+ <char name="egrave" width="600" llx="40" lly="-15" urx="563" ury="661"/>
+ <char name="eight" width="600" llx="83" lly="-15" urx="517" ury="616"/>
+ <char name="ellipsis" width="600" llx="26" lly="-15" urx="574" ury="116"/>
+ <char name="emdash" width="600" llx="-10" lly="203" urx="610" ury="313"/>
+ <char name="endash" width="600" llx="65" lly="203" urx="535" ury="313"/>
+ <char name="equal" width="600" llx="71" lly="118" urx="529" ury="398"/>
+ <char name="eth" width="600" llx="58" lly="-27" urx="543" ury="626"/>
+ <char name="exclam" width="600" llx="202" lly="-15" urx="398" ury="572"/>
+ <char name="exclamdown" width="600" llx="202" lly="-146" urx="398" ury="449"/>
+ <char name="f" width="600" llx="83" lly="0" urx="547" ury="626"/>
+ <char name="fi" width="600" llx="12" lly="0" urx="593" ury="626"/>
+ <char name="five" width="600" llx="70" lly="-15" urx="521" ury="601"/>
+ <char name="fl" width="600" llx="12" lly="0" urx="593" ury="626"/>
+ <char name="florin" width="600" llx="-30" lly="-131" urx="572" ury="616"/>
+ <char name="four" width="600" llx="53" lly="0" urx="507" ury="616"/>
+ <char name="fraction" width="600" llx="25" lly="-60" urx="576" ury="661"/>
+ <char name="g" width="600" llx="30" lly="-146" urx="580" ury="454"/>
+ <char name="germandbls" width="600" llx="22" lly="-15" urx="596" ury="626"/>
+ <char name="grave" width="600" llx="132" lly="508" urx="395" ury="661"/>
+ <char name="greater" width="600" llx="77" lly="15" urx="534" ury="501"/>
+ <char name="guillemotleft" width="600" llx="8" lly="70" urx="553" ury="446"/>
+ <char name="guillemotright" width="600" llx="47" lly="70" urx="592" ury="446"/>
+ <char name="guilsinglleft" width="600" llx="141" lly="70" urx="459" ury="446"/>
+ <char name="guilsinglright" width="600" llx="141" lly="70" urx="459" ury="446"/>
+ <char name="h" width="600" llx="5" lly="0" urx="592" ury="626"/>
+ <char name="hungarumlaut" width="600" llx="68" lly="488" urx="588" ury="661"/>
+ <char name="hyphen" width="600" llx="100" lly="203" urx="500" ury="313"/>
+ <char name="i" width="600" llx="77" lly="0" urx="523" ury="658"/>
+ <char name="iacute" width="600" llx="77" lly="0" urx="523" ury="661"/>
+ <char name="icircumflex" width="600" llx="73" lly="0" urx="523" ury="657"/>
+ <char name="idieresis" width="600" llx="77" lly="0" urx="523" ury="618"/>
+ <char name="igrave" width="600" llx="77" lly="0" urx="523" ury="661"/>
+ <char name="j" width="600" llx="63" lly="-146" urx="440" ury="658"/>
+ <char name="k" width="600" llx="20" lly="0" urx="585" ury="626"/>
+ <char name="l" width="600" llx="77" lly="0" urx="523" ury="626"/>
+ <char name="less" width="600" llx="66" lly="15" urx="523" ury="501"/>
+ <char name="logicalnot" width="600" llx="71" lly="103" urx="529" ury="413"/>
+ <char name="lslash" width="600" llx="77" lly="0" urx="523" ury="626"/>
+ <char name="m" width="600" llx="-22" lly="0" urx="626" ury="454"/>
+ <char name="macron" width="600" llx="88" lly="505" urx="512" ury="585"/>
+ <char name="minus" width="600" llx="71" lly="203" urx="529" ury="313"/>
+ <char name="mu" width="600" llx="-1" lly="-142" urx="569" ury="439"/>
+ <char name="multiply" width="600" llx="81" lly="39" urx="520" ury="478"/>
+ <char name="n" width="600" llx="18" lly="0" urx="592" ury="454"/>
+ <char name="nine" width="600" llx="79" lly="-15" urx="510" ury="616"/>
+ <char name="ntilde" width="600" llx="18" lly="0" urx="592" ury="636"/>
+ <char name="numbersign" width="600" llx="56" lly="-45" urx="544" ury="651"/>
+ <char name="o" width="600" llx="30" lly="-15" urx="570" ury="454"/>
+ <char name="oacute" width="600" llx="30" lly="-15" urx="570" ury="661"/>
+ <char name="ocircumflex" width="600" llx="30" lly="-15" urx="570" ury="657"/>
+ <char name="odieresis" width="600" llx="30" lly="-15" urx="570" ury="638"/>
+ <char name="oe" width="600" llx="-18" lly="-15" urx="611" ury="454"/>
+ <char name="ogonek" width="600" llx="169" lly="-199" urx="400" ury="0"/>
+ <char name="ograve" width="600" llx="30" lly="-15" urx="570" ury="661"/>
+ <char name="one" width="600" llx="81" lly="0" urx="539" ury="616"/>
+ <char name="onehalf" width="600" llx="-47" lly="-60" urx="648" ury="661"/>
+ <char name="onequarter" width="600" llx="-56" lly="-60" urx="656" ury="661"/>
+ <char name="onesuperior" width="600" llx="153" lly="230" urx="447" ury="616"/>
+ <char name="ordfeminine" width="600" llx="147" lly="196" urx="453" ury="580"/>
+ <char name="ordmasculine" width="600" llx="147" lly="196" urx="453" ury="580"/>
+ <char name="oslash" width="600" llx="30" lly="-24" urx="570" ury="463"/>
+ <char name="otilde" width="600" llx="30" lly="-15" urx="570" ury="636"/>
+ <char name="p" width="600" llx="-1" lly="-142" urx="570" ury="454"/>
+ <char name="paragraph" width="600" llx="6" lly="-70" urx="576" ury="580"/>
+ <char name="parenleft" width="600" llx="219" lly="-102" urx="461" ury="616"/>
+ <char name="parenright" width="600" llx="139" lly="-102" urx="381" ury="616"/>
+ <char name="percent" width="600" llx="5" lly="-15" urx="595" ury="616"/>
+ <char name="period" width="600" llx="192" lly="-15" urx="408" ury="171"/>
+ <char name="periodcentered" width="600" llx="196" lly="165" urx="404" ury="351"/>
+ <char name="perthousand" width="600" llx="-113" lly="-15" urx="713" ury="616"/>
+ <char name="plus" width="600" llx="71" lly="39" urx="529" ury="478"/>
+ <char name="plusminus" width="600" llx="71" lly="24" urx="529" ury="515"/>
+ <char name="q" width="600" llx="20" lly="-142" urx="591" ury="454"/>
+ <char name="question" width="600" llx="98" lly="-14" urx="501" ury="580"/>
+ <char name="questiondown" width="600" llx="99" lly="-146" urx="502" ury="449"/>
+ <char name="quotedbl" width="600" llx="135" lly="277" urx="465" ury="562"/>
+ <char name="quotedblbase" width="600" llx="65" lly="-142" urx="529" ury="143"/>
+ <char name="quotedblleft" width="600" llx="71" lly="277" urx="535" ury="562"/>
+ <char name="quotedblright" width="600" llx="61" lly="277" urx="525" ury="562"/>
+ <char name="quoteleft" width="600" llx="178" lly="277" urx="428" ury="562"/>
+ <char name="quoteright" width="600" llx="171" lly="277" urx="423" ury="562"/>
+ <char name="quotesinglbase" width="600" llx="175" lly="-142" urx="427" ury="143"/>
+ <char name="quotesingle" width="600" llx="227" lly="277" urx="373" ury="562"/>
+ <char name="r" width="600" llx="47" lly="0" urx="580" ury="454"/>
+ <char name="registered" width="600" llx="0" lly="-18" urx="600" ury="580"/>
+ <char name="ring" width="600" llx="198" lly="481" urx="402" ury="678"/>
+ <char name="s" width="600" llx="68" lly="-17" urx="535" ury="459"/>
+ <char name="scaron" width="600" llx="68" lly="-17" urx="535" ury="667"/>
+ <char name="scedilla" width="600" llx="68" lly="-206" urx="535" ury="459"/>
+ <char name="section" width="600" llx="83" lly="-70" urx="517" ury="580"/>
+ <char name="semicolon" width="600" llx="123" lly="-111" urx="408" ury="425"/>
+ <char name="seven" width="600" llx="55" lly="0" urx="494" ury="601"/>
+ <char name="six" width="600" llx="90" lly="-15" urx="521" ury="616"/>
+ <char name="slash" width="600" llx="98" lly="-77" urx="502" ury="626"/>
+ <char name="space" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="600" llx="72" lly="-28" urx="558" ury="611"/>
+ <char name="t" width="600" llx="47" lly="-15" urx="532" ury="562"/>
+ <char name="thorn" width="600" llx="-14" lly="-142" urx="570" ury="626"/>
+ <char name="three" width="600" llx="63" lly="-15" urx="501" ury="616"/>
+ <char name="threequarters" width="600" llx="-47" lly="-60" urx="648" ury="661"/>
+ <char name="threesuperior" width="600" llx="138" lly="222" urx="433" ury="616"/>
+ <char name="tilde" width="600" llx="89" lly="493" urx="512" ury="636"/>
+ <char name="trademark" width="600" llx="-9" lly="230" urx="749" ury="562"/>
+ <char name="two" width="600" llx="61" lly="0" urx="499" ury="616"/>
+ <char name="twosuperior" width="600" llx="143" lly="230" urx="436" ury="616"/>
+ <char name="u" width="600" llx="-1" lly="-15" urx="569" ury="439"/>
+ <char name="uacute" width="600" llx="-1" lly="-15" urx="569" ury="661"/>
+ <char name="ucircumflex" width="600" llx="-1" lly="-15" urx="569" ury="657"/>
+ <char name="udieresis" width="600" llx="-1" lly="-15" urx="569" ury="638"/>
+ <char name="ugrave" width="600" llx="-1" lly="-15" urx="569" ury="661"/>
+ <char name="underscore" width="600" llx="0" lly="-125" urx="600" ury="-75"/>
+ <char name="v" width="600" llx="-1" lly="0" urx="601" ury="439"/>
+ <char name="w" width="600" llx="-18" lly="0" urx="618" ury="439"/>
+ <char name="x" width="600" llx="6" lly="0" urx="594" ury="439"/>
+ <char name="y" width="600" llx="-4" lly="-142" urx="601" ury="439"/>
+ <char name="yacute" width="600" llx="-4" lly="-142" urx="601" ury="661"/>
+ <char name="ydieresis" width="600" llx="-4" lly="-142" urx="601" ury="638"/>
+ <char name="yen" width="600" llx="10" lly="0" urx="590" ury="562"/>
+ <char name="z" width="600" llx="81" lly="0" urx="520" ury="439"/>
+ <char name="zcaron" width="600" llx="81" lly="0" urx="520" ury="667"/>
+ <char name="zero" width="600" llx="87" lly="-15" urx="513" ury="616"/>
+ </char-metrics>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/CourierBoldOblique.xml b/fop-core/src/main/codegen/fonts/CourierBoldOblique.xml
new file mode 100644
index 000000000..a82a75ad2
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/CourierBoldOblique.xml
@@ -0,0 +1,267 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier-BoldOblique</font-name>
+ <full-name>Courier Bold Oblique</full-name>
+ <family-name>Courier</family-name>
+ <class-name>CourierBoldOblique</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>562</cap-height>
+ <x-height>439</x-height>
+ <ascender>626</ascender>
+ <descender>-142</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="600" llx="-9" lly="0" urx="632" ury="562"/>
+ <char name="AE" width="600" llx="-29" lly="0" urx="708" ury="562"/>
+ <char name="Aacute" width="600" llx="-9" lly="0" urx="655" ury="784"/>
+ <char name="Acircumflex" width="600" llx="-9" lly="0" urx="632" ury="780"/>
+ <char name="Adieresis" width="600" llx="-9" lly="0" urx="632" ury="761"/>
+ <char name="Agrave" width="600" llx="-9" lly="0" urx="632" ury="784"/>
+ <char name="Aring" width="600" llx="-9" lly="0" urx="632" ury="801"/>
+ <char name="Atilde" width="600" llx="-9" lly="0" urx="669" ury="759"/>
+ <char name="B" width="600" llx="30" lly="0" urx="630" ury="562"/>
+ <char name="C" width="600" llx="74" lly="-18" urx="675" ury="580"/>
+ <char name="Ccedilla" width="600" llx="74" lly="-206" urx="675" ury="580"/>
+ <char name="D" width="600" llx="30" lly="0" urx="664" ury="562"/>
+ <char name="E" width="600" llx="25" lly="0" urx="670" ury="562"/>
+ <char name="Eacute" width="600" llx="25" lly="0" urx="670" ury="784"/>
+ <char name="Ecircumflex" width="600" llx="25" lly="0" urx="670" ury="780"/>
+ <char name="Edieresis" width="600" llx="25" lly="0" urx="670" ury="761"/>
+ <char name="Egrave" width="600" llx="25" lly="0" urx="670" ury="784"/>
+ <char name="Eth" width="600" llx="30" lly="0" urx="664" ury="562"/>
+ <char name="Euro" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="600" llx="39" lly="0" urx="684" ury="562"/>
+ <char name="G" width="600" llx="74" lly="-18" urx="675" ury="580"/>
+ <char name="H" width="600" llx="20" lly="0" urx="700" ury="562"/>
+ <char name="I" width="600" llx="77" lly="0" urx="643" ury="562"/>
+ <char name="Iacute" width="600" llx="77" lly="0" urx="643" ury="784"/>
+ <char name="Icircumflex" width="600" llx="77" lly="0" urx="643" ury="780"/>
+ <char name="Idieresis" width="600" llx="77" lly="0" urx="643" ury="761"/>
+ <char name="Igrave" width="600" llx="77" lly="0" urx="643" ury="784"/>
+ <char name="J" width="600" llx="58" lly="-18" urx="721" ury="562"/>
+ <char name="K" width="600" llx="21" lly="0" urx="692" ury="562"/>
+ <char name="L" width="600" llx="39" lly="0" urx="636" ury="562"/>
+ <char name="Lslash" width="600" llx="39" lly="0" urx="636" ury="562"/>
+ <char name="M" width="600" llx="-2" lly="0" urx="722" ury="562"/>
+ <char name="N" width="600" llx="8" lly="-12" urx="730" ury="562"/>
+ <char name="Ntilde" width="600" llx="8" lly="-12" urx="730" ury="759"/>
+ <char name="O" width="600" llx="74" lly="-18" urx="645" ury="580"/>
+ <char name="OE" width="600" llx="26" lly="0" urx="701" ury="562"/>
+ <char name="Oacute" width="600" llx="74" lly="-18" urx="645" ury="784"/>
+ <char name="Ocircumflex" width="600" llx="74" lly="-18" urx="645" ury="780"/>
+ <char name="Odieresis" width="600" llx="74" lly="-18" urx="645" ury="761"/>
+ <char name="Ograve" width="600" llx="74" lly="-18" urx="645" ury="784"/>
+ <char name="Oslash" width="600" llx="48" lly="-22" urx="673" ury="584"/>
+ <char name="Otilde" width="600" llx="74" lly="-18" urx="669" ury="759"/>
+ <char name="P" width="600" llx="48" lly="0" urx="643" ury="562"/>
+ <char name="Q" width="600" llx="83" lly="-138" urx="636" ury="580"/>
+ <char name="R" width="600" llx="24" lly="0" urx="617" ury="562"/>
+ <char name="S" width="600" llx="54" lly="-22" urx="673" ury="582"/>
+ <char name="Scaron" width="600" llx="54" lly="-22" urx="689" ury="790"/>
+ <char name="Scedilla" width="600" llx="54" lly="-206" urx="673" ury="582"/>
+ <char name="T" width="600" llx="86" lly="0" urx="679" ury="562"/>
+ <char name="Thorn" width="600" llx="48" lly="0" urx="620" ury="562"/>
+ <char name="U" width="600" llx="101" lly="-18" urx="716" ury="562"/>
+ <char name="Uacute" width="600" llx="101" lly="-18" urx="716" ury="784"/>
+ <char name="Ucircumflex" width="600" llx="101" lly="-18" urx="716" ury="780"/>
+ <char name="Udieresis" width="600" llx="101" lly="-18" urx="716" ury="761"/>
+ <char name="Ugrave" width="600" llx="101" lly="-18" urx="716" ury="784"/>
+ <char name="V" width="600" llx="84" lly="0" urx="733" ury="562"/>
+ <char name="W" width="600" llx="79" lly="0" urx="738" ury="562"/>
+ <char name="X" width="600" llx="12" lly="0" urx="690" ury="562"/>
+ <char name="Y" width="600" llx="109" lly="0" urx="709" ury="562"/>
+ <char name="Yacute" width="600" llx="109" lly="0" urx="709" ury="784"/>
+ <char name="Ydieresis" width="600" llx="109" lly="0" urx="709" ury="761"/>
+ <char name="Z" width="600" llx="62" lly="0" urx="637" ury="562"/>
+ <char name="Zcaron" width="600" llx="62" lly="0" urx="659" ury="790"/>
+ <char name="a" width="600" llx="61" lly="-15" urx="593" ury="454"/>
+ <char name="aacute" width="600" llx="61" lly="-15" urx="609" ury="661"/>
+ <char name="acircumflex" width="600" llx="61" lly="-15" urx="607" ury="657"/>
+ <char name="acute" width="600" llx="312" lly="508" urx="609" ury="661"/>
+ <char name="adieresis" width="600" llx="61" lly="-15" urx="595" ury="638"/>
+ <char name="ae" width="600" llx="21" lly="-15" urx="652" ury="454"/>
+ <char name="agrave" width="600" llx="61" lly="-15" urx="593" ury="661"/>
+ <char name="ampersand" width="600" llx="61" lly="-15" urx="595" ury="543"/>
+ <char name="aring" width="600" llx="61" lly="-15" urx="593" ury="678"/>
+ <char name="asciicircum" width="600" llx="171" lly="250" urx="556" ury="616"/>
+ <char name="asciitilde" width="600" llx="120" lly="153" urx="590" ury="356"/>
+ <char name="asterisk" width="600" llx="179" lly="219" urx="598" ury="601"/>
+ <char name="at" width="600" llx="65" lly="-15" urx="642" ury="616"/>
+ <char name="atilde" width="600" llx="61" lly="-15" urx="643" ury="636"/>
+ <char name="b" width="600" llx="13" lly="-15" urx="636" ury="626"/>
+ <char name="backslash" width="600" llx="222" lly="-77" urx="496" ury="626"/>
+ <char name="bar" width="600" llx="201" lly="-250" urx="505" ury="750"/>
+ <char name="braceleft" width="600" llx="203" lly="-102" urx="595" ury="616"/>
+ <char name="braceright" width="600" llx="114" lly="-102" urx="506" ury="616"/>
+ <char name="bracketleft" width="600" llx="223" lly="-102" urx="606" ury="616"/>
+ <char name="bracketright" width="600" llx="103" lly="-102" urx="486" ury="616"/>
+ <char name="breve" width="600" llx="217" lly="468" urx="652" ury="631"/>
+ <char name="brokenbar" width="600" llx="217" lly="-175" urx="489" ury="675"/>
+ <char name="bullet" width="600" llx="196" lly="132" urx="523" ury="430"/>
+ <char name="c" width="600" llx="81" lly="-15" urx="631" ury="459"/>
+ <char name="caron" width="600" llx="238" lly="493" urx="633" ury="667"/>
+ <char name="ccedilla" width="600" llx="81" lly="-206" urx="631" ury="459"/>
+ <char name="cedilla" width="600" llx="168" lly="-206" urx="368" ury="0"/>
+ <char name="cent" width="600" llx="121" lly="-49" urx="605" ury="614"/>
+ <char name="circumflex" width="600" llx="212" lly="483" urx="607" ury="657"/>
+ <char name="colon" width="600" llx="205" lly="-15" urx="480" ury="425"/>
+ <char name="comma" width="600" llx="99" lly="-111" urx="430" ury="174"/>
+ <char name="copyright" width="600" llx="53" lly="-18" urx="667" ury="580"/>
+ <char name="currency" width="600" llx="77" lly="49" urx="644" ury="517"/>
+ <char name="d" width="600" llx="60" lly="-15" urx="645" ury="626"/>
+ <char name="dagger" width="600" llx="175" lly="-70" urx="586" ury="580"/>
+ <char name="daggerdbl" width="600" llx="121" lly="-70" urx="587" ury="580"/>
+ <char name="degree" width="600" llx="173" lly="243" urx="570" ury="616"/>
+ <char name="dieresis" width="600" llx="246" lly="498" urx="595" ury="638"/>
+ <char name="divide" width="600" llx="114" lly="16" urx="596" ury="500"/>
+ <char name="dollar" width="600" llx="87" lly="-126" urx="630" ury="666"/>
+ <char name="dotaccent" width="600" llx="348" lly="498" urx="493" ury="638"/>
+ <char name="dotlessi" width="600" llx="77" lly="0" urx="546" ury="439"/>
+ <char name="e" width="600" llx="81" lly="-15" urx="605" ury="454"/>
+ <char name="eacute" width="600" llx="81" lly="-15" urx="609" ury="661"/>
+ <char name="ecircumflex" width="600" llx="81" lly="-15" urx="607" ury="657"/>
+ <char name="edieresis" width="600" llx="81" lly="-15" urx="605" ury="638"/>
+ <char name="egrave" width="600" llx="81" lly="-15" urx="605" ury="661"/>
+ <char name="eight" width="600" llx="115" lly="-15" urx="604" ury="616"/>
+ <char name="ellipsis" width="600" llx="35" lly="-15" urx="587" ury="116"/>
+ <char name="emdash" width="600" llx="33" lly="203" urx="677" ury="313"/>
+ <char name="endash" width="600" llx="108" lly="203" urx="602" ury="313"/>
+ <char name="equal" width="600" llx="96" lly="118" urx="614" ury="398"/>
+ <char name="eth" width="600" llx="93" lly="-27" urx="661" ury="626"/>
+ <char name="exclam" width="600" llx="215" lly="-15" urx="495" ury="572"/>
+ <char name="exclamdown" width="600" llx="196" lly="-146" urx="477" ury="449"/>
+ <char name="f" width="600" llx="83" lly="0" urx="677" ury="626"/>
+ <char name="fi" width="600" llx="12" lly="0" urx="644" ury="626"/>
+ <char name="five" width="600" llx="77" lly="-15" urx="621" ury="601"/>
+ <char name="fl" width="600" llx="12" lly="0" urx="644" ury="626"/>
+ <char name="florin" width="600" llx="-57" lly="-131" urx="702" ury="616"/>
+ <char name="four" width="600" llx="81" lly="0" urx="559" ury="616"/>
+ <char name="fraction" width="600" llx="22" lly="-60" urx="708" ury="661"/>
+ <char name="g" width="600" llx="40" lly="-146" urx="674" ury="454"/>
+ <char name="germandbls" width="600" llx="22" lly="-15" urx="629" ury="626"/>
+ <char name="grave" width="600" llx="272" lly="508" urx="503" ury="661"/>
+ <char name="greater" width="600" llx="97" lly="15" urx="589" ury="501"/>
+ <char name="guillemotleft" width="600" llx="62" lly="70" urx="639" ury="446"/>
+ <char name="guillemotright" width="600" llx="71" lly="70" urx="647" ury="446"/>
+ <char name="guilsinglleft" width="600" llx="195" lly="70" urx="545" ury="446"/>
+ <char name="guilsinglright" width="600" llx="165" lly="70" urx="514" ury="446"/>
+ <char name="h" width="600" llx="18" lly="0" urx="615" ury="626"/>
+ <char name="hungarumlaut" width="600" llx="171" lly="488" urx="729" ury="661"/>
+ <char name="hyphen" width="600" llx="143" lly="203" urx="567" ury="313"/>
+ <char name="i" width="600" llx="77" lly="0" urx="546" ury="658"/>
+ <char name="iacute" width="600" llx="77" lly="0" urx="609" ury="661"/>
+ <char name="icircumflex" width="600" llx="77" lly="0" urx="577" ury="657"/>
+ <char name="idieresis" width="600" llx="77" lly="0" urx="561" ury="618"/>
+ <char name="igrave" width="600" llx="77" lly="0" urx="546" ury="661"/>
+ <char name="j" width="600" llx="36" lly="-146" urx="580" ury="658"/>
+ <char name="k" width="600" llx="33" lly="0" urx="643" ury="626"/>
+ <char name="l" width="600" llx="77" lly="0" urx="546" ury="626"/>
+ <char name="less" width="600" llx="120" lly="15" urx="613" ury="501"/>
+ <char name="logicalnot" width="600" llx="135" lly="103" urx="617" ury="413"/>
+ <char name="lslash" width="600" llx="77" lly="0" urx="587" ury="626"/>
+ <char name="m" width="600" llx="-22" lly="0" urx="649" ury="454"/>
+ <char name="macron" width="600" llx="195" lly="505" urx="637" ury="585"/>
+ <char name="minus" width="600" llx="114" lly="203" urx="596" ury="313"/>
+ <char name="mu" width="600" llx="49" lly="-142" urx="592" ury="439"/>
+ <char name="multiply" width="600" llx="104" lly="39" urx="606" ury="478"/>
+ <char name="n" width="600" llx="18" lly="0" urx="615" ury="454"/>
+ <char name="nine" width="600" llx="75" lly="-15" urx="592" ury="616"/>
+ <char name="ntilde" width="600" llx="18" lly="0" urx="643" ury="636"/>
+ <char name="numbersign" width="600" llx="88" lly="-45" urx="641" ury="651"/>
+ <char name="o" width="600" llx="71" lly="-15" urx="622" ury="454"/>
+ <char name="oacute" width="600" llx="71" lly="-15" urx="649" ury="661"/>
+ <char name="ocircumflex" width="600" llx="71" lly="-15" urx="622" ury="657"/>
+ <char name="odieresis" width="600" llx="71" lly="-15" urx="622" ury="638"/>
+ <char name="oe" width="600" llx="18" lly="-15" urx="662" ury="454"/>
+ <char name="ogonek" width="600" llx="143" lly="-199" urx="367" ury="0"/>
+ <char name="ograve" width="600" llx="71" lly="-15" urx="622" ury="661"/>
+ <char name="one" width="600" llx="93" lly="0" urx="562" ury="616"/>
+ <char name="onehalf" width="600" llx="22" lly="-60" urx="716" ury="661"/>
+ <char name="onequarter" width="600" llx="13" lly="-60" urx="707" ury="661"/>
+ <char name="onesuperior" width="600" llx="212" lly="230" urx="514" ury="616"/>
+ <char name="ordfeminine" width="600" llx="188" lly="196" urx="526" ury="580"/>
+ <char name="ordmasculine" width="600" llx="188" lly="196" urx="543" ury="580"/>
+ <char name="oslash" width="600" llx="54" lly="-24" urx="638" ury="463"/>
+ <char name="otilde" width="600" llx="71" lly="-15" urx="643" ury="636"/>
+ <char name="p" width="600" llx="-32" lly="-142" urx="622" ury="454"/>
+ <char name="paragraph" width="600" llx="61" lly="-70" urx="700" ury="580"/>
+ <char name="parenleft" width="600" llx="265" lly="-102" urx="592" ury="616"/>
+ <char name="parenright" width="600" llx="117" lly="-102" urx="444" ury="616"/>
+ <char name="percent" width="600" llx="101" lly="-15" urx="625" ury="616"/>
+ <char name="period" width="600" llx="206" lly="-15" urx="427" ury="171"/>
+ <char name="periodcentered" width="600" llx="248" lly="165" urx="461" ury="351"/>
+ <char name="perthousand" width="600" llx="-45" lly="-15" urx="743" ury="616"/>
+ <char name="plus" width="600" llx="114" lly="39" urx="596" ury="478"/>
+ <char name="plusminus" width="600" llx="76" lly="24" urx="614" ury="515"/>
+ <char name="q" width="600" llx="60" lly="-142" urx="685" ury="454"/>
+ <char name="question" width="600" llx="183" lly="-14" urx="592" ury="580"/>
+ <char name="questiondown" width="600" llx="100" lly="-146" urx="509" ury="449"/>
+ <char name="quotedbl" width="600" llx="211" lly="277" urx="585" ury="562"/>
+ <char name="quotedblbase" width="600" llx="34" lly="-142" urx="560" ury="143"/>
+ <char name="quotedblleft" width="600" llx="190" lly="277" urx="594" ury="562"/>
+ <char name="quotedblright" width="600" llx="119" lly="277" urx="645" ury="562"/>
+ <char name="quoteleft" width="600" llx="297" lly="277" urx="487" ury="562"/>
+ <char name="quoteright" width="600" llx="229" lly="277" urx="543" ury="562"/>
+ <char name="quotesinglbase" width="600" llx="144" lly="-142" urx="458" ury="143"/>
+ <char name="quotesingle" width="600" llx="303" lly="277" urx="493" ury="562"/>
+ <char name="r" width="600" llx="47" lly="0" urx="655" ury="454"/>
+ <char name="registered" width="600" llx="53" lly="-18" urx="667" ury="580"/>
+ <char name="ring" width="600" llx="319" lly="481" urx="528" ury="678"/>
+ <char name="s" width="600" llx="66" lly="-17" urx="608" ury="459"/>
+ <char name="scaron" width="600" llx="66" lly="-17" urx="633" ury="667"/>
+ <char name="scedilla" width="600" llx="66" lly="-206" urx="608" ury="459"/>
+ <char name="section" width="600" llx="74" lly="-70" urx="620" ury="580"/>
+ <char name="semicolon" width="600" llx="99" lly="-111" urx="481" ury="425"/>
+ <char name="seven" width="600" llx="147" lly="0" urx="622" ury="601"/>
+ <char name="six" width="600" llx="135" lly="-15" urx="652" ury="616"/>
+ <char name="slash" width="600" llx="90" lly="-77" urx="626" ury="626"/>
+ <char name="space" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="600" llx="106" lly="-28" urx="650" ury="611"/>
+ <char name="t" width="600" llx="118" lly="-15" urx="567" ury="562"/>
+ <char name="thorn" width="600" llx="-32" lly="-142" urx="622" ury="626"/>
+ <char name="three" width="600" llx="71" lly="-15" urx="571" ury="616"/>
+ <char name="threequarters" width="600" llx="8" lly="-60" urx="699" ury="661"/>
+ <char name="threesuperior" width="600" llx="193" lly="222" urx="526" ury="616"/>
+ <char name="tilde" width="600" llx="199" lly="493" urx="643" ury="636"/>
+ <char name="trademark" width="600" llx="86" lly="230" urx="869" ury="562"/>
+ <char name="two" width="600" llx="61" lly="0" urx="594" ury="616"/>
+ <char name="twosuperior" width="600" llx="191" lly="230" urx="542" ury="616"/>
+ <char name="u" width="600" llx="70" lly="-15" urx="592" ury="439"/>
+ <char name="uacute" width="600" llx="70" lly="-15" urx="599" ury="661"/>
+ <char name="ucircumflex" width="600" llx="70" lly="-15" urx="597" ury="657"/>
+ <char name="udieresis" width="600" llx="70" lly="-15" urx="595" ury="638"/>
+ <char name="ugrave" width="600" llx="70" lly="-15" urx="592" ury="661"/>
+ <char name="underscore" width="600" llx="-27" lly="-125" urx="585" ury="-75"/>
+ <char name="v" width="600" llx="70" lly="0" urx="695" ury="439"/>
+ <char name="w" width="600" llx="53" lly="0" urx="712" ury="439"/>
+ <char name="x" width="600" llx="6" lly="0" urx="671" ury="439"/>
+ <char name="y" width="600" llx="-21" lly="-142" urx="695" ury="439"/>
+ <char name="yacute" width="600" llx="-21" lly="-142" urx="695" ury="661"/>
+ <char name="ydieresis" width="600" llx="-21" lly="-142" urx="695" ury="638"/>
+ <char name="yen" width="600" llx="98" lly="0" urx="710" ury="562"/>
+ <char name="z" width="600" llx="81" lly="0" urx="614" ury="439"/>
+ <char name="zcaron" width="600" llx="81" lly="0" urx="643" ury="667"/>
+ <char name="zero" width="600" llx="135" lly="-15" urx="593" ury="616"/>
+ </char-metrics>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/CourierOblique.xml b/fop-core/src/main/codegen/fonts/CourierOblique.xml
new file mode 100644
index 000000000..e08fa9b9b
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/CourierOblique.xml
@@ -0,0 +1,267 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Courier-Oblique</font-name>
+ <full-name>Courier Oblique</full-name>
+ <family-name>Courier</family-name>
+ <class-name>CourierOblique</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>562</cap-height>
+ <x-height>426</x-height>
+ <ascender>629</ascender>
+ <descender>-157</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="600" llx="3" lly="0" urx="607" ury="562"/>
+ <char name="AE" width="600" llx="3" lly="0" urx="655" ury="562"/>
+ <char name="Aacute" width="600" llx="3" lly="0" urx="660" ury="805"/>
+ <char name="Acircumflex" width="600" llx="3" lly="0" urx="607" ury="787"/>
+ <char name="Adieresis" width="600" llx="3" lly="0" urx="607" ury="753"/>
+ <char name="Agrave" width="600" llx="3" lly="0" urx="607" ury="805"/>
+ <char name="Aring" width="600" llx="3" lly="0" urx="607" ury="750"/>
+ <char name="Atilde" width="600" llx="3" lly="0" urx="655" ury="729"/>
+ <char name="B" width="600" llx="43" lly="0" urx="616" ury="562"/>
+ <char name="C" width="600" llx="93" lly="-18" urx="655" ury="580"/>
+ <char name="Ccedilla" width="600" llx="93" lly="-151" urx="658" ury="580"/>
+ <char name="D" width="600" llx="43" lly="0" urx="645" ury="562"/>
+ <char name="E" width="600" llx="53" lly="0" urx="660" ury="562"/>
+ <char name="Eacute" width="600" llx="53" lly="0" urx="670" ury="805"/>
+ <char name="Ecircumflex" width="600" llx="53" lly="0" urx="660" ury="787"/>
+ <char name="Edieresis" width="600" llx="53" lly="0" urx="660" ury="753"/>
+ <char name="Egrave" width="600" llx="53" lly="0" urx="660" ury="805"/>
+ <char name="Eth" width="600" llx="43" lly="0" urx="645" ury="562"/>
+ <char name="Euro" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="600" llx="53" lly="0" urx="660" ury="562"/>
+ <char name="G" width="600" llx="83" lly="-18" urx="645" ury="580"/>
+ <char name="H" width="600" llx="32" lly="0" urx="687" ury="562"/>
+ <char name="I" width="600" llx="96" lly="0" urx="623" ury="562"/>
+ <char name="Iacute" width="600" llx="96" lly="0" urx="640" ury="805"/>
+ <char name="Icircumflex" width="600" llx="96" lly="0" urx="623" ury="787"/>
+ <char name="Idieresis" width="600" llx="96" lly="0" urx="623" ury="753"/>
+ <char name="Igrave" width="600" llx="96" lly="0" urx="623" ury="805"/>
+ <char name="J" width="600" llx="52" lly="-18" urx="685" ury="562"/>
+ <char name="K" width="600" llx="38" lly="0" urx="671" ury="562"/>
+ <char name="L" width="600" llx="47" lly="0" urx="607" ury="562"/>
+ <char name="Lslash" width="600" llx="47" lly="0" urx="607" ury="562"/>
+ <char name="M" width="600" llx="4" lly="0" urx="715" ury="562"/>
+ <char name="N" width="600" llx="7" lly="-13" urx="712" ury="562"/>
+ <char name="Ntilde" width="600" llx="7" lly="-13" urx="712" ury="729"/>
+ <char name="O" width="600" llx="94" lly="-18" urx="625" ury="580"/>
+ <char name="OE" width="600" llx="59" lly="0" urx="672" ury="562"/>
+ <char name="Oacute" width="600" llx="94" lly="-18" urx="640" ury="805"/>
+ <char name="Ocircumflex" width="600" llx="94" lly="-18" urx="625" ury="787"/>
+ <char name="Odieresis" width="600" llx="94" lly="-18" urx="625" ury="753"/>
+ <char name="Ograve" width="600" llx="94" lly="-18" urx="625" ury="805"/>
+ <char name="Oslash" width="600" llx="94" lly="-80" urx="625" ury="629"/>
+ <char name="Otilde" width="600" llx="94" lly="-18" urx="655" ury="729"/>
+ <char name="P" width="600" llx="79" lly="0" urx="644" ury="562"/>
+ <char name="Q" width="600" llx="95" lly="-138" urx="625" ury="580"/>
+ <char name="R" width="600" llx="38" lly="0" urx="598" ury="562"/>
+ <char name="S" width="600" llx="76" lly="-20" urx="650" ury="580"/>
+ <char name="Scaron" width="600" llx="76" lly="-20" urx="672" ury="802"/>
+ <char name="Scedilla" width="600" llx="76" lly="-151" urx="650" ury="580"/>
+ <char name="T" width="600" llx="108" lly="0" urx="665" ury="562"/>
+ <char name="Thorn" width="600" llx="79" lly="0" urx="606" ury="562"/>
+ <char name="U" width="600" llx="125" lly="-18" urx="702" ury="562"/>
+ <char name="Uacute" width="600" llx="125" lly="-18" urx="702" ury="805"/>
+ <char name="Ucircumflex" width="600" llx="125" lly="-18" urx="702" ury="787"/>
+ <char name="Udieresis" width="600" llx="125" lly="-18" urx="702" ury="753"/>
+ <char name="Ugrave" width="600" llx="125" lly="-18" urx="702" ury="805"/>
+ <char name="V" width="600" llx="105" lly="-13" urx="723" ury="562"/>
+ <char name="W" width="600" llx="106" lly="-13" urx="722" ury="562"/>
+ <char name="X" width="600" llx="23" lly="0" urx="675" ury="562"/>
+ <char name="Y" width="600" llx="133" lly="0" urx="695" ury="562"/>
+ <char name="Yacute" width="600" llx="133" lly="0" urx="695" ury="805"/>
+ <char name="Ydieresis" width="600" llx="133" lly="0" urx="695" ury="753"/>
+ <char name="Z" width="600" llx="86" lly="0" urx="610" ury="562"/>
+ <char name="Zcaron" width="600" llx="86" lly="0" urx="642" ury="802"/>
+ <char name="a" width="600" llx="76" lly="-15" urx="569" ury="441"/>
+ <char name="aacute" width="600" llx="76" lly="-15" urx="612" ury="672"/>
+ <char name="acircumflex" width="600" llx="76" lly="-15" urx="581" ury="654"/>
+ <char name="acute" width="600" llx="348" lly="497" urx="612" ury="672"/>
+ <char name="adieresis" width="600" llx="76" lly="-15" urx="575" ury="620"/>
+ <char name="ae" width="600" llx="41" lly="-15" urx="626" ury="441"/>
+ <char name="agrave" width="600" llx="76" lly="-15" urx="569" ury="672"/>
+ <char name="ampersand" width="600" llx="87" lly="-15" urx="580" ury="543"/>
+ <char name="aring" width="600" llx="76" lly="-15" urx="569" ury="627"/>
+ <char name="asciicircum" width="600" llx="175" lly="354" urx="587" ury="622"/>
+ <char name="asciitilde" width="600" llx="116" lly="197" urx="600" ury="320"/>
+ <char name="asterisk" width="600" llx="212" lly="257" urx="580" ury="607"/>
+ <char name="at" width="600" llx="127" lly="-15" urx="582" ury="622"/>
+ <char name="atilde" width="600" llx="76" lly="-15" urx="629" ury="606"/>
+ <char name="b" width="600" llx="29" lly="-15" urx="625" ury="629"/>
+ <char name="backslash" width="600" llx="249" lly="-80" urx="468" ury="629"/>
+ <char name="bar" width="600" llx="222" lly="-250" urx="485" ury="750"/>
+ <char name="braceleft" width="600" llx="233" lly="-108" urx="569" ury="622"/>
+ <char name="braceright" width="600" llx="140" lly="-108" urx="477" ury="622"/>
+ <char name="bracketleft" width="600" llx="246" lly="-108" urx="574" ury="622"/>
+ <char name="bracketright" width="600" llx="135" lly="-108" urx="463" ury="622"/>
+ <char name="breve" width="600" llx="279" lly="501" urx="576" ury="609"/>
+ <char name="brokenbar" width="600" llx="238" lly="-175" urx="469" ury="675"/>
+ <char name="bullet" width="600" llx="224" lly="130" urx="485" ury="383"/>
+ <char name="c" width="600" llx="106" lly="-15" urx="608" ury="441"/>
+ <char name="caron" width="600" llx="262" lly="492" urx="614" ury="669"/>
+ <char name="ccedilla" width="600" llx="106" lly="-151" urx="614" ury="441"/>
+ <char name="cedilla" width="600" llx="197" lly="-151" urx="344" ury="10"/>
+ <char name="cent" width="600" llx="151" lly="-49" urx="588" ury="614"/>
+ <char name="circumflex" width="600" llx="229" lly="477" urx="581" ury="654"/>
+ <char name="colon" width="600" llx="238" lly="-15" urx="441" ury="385"/>
+ <char name="comma" width="600" llx="157" lly="-112" urx="370" ury="122"/>
+ <char name="copyright" width="600" llx="53" lly="-18" urx="667" ury="580"/>
+ <char name="currency" width="600" llx="94" lly="58" urx="628" ury="506"/>
+ <char name="d" width="600" llx="85" lly="-15" urx="640" ury="629"/>
+ <char name="dagger" width="600" llx="217" lly="-78" urx="546" ury="580"/>
+ <char name="daggerdbl" width="600" llx="163" lly="-78" urx="546" ury="580"/>
+ <char name="degree" width="600" llx="214" lly="269" urx="576" ury="622"/>
+ <char name="dieresis" width="600" llx="272" lly="537" urx="579" ury="640"/>
+ <char name="divide" width="600" llx="136" lly="48" urx="573" ury="467"/>
+ <char name="dollar" width="600" llx="108" lly="-126" urx="596" ury="662"/>
+ <char name="dotaccent" width="600" llx="373" lly="537" urx="478" ury="640"/>
+ <char name="dotlessi" width="600" llx="95" lly="0" urx="515" ury="426"/>
+ <char name="e" width="600" llx="106" lly="-15" urx="598" ury="441"/>
+ <char name="eacute" width="600" llx="106" lly="-15" urx="612" ury="672"/>
+ <char name="ecircumflex" width="600" llx="106" lly="-15" urx="598" ury="654"/>
+ <char name="edieresis" width="600" llx="106" lly="-15" urx="598" ury="620"/>
+ <char name="egrave" width="600" llx="106" lly="-15" urx="598" ury="672"/>
+ <char name="eight" width="600" llx="132" lly="-15" urx="588" ury="622"/>
+ <char name="ellipsis" width="600" llx="46" lly="-15" urx="575" ury="111"/>
+ <char name="emdash" width="600" llx="49" lly="231" urx="661" ury="285"/>
+ <char name="endash" width="600" llx="124" lly="231" urx="586" ury="285"/>
+ <char name="equal" width="600" llx="109" lly="138" urx="600" ury="376"/>
+ <char name="eth" width="600" llx="102" lly="-15" urx="639" ury="629"/>
+ <char name="exclam" width="600" llx="243" lly="-15" urx="464" ury="572"/>
+ <char name="exclamdown" width="600" llx="225" lly="-157" urx="445" ury="430"/>
+ <char name="f" width="600" llx="114" lly="0" urx="662" ury="629"/>
+ <char name="fi" width="600" llx="3" lly="0" urx="619" ury="629"/>
+ <char name="five" width="600" llx="99" lly="-15" urx="589" ury="607"/>
+ <char name="fl" width="600" llx="3" lly="0" urx="619" ury="629"/>
+ <char name="florin" width="600" llx="-26" lly="-143" urx="671" ury="622"/>
+ <char name="four" width="600" llx="108" lly="0" urx="541" ury="622"/>
+ <char name="fraction" width="600" llx="84" lly="-57" urx="646" ury="665"/>
+ <char name="g" width="600" llx="61" lly="-157" urx="657" ury="441"/>
+ <char name="germandbls" width="600" llx="48" lly="-15" urx="617" ury="629"/>
+ <char name="grave" width="600" llx="294" lly="497" urx="484" ury="672"/>
+ <char name="greater" width="600" llx="85" lly="42" urx="599" ury="472"/>
+ <char name="guillemotleft" width="600" llx="92" lly="70" urx="652" ury="446"/>
+ <char name="guillemotright" width="600" llx="58" lly="70" urx="618" ury="446"/>
+ <char name="guilsinglleft" width="600" llx="204" lly="70" urx="540" ury="446"/>
+ <char name="guilsinglright" width="600" llx="170" lly="70" urx="506" ury="446"/>
+ <char name="h" width="600" llx="33" lly="0" urx="592" ury="629"/>
+ <char name="hungarumlaut" width="600" llx="239" lly="497" urx="683" ury="672"/>
+ <char name="hyphen" width="600" llx="152" lly="231" urx="558" ury="285"/>
+ <char name="i" width="600" llx="95" lly="0" urx="515" ury="657"/>
+ <char name="iacute" width="600" llx="95" lly="0" urx="612" ury="672"/>
+ <char name="icircumflex" width="600" llx="95" lly="0" urx="551" ury="654"/>
+ <char name="idieresis" width="600" llx="95" lly="0" urx="545" ury="620"/>
+ <char name="igrave" width="600" llx="95" lly="0" urx="515" ury="672"/>
+ <char name="j" width="600" llx="52" lly="-157" urx="550" ury="657"/>
+ <char name="k" width="600" llx="58" lly="0" urx="633" ury="629"/>
+ <char name="l" width="600" llx="95" lly="0" urx="515" ury="629"/>
+ <char name="less" width="600" llx="96" lly="42" urx="610" ury="472"/>
+ <char name="logicalnot" width="600" llx="155" lly="108" urx="591" ury="369"/>
+ <char name="lslash" width="600" llx="95" lly="0" urx="587" ury="629"/>
+ <char name="m" width="600" llx="-5" lly="0" urx="615" ury="441"/>
+ <char name="macron" width="600" llx="232" lly="525" urx="600" ury="565"/>
+ <char name="minus" width="600" llx="129" lly="232" urx="580" ury="283"/>
+ <char name="mu" width="600" llx="72" lly="-157" urx="572" ury="426"/>
+ <char name="multiply" width="600" llx="103" lly="43" urx="607" ury="470"/>
+ <char name="n" width="600" llx="26" lly="0" urx="585" ury="441"/>
+ <char name="nine" width="600" llx="93" lly="-15" urx="574" ury="622"/>
+ <char name="ntilde" width="600" llx="26" lly="0" urx="629" ury="606"/>
+ <char name="numbersign" width="600" llx="133" lly="-32" urx="596" ury="639"/>
+ <char name="o" width="600" llx="102" lly="-15" urx="588" ury="441"/>
+ <char name="oacute" width="600" llx="102" lly="-15" urx="612" ury="672"/>
+ <char name="ocircumflex" width="600" llx="102" lly="-15" urx="588" ury="654"/>
+ <char name="odieresis" width="600" llx="102" lly="-15" urx="588" ury="620"/>
+ <char name="oe" width="600" llx="54" lly="-15" urx="615" ury="441"/>
+ <char name="ogonek" width="600" llx="189" lly="-172" urx="377" ury="4"/>
+ <char name="ograve" width="600" llx="102" lly="-15" urx="588" ury="672"/>
+ <char name="one" width="600" llx="98" lly="0" urx="515" ury="622"/>
+ <char name="onehalf" width="600" llx="65" lly="-57" urx="669" ury="665"/>
+ <char name="onequarter" width="600" llx="65" lly="-57" urx="674" ury="665"/>
+ <char name="onesuperior" width="600" llx="231" lly="249" urx="491" ury="622"/>
+ <char name="ordfeminine" width="600" llx="209" lly="249" urx="512" ury="580"/>
+ <char name="ordmasculine" width="600" llx="210" lly="249" urx="535" ury="580"/>
+ <char name="oslash" width="600" llx="102" lly="-80" urx="588" ury="506"/>
+ <char name="otilde" width="600" llx="102" lly="-15" urx="629" ury="606"/>
+ <char name="p" width="600" llx="-24" lly="-157" urx="605" ury="441"/>
+ <char name="paragraph" width="600" llx="100" lly="-78" urx="630" ury="562"/>
+ <char name="parenleft" width="600" llx="313" lly="-108" urx="572" ury="622"/>
+ <char name="parenright" width="600" llx="137" lly="-108" urx="396" ury="622"/>
+ <char name="percent" width="600" llx="134" lly="-15" urx="599" ury="622"/>
+ <char name="period" width="600" llx="238" lly="-15" urx="382" ury="109"/>
+ <char name="periodcentered" width="600" llx="275" lly="189" urx="434" ury="327"/>
+ <char name="perthousand" width="600" llx="59" lly="-15" urx="627" ury="622"/>
+ <char name="plus" width="600" llx="129" lly="44" urx="580" ury="470"/>
+ <char name="plusminus" width="600" llx="96" lly="44" urx="594" ury="558"/>
+ <char name="q" width="600" llx="85" lly="-157" urx="682" ury="441"/>
+ <char name="question" width="600" llx="222" lly="-15" urx="583" ury="572"/>
+ <char name="questiondown" width="600" llx="105" lly="-157" urx="466" ury="430"/>
+ <char name="quotedbl" width="600" llx="273" lly="328" urx="532" ury="562"/>
+ <char name="quotedblbase" width="600" llx="115" lly="-134" urx="478" ury="100"/>
+ <char name="quotedblleft" width="600" llx="262" lly="328" urx="541" ury="562"/>
+ <char name="quotedblright" width="600" llx="213" lly="328" urx="576" ury="562"/>
+ <char name="quoteleft" width="600" llx="343" lly="328" urx="457" ury="562"/>
+ <char name="quoteright" width="600" llx="283" lly="328" urx="495" ury="562"/>
+ <char name="quotesinglbase" width="600" llx="185" lly="-134" urx="397" ury="100"/>
+ <char name="quotesingle" width="600" llx="345" lly="328" urx="460" ury="562"/>
+ <char name="r" width="600" llx="60" lly="0" urx="636" ury="441"/>
+ <char name="registered" width="600" llx="53" lly="-18" urx="667" ury="580"/>
+ <char name="ring" width="600" llx="332" lly="463" urx="500" ury="627"/>
+ <char name="s" width="600" llx="78" lly="-15" urx="584" ury="441"/>
+ <char name="scaron" width="600" llx="78" lly="-15" urx="614" ury="669"/>
+ <char name="scedilla" width="600" llx="78" lly="-151" urx="584" ury="441"/>
+ <char name="section" width="600" llx="104" lly="-78" urx="590" ury="580"/>
+ <char name="semicolon" width="600" llx="157" lly="-112" urx="441" ury="385"/>
+ <char name="seven" width="600" llx="182" lly="0" urx="612" ury="607"/>
+ <char name="six" width="600" llx="155" lly="-15" urx="629" ury="622"/>
+ <char name="slash" width="600" llx="112" lly="-80" urx="604" ury="629"/>
+ <char name="space" width="600" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="600" llx="124" lly="-21" urx="621" ury="611"/>
+ <char name="t" width="600" llx="167" lly="-15" urx="561" ury="561"/>
+ <char name="thorn" width="600" llx="-24" lly="-157" urx="605" ury="629"/>
+ <char name="three" width="600" llx="82" lly="-15" urx="538" ury="622"/>
+ <char name="threequarters" width="600" llx="73" lly="-56" urx="659" ury="666"/>
+ <char name="threesuperior" width="600" llx="213" lly="240" urx="501" ury="622"/>
+ <char name="tilde" width="600" llx="212" lly="489" urx="629" ury="606"/>
+ <char name="trademark" width="600" llx="75" lly="263" urx="742" ury="562"/>
+ <char name="two" width="600" llx="70" lly="0" urx="568" ury="622"/>
+ <char name="twosuperior" width="600" llx="230" lly="249" urx="535" ury="622"/>
+ <char name="u" width="600" llx="101" lly="-15" urx="572" ury="426"/>
+ <char name="uacute" width="600" llx="101" lly="-15" urx="602" ury="672"/>
+ <char name="ucircumflex" width="600" llx="101" lly="-15" urx="572" ury="654"/>
+ <char name="udieresis" width="600" llx="101" lly="-15" urx="575" ury="620"/>
+ <char name="ugrave" width="600" llx="101" lly="-15" urx="572" ury="672"/>
+ <char name="underscore" width="600" llx="-27" lly="-125" urx="584" ury="-75"/>
+ <char name="v" width="600" llx="90" lly="-10" urx="681" ury="426"/>
+ <char name="w" width="600" llx="76" lly="-10" urx="695" ury="426"/>
+ <char name="x" width="600" llx="20" lly="0" urx="655" ury="426"/>
+ <char name="y" width="600" llx="-4" lly="-157" urx="683" ury="426"/>
+ <char name="yacute" width="600" llx="-4" lly="-157" urx="683" ury="672"/>
+ <char name="ydieresis" width="600" llx="-4" lly="-157" urx="683" ury="620"/>
+ <char name="yen" width="600" llx="120" lly="0" urx="693" ury="562"/>
+ <char name="z" width="600" llx="99" lly="0" urx="593" ury="426"/>
+ <char name="zcaron" width="600" llx="99" lly="0" urx="624" ury="669"/>
+ <char name="zero" width="600" llx="154" lly="-15" urx="575" ury="622"/>
+ </char-metrics>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/Helvetica.xml b/fop-core/src/main/codegen/fonts/Helvetica.xml
new file mode 100644
index 000000000..b6e11a72b
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/Helvetica.xml
@@ -0,0 +1,606 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica</font-name>
+ <full-name>Helvetica</full-name>
+ <family-name>Helvetica</family-name>
+ <class-name>Helvetica</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>718</cap-height>
+ <x-height>523</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="667" llx="14" lly="0" urx="654" ury="718"/>
+ <char name="AE" width="1000" llx="8" lly="0" urx="951" ury="718"/>
+ <char name="Aacute" width="667" llx="14" lly="0" urx="654" ury="929"/>
+ <char name="Acircumflex" width="667" llx="14" lly="0" urx="654" ury="929"/>
+ <char name="Adieresis" width="667" llx="14" lly="0" urx="654" ury="901"/>
+ <char name="Agrave" width="667" llx="14" lly="0" urx="654" ury="929"/>
+ <char name="Aring" width="667" llx="14" lly="0" urx="654" ury="931"/>
+ <char name="Atilde" width="667" llx="14" lly="0" urx="654" ury="917"/>
+ <char name="B" width="667" llx="74" lly="0" urx="627" ury="718"/>
+ <char name="C" width="722" llx="44" lly="-19" urx="681" ury="737"/>
+ <char name="Ccedilla" width="722" llx="44" lly="-225" urx="681" ury="737"/>
+ <char name="D" width="722" llx="81" lly="0" urx="674" ury="718"/>
+ <char name="E" width="667" llx="86" lly="0" urx="616" ury="718"/>
+ <char name="Eacute" width="667" llx="86" lly="0" urx="616" ury="929"/>
+ <char name="Ecircumflex" width="667" llx="86" lly="0" urx="616" ury="929"/>
+ <char name="Edieresis" width="667" llx="86" lly="0" urx="616" ury="901"/>
+ <char name="Egrave" width="667" llx="86" lly="0" urx="616" ury="929"/>
+ <char name="Eth" width="722" llx="0" lly="0" urx="674" ury="718"/>
+ <char name="Euro" width="556" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="611" llx="86" lly="0" urx="583" ury="718"/>
+ <char name="G" width="778" llx="48" lly="-19" urx="704" ury="737"/>
+ <char name="H" width="722" llx="77" lly="0" urx="646" ury="718"/>
+ <char name="I" width="278" llx="91" lly="0" urx="188" ury="718"/>
+ <char name="Iacute" width="278" llx="91" lly="0" urx="292" ury="929"/>
+ <char name="Icircumflex" width="278" llx="-6" lly="0" urx="285" ury="929"/>
+ <char name="Idieresis" width="278" llx="13" lly="0" urx="266" ury="901"/>
+ <char name="Igrave" width="278" llx="-13" lly="0" urx="188" ury="929"/>
+ <char name="J" width="500" llx="17" lly="-19" urx="428" ury="718"/>
+ <char name="K" width="667" llx="76" lly="0" urx="663" ury="718"/>
+ <char name="L" width="556" llx="76" lly="0" urx="537" ury="718"/>
+ <char name="Lslash" width="556" llx="-20" lly="0" urx="537" ury="718"/>
+ <char name="M" width="833" llx="73" lly="0" urx="761" ury="718"/>
+ <char name="N" width="722" llx="76" lly="0" urx="646" ury="718"/>
+ <char name="Ntilde" width="722" llx="76" lly="0" urx="646" ury="917"/>
+ <char name="O" width="778" llx="39" lly="-19" urx="739" ury="737"/>
+ <char name="OE" width="1000" llx="36" lly="-19" urx="965" ury="737"/>
+ <char name="Oacute" width="778" llx="39" lly="-19" urx="739" ury="929"/>
+ <char name="Ocircumflex" width="778" llx="39" lly="-19" urx="739" ury="929"/>
+ <char name="Odieresis" width="778" llx="39" lly="-19" urx="739" ury="901"/>
+ <char name="Ograve" width="778" llx="39" lly="-19" urx="739" ury="929"/>
+ <char name="Oslash" width="778" llx="39" lly="-19" urx="740" ury="737"/>
+ <char name="Otilde" width="778" llx="39" lly="-19" urx="739" ury="917"/>
+ <char name="P" width="667" llx="86" lly="0" urx="622" ury="718"/>
+ <char name="Q" width="778" llx="39" lly="-56" urx="739" ury="737"/>
+ <char name="R" width="722" llx="88" lly="0" urx="684" ury="718"/>
+ <char name="S" width="667" llx="49" lly="-19" urx="620" ury="737"/>
+ <char name="Scaron" width="667" llx="49" lly="-19" urx="620" ury="929"/>
+ <char name="T" width="611" llx="14" lly="0" urx="597" ury="718"/>
+ <char name="Thorn" width="667" llx="86" lly="0" urx="622" ury="718"/>
+ <char name="U" width="722" llx="79" lly="-19" urx="644" ury="718"/>
+ <char name="Uacute" width="722" llx="79" lly="-19" urx="644" ury="929"/>
+ <char name="Ucircumflex" width="722" llx="79" lly="-19" urx="644" ury="929"/>
+ <char name="Udieresis" width="722" llx="79" lly="-19" urx="644" ury="901"/>
+ <char name="Ugrave" width="722" llx="79" lly="-19" urx="644" ury="929"/>
+ <char name="V" width="667" llx="20" lly="0" urx="647" ury="718"/>
+ <char name="W" width="944" llx="16" lly="0" urx="928" ury="718"/>
+ <char name="X" width="667" llx="19" lly="0" urx="648" ury="718"/>
+ <char name="Y" width="667" llx="14" lly="0" urx="653" ury="718"/>
+ <char name="Yacute" width="667" llx="14" lly="0" urx="653" ury="929"/>
+ <char name="Ydieresis" width="667" llx="14" lly="0" urx="653" ury="901"/>
+ <char name="Z" width="611" llx="23" lly="0" urx="588" ury="718"/>
+ <char name="Zcaron" width="611" llx="23" lly="0" urx="588" ury="929"/>
+ <char name="a" width="556" llx="36" lly="-15" urx="530" ury="538"/>
+ <char name="aacute" width="556" llx="36" lly="-15" urx="530" ury="734"/>
+ <char name="acircumflex" width="556" llx="36" lly="-15" urx="530" ury="734"/>
+ <char name="acute" width="333" llx="122" lly="593" urx="319" ury="734"/>
+ <char name="adieresis" width="556" llx="36" lly="-15" urx="530" ury="706"/>
+ <char name="ae" width="889" llx="36" lly="-15" urx="847" ury="538"/>
+ <char name="agrave" width="556" llx="36" lly="-15" urx="530" ury="734"/>
+ <char name="ampersand" width="667" llx="44" lly="-15" urx="645" ury="718"/>
+ <char name="aring" width="556" llx="36" lly="-15" urx="530" ury="756"/>
+ <char name="asciicircum" width="469" llx="-14" lly="264" urx="483" ury="688"/>
+ <char name="asciitilde" width="584" llx="61" lly="180" urx="523" ury="326"/>
+ <char name="asterisk" width="389" llx="39" lly="431" urx="349" ury="718"/>
+ <char name="at" width="1015" llx="147" lly="-19" urx="868" ury="737"/>
+ <char name="atilde" width="556" llx="36" lly="-15" urx="530" ury="722"/>
+ <char name="b" width="556" llx="58" lly="-15" urx="517" ury="718"/>
+ <char name="backslash" width="278" llx="-17" lly="-19" urx="295" ury="737"/>
+ <char name="bar" width="260" llx="94" lly="-225" urx="167" ury="775"/>
+ <char name="braceleft" width="334" llx="42" lly="-196" urx="292" ury="722"/>
+ <char name="braceright" width="334" llx="42" lly="-196" urx="292" ury="722"/>
+ <char name="bracketleft" width="278" llx="63" lly="-196" urx="250" ury="722"/>
+ <char name="bracketright" width="278" llx="28" lly="-196" urx="215" ury="722"/>
+ <char name="breve" width="333" llx="13" lly="595" urx="321" ury="731"/>
+ <char name="brokenbar" width="260" llx="94" lly="-150" urx="167" ury="700"/>
+ <char name="bullet" width="350" llx="18" lly="202" urx="333" ury="517"/>
+ <char name="c" width="500" llx="30" lly="-15" urx="477" ury="538"/>
+ <char name="caron" width="333" llx="21" lly="593" urx="312" ury="734"/>
+ <char name="ccedilla" width="500" llx="30" lly="-225" urx="477" ury="538"/>
+ <char name="cedilla" width="333" llx="45" lly="-225" urx="259" ury="0"/>
+ <char name="cent" width="556" llx="51" lly="-115" urx="513" ury="623"/>
+ <char name="circumflex" width="333" llx="21" lly="593" urx="312" ury="734"/>
+ <char name="colon" width="278" llx="87" lly="0" urx="191" ury="516"/>
+ <char name="comma" width="278" llx="87" lly="-147" urx="191" ury="106"/>
+ <char name="copyright" width="737" llx="-14" lly="-19" urx="752" ury="737"/>
+ <char name="currency" width="556" llx="28" lly="99" urx="528" ury="603"/>
+ <char name="d" width="556" llx="35" lly="-15" urx="499" ury="718"/>
+ <char name="dagger" width="556" llx="43" lly="-159" urx="514" ury="718"/>
+ <char name="daggerdbl" width="556" llx="43" lly="-159" urx="514" ury="718"/>
+ <char name="degree" width="400" llx="54" lly="411" urx="346" ury="703"/>
+ <char name="dieresis" width="333" llx="40" lly="604" urx="293" ury="706"/>
+ <char name="divide" width="584" llx="39" lly="-19" urx="545" ury="524"/>
+ <char name="dollar" width="556" llx="32" lly="-115" urx="520" ury="775"/>
+ <char name="dotaccent" width="333" llx="121" lly="604" urx="212" ury="706"/>
+ <char name="dotlessi" width="278" llx="95" lly="0" urx="183" ury="523"/>
+ <char name="e" width="556" llx="40" lly="-15" urx="516" ury="538"/>
+ <char name="eacute" width="556" llx="40" lly="-15" urx="516" ury="734"/>
+ <char name="ecircumflex" width="556" llx="40" lly="-15" urx="516" ury="734"/>
+ <char name="edieresis" width="556" llx="40" lly="-15" urx="516" ury="706"/>
+ <char name="egrave" width="556" llx="40" lly="-15" urx="516" ury="734"/>
+ <char name="eight" width="556" llx="38" lly="-19" urx="517" ury="703"/>
+ <char name="ellipsis" width="1000" llx="115" lly="0" urx="885" ury="106"/>
+ <char name="emdash" width="1000" llx="0" lly="240" urx="1000" ury="313"/>
+ <char name="endash" width="556" llx="0" lly="240" urx="556" ury="313"/>
+ <char name="equal" width="584" llx="39" lly="115" urx="545" ury="390"/>
+ <char name="eth" width="556" llx="35" lly="-15" urx="522" ury="737"/>
+ <char name="exclam" width="278" llx="90" lly="0" urx="187" ury="718"/>
+ <char name="exclamdown" width="333" llx="118" lly="-195" urx="215" ury="523"/>
+ <char name="f" width="278" llx="14" lly="0" urx="262" ury="728"/>
+ <char name="fi" width="500" llx="14" lly="0" urx="434" ury="728"/>
+ <char name="five" width="556" llx="32" lly="-19" urx="514" ury="688"/>
+ <char name="fl" width="500" llx="14" lly="0" urx="432" ury="728"/>
+ <char name="florin" width="556" llx="-11" lly="-207" urx="501" ury="737"/>
+ <char name="four" width="556" llx="25" lly="0" urx="523" ury="703"/>
+ <char name="fraction" width="167" llx="-166" lly="-19" urx="333" ury="703"/>
+ <char name="g" width="556" llx="40" lly="-220" urx="499" ury="538"/>
+ <char name="germandbls" width="611" llx="67" lly="-15" urx="571" ury="728"/>
+ <char name="grave" width="333" llx="14" lly="593" urx="211" ury="734"/>
+ <char name="greater" width="584" llx="48" lly="11" urx="536" ury="495"/>
+ <char name="guillemotleft" width="556" llx="97" lly="108" urx="459" ury="446"/>
+ <char name="guillemotright" width="556" llx="97" lly="108" urx="459" ury="446"/>
+ <char name="guilsinglleft" width="333" llx="88" lly="108" urx="245" ury="446"/>
+ <char name="guilsinglright" width="333" llx="88" lly="108" urx="245" ury="446"/>
+ <char name="h" width="556" llx="65" lly="0" urx="491" ury="718"/>
+ <char name="hungarumlaut" width="333" llx="31" lly="593" urx="409" ury="734"/>
+ <char name="hyphen" width="333" llx="44" lly="232" urx="289" ury="322"/>
+ <char name="i" width="222" llx="67" lly="0" urx="155" ury="718"/>
+ <char name="iacute" width="278" llx="95" lly="0" urx="292" ury="734"/>
+ <char name="icircumflex" width="278" llx="-6" lly="0" urx="285" ury="734"/>
+ <char name="idieresis" width="278" llx="13" lly="0" urx="266" ury="706"/>
+ <char name="igrave" width="278" llx="-13" lly="0" urx="184" ury="734"/>
+ <char name="j" width="222" llx="-16" lly="-210" urx="155" ury="718"/>
+ <char name="k" width="500" llx="67" lly="0" urx="501" ury="718"/>
+ <char name="l" width="222" llx="67" lly="0" urx="155" ury="718"/>
+ <char name="less" width="584" llx="48" lly="11" urx="536" ury="495"/>
+ <char name="logicalnot" width="584" llx="39" lly="108" urx="545" ury="390"/>
+ <char name="lslash" width="222" llx="-20" lly="0" urx="242" ury="718"/>
+ <char name="m" width="833" llx="65" lly="0" urx="769" ury="538"/>
+ <char name="macron" width="333" llx="10" lly="627" urx="323" ury="684"/>
+ <char name="minus" width="324" llx="39" lly="216" urx="545" ury="289"/>
+ <char name="mu" width="556" llx="68" lly="-207" urx="489" ury="523"/>
+ <char name="multiply" width="584" llx="39" lly="0" urx="545" ury="506"/>
+ <char name="n" width="556" llx="65" lly="0" urx="491" ury="538"/>
+ <char name="nine" width="556" llx="42" lly="-19" urx="514" ury="703"/>
+ <char name="ntilde" width="556" llx="65" lly="0" urx="491" ury="722"/>
+ <char name="numbersign" width="556" llx="28" lly="0" urx="529" ury="688"/>
+ <char name="o" width="556" llx="35" lly="-14" urx="521" ury="538"/>
+ <char name="oacute" width="556" llx="35" lly="-14" urx="521" ury="734"/>
+ <char name="ocircumflex" width="556" llx="35" lly="-14" urx="521" ury="734"/>
+ <char name="odieresis" width="556" llx="35" lly="-14" urx="521" ury="706"/>
+ <char name="oe" width="944" llx="35" lly="-15" urx="902" ury="538"/>
+ <char name="ogonek" width="333" llx="73" lly="-225" urx="287" ury="0"/>
+ <char name="ograve" width="556" llx="35" lly="-14" urx="521" ury="734"/>
+ <char name="one" width="556" llx="101" lly="0" urx="359" ury="703"/>
+ <char name="onehalf" width="834" llx="43" lly="-19" urx="773" ury="703"/>
+ <char name="onequarter" width="834" llx="73" lly="-19" urx="756" ury="703"/>
+ <char name="onesuperior" width="333" llx="43" lly="281" urx="222" ury="703"/>
+ <char name="ordfeminine" width="370" llx="24" lly="405" urx="346" ury="737"/>
+ <char name="ordmasculine" width="365" llx="25" lly="405" urx="341" ury="737"/>
+ <char name="oslash" width="611" llx="28" lly="-22" urx="537" ury="545"/>
+ <char name="otilde" width="556" llx="35" lly="-14" urx="521" ury="722"/>
+ <char name="p" width="556" llx="58" lly="-207" urx="517" ury="538"/>
+ <char name="paragraph" width="537" llx="18" lly="-173" urx="497" ury="718"/>
+ <char name="parenleft" width="333" llx="68" lly="-207" urx="299" ury="733"/>
+ <char name="parenright" width="333" llx="34" lly="-207" urx="265" ury="733"/>
+ <char name="percent" width="889" llx="39" lly="-19" urx="850" ury="703"/>
+ <char name="period" width="278" llx="87" lly="0" urx="191" ury="106"/>
+ <char name="periodcentered" width="278" llx="77" lly="190" urx="202" ury="315"/>
+ <char name="perthousand" width="1000" llx="7" lly="-19" urx="994" ury="703"/>
+ <char name="plus" width="584" llx="39" lly="0" urx="545" ury="505"/>
+ <char name="plusminus" width="584" llx="39" lly="0" urx="545" ury="506"/>
+ <char name="q" width="556" llx="35" lly="-207" urx="494" ury="538"/>
+ <char name="question" width="556" llx="56" lly="0" urx="492" ury="727"/>
+ <char name="questiondown" width="611" llx="91" lly="-201" urx="527" ury="525"/>
+ <char name="quotedbl" width="355" llx="70" lly="463" urx="285" ury="718"/>
+ <char name="quotedblbase" width="333" llx="26" lly="-149" urx="295" ury="106"/>
+ <char name="quotedblleft" width="333" llx="38" lly="470" urx="307" ury="725"/>
+ <char name="quotedblright" width="333" llx="26" lly="463" urx="295" ury="718"/>
+ <char name="quoteleft" width="222" llx="65" lly="470" urx="169" ury="725"/>
+ <char name="quoteright" width="222" llx="53" lly="463" urx="157" ury="718"/>
+ <char name="quotesinglbase" width="222" llx="53" lly="-149" urx="157" ury="106"/>
+ <char name="quotesingle" width="191" llx="59" lly="463" urx="132" ury="718"/>
+ <char name="r" width="333" llx="77" lly="0" urx="332" ury="538"/>
+ <char name="registered" width="737" llx="-14" lly="-19" urx="752" ury="737"/>
+ <char name="ring" width="333" llx="75" lly="572" urx="259" ury="756"/>
+ <char name="s" width="500" llx="32" lly="-15" urx="464" ury="538"/>
+ <char name="scaron" width="500" llx="32" lly="-15" urx="464" ury="734"/>
+ <char name="section" width="556" llx="43" lly="-191" urx="512" ury="737"/>
+ <char name="semicolon" width="278" llx="87" lly="-147" urx="191" ury="516"/>
+ <char name="seven" width="556" llx="37" lly="0" urx="523" ury="688"/>
+ <char name="six" width="556" llx="38" lly="-19" urx="518" ury="703"/>
+ <char name="slash" width="278" llx="-17" lly="-19" urx="295" ury="737"/>
+ <char name="space" width="278" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="556" llx="33" lly="-16" urx="539" ury="718"/>
+ <char name="t" width="278" llx="14" lly="-7" urx="257" ury="669"/>
+ <char name="thorn" width="556" llx="58" lly="-207" urx="517" ury="718"/>
+ <char name="three" width="556" llx="34" lly="-19" urx="522" ury="703"/>
+ <char name="threequarters" width="834" llx="45" lly="-19" urx="810" ury="703"/>
+ <char name="threesuperior" width="333" llx="5" lly="270" urx="325" ury="703"/>
+ <char name="tilde" width="333" llx="-4" lly="606" urx="337" ury="722"/>
+ <char name="trademark" width="1000" llx="46" lly="306" urx="903" ury="718"/>
+ <char name="two" width="556" llx="26" lly="0" urx="507" ury="703"/>
+ <char name="twosuperior" width="333" llx="4" lly="281" urx="323" ury="703"/>
+ <char name="u" width="556" llx="68" lly="-15" urx="489" ury="523"/>
+ <char name="uacute" width="556" llx="68" lly="-15" urx="489" ury="734"/>
+ <char name="ucircumflex" width="556" llx="68" lly="-15" urx="489" ury="734"/>
+ <char name="udieresis" width="556" llx="68" lly="-15" urx="489" ury="706"/>
+ <char name="ugrave" width="556" llx="68" lly="-15" urx="489" ury="734"/>
+ <char name="underscore" width="556" llx="0" lly="-125" urx="556" ury="-75"/>
+ <char name="v" width="500" llx="8" lly="0" urx="492" ury="523"/>
+ <char name="w" width="722" llx="14" lly="0" urx="709" ury="523"/>
+ <char name="x" width="500" llx="11" lly="0" urx="490" ury="523"/>
+ <char name="y" width="500" llx="11" lly="-214" urx="489" ury="523"/>
+ <char name="yacute" width="500" llx="11" lly="-214" urx="489" ury="734"/>
+ <char name="ydieresis" width="500" llx="11" lly="-214" urx="489" ury="706"/>
+ <char name="yen" width="556" llx="3" lly="0" urx="553" ury="688"/>
+ <char name="z" width="500" llx="31" lly="0" urx="469" ury="523"/>
+ <char name="zcaron" width="500" llx="31" lly="0" urx="469" ury="734"/>
+ <char name="zero" width="556" llx="37" lly="-19" urx="519" ury="703"/>
+ </char-metrics>
+ <kerning kpx1="107">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-20" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="79">
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-60" kpx2="88"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="-30" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="-40" kpx2="45"/>
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="-20" kpx2="107"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-35" kpx2="46"/>
+ <pair kern="-35" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-50" kpx2="111"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-180" kpx2="46"/>
+ <pair kern="-50" kpx2="101"/>
+ <pair kern="-180" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-80" kpx2="45"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-40" kpx2="58"/>
+ <pair kern="-70" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-70" kpx2="117"/>
+ <pair kern="-125" kpx2="46"/>
+ <pair kern="-40" kpx2="71"/>
+ <pair kern="-80" kpx2="101"/>
+ <pair kern="-40" kpx2="59"/>
+ <pair kern="-125" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-25" kpx2="97"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-25" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="59">
+ <pair kern="-50" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-30" kpx2="147"/>
+ <pair kern="-90" kpx2="89"/>
+ <pair kern="-50" kpx2="84"/>
+ <pair kern="-60" kpx2="145"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="-20" kpx2="119"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-40" kpx2="119"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-30" kpx2="67"/>
+ <pair kern="-30" kpx2="81"/>
+ <pair kern="-30" kpx2="71"/>
+ <pair kern="-70" kpx2="86"/>
+ <pair kern="-40" kpx2="118"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-100" kpx2="89"/>
+ <pair kern="-120" kpx2="84"/>
+ <pair kern="-40" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="-45" kpx2="114"/>
+ <pair kern="-50" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-150" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-150" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="-30" kpx2="119"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="-15" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="83">
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-30" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-90" kpx2="89"/>
+ <pair kern="-70" kpx2="46"/>
+ <pair kern="-70" kpx2="86"/>
+ <pair kern="-70" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="-50" kpx2="100"/>
+ <pair kern="-70" kpx2="32"/>
+ <pair kern="-57" kpx2="146"/>
+ <pair kern="-50" kpx2="114"/>
+ <pair kern="-50" kpx2="115"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="-40" kpx2="85"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-30" kpx2="84"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-40" kpx2="111"/>
+ <pair kern="-50" kpx2="79"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-50" kpx2="121"/>
+ <pair kern="-40" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="-15" kpx2="97"/>
+ <pair kern="-60" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-60" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="-50" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="15" kpx2="107"/>
+ <pair kern="30" kpx2="58"/>
+ <pair kern="30" kpx2="112"/>
+ <pair kern="15" kpx2="108"/>
+ <pair kern="30" kpx2="118"/>
+ <pair kern="-50" kpx2="44"/>
+ <pair kern="30" kpx2="59"/>
+ <pair kern="15" kpx2="105"/>
+ <pair kern="25" kpx2="109"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="15" kpx2="117"/>
+ <pair kern="40" kpx2="116"/>
+ <pair kern="30" kpx2="121"/>
+ <pair kern="-50" kpx2="46"/>
+ <pair kern="25" kpx2="110"/>
+ </kerning>
+ <kerning kpx1="67">
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="-57" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="-10" kpx2="114"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="-140" kpx2="148"/>
+ <pair kern="-160" kpx2="146"/>
+ <pair kern="-70" kpx2="87"/>
+ <pair kern="-140" kpx2="89"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-110" kpx2="84"/>
+ <pair kern="-110" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-20" kpx2="108"/>
+ <pair kern="-10" kpx2="98"/>
+ <pair kern="-20" kpx2="118"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-100" kpx2="148"/>
+ <pair kern="-100" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="-40" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="-10" kpx2="117"/>
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="248">
+ <pair kern="-55" kpx2="107"/>
+ <pair kern="-55" kpx2="104"/>
+ <pair kern="-55" kpx2="99"/>
+ <pair kern="-55" kpx2="112"/>
+ <pair kern="-55" kpx2="113"/>
+ <pair kern="-70" kpx2="118"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-55" kpx2="97"/>
+ <pair kern="-55" kpx2="117"/>
+ <pair kern="-55" kpx2="116"/>
+ <pair kern="-55" kpx2="106"/>
+ <pair kern="-55" kpx2="115"/>
+ <pair kern="-55" kpx2="122"/>
+ <pair kern="-55" kpx2="100"/>
+ <pair kern="-55" kpx2="111"/>
+ <pair kern="-70" kpx2="119"/>
+ <pair kern="-55" kpx2="114"/>
+ <pair kern="-55" kpx2="103"/>
+ <pair kern="-55" kpx2="108"/>
+ <pair kern="-55" kpx2="98"/>
+ <pair kern="-95" kpx2="44"/>
+ <pair kern="-55" kpx2="109"/>
+ <pair kern="-55" kpx2="102"/>
+ <pair kern="-70" kpx2="121"/>
+ <pair kern="-95" kpx2="46"/>
+ <pair kern="-55" kpx2="110"/>
+ <pair kern="-85" kpx2="120"/>
+ <pair kern="-55" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="60" kpx2="148"/>
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="50" kpx2="146"/>
+ <pair kern="-30" kpx2="97"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-140" kpx2="111"/>
+ <pair kern="-140" kpx2="45"/>
+ <pair kern="-20" kpx2="105"/>
+ <pair kern="-85" kpx2="79"/>
+ <pair kern="-60" kpx2="58"/>
+ <pair kern="-140" kpx2="97"/>
+ <pair kern="-110" kpx2="65"/>
+ <pair kern="-110" kpx2="117"/>
+ <pair kern="-140" kpx2="46"/>
+ <pair kern="-140" kpx2="101"/>
+ <pair kern="-60" kpx2="59"/>
+ <pair kern="-140" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-20" kpx2="101"/>
+ <pair kern="-100" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-120" kpx2="111"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-20" kpx2="58"/>
+ <pair kern="-120" kpx2="119"/>
+ <pair kern="-120" kpx2="114"/>
+ <pair kern="-120" kpx2="44"/>
+ <pair kern="-20" kpx2="59"/>
+ <pair kern="-140" kpx2="45"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-120" kpx2="97"/>
+ <pair kern="-120" kpx2="117"/>
+ <pair kern="-120" kpx2="121"/>
+ <pair kern="-120" kpx2="46"/>
+ <pair kern="-120" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-100" kpx2="148"/>
+ <pair kern="-60" kpx2="32"/>
+ <pair kern="-100" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="-10" kpx2="117"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="-30" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="-20" kpx2="119"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="-30" kpx2="120"/>
+ <pair kern="-30" kpx2="118"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/HelveticaBold.xml b/fop-core/src/main/codegen/fonts/HelveticaBold.xml
new file mode 100644
index 000000000..4efd01f22
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/HelveticaBold.xml
@@ -0,0 +1,564 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica-Bold</font-name>
+ <full-name>Helvetica Bold</full-name>
+ <family-name>Helvetica</family-name>
+ <class-name>HelveticaBold</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>718</cap-height>
+ <x-height>532</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="722" llx="20" lly="0" urx="702" ury="718"/>
+ <char name="AE" width="1000" llx="5" lly="0" urx="954" ury="718"/>
+ <char name="Aacute" width="722" llx="20" lly="0" urx="702" ury="936"/>
+ <char name="Acircumflex" width="722" llx="20" lly="0" urx="702" ury="936"/>
+ <char name="Adieresis" width="722" llx="20" lly="0" urx="702" ury="915"/>
+ <char name="Agrave" width="722" llx="20" lly="0" urx="702" ury="936"/>
+ <char name="Aring" width="722" llx="20" lly="0" urx="702" ury="962"/>
+ <char name="Atilde" width="722" llx="20" lly="0" urx="702" ury="923"/>
+ <char name="B" width="722" llx="76" lly="0" urx="669" ury="718"/>
+ <char name="C" width="722" llx="44" lly="-19" urx="684" ury="737"/>
+ <char name="Ccedilla" width="722" llx="44" lly="-228" urx="684" ury="737"/>
+ <char name="D" width="722" llx="76" lly="0" urx="685" ury="718"/>
+ <char name="E" width="667" llx="76" lly="0" urx="621" ury="718"/>
+ <char name="Eacute" width="667" llx="76" lly="0" urx="621" ury="936"/>
+ <char name="Ecircumflex" width="667" llx="76" lly="0" urx="621" ury="936"/>
+ <char name="Edieresis" width="667" llx="76" lly="0" urx="621" ury="915"/>
+ <char name="Egrave" width="667" llx="76" lly="0" urx="621" ury="936"/>
+ <char name="Eth" width="722" llx="-5" lly="0" urx="685" ury="718"/>
+ <char name="Euro" width="556" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="611" llx="76" lly="0" urx="587" ury="718"/>
+ <char name="G" width="778" llx="44" lly="-19" urx="713" ury="737"/>
+ <char name="H" width="722" llx="71" lly="0" urx="651" ury="718"/>
+ <char name="I" width="278" llx="64" lly="0" urx="214" ury="718"/>
+ <char name="Iacute" width="278" llx="64" lly="0" urx="329" ury="936"/>
+ <char name="Icircumflex" width="278" llx="-37" lly="0" urx="316" ury="936"/>
+ <char name="Idieresis" width="278" llx="-21" lly="0" urx="300" ury="915"/>
+ <char name="Igrave" width="278" llx="-50" lly="0" urx="214" ury="936"/>
+ <char name="J" width="556" llx="22" lly="-18" urx="484" ury="718"/>
+ <char name="K" width="722" llx="87" lly="0" urx="722" ury="718"/>
+ <char name="L" width="611" llx="76" lly="0" urx="583" ury="718"/>
+ <char name="Lslash" width="611" llx="-20" lly="0" urx="583" ury="718"/>
+ <char name="M" width="833" llx="69" lly="0" urx="765" ury="718"/>
+ <char name="N" width="722" llx="69" lly="0" urx="654" ury="718"/>
+ <char name="Ntilde" width="722" llx="69" lly="0" urx="654" ury="923"/>
+ <char name="O" width="778" llx="44" lly="-19" urx="734" ury="737"/>
+ <char name="OE" width="1000" llx="37" lly="-19" urx="961" ury="737"/>
+ <char name="Oacute" width="778" llx="44" lly="-19" urx="734" ury="936"/>
+ <char name="Ocircumflex" width="778" llx="44" lly="-19" urx="734" ury="936"/>
+ <char name="Odieresis" width="778" llx="44" lly="-19" urx="734" ury="915"/>
+ <char name="Ograve" width="778" llx="44" lly="-19" urx="734" ury="936"/>
+ <char name="Oslash" width="778" llx="33" lly="-27" urx="744" ury="745"/>
+ <char name="Otilde" width="778" llx="44" lly="-19" urx="734" ury="923"/>
+ <char name="P" width="667" llx="76" lly="0" urx="627" ury="718"/>
+ <char name="Q" width="778" llx="44" lly="-52" urx="737" ury="737"/>
+ <char name="R" width="722" llx="76" lly="0" urx="677" ury="718"/>
+ <char name="S" width="667" llx="39" lly="-19" urx="629" ury="737"/>
+ <char name="Scaron" width="667" llx="39" lly="-19" urx="629" ury="936"/>
+ <char name="T" width="611" llx="14" lly="0" urx="598" ury="718"/>
+ <char name="Thorn" width="667" llx="76" lly="0" urx="627" ury="718"/>
+ <char name="U" width="722" llx="72" lly="-19" urx="651" ury="718"/>
+ <char name="Uacute" width="722" llx="72" lly="-19" urx="651" ury="936"/>
+ <char name="Ucircumflex" width="722" llx="72" lly="-19" urx="651" ury="936"/>
+ <char name="Udieresis" width="722" llx="72" lly="-19" urx="651" ury="915"/>
+ <char name="Ugrave" width="722" llx="72" lly="-19" urx="651" ury="936"/>
+ <char name="V" width="667" llx="19" lly="0" urx="648" ury="718"/>
+ <char name="W" width="944" llx="16" lly="0" urx="929" ury="718"/>
+ <char name="X" width="667" llx="14" lly="0" urx="653" ury="718"/>
+ <char name="Y" width="667" llx="15" lly="0" urx="653" ury="718"/>
+ <char name="Yacute" width="667" llx="15" lly="0" urx="653" ury="936"/>
+ <char name="Ydieresis" width="667" llx="15" lly="0" urx="653" ury="915"/>
+ <char name="Z" width="611" llx="25" lly="0" urx="586" ury="718"/>
+ <char name="Zcaron" width="611" llx="25" lly="0" urx="586" ury="936"/>
+ <char name="a" width="556" llx="29" lly="-14" urx="527" ury="546"/>
+ <char name="aacute" width="556" llx="29" lly="-14" urx="527" ury="750"/>
+ <char name="acircumflex" width="556" llx="29" lly="-14" urx="527" ury="750"/>
+ <char name="acute" width="333" llx="108" lly="604" urx="356" ury="750"/>
+ <char name="adieresis" width="556" llx="29" lly="-14" urx="527" ury="729"/>
+ <char name="ae" width="889" llx="29" lly="-14" urx="858" ury="546"/>
+ <char name="agrave" width="556" llx="29" lly="-14" urx="527" ury="750"/>
+ <char name="ampersand" width="722" llx="54" lly="-19" urx="701" ury="718"/>
+ <char name="aring" width="556" llx="29" lly="-14" urx="527" ury="776"/>
+ <char name="asciicircum" width="584" llx="62" lly="323" urx="522" ury="698"/>
+ <char name="asciitilde" width="584" llx="61" lly="163" urx="523" ury="343"/>
+ <char name="asterisk" width="389" llx="27" lly="387" urx="362" ury="718"/>
+ <char name="at" width="975" llx="118" lly="-19" urx="856" ury="737"/>
+ <char name="atilde" width="556" llx="29" lly="-14" urx="527" ury="737"/>
+ <char name="b" width="611" llx="61" lly="-14" urx="578" ury="718"/>
+ <char name="backslash" width="278" llx="-33" lly="-19" urx="311" ury="737"/>
+ <char name="bar" width="280" llx="84" lly="-225" urx="196" ury="775"/>
+ <char name="braceleft" width="389" llx="48" lly="-196" urx="365" ury="722"/>
+ <char name="braceright" width="389" llx="24" lly="-196" urx="341" ury="722"/>
+ <char name="bracketleft" width="333" llx="63" lly="-196" urx="309" ury="722"/>
+ <char name="bracketright" width="333" llx="24" lly="-196" urx="270" ury="722"/>
+ <char name="breve" width="333" llx="-2" lly="604" urx="335" ury="750"/>
+ <char name="brokenbar" width="280" llx="84" lly="-150" urx="196" ury="700"/>
+ <char name="bullet" width="350" llx="10" lly="194" urx="340" ury="524"/>
+ <char name="c" width="556" llx="34" lly="-14" urx="524" ury="546"/>
+ <char name="caron" width="333" llx="-10" lly="604" urx="343" ury="750"/>
+ <char name="ccedilla" width="556" llx="34" lly="-228" urx="524" ury="546"/>
+ <char name="cedilla" width="333" llx="6" lly="-228" urx="245" ury="0"/>
+ <char name="cent" width="556" llx="34" lly="-118" urx="524" ury="628"/>
+ <char name="circumflex" width="333" llx="-10" lly="604" urx="343" ury="750"/>
+ <char name="colon" width="333" llx="92" lly="0" urx="242" ury="512"/>
+ <char name="comma" width="278" llx="64" lly="-168" urx="214" ury="146"/>
+ <char name="copyright" width="737" llx="-11" lly="-19" urx="749" ury="737"/>
+ <char name="currency" width="556" llx="-3" lly="76" urx="559" ury="636"/>
+ <char name="d" width="611" llx="34" lly="-14" urx="551" ury="718"/>
+ <char name="dagger" width="556" llx="36" lly="-171" urx="520" ury="718"/>
+ <char name="daggerdbl" width="556" llx="36" lly="-171" urx="520" ury="718"/>
+ <char name="degree" width="400" llx="57" lly="426" urx="343" ury="712"/>
+ <char name="dieresis" width="333" llx="6" lly="614" urx="327" ury="729"/>
+ <char name="divide" width="584" llx="40" lly="-42" urx="544" ury="548"/>
+ <char name="dollar" width="556" llx="30" lly="-115" urx="523" ury="775"/>
+ <char name="dotaccent" width="333" llx="104" lly="614" urx="230" ury="729"/>
+ <char name="dotlessi" width="278" llx="69" lly="0" urx="209" ury="532"/>
+ <char name="e" width="556" llx="23" lly="-14" urx="528" ury="546"/>
+ <char name="eacute" width="556" llx="23" lly="-14" urx="528" ury="750"/>
+ <char name="ecircumflex" width="556" llx="23" lly="-14" urx="528" ury="750"/>
+ <char name="edieresis" width="556" llx="23" lly="-14" urx="528" ury="729"/>
+ <char name="egrave" width="556" llx="23" lly="-14" urx="528" ury="750"/>
+ <char name="eight" width="556" llx="32" lly="-19" urx="524" ury="710"/>
+ <char name="ellipsis" width="1000" llx="92" lly="0" urx="908" ury="146"/>
+ <char name="emdash" width="1000" llx="0" lly="227" urx="1000" ury="333"/>
+ <char name="endash" width="556" llx="0" lly="227" urx="556" ury="333"/>
+ <char name="equal" width="584" llx="40" lly="87" urx="544" ury="419"/>
+ <char name="eth" width="611" llx="34" lly="-14" urx="578" ury="737"/>
+ <char name="exclam" width="333" llx="90" lly="0" urx="244" ury="718"/>
+ <char name="exclamdown" width="333" llx="90" lly="-186" urx="244" ury="532"/>
+ <char name="f" width="333" llx="10" lly="0" urx="318" ury="727"/>
+ <char name="fi" width="611" llx="10" lly="0" urx="542" ury="727"/>
+ <char name="five" width="556" llx="27" lly="-19" urx="516" ury="698"/>
+ <char name="fl" width="611" llx="10" lly="0" urx="542" ury="727"/>
+ <char name="florin" width="556" llx="-10" lly="-210" urx="516" ury="737"/>
+ <char name="four" width="556" llx="27" lly="0" urx="526" ury="710"/>
+ <char name="fraction" width="167" llx="-170" lly="-19" urx="336" ury="710"/>
+ <char name="g" width="611" llx="40" lly="-217" urx="553" ury="546"/>
+ <char name="germandbls" width="611" llx="69" lly="-14" urx="579" ury="731"/>
+ <char name="grave" width="333" llx="-23" lly="604" urx="225" ury="750"/>
+ <char name="greater" width="584" llx="38" lly="-8" urx="546" ury="514"/>
+ <char name="guillemotleft" width="556" llx="88" lly="76" urx="468" ury="484"/>
+ <char name="guillemotright" width="556" llx="88" lly="76" urx="468" ury="484"/>
+ <char name="guilsinglleft" width="333" llx="83" lly="76" urx="250" ury="484"/>
+ <char name="guilsinglright" width="333" llx="83" lly="76" urx="250" ury="484"/>
+ <char name="h" width="611" llx="65" lly="0" urx="546" ury="718"/>
+ <char name="hungarumlaut" width="333" llx="9" lly="604" urx="486" ury="750"/>
+ <char name="hyphen" width="333" llx="27" lly="215" urx="306" ury="345"/>
+ <char name="i" width="278" llx="69" lly="0" urx="209" ury="725"/>
+ <char name="iacute" width="278" llx="69" lly="0" urx="329" ury="750"/>
+ <char name="icircumflex" width="278" llx="-37" lly="0" urx="316" ury="750"/>
+ <char name="idieresis" width="278" llx="-21" lly="0" urx="300" ury="729"/>
+ <char name="igrave" width="278" llx="-50" lly="0" urx="209" ury="750"/>
+ <char name="j" width="278" llx="3" lly="-214" urx="209" ury="725"/>
+ <char name="k" width="556" llx="69" lly="0" urx="562" ury="718"/>
+ <char name="l" width="278" llx="69" lly="0" urx="209" ury="718"/>
+ <char name="less" width="584" llx="38" lly="-8" urx="546" ury="514"/>
+ <char name="logicalnot" width="584" llx="40" lly="108" urx="544" ury="419"/>
+ <char name="lslash" width="278" llx="-18" lly="0" urx="296" ury="718"/>
+ <char name="m" width="889" llx="64" lly="0" urx="826" ury="546"/>
+ <char name="macron" width="333" llx="-6" lly="604" urx="339" ury="678"/>
+ <char name="minus" width="324" llx="40" lly="197" urx="544" ury="309"/>
+ <char name="mu" width="611" llx="66" lly="-207" urx="545" ury="532"/>
+ <char name="multiply" width="584" llx="40" lly="1" urx="545" ury="505"/>
+ <char name="n" width="611" llx="65" lly="0" urx="546" ury="546"/>
+ <char name="nine" width="556" llx="30" lly="-19" urx="522" ury="710"/>
+ <char name="ntilde" width="611" llx="65" lly="0" urx="546" ury="737"/>
+ <char name="numbersign" width="556" llx="18" lly="0" urx="538" ury="698"/>
+ <char name="o" width="611" llx="34" lly="-14" urx="578" ury="546"/>
+ <char name="oacute" width="611" llx="34" lly="-14" urx="578" ury="750"/>
+ <char name="ocircumflex" width="611" llx="34" lly="-14" urx="578" ury="750"/>
+ <char name="odieresis" width="611" llx="34" lly="-14" urx="578" ury="729"/>
+ <char name="oe" width="944" llx="34" lly="-14" urx="912" ury="546"/>
+ <char name="ogonek" width="333" llx="71" lly="-228" urx="304" ury="0"/>
+ <char name="ograve" width="611" llx="34" lly="-14" urx="578" ury="750"/>
+ <char name="one" width="556" llx="69" lly="0" urx="378" ury="710"/>
+ <char name="onehalf" width="834" llx="26" lly="-19" urx="794" ury="710"/>
+ <char name="onequarter" width="834" llx="26" lly="-19" urx="766" ury="710"/>
+ <char name="onesuperior" width="333" llx="26" lly="283" urx="237" ury="710"/>
+ <char name="ordfeminine" width="370" llx="22" lly="401" urx="347" ury="737"/>
+ <char name="ordmasculine" width="365" llx="6" lly="401" urx="360" ury="737"/>
+ <char name="oslash" width="611" llx="22" lly="-29" urx="589" ury="560"/>
+ <char name="otilde" width="611" llx="34" lly="-14" urx="578" ury="737"/>
+ <char name="p" width="611" llx="62" lly="-207" urx="578" ury="546"/>
+ <char name="paragraph" width="556" llx="-8" lly="-191" urx="539" ury="700"/>
+ <char name="parenleft" width="333" llx="35" lly="-208" urx="314" ury="734"/>
+ <char name="parenright" width="333" llx="19" lly="-208" urx="298" ury="734"/>
+ <char name="percent" width="889" llx="28" lly="-19" urx="861" ury="710"/>
+ <char name="period" width="278" llx="64" lly="0" urx="214" ury="146"/>
+ <char name="periodcentered" width="278" llx="58" lly="172" urx="220" ury="334"/>
+ <char name="perthousand" width="1000" llx="-3" lly="-19" urx="1003" ury="710"/>
+ <char name="plus" width="584" llx="40" lly="0" urx="544" ury="506"/>
+ <char name="plusminus" width="584" llx="40" lly="0" urx="544" ury="506"/>
+ <char name="q" width="611" llx="34" lly="-207" urx="552" ury="546"/>
+ <char name="question" width="611" llx="60" lly="0" urx="556" ury="727"/>
+ <char name="questiondown" width="611" llx="55" lly="-195" urx="551" ury="532"/>
+ <char name="quotedbl" width="474" llx="98" lly="447" urx="376" ury="718"/>
+ <char name="quotedblbase" width="500" llx="64" lly="-146" urx="436" ury="127"/>
+ <char name="quotedblleft" width="500" llx="64" lly="454" urx="436" ury="727"/>
+ <char name="quotedblright" width="500" llx="64" lly="445" urx="436" ury="718"/>
+ <char name="quoteleft" width="278" llx="69" lly="454" urx="209" ury="727"/>
+ <char name="quoteright" width="278" llx="69" lly="445" urx="209" ury="718"/>
+ <char name="quotesinglbase" width="278" llx="69" lly="-146" urx="209" ury="127"/>
+ <char name="quotesingle" width="238" llx="70" lly="447" urx="168" ury="718"/>
+ <char name="r" width="389" llx="64" lly="0" urx="373" ury="546"/>
+ <char name="registered" width="737" llx="-11" lly="-19" urx="748" ury="737"/>
+ <char name="ring" width="333" llx="59" lly="568" urx="275" ury="776"/>
+ <char name="s" width="556" llx="30" lly="-14" urx="519" ury="546"/>
+ <char name="scaron" width="556" llx="30" lly="-14" urx="519" ury="750"/>
+ <char name="section" width="556" llx="34" lly="-184" urx="522" ury="727"/>
+ <char name="semicolon" width="333" llx="92" lly="-168" urx="242" ury="512"/>
+ <char name="seven" width="556" llx="25" lly="0" urx="528" ury="698"/>
+ <char name="six" width="556" llx="31" lly="-19" urx="520" ury="710"/>
+ <char name="slash" width="278" llx="-33" lly="-19" urx="311" ury="737"/>
+ <char name="space" width="278" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="556" llx="28" lly="-16" urx="541" ury="718"/>
+ <char name="t" width="333" llx="10" lly="-6" urx="309" ury="676"/>
+ <char name="thorn" width="611" llx="62" lly="-208" urx="578" ury="718"/>
+ <char name="three" width="556" llx="27" lly="-19" urx="516" ury="710"/>
+ <char name="threequarters" width="834" llx="16" lly="-19" urx="799" ury="710"/>
+ <char name="threesuperior" width="333" llx="8" lly="271" urx="326" ury="710"/>
+ <char name="tilde" width="333" llx="-17" lly="610" urx="350" ury="737"/>
+ <char name="trademark" width="1000" llx="44" lly="306" urx="956" ury="718"/>
+ <char name="two" width="556" llx="26" lly="0" urx="511" ury="710"/>
+ <char name="twosuperior" width="333" llx="9" lly="283" urx="324" ury="710"/>
+ <char name="u" width="611" llx="66" lly="-14" urx="545" ury="532"/>
+ <char name="uacute" width="611" llx="66" lly="-14" urx="545" ury="750"/>
+ <char name="ucircumflex" width="611" llx="66" lly="-14" urx="545" ury="750"/>
+ <char name="udieresis" width="611" llx="66" lly="-14" urx="545" ury="729"/>
+ <char name="ugrave" width="611" llx="66" lly="-14" urx="545" ury="750"/>
+ <char name="underscore" width="556" llx="0" lly="-125" urx="556" ury="-75"/>
+ <char name="v" width="556" llx="13" lly="0" urx="543" ury="532"/>
+ <char name="w" width="778" llx="10" lly="0" urx="769" ury="532"/>
+ <char name="x" width="556" llx="15" lly="0" urx="541" ury="532"/>
+ <char name="y" width="556" llx="10" lly="-214" urx="539" ury="532"/>
+ <char name="yacute" width="556" llx="10" lly="-214" urx="539" ury="750"/>
+ <char name="ydieresis" width="556" llx="10" lly="-214" urx="539" ury="729"/>
+ <char name="yen" width="556" llx="-9" lly="0" urx="565" ury="698"/>
+ <char name="z" width="500" llx="20" lly="0" urx="480" ury="532"/>
+ <char name="zcaron" width="500" llx="20" lly="0" urx="480" ury="750"/>
+ <char name="zero" width="556" llx="32" lly="-19" urx="524" ury="710"/>
+ </char-metrics>
+ <kerning kpx1="107">
+ <pair kern="-15" kpx2="111"/>
+ </kerning>
+ <kerning kpx1="79">
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-50" kpx2="88"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="-20" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="-20" kpx2="107"/>
+ <pair kern="-10" kpx2="104"/>
+ <pair kern="-10" kpx2="121"/>
+ <pair kern="-20" kpx2="108"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-60" kpx2="111"/>
+ <pair kern="-40" kpx2="45"/>
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-10" kpx2="58"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-60" kpx2="65"/>
+ <pair kern="-45" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-35" kpx2="101"/>
+ <pair kern="-10" kpx2="59"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-40" kpx2="111"/>
+ <pair kern="-30" kpx2="97"/>
+ <pair kern="-100" kpx2="65"/>
+ <pair kern="-120" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-120" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-90" kpx2="111"/>
+ <pair kern="-80" kpx2="45"/>
+ <pair kern="-50" kpx2="79"/>
+ <pair kern="-40" kpx2="58"/>
+ <pair kern="-60" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-60" kpx2="117"/>
+ <pair kern="-120" kpx2="46"/>
+ <pair kern="-50" kpx2="71"/>
+ <pair kern="-50" kpx2="101"/>
+ <pair kern="-40" kpx2="59"/>
+ <pair kern="-120" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="59">
+ <pair kern="-40" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-80" kpx2="87"/>
+ <pair kern="-80" kpx2="147"/>
+ <pair kern="-120" kpx2="89"/>
+ <pair kern="-100" kpx2="84"/>
+ <pair kern="-60" kpx2="145"/>
+ <pair kern="-80" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-30" kpx2="119"/>
+ <pair kern="-60" kpx2="87"/>
+ <pair kern="-40" kpx2="67"/>
+ <pair kern="-40" kpx2="81"/>
+ <pair kern="-50" kpx2="71"/>
+ <pair kern="-80" kpx2="86"/>
+ <pair kern="-40" kpx2="118"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-110" kpx2="89"/>
+ <pair kern="-90" kpx2="84"/>
+ <pair kern="-30" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-100" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="-15" kpx2="119"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-30" kpx2="120"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="100">
+ <pair kern="-10" kpx2="100"/>
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-40" kpx2="86"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="-80" kpx2="100"/>
+ <pair kern="-80" kpx2="32"/>
+ <pair kern="-46" kpx2="146"/>
+ <pair kern="-40" kpx2="114"/>
+ <pair kern="-20" kpx2="108"/>
+ <pair kern="-60" kpx2="115"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-20" kpx2="85"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-20" kpx2="84"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-35" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-40" kpx2="121"/>
+ <pair kern="-15" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="-40" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-20" kpx2="100"/>
+ <pair kern="-20" kpx2="45"/>
+ <pair kern="-20" kpx2="99"/>
+ <pair kern="20" kpx2="116"/>
+ <pair kern="10" kpx2="121"/>
+ <pair kern="-60" kpx2="46"/>
+ <pair kern="-15" kpx2="103"/>
+ <pair kern="-20" kpx2="113"/>
+ <pair kern="-15" kpx2="115"/>
+ <pair kern="10" kpx2="118"/>
+ <pair kern="-60" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="-46" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="108">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-30" kpx2="65"/>
+ <pair kern="-10" kpx2="85"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-10" kpx2="108"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="-140" kpx2="148"/>
+ <pair kern="-140" kpx2="146"/>
+ <pair kern="-80" kpx2="87"/>
+ <pair kern="-120" kpx2="89"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-90" kpx2="84"/>
+ <pair kern="-110" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="20" kpx2="46"/>
+ <pair kern="20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-120" kpx2="148"/>
+ <pair kern="-40" kpx2="32"/>
+ <pair kern="-120" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="-80" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-30" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="30" kpx2="148"/>
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="30" kpx2="146"/>
+ <pair kern="-10" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-100" kpx2="111"/>
+ <pair kern="-70" kpx2="79"/>
+ <pair kern="-50" kpx2="58"/>
+ <pair kern="-90" kpx2="97"/>
+ <pair kern="-110" kpx2="65"/>
+ <pair kern="-100" kpx2="117"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-80" kpx2="101"/>
+ <pair kern="-50" kpx2="59"/>
+ <pair kern="-100" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-40" kpx2="58"/>
+ <pair kern="-60" kpx2="119"/>
+ <pair kern="-80" kpx2="114"/>
+ <pair kern="-80" kpx2="44"/>
+ <pair kern="-40" kpx2="59"/>
+ <pair kern="-120" kpx2="45"/>
+ <pair kern="-90" kpx2="65"/>
+ <pair kern="-80" kpx2="97"/>
+ <pair kern="-90" kpx2="117"/>
+ <pair kern="-60" kpx2="121"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-60" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-30" kpx2="97"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-120" kpx2="148"/>
+ <pair kern="-40" kpx2="32"/>
+ <pair kern="-120" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="-10" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-40" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="-10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="20" kpx2="46"/>
+ <pair kern="-15" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="10" kpx2="44"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/HelveticaBoldOblique.xml b/fop-core/src/main/codegen/fonts/HelveticaBoldOblique.xml
new file mode 100644
index 000000000..e1d0fd294
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/HelveticaBoldOblique.xml
@@ -0,0 +1,564 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica-BoldOblique</font-name>
+ <full-name>Helvetica Bold Oblique</full-name>
+ <family-name>Helvetica</family-name>
+ <class-name>HelveticaBoldOblique</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>718</cap-height>
+ <x-height>532</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="722" llx="20" lly="0" urx="702" ury="718"/>
+ <char name="AE" width="1000" llx="5" lly="0" urx="1100" ury="718"/>
+ <char name="Aacute" width="722" llx="20" lly="0" urx="750" ury="936"/>
+ <char name="Acircumflex" width="722" llx="20" lly="0" urx="706" ury="936"/>
+ <char name="Adieresis" width="722" llx="20" lly="0" urx="716" ury="915"/>
+ <char name="Agrave" width="722" llx="20" lly="0" urx="702" ury="936"/>
+ <char name="Aring" width="722" llx="20" lly="0" urx="702" ury="962"/>
+ <char name="Atilde" width="722" llx="20" lly="0" urx="741" ury="923"/>
+ <char name="B" width="722" llx="76" lly="0" urx="764" ury="718"/>
+ <char name="C" width="722" llx="107" lly="-19" urx="789" ury="737"/>
+ <char name="Ccedilla" width="722" llx="107" lly="-228" urx="789" ury="737"/>
+ <char name="D" width="722" llx="76" lly="0" urx="777" ury="718"/>
+ <char name="E" width="667" llx="76" lly="0" urx="757" ury="718"/>
+ <char name="Eacute" width="667" llx="76" lly="0" urx="757" ury="936"/>
+ <char name="Ecircumflex" width="667" llx="76" lly="0" urx="757" ury="936"/>
+ <char name="Edieresis" width="667" llx="76" lly="0" urx="757" ury="915"/>
+ <char name="Egrave" width="667" llx="76" lly="0" urx="757" ury="936"/>
+ <char name="Eth" width="722" llx="62" lly="0" urx="777" ury="718"/>
+ <char name="Euro" width="556" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="611" llx="76" lly="0" urx="740" ury="718"/>
+ <char name="G" width="778" llx="108" lly="-19" urx="817" ury="737"/>
+ <char name="H" width="722" llx="71" lly="0" urx="804" ury="718"/>
+ <char name="I" width="278" llx="64" lly="0" urx="367" ury="718"/>
+ <char name="Iacute" width="278" llx="64" lly="0" urx="528" ury="936"/>
+ <char name="Icircumflex" width="278" llx="64" lly="0" urx="484" ury="936"/>
+ <char name="Idieresis" width="278" llx="64" lly="0" urx="494" ury="915"/>
+ <char name="Igrave" width="278" llx="64" lly="0" urx="367" ury="936"/>
+ <char name="J" width="556" llx="60" lly="-18" urx="637" ury="718"/>
+ <char name="K" width="722" llx="87" lly="0" urx="858" ury="718"/>
+ <char name="L" width="611" llx="76" lly="0" urx="611" ury="718"/>
+ <char name="Lslash" width="611" llx="34" lly="0" urx="611" ury="718"/>
+ <char name="M" width="833" llx="69" lly="0" urx="918" ury="718"/>
+ <char name="N" width="722" llx="69" lly="0" urx="807" ury="718"/>
+ <char name="Ntilde" width="722" llx="69" lly="0" urx="807" ury="923"/>
+ <char name="O" width="778" llx="107" lly="-19" urx="823" ury="737"/>
+ <char name="OE" width="1000" llx="99" lly="-19" urx="1114" ury="737"/>
+ <char name="Oacute" width="778" llx="107" lly="-19" urx="823" ury="936"/>
+ <char name="Ocircumflex" width="778" llx="107" lly="-19" urx="823" ury="936"/>
+ <char name="Odieresis" width="778" llx="107" lly="-19" urx="823" ury="915"/>
+ <char name="Ograve" width="778" llx="107" lly="-19" urx="823" ury="936"/>
+ <char name="Oslash" width="778" llx="35" lly="-27" urx="894" ury="745"/>
+ <char name="Otilde" width="778" llx="107" lly="-19" urx="823" ury="923"/>
+ <char name="P" width="667" llx="76" lly="0" urx="738" ury="718"/>
+ <char name="Q" width="778" llx="107" lly="-52" urx="823" ury="737"/>
+ <char name="R" width="722" llx="76" lly="0" urx="778" ury="718"/>
+ <char name="S" width="667" llx="81" lly="-19" urx="718" ury="737"/>
+ <char name="Scaron" width="667" llx="81" lly="-19" urx="718" ury="936"/>
+ <char name="T" width="611" llx="140" lly="0" urx="751" ury="718"/>
+ <char name="Thorn" width="667" llx="76" lly="0" urx="716" ury="718"/>
+ <char name="U" width="722" llx="116" lly="-19" urx="804" ury="718"/>
+ <char name="Uacute" width="722" llx="116" lly="-19" urx="804" ury="936"/>
+ <char name="Ucircumflex" width="722" llx="116" lly="-19" urx="804" ury="936"/>
+ <char name="Udieresis" width="722" llx="116" lly="-19" urx="804" ury="915"/>
+ <char name="Ugrave" width="722" llx="116" lly="-19" urx="804" ury="936"/>
+ <char name="V" width="667" llx="172" lly="0" urx="801" ury="718"/>
+ <char name="W" width="944" llx="169" lly="0" urx="1082" ury="718"/>
+ <char name="X" width="667" llx="14" lly="0" urx="791" ury="718"/>
+ <char name="Y" width="667" llx="168" lly="0" urx="806" ury="718"/>
+ <char name="Yacute" width="667" llx="168" lly="0" urx="806" ury="936"/>
+ <char name="Ydieresis" width="667" llx="168" lly="0" urx="806" ury="915"/>
+ <char name="Z" width="611" llx="25" lly="0" urx="737" ury="718"/>
+ <char name="Zcaron" width="611" llx="25" lly="0" urx="737" ury="936"/>
+ <char name="a" width="556" llx="55" lly="-14" urx="583" ury="546"/>
+ <char name="aacute" width="556" llx="55" lly="-14" urx="627" ury="750"/>
+ <char name="acircumflex" width="556" llx="55" lly="-14" urx="583" ury="750"/>
+ <char name="acute" width="333" llx="236" lly="604" urx="515" ury="750"/>
+ <char name="adieresis" width="556" llx="55" lly="-14" urx="594" ury="729"/>
+ <char name="ae" width="889" llx="56" lly="-14" urx="923" ury="546"/>
+ <char name="agrave" width="556" llx="55" lly="-14" urx="583" ury="750"/>
+ <char name="ampersand" width="722" llx="89" lly="-19" urx="732" ury="718"/>
+ <char name="aring" width="556" llx="55" lly="-14" urx="583" ury="776"/>
+ <char name="asciicircum" width="584" llx="131" lly="323" urx="591" ury="698"/>
+ <char name="asciitilde" width="584" llx="115" lly="163" urx="577" ury="343"/>
+ <char name="asterisk" width="389" llx="146" lly="387" urx="481" ury="718"/>
+ <char name="at" width="975" llx="186" lly="-19" urx="954" ury="737"/>
+ <char name="atilde" width="556" llx="55" lly="-14" urx="619" ury="737"/>
+ <char name="b" width="611" llx="61" lly="-14" urx="645" ury="718"/>
+ <char name="backslash" width="278" llx="124" lly="-19" urx="307" ury="737"/>
+ <char name="bar" width="280" llx="36" lly="-225" urx="361" ury="775"/>
+ <char name="braceleft" width="389" llx="94" lly="-196" urx="518" ury="722"/>
+ <char name="braceright" width="389" llx="-18" lly="-196" urx="407" ury="722"/>
+ <char name="bracketleft" width="333" llx="21" lly="-196" urx="462" ury="722"/>
+ <char name="bracketright" width="333" llx="-18" lly="-196" urx="423" ury="722"/>
+ <char name="breve" width="333" llx="156" lly="604" urx="494" ury="750"/>
+ <char name="brokenbar" width="280" llx="52" lly="-150" urx="345" ury="700"/>
+ <char name="bullet" width="350" llx="83" lly="194" urx="420" ury="524"/>
+ <char name="c" width="556" llx="79" lly="-14" urx="599" ury="546"/>
+ <char name="caron" width="333" llx="149" lly="604" urx="502" ury="750"/>
+ <char name="ccedilla" width="556" llx="79" lly="-228" urx="599" ury="546"/>
+ <char name="cedilla" width="333" llx="-37" lly="-228" urx="220" ury="0"/>
+ <char name="cent" width="556" llx="79" lly="-118" urx="599" ury="628"/>
+ <char name="circumflex" width="333" llx="118" lly="604" urx="471" ury="750"/>
+ <char name="colon" width="333" llx="92" lly="0" urx="351" ury="512"/>
+ <char name="comma" width="278" llx="28" lly="-168" urx="245" ury="146"/>
+ <char name="copyright" width="737" llx="56" lly="-19" urx="835" ury="737"/>
+ <char name="currency" width="556" llx="27" lly="76" urx="680" ury="636"/>
+ <char name="d" width="611" llx="82" lly="-14" urx="704" ury="718"/>
+ <char name="dagger" width="556" llx="118" lly="-171" urx="626" ury="718"/>
+ <char name="daggerdbl" width="556" llx="46" lly="-171" urx="628" ury="718"/>
+ <char name="degree" width="400" llx="175" lly="426" urx="467" ury="712"/>
+ <char name="dieresis" width="333" llx="137" lly="614" urx="482" ury="729"/>
+ <char name="divide" width="584" llx="82" lly="-42" urx="610" ury="548"/>
+ <char name="dollar" width="556" llx="67" lly="-115" urx="622" ury="775"/>
+ <char name="dotaccent" width="333" llx="235" lly="614" urx="385" ury="729"/>
+ <char name="dotlessi" width="278" llx="69" lly="0" urx="322" ury="532"/>
+ <char name="e" width="556" llx="70" lly="-14" urx="593" ury="546"/>
+ <char name="eacute" width="556" llx="70" lly="-14" urx="627" ury="750"/>
+ <char name="ecircumflex" width="556" llx="70" lly="-14" urx="593" ury="750"/>
+ <char name="edieresis" width="556" llx="70" lly="-14" urx="594" ury="729"/>
+ <char name="egrave" width="556" llx="70" lly="-14" urx="593" ury="750"/>
+ <char name="eight" width="556" llx="69" lly="-19" urx="616" ury="710"/>
+ <char name="ellipsis" width="1000" llx="92" lly="0" urx="939" ury="146"/>
+ <char name="emdash" width="1000" llx="48" lly="227" urx="1071" ury="333"/>
+ <char name="endash" width="556" llx="48" lly="227" urx="627" ury="333"/>
+ <char name="equal" width="584" llx="58" lly="87" urx="633" ury="419"/>
+ <char name="eth" width="611" llx="82" lly="-14" urx="670" ury="737"/>
+ <char name="exclam" width="333" llx="94" lly="0" urx="397" ury="718"/>
+ <char name="exclamdown" width="333" llx="50" lly="-186" urx="353" ury="532"/>
+ <char name="f" width="333" llx="87" lly="0" urx="469" ury="727"/>
+ <char name="fi" width="611" llx="87" lly="0" urx="696" ury="727"/>
+ <char name="five" width="556" llx="64" lly="-19" urx="636" ury="698"/>
+ <char name="fl" width="611" llx="87" lly="0" urx="695" ury="727"/>
+ <char name="florin" width="556" llx="-50" lly="-210" urx="669" ury="737"/>
+ <char name="four" width="556" llx="60" lly="0" urx="598" ury="710"/>
+ <char name="fraction" width="167" llx="-174" lly="-19" urx="487" ury="710"/>
+ <char name="g" width="611" llx="38" lly="-217" urx="666" ury="546"/>
+ <char name="germandbls" width="611" llx="69" lly="-14" urx="657" ury="731"/>
+ <char name="grave" width="333" llx="136" lly="604" urx="353" ury="750"/>
+ <char name="greater" width="584" llx="36" lly="-8" urx="609" ury="514"/>
+ <char name="guillemotleft" width="556" llx="135" lly="76" urx="571" ury="484"/>
+ <char name="guillemotright" width="556" llx="104" lly="76" urx="540" ury="484"/>
+ <char name="guilsinglleft" width="333" llx="130" lly="76" urx="353" ury="484"/>
+ <char name="guilsinglright" width="333" llx="99" lly="76" urx="322" ury="484"/>
+ <char name="h" width="611" llx="65" lly="0" urx="629" ury="718"/>
+ <char name="hungarumlaut" width="333" llx="137" lly="604" urx="645" ury="750"/>
+ <char name="hyphen" width="333" llx="73" lly="215" urx="379" ury="345"/>
+ <char name="i" width="278" llx="69" lly="0" urx="363" ury="725"/>
+ <char name="iacute" width="278" llx="69" lly="0" urx="488" ury="750"/>
+ <char name="icircumflex" width="278" llx="69" lly="0" urx="444" ury="750"/>
+ <char name="idieresis" width="278" llx="69" lly="0" urx="455" ury="729"/>
+ <char name="igrave" width="278" llx="69" lly="0" urx="326" ury="750"/>
+ <char name="j" width="278" llx="-42" lly="-214" urx="363" ury="725"/>
+ <char name="k" width="556" llx="69" lly="0" urx="670" ury="718"/>
+ <char name="l" width="278" llx="69" lly="0" urx="362" ury="718"/>
+ <char name="less" width="584" llx="82" lly="-8" urx="655" ury="514"/>
+ <char name="logicalnot" width="584" llx="105" lly="108" urx="633" ury="419"/>
+ <char name="lslash" width="278" llx="40" lly="0" urx="407" ury="718"/>
+ <char name="m" width="889" llx="64" lly="0" urx="909" ury="546"/>
+ <char name="macron" width="333" llx="122" lly="604" urx="483" ury="678"/>
+ <char name="minus" width="324" llx="82" lly="197" urx="610" ury="309"/>
+ <char name="mu" width="611" llx="22" lly="-207" urx="658" ury="532"/>
+ <char name="multiply" width="584" llx="57" lly="1" urx="635" ury="505"/>
+ <char name="n" width="611" llx="65" lly="0" urx="629" ury="546"/>
+ <char name="nine" width="556" llx="78" lly="-19" urx="615" ury="710"/>
+ <char name="ntilde" width="611" llx="65" lly="0" urx="646" ury="737"/>
+ <char name="numbersign" width="556" llx="60" lly="0" urx="644" ury="698"/>
+ <char name="o" width="611" llx="82" lly="-14" urx="643" ury="546"/>
+ <char name="oacute" width="611" llx="82" lly="-14" urx="654" ury="750"/>
+ <char name="ocircumflex" width="611" llx="82" lly="-14" urx="643" ury="750"/>
+ <char name="odieresis" width="611" llx="82" lly="-14" urx="643" ury="729"/>
+ <char name="oe" width="944" llx="82" lly="-14" urx="977" ury="546"/>
+ <char name="ogonek" width="333" llx="41" lly="-228" urx="264" ury="0"/>
+ <char name="ograve" width="611" llx="82" lly="-14" urx="643" ury="750"/>
+ <char name="one" width="556" llx="173" lly="0" urx="529" ury="710"/>
+ <char name="onehalf" width="834" llx="132" lly="-19" urx="858" ury="710"/>
+ <char name="onequarter" width="834" llx="132" lly="-19" urx="806" ury="710"/>
+ <char name="onesuperior" width="333" llx="148" lly="283" urx="388" ury="710"/>
+ <char name="ordfeminine" width="370" llx="125" lly="401" urx="465" ury="737"/>
+ <char name="ordmasculine" width="365" llx="123" lly="401" urx="485" ury="737"/>
+ <char name="oslash" width="611" llx="22" lly="-29" urx="701" ury="560"/>
+ <char name="otilde" width="611" llx="82" lly="-14" urx="646" ury="737"/>
+ <char name="p" width="611" llx="18" lly="-207" urx="645" ury="546"/>
+ <char name="paragraph" width="556" llx="98" lly="-191" urx="688" ury="700"/>
+ <char name="parenleft" width="333" llx="76" lly="-208" urx="470" ury="734"/>
+ <char name="parenright" width="333" llx="-25" lly="-208" urx="369" ury="734"/>
+ <char name="percent" width="889" llx="136" lly="-19" urx="901" ury="710"/>
+ <char name="period" width="278" llx="64" lly="0" urx="245" ury="146"/>
+ <char name="periodcentered" width="278" llx="110" lly="172" urx="276" ury="334"/>
+ <char name="perthousand" width="1000" llx="76" lly="-19" urx="1038" ury="710"/>
+ <char name="plus" width="584" llx="82" lly="0" urx="610" ury="506"/>
+ <char name="plusminus" width="584" llx="40" lly="0" urx="625" ury="506"/>
+ <char name="q" width="611" llx="80" lly="-207" urx="665" ury="546"/>
+ <char name="question" width="611" llx="165" lly="0" urx="671" ury="727"/>
+ <char name="questiondown" width="611" llx="53" lly="-195" urx="559" ury="532"/>
+ <char name="quotedbl" width="474" llx="193" lly="447" urx="529" ury="718"/>
+ <char name="quotedblbase" width="500" llx="36" lly="-146" urx="463" ury="127"/>
+ <char name="quotedblleft" width="500" llx="160" lly="454" urx="588" ury="727"/>
+ <char name="quotedblright" width="500" llx="162" lly="445" urx="589" ury="718"/>
+ <char name="quoteleft" width="278" llx="165" lly="454" urx="361" ury="727"/>
+ <char name="quoteright" width="278" llx="167" lly="445" urx="362" ury="718"/>
+ <char name="quotesinglbase" width="278" llx="41" lly="-146" urx="236" ury="127"/>
+ <char name="quotesingle" width="238" llx="165" lly="447" urx="321" ury="718"/>
+ <char name="r" width="389" llx="64" lly="0" urx="489" ury="546"/>
+ <char name="registered" width="737" llx="55" lly="-19" urx="834" ury="737"/>
+ <char name="ring" width="333" llx="200" lly="568" urx="420" ury="776"/>
+ <char name="s" width="556" llx="63" lly="-14" urx="584" ury="546"/>
+ <char name="scaron" width="556" llx="63" lly="-14" urx="614" ury="750"/>
+ <char name="section" width="556" llx="61" lly="-184" urx="598" ury="727"/>
+ <char name="semicolon" width="333" llx="56" lly="-168" urx="351" ury="512"/>
+ <char name="seven" width="556" llx="125" lly="0" urx="676" ury="698"/>
+ <char name="six" width="556" llx="85" lly="-19" urx="619" ury="710"/>
+ <char name="slash" width="278" llx="-37" lly="-19" urx="468" ury="737"/>
+ <char name="space" width="278" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="556" llx="50" lly="-16" urx="635" ury="718"/>
+ <char name="t" width="333" llx="100" lly="-6" urx="422" ury="676"/>
+ <char name="thorn" width="611" llx="18" lly="-208" urx="645" ury="718"/>
+ <char name="three" width="556" llx="65" lly="-19" urx="608" ury="710"/>
+ <char name="threequarters" width="834" llx="99" lly="-19" urx="839" ury="710"/>
+ <char name="threesuperior" width="333" llx="91" lly="271" urx="441" ury="710"/>
+ <char name="tilde" width="333" llx="113" lly="610" urx="507" ury="737"/>
+ <char name="trademark" width="1000" llx="179" lly="306" urx="1109" ury="718"/>
+ <char name="two" width="556" llx="26" lly="0" urx="619" ury="710"/>
+ <char name="twosuperior" width="333" llx="69" lly="283" urx="449" ury="710"/>
+ <char name="u" width="611" llx="98" lly="-14" urx="658" ury="532"/>
+ <char name="uacute" width="611" llx="98" lly="-14" urx="658" ury="750"/>
+ <char name="ucircumflex" width="611" llx="98" lly="-14" urx="658" ury="750"/>
+ <char name="udieresis" width="611" llx="98" lly="-14" urx="658" ury="729"/>
+ <char name="ugrave" width="611" llx="98" lly="-14" urx="658" ury="750"/>
+ <char name="underscore" width="556" llx="-27" lly="-125" urx="540" ury="-75"/>
+ <char name="v" width="556" llx="126" lly="0" urx="656" ury="532"/>
+ <char name="w" width="778" llx="123" lly="0" urx="882" ury="532"/>
+ <char name="x" width="556" llx="15" lly="0" urx="648" ury="532"/>
+ <char name="y" width="556" llx="42" lly="-214" urx="652" ury="532"/>
+ <char name="yacute" width="556" llx="42" lly="-214" urx="652" ury="750"/>
+ <char name="ydieresis" width="556" llx="42" lly="-214" urx="652" ury="729"/>
+ <char name="yen" width="556" llx="60" lly="0" urx="713" ury="698"/>
+ <char name="z" width="500" llx="20" lly="0" urx="583" ury="532"/>
+ <char name="zcaron" width="500" llx="20" lly="0" urx="586" ury="750"/>
+ <char name="zero" width="556" llx="86" lly="-19" urx="617" ury="710"/>
+ </char-metrics>
+ <kerning kpx1="107">
+ <pair kern="-15" kpx2="111"/>
+ </kerning>
+ <kerning kpx1="79">
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-50" kpx2="88"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="-20" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="-20" kpx2="107"/>
+ <pair kern="-10" kpx2="104"/>
+ <pair kern="-10" kpx2="121"/>
+ <pair kern="-20" kpx2="108"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-60" kpx2="111"/>
+ <pair kern="-40" kpx2="45"/>
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-10" kpx2="58"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-60" kpx2="65"/>
+ <pair kern="-45" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-35" kpx2="101"/>
+ <pair kern="-10" kpx2="59"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-40" kpx2="111"/>
+ <pair kern="-30" kpx2="97"/>
+ <pair kern="-100" kpx2="65"/>
+ <pair kern="-120" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-120" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-90" kpx2="111"/>
+ <pair kern="-80" kpx2="45"/>
+ <pair kern="-50" kpx2="79"/>
+ <pair kern="-40" kpx2="58"/>
+ <pair kern="-60" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-60" kpx2="117"/>
+ <pair kern="-120" kpx2="46"/>
+ <pair kern="-50" kpx2="71"/>
+ <pair kern="-50" kpx2="101"/>
+ <pair kern="-40" kpx2="59"/>
+ <pair kern="-120" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="59">
+ <pair kern="-40" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-80" kpx2="87"/>
+ <pair kern="-80" kpx2="147"/>
+ <pair kern="-120" kpx2="89"/>
+ <pair kern="-100" kpx2="84"/>
+ <pair kern="-60" kpx2="145"/>
+ <pair kern="-80" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-30" kpx2="119"/>
+ <pair kern="-60" kpx2="87"/>
+ <pair kern="-40" kpx2="67"/>
+ <pair kern="-40" kpx2="81"/>
+ <pair kern="-50" kpx2="71"/>
+ <pair kern="-80" kpx2="86"/>
+ <pair kern="-40" kpx2="118"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-110" kpx2="89"/>
+ <pair kern="-90" kpx2="84"/>
+ <pair kern="-30" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-100" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="-15" kpx2="119"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-30" kpx2="120"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="100">
+ <pair kern="-10" kpx2="100"/>
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-40" kpx2="86"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="-80" kpx2="100"/>
+ <pair kern="-80" kpx2="32"/>
+ <pair kern="-46" kpx2="146"/>
+ <pair kern="-40" kpx2="114"/>
+ <pair kern="-20" kpx2="108"/>
+ <pair kern="-60" kpx2="115"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-20" kpx2="85"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-20" kpx2="84"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-35" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-40" kpx2="121"/>
+ <pair kern="-15" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="-40" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-20" kpx2="100"/>
+ <pair kern="-20" kpx2="45"/>
+ <pair kern="-20" kpx2="99"/>
+ <pair kern="20" kpx2="116"/>
+ <pair kern="10" kpx2="121"/>
+ <pair kern="-60" kpx2="46"/>
+ <pair kern="-15" kpx2="103"/>
+ <pair kern="-20" kpx2="113"/>
+ <pair kern="-15" kpx2="115"/>
+ <pair kern="10" kpx2="118"/>
+ <pair kern="-60" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="-46" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="108">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-30" kpx2="65"/>
+ <pair kern="-10" kpx2="85"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-10" kpx2="108"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="-140" kpx2="148"/>
+ <pair kern="-140" kpx2="146"/>
+ <pair kern="-80" kpx2="87"/>
+ <pair kern="-120" kpx2="89"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-90" kpx2="84"/>
+ <pair kern="-110" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="20" kpx2="46"/>
+ <pair kern="20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-120" kpx2="148"/>
+ <pair kern="-40" kpx2="32"/>
+ <pair kern="-120" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="-80" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-30" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="30" kpx2="148"/>
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="30" kpx2="146"/>
+ <pair kern="-10" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-100" kpx2="111"/>
+ <pair kern="-70" kpx2="79"/>
+ <pair kern="-50" kpx2="58"/>
+ <pair kern="-90" kpx2="97"/>
+ <pair kern="-110" kpx2="65"/>
+ <pair kern="-100" kpx2="117"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-80" kpx2="101"/>
+ <pair kern="-50" kpx2="59"/>
+ <pair kern="-100" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-40" kpx2="58"/>
+ <pair kern="-60" kpx2="119"/>
+ <pair kern="-80" kpx2="114"/>
+ <pair kern="-80" kpx2="44"/>
+ <pair kern="-40" kpx2="59"/>
+ <pair kern="-120" kpx2="45"/>
+ <pair kern="-90" kpx2="65"/>
+ <pair kern="-80" kpx2="97"/>
+ <pair kern="-90" kpx2="117"/>
+ <pair kern="-60" kpx2="121"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-60" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-30" kpx2="97"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-120" kpx2="148"/>
+ <pair kern="-40" kpx2="32"/>
+ <pair kern="-120" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="-10" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-40" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="-10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="20" kpx2="46"/>
+ <pair kern="-15" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="10" kpx2="44"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/HelveticaOblique.xml b/fop-core/src/main/codegen/fonts/HelveticaOblique.xml
new file mode 100644
index 000000000..efa1165f2
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/HelveticaOblique.xml
@@ -0,0 +1,606 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Helvetica-Oblique</font-name>
+ <full-name>Helvetica Oblique</full-name>
+ <family-name>Helvetica</family-name>
+ <class-name>HelveticaOblique</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>718</cap-height>
+ <x-height>523</x-height>
+ <ascender>718</ascender>
+ <descender>-207</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="667" llx="14" lly="0" urx="654" ury="718"/>
+ <char name="AE" width="1000" llx="8" lly="0" urx="1097" ury="718"/>
+ <char name="Aacute" width="667" llx="14" lly="0" urx="683" ury="929"/>
+ <char name="Acircumflex" width="667" llx="14" lly="0" urx="654" ury="929"/>
+ <char name="Adieresis" width="667" llx="14" lly="0" urx="654" ury="901"/>
+ <char name="Agrave" width="667" llx="14" lly="0" urx="654" ury="929"/>
+ <char name="Aring" width="667" llx="14" lly="0" urx="654" ury="931"/>
+ <char name="Atilde" width="667" llx="14" lly="0" urx="699" ury="917"/>
+ <char name="B" width="667" llx="74" lly="0" urx="712" ury="718"/>
+ <char name="C" width="722" llx="108" lly="-19" urx="782" ury="737"/>
+ <char name="Ccedilla" width="722" llx="108" lly="-225" urx="782" ury="737"/>
+ <char name="D" width="722" llx="81" lly="0" urx="764" ury="718"/>
+ <char name="E" width="667" llx="86" lly="0" urx="762" ury="718"/>
+ <char name="Eacute" width="667" llx="86" lly="0" urx="762" ury="929"/>
+ <char name="Ecircumflex" width="667" llx="86" lly="0" urx="762" ury="929"/>
+ <char name="Edieresis" width="667" llx="86" lly="0" urx="762" ury="901"/>
+ <char name="Egrave" width="667" llx="86" lly="0" urx="762" ury="929"/>
+ <char name="Eth" width="722" llx="69" lly="0" urx="764" ury="718"/>
+ <char name="Euro" width="556" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="611" llx="86" lly="0" urx="736" ury="718"/>
+ <char name="G" width="778" llx="111" lly="-19" urx="799" ury="737"/>
+ <char name="H" width="722" llx="77" lly="0" urx="799" ury="718"/>
+ <char name="I" width="278" llx="91" lly="0" urx="341" ury="718"/>
+ <char name="Iacute" width="278" llx="91" lly="0" urx="489" ury="929"/>
+ <char name="Icircumflex" width="278" llx="91" lly="0" urx="452" ury="929"/>
+ <char name="Idieresis" width="278" llx="91" lly="0" urx="458" ury="901"/>
+ <char name="Igrave" width="278" llx="91" lly="0" urx="351" ury="929"/>
+ <char name="J" width="500" llx="47" lly="-19" urx="581" ury="718"/>
+ <char name="K" width="667" llx="76" lly="0" urx="808" ury="718"/>
+ <char name="L" width="556" llx="76" lly="0" urx="555" ury="718"/>
+ <char name="Lslash" width="556" llx="41" lly="0" urx="555" ury="718"/>
+ <char name="M" width="833" llx="73" lly="0" urx="914" ury="718"/>
+ <char name="N" width="722" llx="76" lly="0" urx="799" ury="718"/>
+ <char name="Ntilde" width="722" llx="76" lly="0" urx="799" ury="917"/>
+ <char name="O" width="778" llx="105" lly="-19" urx="826" ury="737"/>
+ <char name="OE" width="1000" llx="98" lly="-19" urx="1116" ury="737"/>
+ <char name="Oacute" width="778" llx="105" lly="-19" urx="826" ury="929"/>
+ <char name="Ocircumflex" width="778" llx="105" lly="-19" urx="826" ury="929"/>
+ <char name="Odieresis" width="778" llx="105" lly="-19" urx="826" ury="901"/>
+ <char name="Ograve" width="778" llx="105" lly="-19" urx="826" ury="929"/>
+ <char name="Oslash" width="778" llx="43" lly="-19" urx="890" ury="737"/>
+ <char name="Otilde" width="778" llx="105" lly="-19" urx="826" ury="917"/>
+ <char name="P" width="667" llx="86" lly="0" urx="737" ury="718"/>
+ <char name="Q" width="778" llx="105" lly="-56" urx="826" ury="737"/>
+ <char name="R" width="722" llx="88" lly="0" urx="773" ury="718"/>
+ <char name="S" width="667" llx="90" lly="-19" urx="713" ury="737"/>
+ <char name="Scaron" width="667" llx="90" lly="-19" urx="713" ury="929"/>
+ <char name="T" width="611" llx="148" lly="0" urx="750" ury="718"/>
+ <char name="Thorn" width="667" llx="86" lly="0" urx="712" ury="718"/>
+ <char name="U" width="722" llx="123" lly="-19" urx="797" ury="718"/>
+ <char name="Uacute" width="722" llx="123" lly="-19" urx="797" ury="929"/>
+ <char name="Ucircumflex" width="722" llx="123" lly="-19" urx="797" ury="929"/>
+ <char name="Udieresis" width="722" llx="123" lly="-19" urx="797" ury="901"/>
+ <char name="Ugrave" width="722" llx="123" lly="-19" urx="797" ury="929"/>
+ <char name="V" width="667" llx="173" lly="0" urx="800" ury="718"/>
+ <char name="W" width="944" llx="169" lly="0" urx="1081" ury="718"/>
+ <char name="X" width="667" llx="19" lly="0" urx="790" ury="718"/>
+ <char name="Y" width="667" llx="167" lly="0" urx="806" ury="718"/>
+ <char name="Yacute" width="667" llx="167" lly="0" urx="806" ury="929"/>
+ <char name="Ydieresis" width="667" llx="167" lly="0" urx="806" ury="901"/>
+ <char name="Z" width="611" llx="23" lly="0" urx="741" ury="718"/>
+ <char name="Zcaron" width="611" llx="23" lly="0" urx="741" ury="929"/>
+ <char name="a" width="556" llx="61" lly="-15" urx="559" ury="538"/>
+ <char name="aacute" width="556" llx="61" lly="-15" urx="587" ury="734"/>
+ <char name="acircumflex" width="556" llx="61" lly="-15" urx="559" ury="734"/>
+ <char name="acute" width="333" llx="248" lly="593" urx="475" ury="734"/>
+ <char name="adieresis" width="556" llx="61" lly="-15" urx="559" ury="706"/>
+ <char name="ae" width="889" llx="61" lly="-15" urx="909" ury="538"/>
+ <char name="agrave" width="556" llx="61" lly="-15" urx="559" ury="734"/>
+ <char name="ampersand" width="667" llx="77" lly="-15" urx="647" ury="718"/>
+ <char name="aring" width="556" llx="61" lly="-15" urx="559" ury="756"/>
+ <char name="asciicircum" width="469" llx="42" lly="264" urx="539" ury="688"/>
+ <char name="asciitilde" width="584" llx="111" lly="180" urx="580" ury="326"/>
+ <char name="asterisk" width="389" llx="165" lly="431" urx="475" ury="718"/>
+ <char name="at" width="1015" llx="215" lly="-19" urx="965" ury="737"/>
+ <char name="atilde" width="556" llx="61" lly="-15" urx="592" ury="722"/>
+ <char name="b" width="556" llx="58" lly="-15" urx="584" ury="718"/>
+ <char name="backslash" width="278" llx="140" lly="-19" urx="291" ury="737"/>
+ <char name="bar" width="260" llx="46" lly="-225" urx="332" ury="775"/>
+ <char name="braceleft" width="334" llx="92" lly="-196" urx="445" ury="722"/>
+ <char name="braceright" width="334" llx="0" lly="-196" urx="354" ury="722"/>
+ <char name="bracketleft" width="278" llx="21" lly="-196" urx="403" ury="722"/>
+ <char name="bracketright" width="278" llx="-14" lly="-196" urx="368" ury="722"/>
+ <char name="breve" width="333" llx="167" lly="595" urx="476" ury="731"/>
+ <char name="brokenbar" width="260" llx="62" lly="-150" urx="316" ury="700"/>
+ <char name="bullet" width="350" llx="91" lly="202" urx="413" ury="517"/>
+ <char name="c" width="500" llx="74" lly="-15" urx="553" ury="538"/>
+ <char name="caron" width="333" llx="177" lly="593" urx="468" ury="734"/>
+ <char name="ccedilla" width="500" llx="74" lly="-225" urx="553" ury="538"/>
+ <char name="cedilla" width="333" llx="2" lly="-225" urx="232" ury="0"/>
+ <char name="cent" width="556" llx="95" lly="-115" urx="584" ury="623"/>
+ <char name="circumflex" width="333" llx="147" lly="593" urx="438" ury="734"/>
+ <char name="colon" width="278" llx="87" lly="0" urx="301" ury="516"/>
+ <char name="comma" width="278" llx="56" lly="-147" urx="214" ury="106"/>
+ <char name="copyright" width="737" llx="54" lly="-19" urx="837" ury="737"/>
+ <char name="currency" width="556" llx="60" lly="99" urx="646" ury="603"/>
+ <char name="d" width="556" llx="84" lly="-15" urx="652" ury="718"/>
+ <char name="dagger" width="556" llx="135" lly="-159" urx="622" ury="718"/>
+ <char name="daggerdbl" width="556" llx="52" lly="-159" urx="623" ury="718"/>
+ <char name="degree" width="400" llx="169" lly="411" urx="468" ury="703"/>
+ <char name="dieresis" width="333" llx="168" lly="604" urx="443" ury="706"/>
+ <char name="divide" width="584" llx="85" lly="-19" urx="606" ury="524"/>
+ <char name="dollar" width="556" llx="69" lly="-115" urx="617" ury="775"/>
+ <char name="dotaccent" width="333" llx="249" lly="604" urx="362" ury="706"/>
+ <char name="dotlessi" width="278" llx="95" lly="0" urx="294" ury="523"/>
+ <char name="e" width="556" llx="84" lly="-15" urx="578" ury="538"/>
+ <char name="eacute" width="556" llx="84" lly="-15" urx="587" ury="734"/>
+ <char name="ecircumflex" width="556" llx="84" lly="-15" urx="578" ury="734"/>
+ <char name="edieresis" width="556" llx="84" lly="-15" urx="578" ury="706"/>
+ <char name="egrave" width="556" llx="84" lly="-15" urx="578" ury="734"/>
+ <char name="eight" width="556" llx="74" lly="-19" urx="607" ury="703"/>
+ <char name="ellipsis" width="1000" llx="115" lly="0" urx="908" ury="106"/>
+ <char name="emdash" width="1000" llx="51" lly="240" urx="1067" ury="313"/>
+ <char name="endash" width="556" llx="51" lly="240" urx="623" ury="313"/>
+ <char name="equal" width="584" llx="63" lly="115" urx="628" ury="390"/>
+ <char name="eth" width="556" llx="81" lly="-15" urx="617" ury="737"/>
+ <char name="exclam" width="278" llx="90" lly="0" urx="340" ury="718"/>
+ <char name="exclamdown" width="333" llx="77" lly="-195" urx="326" ury="523"/>
+ <char name="f" width="278" llx="86" lly="0" urx="416" ury="728"/>
+ <char name="fi" width="500" llx="86" lly="0" urx="587" ury="728"/>
+ <char name="five" width="556" llx="68" lly="-19" urx="621" ury="688"/>
+ <char name="fl" width="500" llx="86" lly="0" urx="585" ury="728"/>
+ <char name="florin" width="556" llx="-52" lly="-207" urx="654" ury="737"/>
+ <char name="four" width="556" llx="61" lly="0" urx="576" ury="703"/>
+ <char name="fraction" width="167" llx="-170" lly="-19" urx="482" ury="703"/>
+ <char name="g" width="556" llx="42" lly="-220" urx="610" ury="538"/>
+ <char name="germandbls" width="611" llx="67" lly="-15" urx="658" ury="728"/>
+ <char name="grave" width="333" llx="170" lly="593" urx="337" ury="734"/>
+ <char name="greater" width="584" llx="50" lly="11" urx="597" ury="495"/>
+ <char name="guillemotleft" width="556" llx="146" lly="108" urx="554" ury="446"/>
+ <char name="guillemotright" width="556" llx="120" lly="108" urx="528" ury="446"/>
+ <char name="guilsinglleft" width="333" llx="137" lly="108" urx="340" ury="446"/>
+ <char name="guilsinglright" width="333" llx="111" lly="108" urx="314" ury="446"/>
+ <char name="h" width="556" llx="65" lly="0" urx="573" ury="718"/>
+ <char name="hungarumlaut" width="333" llx="157" lly="593" urx="565" ury="734"/>
+ <char name="hyphen" width="333" llx="93" lly="232" urx="357" ury="322"/>
+ <char name="i" width="222" llx="67" lly="0" urx="308" ury="718"/>
+ <char name="iacute" width="278" llx="95" lly="0" urx="448" ury="734"/>
+ <char name="icircumflex" width="278" llx="95" lly="0" urx="411" ury="734"/>
+ <char name="idieresis" width="278" llx="95" lly="0" urx="416" ury="706"/>
+ <char name="igrave" width="278" llx="95" lly="0" urx="310" ury="734"/>
+ <char name="j" width="222" llx="-60" lly="-210" urx="308" ury="718"/>
+ <char name="k" width="500" llx="67" lly="0" urx="600" ury="718"/>
+ <char name="l" width="222" llx="67" lly="0" urx="308" ury="718"/>
+ <char name="less" width="584" llx="94" lly="11" urx="641" ury="495"/>
+ <char name="logicalnot" width="584" llx="106" lly="108" urx="628" ury="390"/>
+ <char name="lslash" width="222" llx="41" lly="0" urx="347" ury="718"/>
+ <char name="m" width="833" llx="65" lly="0" urx="852" ury="538"/>
+ <char name="macron" width="333" llx="143" lly="627" urx="468" ury="684"/>
+ <char name="minus" width="584" llx="85" lly="216" urx="606" ury="289"/>
+ <char name="mu" width="556" llx="24" lly="-207" urx="600" ury="523"/>
+ <char name="multiply" width="584" llx="50" lly="0" urx="642" ury="506"/>
+ <char name="n" width="556" llx="65" lly="0" urx="573" ury="538"/>
+ <char name="nine" width="556" llx="82" lly="-19" urx="609" ury="703"/>
+ <char name="ntilde" width="556" llx="65" lly="0" urx="592" ury="722"/>
+ <char name="numbersign" width="556" llx="73" lly="0" urx="631" ury="688"/>
+ <char name="o" width="556" llx="83" lly="-14" urx="585" ury="538"/>
+ <char name="oacute" width="556" llx="83" lly="-14" urx="587" ury="734"/>
+ <char name="ocircumflex" width="556" llx="83" lly="-14" urx="585" ury="734"/>
+ <char name="odieresis" width="556" llx="83" lly="-14" urx="585" ury="706"/>
+ <char name="oe" width="944" llx="83" lly="-15" urx="964" ury="538"/>
+ <char name="ogonek" width="333" llx="43" lly="-225" urx="249" ury="0"/>
+ <char name="ograve" width="556" llx="83" lly="-14" urx="585" ury="734"/>
+ <char name="one" width="556" llx="207" lly="0" urx="508" ury="703"/>
+ <char name="onehalf" width="834" llx="114" lly="-19" urx="839" ury="703"/>
+ <char name="onequarter" width="834" llx="150" lly="-19" urx="802" ury="703"/>
+ <char name="onesuperior" width="333" llx="166" lly="281" urx="371" ury="703"/>
+ <char name="ordfeminine" width="370" llx="127" lly="405" urx="449" ury="737"/>
+ <char name="ordmasculine" width="365" llx="141" lly="405" urx="468" ury="737"/>
+ <char name="oslash" width="611" llx="29" lly="-22" urx="647" ury="545"/>
+ <char name="otilde" width="556" llx="83" lly="-14" urx="602" ury="722"/>
+ <char name="p" width="556" llx="14" lly="-207" urx="584" ury="538"/>
+ <char name="paragraph" width="537" llx="126" lly="-173" urx="650" ury="718"/>
+ <char name="parenleft" width="333" llx="108" lly="-207" urx="454" ury="733"/>
+ <char name="parenright" width="333" llx="-9" lly="-207" urx="337" ury="733"/>
+ <char name="percent" width="889" llx="147" lly="-19" urx="889" ury="703"/>
+ <char name="period" width="278" llx="87" lly="0" urx="214" ury="106"/>
+ <char name="periodcentered" width="278" llx="129" lly="190" urx="257" ury="315"/>
+ <char name="perthousand" width="1000" llx="88" lly="-19" urx="1029" ury="703"/>
+ <char name="plus" width="584" llx="85" lly="0" urx="606" ury="505"/>
+ <char name="plusminus" width="584" llx="39" lly="0" urx="618" ury="506"/>
+ <char name="q" width="556" llx="84" lly="-207" urx="605" ury="538"/>
+ <char name="question" width="556" llx="161" lly="0" urx="610" ury="727"/>
+ <char name="questiondown" width="611" llx="85" lly="-201" urx="534" ury="525"/>
+ <char name="quotedbl" width="355" llx="168" lly="463" urx="438" ury="718"/>
+ <char name="quotedblbase" width="333" llx="-6" lly="-149" urx="318" ury="106"/>
+ <char name="quotedblleft" width="333" llx="138" lly="470" urx="461" ury="725"/>
+ <char name="quotedblright" width="333" llx="124" lly="463" urx="448" ury="718"/>
+ <char name="quoteleft" width="222" llx="165" lly="470" urx="323" ury="725"/>
+ <char name="quoteright" width="222" llx="151" lly="463" urx="310" ury="718"/>
+ <char name="quotesinglbase" width="222" llx="21" lly="-149" urx="180" ury="106"/>
+ <char name="quotesingle" width="191" llx="157" lly="463" urx="285" ury="718"/>
+ <char name="r" width="333" llx="77" lly="0" urx="446" ury="538"/>
+ <char name="registered" width="737" llx="54" lly="-19" urx="837" ury="737"/>
+ <char name="ring" width="333" llx="214" lly="572" urx="402" ury="756"/>
+ <char name="s" width="500" llx="63" lly="-15" urx="529" ury="538"/>
+ <char name="scaron" width="500" llx="63" lly="-15" urx="552" ury="734"/>
+ <char name="section" width="556" llx="76" lly="-191" urx="584" ury="737"/>
+ <char name="semicolon" width="278" llx="56" lly="-147" urx="301" ury="516"/>
+ <char name="seven" width="556" llx="137" lly="0" urx="669" ury="688"/>
+ <char name="six" width="556" llx="91" lly="-19" urx="615" ury="703"/>
+ <char name="slash" width="278" llx="-21" lly="-19" urx="452" ury="737"/>
+ <char name="space" width="278" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="556" llx="49" lly="-16" urx="634" ury="718"/>
+ <char name="t" width="278" llx="102" lly="-7" urx="368" ury="669"/>
+ <char name="thorn" width="556" llx="14" lly="-207" urx="584" ury="718"/>
+ <char name="three" width="556" llx="75" lly="-19" urx="610" ury="703"/>
+ <char name="threequarters" width="834" llx="130" lly="-19" urx="861" ury="703"/>
+ <char name="threesuperior" width="333" llx="90" lly="270" urx="436" ury="703"/>
+ <char name="tilde" width="333" llx="125" lly="606" urx="490" ury="722"/>
+ <char name="trademark" width="1000" llx="186" lly="306" urx="1056" ury="718"/>
+ <char name="two" width="556" llx="26" lly="0" urx="617" ury="703"/>
+ <char name="twosuperior" width="333" llx="64" lly="281" urx="449" ury="703"/>
+ <char name="u" width="556" llx="94" lly="-15" urx="600" ury="523"/>
+ <char name="uacute" width="556" llx="94" lly="-15" urx="600" ury="734"/>
+ <char name="ucircumflex" width="556" llx="94" lly="-15" urx="600" ury="734"/>
+ <char name="udieresis" width="556" llx="94" lly="-15" urx="600" ury="706"/>
+ <char name="ugrave" width="556" llx="94" lly="-15" urx="600" ury="734"/>
+ <char name="underscore" width="556" llx="-27" lly="-125" urx="540" ury="-75"/>
+ <char name="v" width="500" llx="119" lly="0" urx="603" ury="523"/>
+ <char name="w" width="722" llx="125" lly="0" urx="820" ury="523"/>
+ <char name="x" width="500" llx="11" lly="0" urx="594" ury="523"/>
+ <char name="y" width="500" llx="15" lly="-214" urx="600" ury="523"/>
+ <char name="yacute" width="500" llx="15" lly="-214" urx="600" ury="734"/>
+ <char name="ydieresis" width="500" llx="15" lly="-214" urx="600" ury="706"/>
+ <char name="yen" width="556" llx="81" lly="0" urx="699" ury="688"/>
+ <char name="z" width="500" llx="31" lly="0" urx="571" ury="523"/>
+ <char name="zcaron" width="500" llx="31" lly="0" urx="571" ury="734"/>
+ <char name="zero" width="556" llx="93" lly="-19" urx="608" ury="703"/>
+ </char-metrics>
+ <kerning kpx1="107">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-20" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="79">
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-60" kpx2="88"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="-30" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="-40" kpx2="45"/>
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="-20" kpx2="107"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-35" kpx2="46"/>
+ <pair kern="-35" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-50" kpx2="111"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-180" kpx2="46"/>
+ <pair kern="-50" kpx2="101"/>
+ <pair kern="-180" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-80" kpx2="45"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-40" kpx2="58"/>
+ <pair kern="-70" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-70" kpx2="117"/>
+ <pair kern="-125" kpx2="46"/>
+ <pair kern="-40" kpx2="71"/>
+ <pair kern="-80" kpx2="101"/>
+ <pair kern="-40" kpx2="59"/>
+ <pair kern="-125" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-25" kpx2="97"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="-25" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="59">
+ <pair kern="-50" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-30" kpx2="147"/>
+ <pair kern="-90" kpx2="89"/>
+ <pair kern="-50" kpx2="84"/>
+ <pair kern="-60" kpx2="145"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="-20" kpx2="119"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-40" kpx2="119"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-30" kpx2="67"/>
+ <pair kern="-30" kpx2="81"/>
+ <pair kern="-30" kpx2="71"/>
+ <pair kern="-70" kpx2="86"/>
+ <pair kern="-40" kpx2="118"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-100" kpx2="89"/>
+ <pair kern="-120" kpx2="84"/>
+ <pair kern="-40" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="-45" kpx2="114"/>
+ <pair kern="-50" kpx2="97"/>
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-150" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-150" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="-30" kpx2="119"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="-15" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="83">
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-30" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-90" kpx2="89"/>
+ <pair kern="-70" kpx2="46"/>
+ <pair kern="-70" kpx2="86"/>
+ <pair kern="-70" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="-50" kpx2="100"/>
+ <pair kern="-70" kpx2="32"/>
+ <pair kern="-57" kpx2="146"/>
+ <pair kern="-50" kpx2="114"/>
+ <pair kern="-50" kpx2="115"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-20" kpx2="79"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="-40" kpx2="85"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-30" kpx2="84"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-40" kpx2="111"/>
+ <pair kern="-50" kpx2="79"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-50" kpx2="121"/>
+ <pair kern="-40" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="-15" kpx2="97"/>
+ <pair kern="-60" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-60" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="-50" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="15" kpx2="107"/>
+ <pair kern="30" kpx2="58"/>
+ <pair kern="30" kpx2="112"/>
+ <pair kern="15" kpx2="108"/>
+ <pair kern="30" kpx2="118"/>
+ <pair kern="-50" kpx2="44"/>
+ <pair kern="30" kpx2="59"/>
+ <pair kern="15" kpx2="105"/>
+ <pair kern="25" kpx2="109"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="15" kpx2="117"/>
+ <pair kern="40" kpx2="116"/>
+ <pair kern="30" kpx2="121"/>
+ <pair kern="-50" kpx2="46"/>
+ <pair kern="25" kpx2="110"/>
+ </kerning>
+ <kerning kpx1="67">
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="-57" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="-10" kpx2="114"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-20" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="-140" kpx2="148"/>
+ <pair kern="-160" kpx2="146"/>
+ <pair kern="-70" kpx2="87"/>
+ <pair kern="-140" kpx2="89"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-110" kpx2="84"/>
+ <pair kern="-110" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="-20" kpx2="108"/>
+ <pair kern="-10" kpx2="98"/>
+ <pair kern="-20" kpx2="118"/>
+ <pair kern="-40" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-100" kpx2="148"/>
+ <pair kern="-100" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="-40" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="-10" kpx2="117"/>
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="248">
+ <pair kern="-55" kpx2="107"/>
+ <pair kern="-55" kpx2="104"/>
+ <pair kern="-55" kpx2="99"/>
+ <pair kern="-55" kpx2="112"/>
+ <pair kern="-55" kpx2="113"/>
+ <pair kern="-70" kpx2="118"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-55" kpx2="97"/>
+ <pair kern="-55" kpx2="117"/>
+ <pair kern="-55" kpx2="116"/>
+ <pair kern="-55" kpx2="106"/>
+ <pair kern="-55" kpx2="115"/>
+ <pair kern="-55" kpx2="122"/>
+ <pair kern="-55" kpx2="100"/>
+ <pair kern="-55" kpx2="111"/>
+ <pair kern="-70" kpx2="119"/>
+ <pair kern="-55" kpx2="114"/>
+ <pair kern="-55" kpx2="103"/>
+ <pair kern="-55" kpx2="108"/>
+ <pair kern="-55" kpx2="98"/>
+ <pair kern="-95" kpx2="44"/>
+ <pair kern="-55" kpx2="109"/>
+ <pair kern="-55" kpx2="102"/>
+ <pair kern="-70" kpx2="121"/>
+ <pair kern="-95" kpx2="46"/>
+ <pair kern="-55" kpx2="110"/>
+ <pair kern="-85" kpx2="120"/>
+ <pair kern="-55" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="60" kpx2="148"/>
+ <pair kern="-30" kpx2="111"/>
+ <pair kern="50" kpx2="146"/>
+ <pair kern="-30" kpx2="97"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="101"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-30" kpx2="46"/>
+ <pair kern="-30" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-140" kpx2="111"/>
+ <pair kern="-140" kpx2="45"/>
+ <pair kern="-20" kpx2="105"/>
+ <pair kern="-85" kpx2="79"/>
+ <pair kern="-60" kpx2="58"/>
+ <pair kern="-140" kpx2="97"/>
+ <pair kern="-110" kpx2="65"/>
+ <pair kern="-110" kpx2="117"/>
+ <pair kern="-140" kpx2="46"/>
+ <pair kern="-140" kpx2="101"/>
+ <pair kern="-60" kpx2="59"/>
+ <pair kern="-140" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-20" kpx2="97"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-20" kpx2="101"/>
+ <pair kern="-100" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-120" kpx2="111"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-20" kpx2="58"/>
+ <pair kern="-120" kpx2="119"/>
+ <pair kern="-120" kpx2="114"/>
+ <pair kern="-120" kpx2="44"/>
+ <pair kern="-20" kpx2="59"/>
+ <pair kern="-140" kpx2="45"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-120" kpx2="97"/>
+ <pair kern="-120" kpx2="117"/>
+ <pair kern="-120" kpx2="121"/>
+ <pair kern="-120" kpx2="46"/>
+ <pair kern="-120" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-100" kpx2="148"/>
+ <pair kern="-60" kpx2="32"/>
+ <pair kern="-100" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="-10" kpx2="117"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="-30" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="-20" kpx2="119"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="-30" kpx2="120"/>
+ <pair kern="-30" kpx2="118"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/Symbol.xml b/fop-core/src/main/codegen/fonts/Symbol.xml
new file mode 100644
index 000000000..7493b7e7f
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/Symbol.xml
@@ -0,0 +1,224 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<font-metrics>
+ <font-name>Symbol</font-name>
+ <full-name>Symbol</full-name>
+ <family-name>Symbol</family-name>
+ <class-name>Symbol</class-name>
+ <encoding>SymbolEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>1010</cap-height>
+ <x-height>520</x-height>
+ <ascender>1010</ascender>
+ <descender>-293</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="space" width="250" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="exclam" width="333" llx="128" lly="-17" urx="240" ury="672"/>
+ <char name="universal" width="713" llx="31" lly="0" urx="681" ury="705"/>
+ <char name="numbersign" width="500" llx="20" lly="-16" urx="481" ury="673"/>
+ <char name="existential" width="549" llx="25" lly="0" urx="478" ury="707"/>
+ <char name="percent" width="833" llx="63" lly="-36" urx="771" ury="655"/>
+ <char name="ampersand" width="778" llx="41" lly="-18" urx="750" ury="661"/>
+ <char name="suchthat" width="439" llx="48" lly="-17" urx="414" ury="500"/>
+ <char name="parenleft" width="333" llx="53" lly="-191" urx="300" ury="673"/>
+ <char name="parenright" width="333" llx="30" lly="-191" urx="277" ury="673"/>
+ <char name="asteriskmath" width="500" llx="65" lly="134" urx="427" ury="551"/>
+ <char name="plus" width="549" llx="10" lly="0" urx="539" ury="533"/>
+ <char name="comma" width="250" llx="56" lly="-152" urx="194" ury="104"/>
+ <char name="minus" width="549" llx="11" lly="233" urx="535" ury="288"/>
+ <char name="period" width="250" llx="69" lly="-17" urx="181" ury="95"/>
+ <char name="slash" width="278" llx="0" lly="-18" urx="254" ury="646"/>
+ <char name="zero" width="500" llx="24" lly="-14" urx="476" ury="685"/>
+ <char name="one" width="500" llx="117" lly="0" urx="390" ury="673"/>
+ <char name="two" width="500" llx="25" lly="0" urx="475" ury="685"/>
+ <char name="three" width="500" llx="43" lly="-14" urx="435" ury="685"/>
+ <char name="four" width="500" llx="15" lly="0" urx="469" ury="685"/>
+ <char name="five" width="500" llx="32" lly="-14" urx="445" ury="690"/>
+ <char name="six" width="500" llx="34" lly="-14" urx="468" ury="685"/>
+ <char name="seven" width="500" llx="24" lly="-16" urx="448" ury="673"/>
+ <char name="eight" width="500" llx="56" lly="-14" urx="445" ury="685"/>
+ <char name="nine" width="500" llx="30" lly="-18" urx="459" ury="685"/>
+ <char name="colon" width="278" llx="81" lly="-17" urx="193" ury="460"/>
+ <char name="semicolon" width="278" llx="83" lly="-152" urx="221" ury="460"/>
+ <char name="less" width="549" llx="26" lly="0" urx="523" ury="522"/>
+ <char name="equal" width="549" llx="11" lly="141" urx="537" ury="390"/>
+ <char name="greater" width="549" llx="26" lly="0" urx="523" ury="522"/>
+ <char name="question" width="444" llx="70" lly="-17" urx="412" ury="686"/>
+ <char name="congruent" width="549" llx="11" lly="0" urx="537" ury="475"/>
+ <char name="Alpha" width="722" llx="4" lly="0" urx="684" ury="673"/>
+ <char name="Beta" width="667" llx="29" lly="0" urx="592" ury="673"/>
+ <char name="Chi" width="722" llx="-9" lly="0" urx="704" ury="673"/>
+ <char name="Delta" width="612" llx="6" lly="0" urx="608" ury="688"/>
+ <char name="Epsilon" width="611" llx="32" lly="0" urx="617" ury="673"/>
+ <char name="Phi" width="763" llx="26" lly="0" urx="741" ury="673"/>
+ <char name="Gamma" width="603" llx="24" lly="0" urx="609" ury="673"/>
+ <char name="Eta" width="722" llx="39" lly="0" urx="729" ury="673"/>
+ <char name="Iota" width="333" llx="32" lly="0" urx="316" ury="673"/>
+ <char name="theta1" width="631" llx="18" lly="-18" urx="623" ury="689"/>
+ <char name="Kappa" width="722" llx="35" lly="0" urx="722" ury="673"/>
+ <char name="Lambda" width="686" llx="6" lly="0" urx="680" ury="688"/>
+ <char name="Mu" width="889" llx="28" lly="0" urx="887" ury="673"/>
+ <char name="Nu" width="722" llx="29" lly="-8" urx="720" ury="673"/>
+ <char name="Omicron" width="722" llx="41" lly="-17" urx="715" ury="685"/>
+ <char name="Pi" width="768" llx="25" lly="0" urx="745" ury="673"/>
+ <char name="Theta" width="741" llx="41" lly="-17" urx="715" ury="685"/>
+ <char name="Rho" width="556" llx="28" lly="0" urx="563" ury="673"/>
+ <char name="Sigma" width="592" llx="5" lly="0" urx="589" ury="673"/>
+ <char name="Tau" width="611" llx="33" lly="0" urx="607" ury="673"/>
+ <char name="Upsilon" width="690" llx="-8" lly="0" urx="694" ury="673"/>
+ <char name="sigma1" width="439" llx="40" lly="-233" urx="436" ury="500"/>
+ <char name="Omega" width="768" llx="34" lly="0" urx="736" ury="688"/>
+ <char name="Xi" width="645" llx="40" lly="0" urx="599" ury="673"/>
+ <char name="Psi" width="795" llx="15" lly="0" urx="781" ury="684"/>
+ <char name="Zeta" width="611" llx="44" lly="0" urx="636" ury="673"/>
+ <char name="bracketleft" width="333" llx="86" lly="-155" urx="299" ury="674"/>
+ <char name="therefore" width="863" llx="163" lly="0" urx="701" ury="487"/>
+ <char name="bracketright" width="333" llx="33" lly="-155" urx="246" ury="674"/>
+ <char name="perpendicular" width="658" llx="15" lly="0" urx="652" ury="674"/>
+ <char name="underscore" width="500" llx="-2" lly="-125" urx="502" ury="-75"/>
+ <char name="radicalex" width="500" llx="480" lly="881" urx="1090" ury="917"/>
+ <char name="alpha" width="631" llx="41" lly="-18" urx="622" ury="500"/>
+ <char name="beta" width="549" llx="61" lly="-223" urx="515" ury="741"/>
+ <char name="chi" width="549" llx="12" lly="-231" urx="522" ury="499"/>
+ <char name="delta" width="494" llx="40" lly="-19" urx="481" ury="740"/>
+ <char name="epsilon" width="439" llx="22" lly="-19" urx="427" ury="502"/>
+ <char name="phi" width="521" llx="28" lly="-224" urx="492" ury="673"/>
+ <char name="gamma" width="411" llx="5" lly="-225" urx="484" ury="499"/>
+ <char name="eta" width="603" llx="0" lly="-202" urx="527" ury="514"/>
+ <char name="iota" width="329" llx="0" lly="-17" urx="301" ury="503"/>
+ <char name="phi1" width="603" llx="36" lly="-224" urx="587" ury="499"/>
+ <char name="kappa" width="549" llx="33" lly="0" urx="558" ury="501"/>
+ <char name="lambda" width="549" llx="24" lly="-17" urx="548" ury="739"/>
+ <char name="mu" width="576" llx="33" lly="-223" urx="567" ury="500"/>
+ <char name="nu" width="521" llx="-9" lly="-16" urx="475" ury="507"/>
+ <char name="omicron" width="549" llx="35" lly="-19" urx="501" ury="499"/>
+ <char name="pi" width="549" llx="10" lly="-19" urx="530" ury="487"/>
+ <char name="theta" width="521" llx="43" lly="-17" urx="485" ury="690"/>
+ <char name="rho" width="549" llx="50" lly="-230" urx="490" ury="499"/>
+ <char name="sigma" width="603" llx="30" lly="-21" urx="588" ury="500"/>
+ <char name="tau" width="439" llx="10" lly="-19" urx="418" ury="500"/>
+ <char name="upsilon" width="576" llx="7" lly="-18" urx="535" ury="507"/>
+ <char name="omega1" width="713" llx="12" lly="-18" urx="671" ury="583"/>
+ <char name="omega" width="686" llx="42" lly="-17" urx="684" ury="500"/>
+ <char name="xi" width="493" llx="27" lly="-224" urx="469" ury="766"/>
+ <char name="psi" width="686" llx="12" lly="-228" urx="701" ury="500"/>
+ <char name="zeta" width="494" llx="60" lly="-225" urx="467" ury="756"/>
+ <char name="braceleft" width="480" llx="58" lly="-183" urx="397" ury="673"/>
+ <char name="bar" width="200" llx="65" lly="-293" urx="135" ury="707"/>
+ <char name="braceright" width="480" llx="79" lly="-183" urx="418" ury="673"/>
+ <char name="similar" width="549" llx="17" lly="203" urx="529" ury="307"/>
+ <char name="Euro" width="750" llx="20" lly="-12" urx="714" ury="685"/>
+ <char name="Upsilon1" width="620" llx="-2" lly="0" urx="610" ury="685"/>
+ <char name="minute" width="247" llx="27" lly="459" urx="228" ury="735"/>
+ <char name="lessequal" width="549" llx="29" lly="0" urx="526" ury="639"/>
+ <char name="fraction" width="167" llx="-180" lly="-12" urx="340" ury="677"/>
+ <char name="infinity" width="713" llx="26" lly="124" urx="688" ury="404"/>
+ <char name="florin" width="500" llx="2" lly="-193" urx="494" ury="686"/>
+ <char name="club" width="753" llx="86" lly="-26" urx="660" ury="533"/>
+ <char name="diamond" width="753" llx="142" lly="-36" urx="600" ury="550"/>
+ <char name="heart" width="753" llx="117" lly="-33" urx="631" ury="532"/>
+ <char name="spade" width="753" llx="113" lly="-36" urx="629" ury="548"/>
+ <char name="arrowboth" width="1042" llx="24" lly="-15" urx="1024" ury="511"/>
+ <char name="arrowleft" width="987" llx="32" lly="-15" urx="942" ury="511"/>
+ <char name="arrowup" width="603" llx="45" lly="0" urx="571" ury="910"/>
+ <char name="arrowright" width="987" llx="49" lly="-15" urx="959" ury="511"/>
+ <char name="arrowdown" width="603" llx="45" lly="-22" urx="571" ury="888"/>
+ <char name="degree" width="400" llx="50" lly="385" urx="350" ury="685"/>
+ <char name="plusminus" width="549" llx="10" lly="0" urx="539" ury="645"/>
+ <char name="second" width="411" llx="20" lly="459" urx="413" ury="737"/>
+ <char name="greaterequal" width="549" llx="29" lly="0" urx="526" ury="639"/>
+ <char name="multiply" width="549" llx="17" lly="8" urx="533" ury="524"/>
+ <char name="proportional" width="713" llx="27" lly="123" urx="639" ury="404"/>
+ <char name="partialdiff" width="494" llx="26" lly="-20" urx="462" ury="746"/>
+ <char name="bullet" width="460" llx="50" lly="113" urx="410" ury="473"/>
+ <char name="divide" width="549" llx="10" lly="71" urx="536" ury="456"/>
+ <char name="notequal" width="549" llx="15" lly="-25" urx="540" ury="549"/>
+ <char name="equivalence" width="549" llx="14" lly="82" urx="538" ury="443"/>
+ <char name="approxequal" width="549" llx="14" lly="135" urx="527" ury="394"/>
+ <char name="ellipsis" width="1000" llx="111" lly="-17" urx="889" ury="95"/>
+ <char name="arrowvertex" width="603" llx="280" lly="-120" urx="336" ury="1010"/>
+ <char name="arrowhorizex" width="1000" llx="-60" lly="220" urx="1050" ury="276"/>
+ <char name="carriagereturn" width="658" llx="15" lly="-16" urx="602" ury="629"/>
+ <char name="aleph" width="823" llx="175" lly="-18" urx="661" ury="658"/>
+ <char name="Ifraktur" width="686" llx="10" lly="-53" urx="578" ury="740"/>
+ <char name="Rfraktur" width="795" llx="26" lly="-15" urx="759" ury="734"/>
+ <char name="weierstrass" width="987" llx="159" lly="-211" urx="870" ury="573"/>
+ <char name="circlemultiply" width="768" llx="43" lly="-17" urx="733" ury="673"/>
+ <char name="circleplus" width="768" llx="43" lly="-15" urx="733" ury="675"/>
+ <char name="emptyset" width="823" llx="39" lly="-24" urx="781" ury="719"/>
+ <char name="intersection" width="768" llx="40" lly="0" urx="732" ury="509"/>
+ <char name="union" width="768" llx="40" lly="-17" urx="732" ury="492"/>
+ <char name="propersuperset" width="713" llx="20" lly="0" urx="673" ury="470"/>
+ <char name="reflexsuperset" width="713" llx="20" lly="-125" urx="673" ury="470"/>
+ <char name="notsubset" width="713" llx="36" lly="-70" urx="690" ury="540"/>
+ <char name="propersubset" width="713" llx="37" lly="0" urx="690" ury="470"/>
+ <char name="reflexsubset" width="713" llx="37" lly="-125" urx="690" ury="470"/>
+ <char name="element" width="713" llx="45" lly="0" urx="505" ury="468"/>
+ <char name="notelement" width="713" llx="45" lly="-58" urx="505" ury="555"/>
+ <char name="angle" width="768" llx="26" lly="0" urx="738" ury="673"/>
+ <char name="gradient" width="713" llx="36" lly="-19" urx="681" ury="718"/>
+ <char name="registerserif" width="790" llx="50" lly="-17" urx="740" ury="673"/>
+ <char name="copyrightserif" width="790" llx="51" lly="-15" urx="741" ury="675"/>
+ <char name="trademarkserif" width="890" llx="18" lly="293" urx="855" ury="673"/>
+ <char name="product" width="823" llx="25" lly="-101" urx="803" ury="751"/>
+ <char name="radical" width="549" llx="10" lly="-38" urx="515" ury="917"/>
+ <char name="dotmath" width="250" llx="69" lly="210" urx="169" ury="310"/>
+ <char name="logicalnot" width="713" llx="15" lly="0" urx="680" ury="288"/>
+ <char name="logicaland" width="603" llx="23" lly="0" urx="583" ury="454"/>
+ <char name="logicalor" width="603" llx="30" lly="0" urx="578" ury="477"/>
+ <char name="arrowdblboth" width="1042" llx="27" lly="-20" urx="1023" ury="510"/>
+ <char name="arrowdblleft" width="987" llx="30" lly="-15" urx="939" ury="513"/>
+ <char name="arrowdblup" width="603" llx="39" lly="2" urx="567" ury="911"/>
+ <char name="arrowdblright" width="987" llx="45" lly="-20" urx="954" ury="508"/>
+ <char name="arrowdbldown" width="603" llx="44" lly="-19" urx="572" ury="890"/>
+ <char name="lozenge" width="494" llx="18" lly="0" urx="466" ury="745"/>
+ <char name="angleleft" width="329" llx="25" lly="-198" urx="306" ury="746"/>
+ <char name="registersans" width="790" llx="50" lly="-20" urx="740" ury="670"/>
+ <char name="copyrightsans" width="790" llx="49" lly="-15" urx="739" ury="675"/>
+ <char name="trademarksans" width="786" llx="5" lly="293" urx="725" ury="673"/>
+ <char name="summation" width="713" llx="14" lly="-108" urx="695" ury="752"/>
+ <char name="parenlefttp" width="384" llx="24" lly="-293" urx="436" ury="926"/>
+ <char name="parenleftex" width="384" llx="24" lly="-85" urx="108" ury="925"/>
+ <char name="parenleftbt" width="384" llx="24" lly="-293" urx="436" ury="926"/>
+ <char name="bracketlefttp" width="384" llx="0" lly="-80" urx="349" ury="926"/>
+ <char name="bracketleftex" width="384" llx="0" lly="-79" urx="77" ury="925"/>
+ <char name="bracketleftbt" width="384" llx="0" lly="-80" urx="349" ury="926"/>
+ <char name="bracelefttp" width="494" llx="209" lly="-85" urx="445" ury="925"/>
+ <char name="braceleftmid" width="494" llx="20" lly="-85" urx="284" ury="935"/>
+ <char name="braceleftbt" width="494" llx="209" lly="-75" urx="445" ury="935"/>
+ <char name="braceex" width="494" llx="209" lly="-85" urx="284" ury="935"/>
+ <char name="angleright" width="329" llx="21" lly="-198" urx="302" ury="746"/>
+ <char name="integral" width="274" llx="2" lly="-107" urx="291" ury="916"/>
+ <char name="integraltp" width="686" llx="308" lly="-88" urx="675" ury="920"/>
+ <char name="integralex" width="686" llx="308" lly="-88" urx="378" ury="975"/>
+ <char name="integralbt" width="686" llx="11" lly="-87" urx="378" ury="921"/>
+ <char name="parenrighttp" width="384" llx="54" lly="-293" urx="466" ury="926"/>
+ <char name="parenrightex" width="384" llx="382" lly="-85" urx="466" ury="925"/>
+ <char name="parenrightbt" width="384" llx="54" lly="-293" urx="466" ury="926"/>
+ <char name="bracketrighttp" width="384" llx="22" lly="-80" urx="371" ury="926"/>
+ <char name="bracketrightex" width="384" llx="294" lly="-79" urx="371" ury="925"/>
+ <char name="bracketrightbt" width="384" llx="22" lly="-80" urx="371" ury="926"/>
+ <char name="bracerighttp" width="494" llx="48" lly="-85" urx="284" ury="925"/>
+ <char name="bracerightmid" width="494" llx="209" lly="-85" urx="473" ury="935"/>
+ <char name="bracerightbt" width="494" llx="48" lly="-75" urx="284" ury="935"/>
+ <char name="apple" width="790" llx="56" lly="-3" urx="733" ury="808"/>
+ </char-metrics>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/TimesBold.xml b/fop-core/src/main/codegen/fonts/TimesBold.xml
new file mode 100644
index 000000000..ef5d6bcc0
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/TimesBold.xml
@@ -0,0 +1,645 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-Bold</font-name>
+ <full-name>Times Bold</full-name>
+ <family-name>Times</family-name>
+ <class-name>TimesBold</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>676</cap-height>
+ <x-height>461</x-height>
+ <ascender>676</ascender>
+ <descender>-205</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="722" llx="9" lly="0" urx="689" ury="690"/>
+ <char name="AE" width="1000" llx="4" lly="0" urx="951" ury="676"/>
+ <char name="Aacute" width="722" llx="9" lly="0" urx="689" ury="923"/>
+ <char name="Acircumflex" width="722" llx="9" lly="0" urx="689" ury="914"/>
+ <char name="Adieresis" width="722" llx="9" lly="0" urx="689" ury="877"/>
+ <char name="Agrave" width="722" llx="9" lly="0" urx="689" ury="923"/>
+ <char name="Aring" width="722" llx="9" lly="0" urx="689" ury="935"/>
+ <char name="Atilde" width="722" llx="9" lly="0" urx="689" ury="884"/>
+ <char name="B" width="667" llx="16" lly="0" urx="619" ury="676"/>
+ <char name="C" width="722" llx="49" lly="-19" urx="687" ury="691"/>
+ <char name="Ccedilla" width="722" llx="49" lly="-218" urx="687" ury="691"/>
+ <char name="D" width="722" llx="14" lly="0" urx="690" ury="676"/>
+ <char name="E" width="667" llx="16" lly="0" urx="641" ury="676"/>
+ <char name="Eacute" width="667" llx="16" lly="0" urx="641" ury="923"/>
+ <char name="Ecircumflex" width="667" llx="16" lly="0" urx="641" ury="914"/>
+ <char name="Edieresis" width="667" llx="16" lly="0" urx="641" ury="877"/>
+ <char name="Egrave" width="667" llx="16" lly="0" urx="641" ury="923"/>
+ <char name="Eth" width="722" llx="6" lly="0" urx="690" ury="676"/>
+ <char name="Euro" width="500" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="611" llx="16" lly="0" urx="583" ury="676"/>
+ <char name="G" width="778" llx="37" lly="-19" urx="755" ury="691"/>
+ <char name="H" width="778" llx="21" lly="0" urx="759" ury="676"/>
+ <char name="I" width="389" llx="20" lly="0" urx="370" ury="676"/>
+ <char name="Iacute" width="389" llx="20" lly="0" urx="370" ury="923"/>
+ <char name="Icircumflex" width="389" llx="20" lly="0" urx="370" ury="914"/>
+ <char name="Idieresis" width="389" llx="20" lly="0" urx="370" ury="877"/>
+ <char name="Igrave" width="389" llx="20" lly="0" urx="370" ury="923"/>
+ <char name="J" width="500" llx="3" lly="-96" urx="479" ury="676"/>
+ <char name="K" width="778" llx="30" lly="0" urx="769" ury="676"/>
+ <char name="L" width="667" llx="19" lly="0" urx="638" ury="676"/>
+ <char name="Lslash" width="667" llx="19" lly="0" urx="638" ury="676"/>
+ <char name="M" width="944" llx="14" lly="0" urx="921" ury="676"/>
+ <char name="N" width="722" llx="16" lly="-18" urx="701" ury="676"/>
+ <char name="Ntilde" width="722" llx="16" lly="-18" urx="701" ury="884"/>
+ <char name="O" width="778" llx="35" lly="-19" urx="743" ury="691"/>
+ <char name="OE" width="1000" llx="22" lly="-5" urx="981" ury="684"/>
+ <char name="Oacute" width="778" llx="35" lly="-19" urx="743" ury="923"/>
+ <char name="Ocircumflex" width="778" llx="35" lly="-19" urx="743" ury="914"/>
+ <char name="Odieresis" width="778" llx="35" lly="-19" urx="743" ury="877"/>
+ <char name="Ograve" width="778" llx="35" lly="-19" urx="743" ury="923"/>
+ <char name="Oslash" width="778" llx="35" lly="-74" urx="743" ury="737"/>
+ <char name="Otilde" width="778" llx="35" lly="-19" urx="743" ury="884"/>
+ <char name="P" width="611" llx="16" lly="0" urx="600" ury="676"/>
+ <char name="Q" width="778" llx="35" lly="-176" urx="743" ury="691"/>
+ <char name="R" width="722" llx="26" lly="0" urx="715" ury="676"/>
+ <char name="S" width="556" llx="35" lly="-19" urx="513" ury="692"/>
+ <char name="Scaron" width="556" llx="35" lly="-19" urx="513" ury="914"/>
+ <char name="T" width="667" llx="31" lly="0" urx="636" ury="676"/>
+ <char name="Thorn" width="611" llx="16" lly="0" urx="600" ury="676"/>
+ <char name="U" width="722" llx="16" lly="-19" urx="701" ury="676"/>
+ <char name="Uacute" width="722" llx="16" lly="-19" urx="701" ury="923"/>
+ <char name="Ucircumflex" width="722" llx="16" lly="-19" urx="701" ury="914"/>
+ <char name="Udieresis" width="722" llx="16" lly="-19" urx="701" ury="877"/>
+ <char name="Ugrave" width="722" llx="16" lly="-19" urx="701" ury="923"/>
+ <char name="V" width="722" llx="16" lly="-18" urx="701" ury="676"/>
+ <char name="W" width="1000" llx="19" lly="-15" urx="981" ury="676"/>
+ <char name="X" width="722" llx="16" lly="0" urx="699" ury="676"/>
+ <char name="Y" width="722" llx="15" lly="0" urx="699" ury="676"/>
+ <char name="Yacute" width="722" llx="15" lly="0" urx="699" ury="923"/>
+ <char name="Ydieresis" width="722" llx="15" lly="0" urx="699" ury="877"/>
+ <char name="Z" width="667" llx="28" lly="0" urx="634" ury="676"/>
+ <char name="Zcaron" width="667" llx="28" lly="0" urx="634" ury="914"/>
+ <char name="a" width="500" llx="25" lly="-14" urx="488" ury="473"/>
+ <char name="aacute" width="500" llx="25" lly="-14" urx="488" ury="713"/>
+ <char name="acircumflex" width="500" llx="25" lly="-14" urx="488" ury="704"/>
+ <char name="acute" width="333" llx="86" lly="528" urx="324" ury="713"/>
+ <char name="adieresis" width="500" llx="25" lly="-14" urx="488" ury="667"/>
+ <char name="ae" width="722" llx="33" lly="-14" urx="693" ury="473"/>
+ <char name="agrave" width="500" llx="25" lly="-14" urx="488" ury="713"/>
+ <char name="ampersand" width="833" llx="62" lly="-16" urx="787" ury="691"/>
+ <char name="aring" width="500" llx="25" lly="-14" urx="488" ury="740"/>
+ <char name="asciicircum" width="581" llx="73" lly="311" urx="509" ury="676"/>
+ <char name="asciitilde" width="520" llx="29" lly="173" urx="491" ury="333"/>
+ <char name="asterisk" width="500" llx="56" lly="255" urx="447" ury="691"/>
+ <char name="at" width="930" llx="108" lly="-19" urx="822" ury="691"/>
+ <char name="atilde" width="500" llx="25" lly="-14" urx="488" ury="674"/>
+ <char name="b" width="556" llx="17" lly="-14" urx="521" ury="676"/>
+ <char name="backslash" width="278" llx="-25" lly="-19" urx="303" ury="691"/>
+ <char name="bar" width="220" llx="66" lly="-218" urx="154" ury="782"/>
+ <char name="braceleft" width="394" llx="22" lly="-175" urx="340" ury="698"/>
+ <char name="braceright" width="394" llx="54" lly="-175" urx="372" ury="698"/>
+ <char name="bracketleft" width="333" llx="67" lly="-149" urx="301" ury="678"/>
+ <char name="bracketright" width="333" llx="32" lly="-149" urx="266" ury="678"/>
+ <char name="breve" width="333" llx="15" lly="528" urx="318" ury="691"/>
+ <char name="brokenbar" width="220" llx="66" lly="-143" urx="154" ury="707"/>
+ <char name="bullet" width="350" llx="35" lly="198" urx="315" ury="478"/>
+ <char name="c" width="444" llx="25" lly="-14" urx="430" ury="473"/>
+ <char name="caron" width="333" llx="-2" lly="528" urx="335" ury="704"/>
+ <char name="ccedilla" width="444" llx="25" lly="-218" urx="430" ury="473"/>
+ <char name="cedilla" width="333" llx="68" lly="-218" urx="294" ury="0"/>
+ <char name="cent" width="500" llx="53" lly="-140" urx="458" ury="588"/>
+ <char name="circumflex" width="333" llx="-2" lly="528" urx="335" ury="704"/>
+ <char name="colon" width="333" llx="82" lly="-13" urx="251" ury="472"/>
+ <char name="comma" width="250" llx="39" lly="-180" urx="223" ury="155"/>
+ <char name="copyright" width="747" llx="26" lly="-19" urx="721" ury="691"/>
+ <char name="currency" width="500" llx="-26" lly="61" urx="526" ury="613"/>
+ <char name="d" width="556" llx="25" lly="-14" urx="534" ury="676"/>
+ <char name="dagger" width="500" llx="47" lly="-134" urx="453" ury="691"/>
+ <char name="daggerdbl" width="500" llx="45" lly="-132" urx="456" ury="691"/>
+ <char name="degree" width="400" llx="57" lly="402" urx="343" ury="688"/>
+ <char name="dieresis" width="333" llx="-2" lly="537" urx="335" ury="667"/>
+ <char name="divide" width="570" llx="33" lly="-31" urx="537" ury="537"/>
+ <char name="dollar" width="500" llx="29" lly="-99" urx="472" ury="750"/>
+ <char name="dotaccent" width="333" llx="103" lly="536" urx="258" ury="691"/>
+ <char name="dotlessi" width="278" llx="16" lly="0" urx="255" ury="461"/>
+ <char name="e" width="444" llx="25" lly="-14" urx="426" ury="473"/>
+ <char name="eacute" width="444" llx="25" lly="-14" urx="426" ury="713"/>
+ <char name="ecircumflex" width="444" llx="25" lly="-14" urx="426" ury="704"/>
+ <char name="edieresis" width="444" llx="25" lly="-14" urx="426" ury="667"/>
+ <char name="egrave" width="444" llx="25" lly="-14" urx="426" ury="713"/>
+ <char name="eight" width="500" llx="28" lly="-13" urx="472" ury="688"/>
+ <char name="ellipsis" width="1000" llx="82" lly="-13" urx="917" ury="156"/>
+ <char name="emdash" width="1000" llx="0" lly="181" urx="1000" ury="271"/>
+ <char name="endash" width="500" llx="0" lly="181" urx="500" ury="271"/>
+ <char name="equal" width="570" llx="33" lly="107" urx="537" ury="399"/>
+ <char name="eth" width="500" llx="25" lly="-14" urx="476" ury="691"/>
+ <char name="exclam" width="333" llx="81" lly="-13" urx="251" ury="691"/>
+ <char name="exclamdown" width="333" llx="82" lly="-203" urx="252" ury="501"/>
+ <char name="f" width="333" llx="14" lly="0" urx="389" ury="691"/>
+ <char name="fi" width="556" llx="14" lly="0" urx="536" ury="691"/>
+ <char name="five" width="500" llx="22" lly="-8" urx="470" ury="676"/>
+ <char name="fl" width="556" llx="14" lly="0" urx="536" ury="691"/>
+ <char name="florin" width="500" llx="0" lly="-155" urx="498" ury="706"/>
+ <char name="four" width="500" llx="19" lly="0" urx="475" ury="688"/>
+ <char name="fraction" width="167" llx="-168" lly="-12" urx="329" ury="688"/>
+ <char name="g" width="500" llx="28" lly="-206" urx="483" ury="473"/>
+ <char name="germandbls" width="556" llx="19" lly="-12" urx="517" ury="691"/>
+ <char name="grave" width="333" llx="8" lly="528" urx="246" ury="713"/>
+ <char name="greater" width="570" llx="31" lly="-8" urx="539" ury="514"/>
+ <char name="guillemotleft" width="500" llx="23" lly="36" urx="473" ury="415"/>
+ <char name="guillemotright" width="500" llx="27" lly="36" urx="477" ury="415"/>
+ <char name="guilsinglleft" width="333" llx="51" lly="36" urx="305" ury="415"/>
+ <char name="guilsinglright" width="333" llx="28" lly="36" urx="282" ury="415"/>
+ <char name="h" width="556" llx="16" lly="0" urx="534" ury="676"/>
+ <char name="hungarumlaut" width="333" llx="-13" lly="528" urx="425" ury="713"/>
+ <char name="hyphen" width="333" llx="44" lly="171" urx="287" ury="287"/>
+ <char name="i" width="278" llx="16" lly="0" urx="255" ury="691"/>
+ <char name="iacute" width="278" llx="16" lly="0" urx="289" ury="713"/>
+ <char name="icircumflex" width="278" llx="-37" lly="0" urx="300" ury="704"/>
+ <char name="idieresis" width="278" llx="-37" lly="0" urx="300" ury="667"/>
+ <char name="igrave" width="278" llx="-27" lly="0" urx="255" ury="713"/>
+ <char name="j" width="333" llx="-57" lly="-203" urx="263" ury="691"/>
+ <char name="k" width="556" llx="22" lly="0" urx="543" ury="676"/>
+ <char name="l" width="278" llx="16" lly="0" urx="255" ury="676"/>
+ <char name="less" width="570" llx="31" lly="-8" urx="539" ury="514"/>
+ <char name="logicalnot" width="570" llx="33" lly="108" urx="537" ury="399"/>
+ <char name="lslash" width="278" llx="-22" lly="0" urx="303" ury="676"/>
+ <char name="m" width="833" llx="16" lly="0" urx="814" ury="473"/>
+ <char name="macron" width="333" llx="1" lly="565" urx="331" ury="637"/>
+ <char name="minus" width="324" llx="33" lly="209" urx="537" ury="297"/>
+ <char name="mu" width="556" llx="33" lly="-206" urx="536" ury="461"/>
+ <char name="multiply" width="570" llx="48" lly="16" urx="522" ury="490"/>
+ <char name="n" width="556" llx="21" lly="0" urx="539" ury="473"/>
+ <char name="nine" width="500" llx="26" lly="-13" urx="473" ury="688"/>
+ <char name="ntilde" width="556" llx="21" lly="0" urx="539" ury="674"/>
+ <char name="numbersign" width="500" llx="4" lly="0" urx="496" ury="700"/>
+ <char name="o" width="500" llx="25" lly="-14" urx="476" ury="473"/>
+ <char name="oacute" width="500" llx="25" lly="-14" urx="476" ury="713"/>
+ <char name="ocircumflex" width="500" llx="25" lly="-14" urx="476" ury="704"/>
+ <char name="odieresis" width="500" llx="25" lly="-14" urx="476" ury="667"/>
+ <char name="oe" width="722" llx="22" lly="-14" urx="696" ury="473"/>
+ <char name="ogonek" width="333" llx="90" lly="-193" urx="319" ury="24"/>
+ <char name="ograve" width="500" llx="25" lly="-14" urx="476" ury="713"/>
+ <char name="one" width="500" llx="65" lly="0" urx="442" ury="688"/>
+ <char name="onehalf" width="750" llx="-7" lly="-12" urx="775" ury="688"/>
+ <char name="onequarter" width="750" llx="28" lly="-12" urx="743" ury="688"/>
+ <char name="onesuperior" width="300" llx="28" lly="275" urx="273" ury="688"/>
+ <char name="ordfeminine" width="300" llx="-1" lly="397" urx="301" ury="688"/>
+ <char name="ordmasculine" width="330" llx="18" lly="397" urx="312" ury="688"/>
+ <char name="oslash" width="500" llx="25" lly="-92" urx="476" ury="549"/>
+ <char name="otilde" width="500" llx="25" lly="-14" urx="476" ury="674"/>
+ <char name="p" width="556" llx="19" lly="-205" urx="524" ury="473"/>
+ <char name="paragraph" width="540" llx="0" lly="-186" urx="519" ury="676"/>
+ <char name="parenleft" width="333" llx="46" lly="-168" urx="306" ury="694"/>
+ <char name="parenright" width="333" llx="27" lly="-168" urx="287" ury="694"/>
+ <char name="percent" width="1000" llx="124" lly="-14" urx="877" ury="692"/>
+ <char name="period" width="250" llx="41" lly="-13" urx="210" ury="156"/>
+ <char name="periodcentered" width="250" llx="41" lly="248" urx="210" ury="417"/>
+ <char name="perthousand" width="1000" llx="7" lly="-29" urx="995" ury="706"/>
+ <char name="plus" width="570" llx="33" lly="0" urx="537" ury="506"/>
+ <char name="plusminus" width="570" llx="33" lly="0" urx="537" ury="506"/>
+ <char name="q" width="556" llx="34" lly="-205" urx="536" ury="473"/>
+ <char name="question" width="500" llx="57" lly="-13" urx="445" ury="689"/>
+ <char name="questiondown" width="500" llx="55" lly="-201" urx="443" ury="501"/>
+ <char name="quotedbl" width="555" llx="83" lly="404" urx="472" ury="691"/>
+ <char name="quotedblbase" width="500" llx="14" lly="-180" urx="468" ury="155"/>
+ <char name="quotedblleft" width="500" llx="32" lly="356" urx="486" ury="691"/>
+ <char name="quotedblright" width="500" llx="14" lly="356" urx="468" ury="691"/>
+ <char name="quoteleft" width="333" llx="70" lly="356" urx="254" ury="691"/>
+ <char name="quoteright" width="333" llx="79" lly="356" urx="263" ury="691"/>
+ <char name="quotesinglbase" width="333" llx="79" lly="-180" urx="263" ury="155"/>
+ <char name="quotesingle" width="278" llx="75" lly="404" urx="204" ury="691"/>
+ <char name="r" width="444" llx="29" lly="0" urx="434" ury="473"/>
+ <char name="registered" width="747" llx="26" lly="-19" urx="721" ury="691"/>
+ <char name="ring" width="333" llx="60" lly="527" urx="273" ury="740"/>
+ <char name="s" width="389" llx="25" lly="-14" urx="361" ury="473"/>
+ <char name="scaron" width="389" llx="25" lly="-14" urx="363" ury="704"/>
+ <char name="section" width="500" llx="57" lly="-132" urx="443" ury="691"/>
+ <char name="semicolon" width="333" llx="82" lly="-180" urx="266" ury="472"/>
+ <char name="seven" width="500" llx="17" lly="0" urx="477" ury="676"/>
+ <char name="six" width="500" llx="28" lly="-13" urx="475" ury="688"/>
+ <char name="slash" width="278" llx="-24" lly="-19" urx="302" ury="691"/>
+ <char name="space" width="250" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="500" llx="21" lly="-14" urx="477" ury="684"/>
+ <char name="t" width="333" llx="20" lly="-12" urx="332" ury="630"/>
+ <char name="thorn" width="556" llx="19" lly="-205" urx="524" ury="676"/>
+ <char name="three" width="500" llx="16" lly="-14" urx="468" ury="688"/>
+ <char name="threequarters" width="750" llx="23" lly="-12" urx="733" ury="688"/>
+ <char name="threesuperior" width="300" llx="3" lly="268" urx="297" ury="688"/>
+ <char name="tilde" width="333" llx="-16" lly="547" urx="349" ury="674"/>
+ <char name="trademark" width="1000" llx="24" lly="271" urx="977" ury="676"/>
+ <char name="two" width="500" llx="17" lly="0" urx="478" ury="688"/>
+ <char name="twosuperior" width="300" llx="0" lly="275" urx="300" ury="688"/>
+ <char name="u" width="556" llx="16" lly="-14" urx="537" ury="461"/>
+ <char name="uacute" width="556" llx="16" lly="-14" urx="537" ury="713"/>
+ <char name="ucircumflex" width="556" llx="16" lly="-14" urx="537" ury="704"/>
+ <char name="udieresis" width="556" llx="16" lly="-14" urx="537" ury="667"/>
+ <char name="ugrave" width="556" llx="16" lly="-14" urx="537" ury="713"/>
+ <char name="underscore" width="500" llx="0" lly="-125" urx="500" ury="-75"/>
+ <char name="v" width="500" llx="21" lly="-14" urx="485" ury="461"/>
+ <char name="w" width="722" llx="23" lly="-14" urx="707" ury="461"/>
+ <char name="x" width="500" llx="12" lly="0" urx="484" ury="461"/>
+ <char name="y" width="500" llx="16" lly="-205" urx="480" ury="461"/>
+ <char name="yacute" width="500" llx="16" lly="-205" urx="480" ury="713"/>
+ <char name="ydieresis" width="500" llx="16" lly="-205" urx="480" ury="667"/>
+ <char name="yen" width="500" llx="-64" lly="0" urx="547" ury="676"/>
+ <char name="z" width="444" llx="21" lly="0" urx="420" ury="461"/>
+ <char name="zcaron" width="444" llx="21" lly="0" urx="420" ury="704"/>
+ <char name="zero" width="500" llx="24" lly="-13" urx="476" ury="688"/>
+ </char-metrics>
+ <kerning kpx1="79">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-40" kpx2="88"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="107">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="-74" kpx2="65"/>
+ <pair kern="-110" kpx2="46"/>
+ <pair kern="-20" kpx2="101"/>
+ <pair kern="-92" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-100" kpx2="111"/>
+ <pair kern="-45" kpx2="79"/>
+ <pair kern="-92" kpx2="58"/>
+ <pair kern="-30" kpx2="71"/>
+ <pair kern="-129" kpx2="44"/>
+ <pair kern="-92" kpx2="59"/>
+ <pair kern="-74" kpx2="45"/>
+ <pair kern="-37" kpx2="105"/>
+ <pair kern="-135" kpx2="65"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-92" kpx2="117"/>
+ <pair kern="-145" kpx2="46"/>
+ <pair kern="-100" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="-70" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-55" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-55" kpx2="65"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="0" kpx2="147"/>
+ <pair kern="-55" kpx2="89"/>
+ <pair kern="-30" kpx2="84"/>
+ <pair kern="0" kpx2="145"/>
+ <pair kern="-45" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="-25" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="-25" kpx2="97"/>
+ <pair kern="-90" kpx2="65"/>
+ <pair kern="-110" kpx2="46"/>
+ <pair kern="-25" kpx2="101"/>
+ <pair kern="-92" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-60" kpx2="65"/>
+ <pair kern="-50" kpx2="46"/>
+ <pair kern="-50" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="100">
+ <pair kern="0" kpx2="100"/>
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="83">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-35" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-40" kpx2="89"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-40" kpx2="86"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-20" kpx2="100"/>
+ <pair kern="-74" kpx2="32"/>
+ <pair kern="-63" kpx2="146"/>
+ <pair kern="-20" kpx2="114"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-37" kpx2="115"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-70" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-55" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-15" kpx2="117"/>
+ <pair kern="-45" kpx2="121"/>
+ <pair kern="-25" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-35" kpx2="87"/>
+ <pair kern="-30" kpx2="85"/>
+ <pair kern="-35" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="-55" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="-10" kpx2="65"/>
+ <pair kern="-63" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-30" kpx2="65"/>
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-10" kpx2="98"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-45" kpx2="148"/>
+ <pair kern="0" kpx2="32"/>
+ <pair kern="-55" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="50" kpx2="148"/>
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-25" kpx2="105"/>
+ <pair kern="55" kpx2="146"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="102"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-15" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-92" kpx2="111"/>
+ <pair kern="-18" kpx2="79"/>
+ <pair kern="-74" kpx2="119"/>
+ <pair kern="-74" kpx2="58"/>
+ <pair kern="-74" kpx2="114"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-74" kpx2="44"/>
+ <pair kern="-74" kpx2="59"/>
+ <pair kern="-92" kpx2="45"/>
+ <pair kern="-18" kpx2="105"/>
+ <pair kern="-90" kpx2="65"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-92" kpx2="117"/>
+ <pair kern="-74" kpx2="121"/>
+ <pair kern="-90" kpx2="46"/>
+ <pair kern="-92" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-70" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-55" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="0" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="0" kpx2="107"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-75" kpx2="111"/>
+ <pair kern="-10" kpx2="79"/>
+ <pair kern="-55" kpx2="58"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-92" kpx2="44"/>
+ <pair kern="-55" kpx2="59"/>
+ <pair kern="-37" kpx2="45"/>
+ <pair kern="-18" kpx2="105"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-65" kpx2="97"/>
+ <pair kern="-50" kpx2="117"/>
+ <pair kern="-60" kpx2="121"/>
+ <pair kern="-92" kpx2="46"/>
+ <pair kern="-65" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="-15" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="71">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="105">
+ <pair kern="-10" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-45" kpx2="79"/>
+ <pair kern="-74" kpx2="146"/>
+ <pair kern="-90" kpx2="119"/>
+ <pair kern="-130" kpx2="87"/>
+ <pair kern="-55" kpx2="67"/>
+ <pair kern="-25" kpx2="112"/>
+ <pair kern="-45" kpx2="81"/>
+ <pair kern="-55" kpx2="71"/>
+ <pair kern="-145" kpx2="86"/>
+ <pair kern="-100" kpx2="118"/>
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-50" kpx2="117"/>
+ <pair kern="-100" kpx2="89"/>
+ <pair kern="-74" kpx2="121"/>
+ <pair kern="-95" kpx2="84"/>
+ </kerning>
+ <kerning kpx1="147">
+ <pair kern="-10" kpx2="65"/>
+ <pair kern="0" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="78">
+ <pair kern="-20" kpx2="65"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="0" kpx2="119"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-10" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="120"/>
+ <pair kern="-10" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="-18" kpx2="111"/>
+ <pair kern="0" kpx2="100"/>
+ <pair kern="0" kpx2="107"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="-18" kpx2="99"/>
+ <pair kern="-10" kpx2="112"/>
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-18" kpx2="113"/>
+ <pair kern="-10" kpx2="118"/>
+ <pair kern="-92" kpx2="44"/>
+ <pair kern="-37" kpx2="45"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="109"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-100" kpx2="46"/>
+ <pair kern="-15" kpx2="110"/>
+ <pair kern="0" kpx2="115"/>
+ <pair kern="-18" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="108">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="-20" kpx2="148"/>
+ <pair kern="-110" kpx2="146"/>
+ <pair kern="-92" kpx2="87"/>
+ <pair kern="-92" kpx2="89"/>
+ <pair kern="-55" kpx2="121"/>
+ <pair kern="-92" kpx2="84"/>
+ <pair kern="-92" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-111" kpx2="111"/>
+ <pair kern="-92" kpx2="45"/>
+ <pair kern="-37" kpx2="105"/>
+ <pair kern="-35" kpx2="79"/>
+ <pair kern="-92" kpx2="58"/>
+ <pair kern="-85" kpx2="97"/>
+ <pair kern="-110" kpx2="65"/>
+ <pair kern="-92" kpx2="117"/>
+ <pair kern="-92" kpx2="46"/>
+ <pair kern="-111" kpx2="101"/>
+ <pair kern="-92" kpx2="59"/>
+ <pair kern="-92" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="-15" kpx2="97"/>
+ <pair kern="-30" kpx2="65"/>
+ <pair kern="-15" kpx2="117"/>
+ <pair kern="-20" kpx2="46"/>
+ <pair kern="-15" kpx2="101"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-55" kpx2="148"/>
+ <pair kern="-55" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="118"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/TimesBoldItalic.xml b/fop-core/src/main/codegen/fonts/TimesBoldItalic.xml
new file mode 100644
index 000000000..ec67369f2
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/TimesBoldItalic.xml
@@ -0,0 +1,645 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-BoldItalic</font-name>
+ <full-name>Times Bold Italic</full-name>
+ <family-name>Times</family-name>
+ <class-name>TimesBoldItalic</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>669</cap-height>
+ <x-height>462</x-height>
+ <ascender>699</ascender>
+ <descender>-205</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="667" llx="-67" lly="0" urx="593" ury="683"/>
+ <char name="AE" width="944" llx="-64" lly="0" urx="918" ury="669"/>
+ <char name="Aacute" width="667" llx="-67" lly="0" urx="593" ury="904"/>
+ <char name="Acircumflex" width="667" llx="-67" lly="0" urx="593" ury="897"/>
+ <char name="Adieresis" width="667" llx="-67" lly="0" urx="593" ury="862"/>
+ <char name="Agrave" width="667" llx="-67" lly="0" urx="593" ury="904"/>
+ <char name="Aring" width="667" llx="-67" lly="0" urx="593" ury="921"/>
+ <char name="Atilde" width="667" llx="-67" lly="0" urx="593" ury="862"/>
+ <char name="B" width="667" llx="-24" lly="0" urx="624" ury="669"/>
+ <char name="C" width="667" llx="32" lly="-18" urx="677" ury="685"/>
+ <char name="Ccedilla" width="667" llx="32" lly="-218" urx="677" ury="685"/>
+ <char name="D" width="722" llx="-46" lly="0" urx="685" ury="669"/>
+ <char name="E" width="667" llx="-27" lly="0" urx="653" ury="669"/>
+ <char name="Eacute" width="667" llx="-27" lly="0" urx="653" ury="904"/>
+ <char name="Ecircumflex" width="667" llx="-27" lly="0" urx="653" ury="897"/>
+ <char name="Edieresis" width="667" llx="-27" lly="0" urx="653" ury="862"/>
+ <char name="Egrave" width="667" llx="-27" lly="0" urx="653" ury="904"/>
+ <char name="Eth" width="722" llx="-31" lly="0" urx="700" ury="669"/>
+ <char name="Euro" width="500" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="667" llx="-13" lly="0" urx="660" ury="669"/>
+ <char name="G" width="722" llx="21" lly="-18" urx="706" ury="685"/>
+ <char name="H" width="778" llx="-24" lly="0" urx="799" ury="669"/>
+ <char name="I" width="389" llx="-32" lly="0" urx="406" ury="669"/>
+ <char name="Iacute" width="389" llx="-32" lly="0" urx="432" ury="904"/>
+ <char name="Icircumflex" width="389" llx="-32" lly="0" urx="450" ury="897"/>
+ <char name="Idieresis" width="389" llx="-32" lly="0" urx="450" ury="862"/>
+ <char name="Igrave" width="389" llx="-32" lly="0" urx="406" ury="904"/>
+ <char name="J" width="500" llx="-46" lly="-99" urx="524" ury="669"/>
+ <char name="K" width="667" llx="-21" lly="0" urx="702" ury="669"/>
+ <char name="L" width="611" llx="-22" lly="0" urx="590" ury="669"/>
+ <char name="Lslash" width="611" llx="-22" lly="0" urx="590" ury="669"/>
+ <char name="M" width="889" llx="-29" lly="-12" urx="917" ury="669"/>
+ <char name="N" width="722" llx="-27" lly="-15" urx="748" ury="669"/>
+ <char name="Ntilde" width="722" llx="-27" lly="-15" urx="748" ury="862"/>
+ <char name="O" width="722" llx="27" lly="-18" urx="691" ury="685"/>
+ <char name="OE" width="944" llx="23" lly="-8" urx="946" ury="677"/>
+ <char name="Oacute" width="722" llx="27" lly="-18" urx="691" ury="904"/>
+ <char name="Ocircumflex" width="722" llx="27" lly="-18" urx="691" ury="897"/>
+ <char name="Odieresis" width="722" llx="27" lly="-18" urx="691" ury="862"/>
+ <char name="Ograve" width="722" llx="27" lly="-18" urx="691" ury="904"/>
+ <char name="Oslash" width="722" llx="27" lly="-125" urx="691" ury="764"/>
+ <char name="Otilde" width="722" llx="27" lly="-18" urx="691" ury="862"/>
+ <char name="P" width="611" llx="-27" lly="0" urx="613" ury="669"/>
+ <char name="Q" width="722" llx="27" lly="-208" urx="691" ury="685"/>
+ <char name="R" width="667" llx="-29" lly="0" urx="623" ury="669"/>
+ <char name="S" width="556" llx="2" lly="-18" urx="526" ury="685"/>
+ <char name="Scaron" width="556" llx="2" lly="-18" urx="553" ury="897"/>
+ <char name="T" width="611" llx="50" lly="0" urx="650" ury="669"/>
+ <char name="Thorn" width="611" llx="-27" lly="0" urx="573" ury="669"/>
+ <char name="U" width="722" llx="67" lly="-18" urx="744" ury="669"/>
+ <char name="Uacute" width="722" llx="67" lly="-18" urx="744" ury="904"/>
+ <char name="Ucircumflex" width="722" llx="67" lly="-18" urx="744" ury="897"/>
+ <char name="Udieresis" width="722" llx="67" lly="-18" urx="744" ury="862"/>
+ <char name="Ugrave" width="722" llx="67" lly="-18" urx="744" ury="904"/>
+ <char name="V" width="667" llx="65" lly="-18" urx="715" ury="669"/>
+ <char name="W" width="889" llx="65" lly="-18" urx="940" ury="669"/>
+ <char name="X" width="667" llx="-24" lly="0" urx="694" ury="669"/>
+ <char name="Y" width="611" llx="73" lly="0" urx="659" ury="669"/>
+ <char name="Yacute" width="611" llx="73" lly="0" urx="659" ury="904"/>
+ <char name="Ydieresis" width="611" llx="73" lly="0" urx="659" ury="862"/>
+ <char name="Z" width="611" llx="-11" lly="0" urx="590" ury="669"/>
+ <char name="Zcaron" width="611" llx="-11" lly="0" urx="590" ury="897"/>
+ <char name="a" width="500" llx="-21" lly="-14" urx="455" ury="462"/>
+ <char name="aacute" width="500" llx="-21" lly="-14" urx="463" ury="697"/>
+ <char name="acircumflex" width="500" llx="-21" lly="-14" urx="455" ury="690"/>
+ <char name="acute" width="333" llx="139" lly="516" urx="379" ury="697"/>
+ <char name="adieresis" width="500" llx="-21" lly="-14" urx="476" ury="655"/>
+ <char name="ae" width="722" llx="-5" lly="-13" urx="673" ury="462"/>
+ <char name="agrave" width="500" llx="-21" lly="-14" urx="455" ury="697"/>
+ <char name="ampersand" width="778" llx="5" lly="-19" urx="699" ury="682"/>
+ <char name="aring" width="500" llx="-21" lly="-14" urx="455" ury="729"/>
+ <char name="asciicircum" width="570" llx="67" lly="304" urx="503" ury="669"/>
+ <char name="asciitilde" width="570" llx="54" lly="173" urx="516" ury="333"/>
+ <char name="asterisk" width="500" llx="65" lly="249" urx="456" ury="685"/>
+ <char name="at" width="832" llx="63" lly="-18" urx="770" ury="685"/>
+ <char name="atilde" width="500" llx="-21" lly="-14" urx="491" ury="655"/>
+ <char name="b" width="500" llx="-14" lly="-13" urx="444" ury="699"/>
+ <char name="backslash" width="278" llx="-1" lly="-18" urx="279" ury="685"/>
+ <char name="bar" width="220" llx="66" lly="-218" urx="154" ury="782"/>
+ <char name="braceleft" width="348" llx="5" lly="-187" urx="436" ury="686"/>
+ <char name="braceright" width="348" llx="-129" lly="-187" urx="302" ury="686"/>
+ <char name="bracketleft" width="333" llx="-37" lly="-159" urx="362" ury="674"/>
+ <char name="bracketright" width="333" llx="-56" lly="-157" urx="343" ury="674"/>
+ <char name="breve" width="333" llx="71" lly="516" urx="387" ury="678"/>
+ <char name="brokenbar" width="220" llx="66" lly="-143" urx="154" ury="707"/>
+ <char name="bullet" width="350" llx="0" lly="175" urx="350" ury="525"/>
+ <char name="c" width="444" llx="-5" lly="-13" urx="392" ury="462"/>
+ <char name="caron" width="333" llx="79" lly="516" urx="411" ury="690"/>
+ <char name="ccedilla" width="444" llx="-5" lly="-218" urx="392" ury="462"/>
+ <char name="cedilla" width="333" llx="-80" lly="-218" urx="156" ury="5"/>
+ <char name="cent" width="500" llx="42" lly="-143" urx="439" ury="576"/>
+ <char name="circumflex" width="333" llx="40" lly="516" urx="367" ury="690"/>
+ <char name="colon" width="333" llx="23" lly="-13" urx="264" ury="459"/>
+ <char name="comma" width="250" llx="-60" lly="-182" urx="144" ury="134"/>
+ <char name="copyright" width="747" llx="30" lly="-18" urx="718" ury="685"/>
+ <char name="currency" width="500" llx="-26" lly="34" urx="526" ury="586"/>
+ <char name="d" width="500" llx="-21" lly="-13" urx="517" ury="699"/>
+ <char name="dagger" width="500" llx="91" lly="-145" urx="494" ury="685"/>
+ <char name="daggerdbl" width="500" llx="10" lly="-139" urx="493" ury="685"/>
+ <char name="degree" width="400" llx="83" lly="397" urx="369" ury="683"/>
+ <char name="dieresis" width="333" llx="55" lly="550" urx="402" ury="684"/>
+ <char name="divide" width="570" llx="33" lly="-29" urx="537" ury="535"/>
+ <char name="dollar" width="500" llx="-20" lly="-100" urx="497" ury="733"/>
+ <char name="dotaccent" width="333" llx="163" lly="550" urx="298" ury="684"/>
+ <char name="dotlessi" width="278" llx="2" lly="-9" urx="238" ury="462"/>
+ <char name="e" width="444" llx="5" lly="-13" urx="398" ury="462"/>
+ <char name="eacute" width="444" llx="5" lly="-13" urx="435" ury="697"/>
+ <char name="ecircumflex" width="444" llx="5" lly="-13" urx="423" ury="690"/>
+ <char name="edieresis" width="444" llx="5" lly="-13" urx="448" ury="655"/>
+ <char name="egrave" width="444" llx="5" lly="-13" urx="398" ury="697"/>
+ <char name="eight" width="500" llx="3" lly="-13" urx="476" ury="683"/>
+ <char name="ellipsis" width="1000" llx="40" lly="-13" urx="852" ury="135"/>
+ <char name="emdash" width="1000" llx="-40" lly="178" urx="977" ury="269"/>
+ <char name="endash" width="500" llx="-40" lly="178" urx="477" ury="269"/>
+ <char name="equal" width="570" llx="33" lly="107" urx="537" ury="399"/>
+ <char name="eth" width="500" llx="-3" lly="-13" urx="454" ury="699"/>
+ <char name="exclam" width="389" llx="67" lly="-13" urx="370" ury="684"/>
+ <char name="exclamdown" width="389" llx="19" lly="-205" urx="322" ury="492"/>
+ <char name="f" width="333" llx="-169" lly="-205" urx="446" ury="698"/>
+ <char name="fi" width="556" llx="-188" lly="-205" urx="514" ury="703"/>
+ <char name="five" width="500" llx="-11" lly="-13" urx="487" ury="669"/>
+ <char name="fl" width="556" llx="-186" lly="-205" urx="553" ury="704"/>
+ <char name="florin" width="500" llx="-87" lly="-156" urx="537" ury="707"/>
+ <char name="four" width="500" llx="-15" lly="0" urx="503" ury="683"/>
+ <char name="fraction" width="167" llx="-169" lly="-14" urx="324" ury="683"/>
+ <char name="g" width="500" llx="-52" lly="-203" urx="478" ury="462"/>
+ <char name="germandbls" width="500" llx="-200" lly="-200" urx="473" ury="705"/>
+ <char name="grave" width="333" llx="85" lly="516" urx="297" ury="697"/>
+ <char name="greater" width="570" llx="31" lly="-8" urx="539" ury="514"/>
+ <char name="guillemotleft" width="500" llx="12" lly="32" urx="468" ury="415"/>
+ <char name="guillemotright" width="500" llx="12" lly="32" urx="468" ury="415"/>
+ <char name="guilsinglleft" width="333" llx="32" lly="32" urx="303" ury="415"/>
+ <char name="guilsinglright" width="333" llx="10" lly="32" urx="281" ury="415"/>
+ <char name="h" width="556" llx="-13" lly="-9" urx="498" ury="699"/>
+ <char name="hungarumlaut" width="333" llx="69" lly="516" urx="498" ury="697"/>
+ <char name="hyphen" width="333" llx="2" lly="166" urx="271" ury="282"/>
+ <char name="i" width="278" llx="2" lly="-9" urx="263" ury="684"/>
+ <char name="iacute" width="278" llx="2" lly="-9" urx="352" ury="697"/>
+ <char name="icircumflex" width="278" llx="-3" lly="-9" urx="324" ury="690"/>
+ <char name="idieresis" width="278" llx="2" lly="-9" urx="364" ury="655"/>
+ <char name="igrave" width="278" llx="2" lly="-9" urx="259" ury="697"/>
+ <char name="j" width="278" llx="-189" lly="-207" urx="279" ury="684"/>
+ <char name="k" width="500" llx="-23" lly="-8" urx="483" ury="699"/>
+ <char name="l" width="278" llx="2" lly="-9" urx="290" ury="699"/>
+ <char name="less" width="570" llx="31" lly="-8" urx="539" ury="514"/>
+ <char name="logicalnot" width="606" llx="51" lly="108" urx="555" ury="399"/>
+ <char name="lslash" width="278" llx="-7" lly="-9" urx="307" ury="699"/>
+ <char name="m" width="778" llx="-14" lly="-9" urx="722" ury="462"/>
+ <char name="macron" width="333" llx="51" lly="553" urx="393" ury="623"/>
+ <char name="minus" width="330" llx="51" lly="209" urx="555" ury="297"/>
+ <char name="mu" width="576" llx="-60" lly="-207" urx="516" ury="449"/>
+ <char name="multiply" width="570" llx="48" lly="16" urx="522" ury="490"/>
+ <char name="n" width="556" llx="-6" lly="-9" urx="493" ury="462"/>
+ <char name="nine" width="500" llx="-12" lly="-10" urx="475" ury="683"/>
+ <char name="ntilde" width="556" llx="-6" lly="-9" urx="504" ury="655"/>
+ <char name="numbersign" width="500" llx="-33" lly="0" urx="533" ury="700"/>
+ <char name="o" width="500" llx="-3" lly="-13" urx="441" ury="462"/>
+ <char name="oacute" width="500" llx="-3" lly="-13" urx="463" ury="697"/>
+ <char name="ocircumflex" width="500" llx="-3" lly="-13" urx="451" ury="690"/>
+ <char name="odieresis" width="500" llx="-3" lly="-13" urx="471" ury="655"/>
+ <char name="oe" width="722" llx="6" lly="-13" urx="674" ury="462"/>
+ <char name="ogonek" width="333" llx="15" lly="-183" urx="244" ury="34"/>
+ <char name="ograve" width="500" llx="-3" lly="-13" urx="441" ury="697"/>
+ <char name="one" width="500" llx="5" lly="0" urx="419" ury="683"/>
+ <char name="onehalf" width="750" llx="-9" lly="-14" urx="723" ury="683"/>
+ <char name="onequarter" width="750" llx="7" lly="-14" urx="721" ury="683"/>
+ <char name="onesuperior" width="300" llx="30" lly="274" urx="301" ury="683"/>
+ <char name="ordfeminine" width="266" llx="16" lly="399" urx="330" ury="685"/>
+ <char name="ordmasculine" width="300" llx="56" lly="400" urx="347" ury="685"/>
+ <char name="oslash" width="500" llx="-3" lly="-119" urx="441" ury="560"/>
+ <char name="otilde" width="500" llx="-3" lly="-13" urx="491" ury="655"/>
+ <char name="p" width="500" llx="-120" lly="-205" urx="446" ury="462"/>
+ <char name="paragraph" width="500" llx="-57" lly="-193" urx="562" ury="669"/>
+ <char name="parenleft" width="333" llx="28" lly="-179" urx="344" ury="685"/>
+ <char name="parenright" width="333" llx="-44" lly="-179" urx="271" ury="685"/>
+ <char name="percent" width="833" llx="39" lly="-10" urx="793" ury="692"/>
+ <char name="period" width="250" llx="-9" lly="-13" urx="139" ury="135"/>
+ <char name="periodcentered" width="250" llx="51" lly="257" urx="199" ury="405"/>
+ <char name="perthousand" width="1000" llx="7" lly="-29" urx="996" ury="706"/>
+ <char name="plus" width="570" llx="33" lly="0" urx="537" ury="506"/>
+ <char name="plusminus" width="570" llx="33" lly="0" urx="537" ury="506"/>
+ <char name="q" width="500" llx="1" lly="-205" urx="471" ury="462"/>
+ <char name="question" width="500" llx="79" lly="-13" urx="470" ury="684"/>
+ <char name="questiondown" width="500" llx="30" lly="-205" urx="421" ury="492"/>
+ <char name="quotedbl" width="555" llx="136" lly="398" urx="536" ury="685"/>
+ <char name="quotedblbase" width="500" llx="-57" lly="-182" urx="403" ury="134"/>
+ <char name="quotedblleft" width="500" llx="53" lly="369" urx="513" ury="685"/>
+ <char name="quotedblright" width="500" llx="53" lly="369" urx="513" ury="685"/>
+ <char name="quoteleft" width="333" llx="128" lly="369" urx="332" ury="685"/>
+ <char name="quoteright" width="333" llx="98" lly="369" urx="302" ury="685"/>
+ <char name="quotesinglbase" width="333" llx="-5" lly="-182" urx="199" ury="134"/>
+ <char name="quotesingle" width="278" llx="128" lly="398" urx="268" ury="685"/>
+ <char name="r" width="389" llx="-21" lly="0" urx="389" ury="462"/>
+ <char name="registered" width="747" llx="30" lly="-18" urx="718" ury="685"/>
+ <char name="ring" width="333" llx="127" lly="516" urx="340" ury="729"/>
+ <char name="s" width="389" llx="-19" lly="-13" urx="333" ury="462"/>
+ <char name="scaron" width="389" llx="-19" lly="-13" urx="424" ury="690"/>
+ <char name="section" width="500" llx="36" lly="-143" urx="459" ury="685"/>
+ <char name="semicolon" width="333" llx="-25" lly="-183" urx="264" ury="459"/>
+ <char name="seven" width="500" llx="52" lly="0" urx="525" ury="669"/>
+ <char name="six" width="500" llx="23" lly="-15" urx="509" ury="679"/>
+ <char name="slash" width="278" llx="-64" lly="-18" urx="342" ury="685"/>
+ <char name="space" width="250" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="500" llx="-32" lly="-12" urx="510" ury="683"/>
+ <char name="t" width="278" llx="-11" lly="-9" urx="281" ury="594"/>
+ <char name="thorn" width="500" llx="-120" lly="-205" urx="446" ury="699"/>
+ <char name="three" width="500" llx="-15" lly="-13" urx="450" ury="683"/>
+ <char name="threequarters" width="750" llx="7" lly="-14" urx="726" ury="683"/>
+ <char name="threesuperior" width="300" llx="17" lly="265" urx="321" ury="683"/>
+ <char name="tilde" width="333" llx="48" lly="536" urx="407" ury="655"/>
+ <char name="trademark" width="1000" llx="32" lly="263" urx="968" ury="669"/>
+ <char name="two" width="500" llx="-27" lly="0" urx="446" ury="683"/>
+ <char name="twosuperior" width="300" llx="2" lly="274" urx="313" ury="683"/>
+ <char name="u" width="556" llx="15" lly="-9" urx="492" ury="462"/>
+ <char name="uacute" width="556" llx="15" lly="-9" urx="492" ury="697"/>
+ <char name="ucircumflex" width="556" llx="15" lly="-9" urx="492" ury="690"/>
+ <char name="udieresis" width="556" llx="15" lly="-9" urx="499" ury="655"/>
+ <char name="ugrave" width="556" llx="15" lly="-9" urx="492" ury="697"/>
+ <char name="underscore" width="500" llx="0" lly="-125" urx="500" ury="-75"/>
+ <char name="v" width="444" llx="16" lly="-13" urx="401" ury="462"/>
+ <char name="w" width="667" llx="16" lly="-13" urx="614" ury="462"/>
+ <char name="x" width="500" llx="-46" lly="-13" urx="469" ury="462"/>
+ <char name="y" width="444" llx="-94" lly="-205" urx="392" ury="462"/>
+ <char name="yacute" width="444" llx="-94" lly="-205" urx="435" ury="697"/>
+ <char name="ydieresis" width="444" llx="-94" lly="-205" urx="443" ury="655"/>
+ <char name="yen" width="500" llx="33" lly="0" urx="628" ury="669"/>
+ <char name="z" width="389" llx="-43" lly="-78" urx="368" ury="449"/>
+ <char name="zcaron" width="389" llx="-43" lly="-78" urx="424" ury="690"/>
+ <char name="zero" width="500" llx="17" lly="-14" urx="477" ury="683"/>
+ </char-metrics>
+ <kerning kpx1="79">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-40" kpx2="88"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="107">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-30" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-55" kpx2="111"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-85" kpx2="65"/>
+ <pair kern="-129" kpx2="46"/>
+ <pair kern="-50" kpx2="101"/>
+ <pair kern="-129" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-111" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-74" kpx2="58"/>
+ <pair kern="-10" kpx2="71"/>
+ <pair kern="-129" kpx2="44"/>
+ <pair kern="-74" kpx2="59"/>
+ <pair kern="-70" kpx2="45"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-85" kpx2="65"/>
+ <pair kern="-111" kpx2="97"/>
+ <pair kern="-55" kpx2="117"/>
+ <pair kern="-129" kpx2="46"/>
+ <pair kern="-111" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-37" kpx2="46"/>
+ <pair kern="-15" kpx2="101"/>
+ <pair kern="-37" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-37" kpx2="65"/>
+ <pair kern="-70" kpx2="87"/>
+ <pair kern="0" kpx2="147"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="0" kpx2="84"/>
+ <pair kern="0" kpx2="145"/>
+ <pair kern="-70" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="0" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-70" kpx2="111"/>
+ <pair kern="-40" kpx2="105"/>
+ <pair kern="-50" kpx2="114"/>
+ <pair kern="-95" kpx2="97"/>
+ <pair kern="-100" kpx2="65"/>
+ <pair kern="-129" kpx2="46"/>
+ <pair kern="-100" kpx2="101"/>
+ <pair kern="-129" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-45" kpx2="65"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="100">
+ <pair kern="0" kpx2="100"/>
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="83">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-25" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-15" kpx2="100"/>
+ <pair kern="-74" kpx2="32"/>
+ <pair kern="-74" kpx2="146"/>
+ <pair kern="-15" kpx2="114"/>
+ <pair kern="-37" kpx2="116"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-74" kpx2="115"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-37" kpx2="46"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-37" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-20" kpx2="121"/>
+ <pair kern="-25" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-18" kpx2="87"/>
+ <pair kern="-40" kpx2="85"/>
+ <pair kern="-18" kpx2="89"/>
+ <pair kern="-30" kpx2="84"/>
+ <pair kern="-18" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="0" kpx2="65"/>
+ <pair kern="-74" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-25" kpx2="65"/>
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-10" kpx2="98"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-95" kpx2="148"/>
+ <pair kern="0" kpx2="32"/>
+ <pair kern="-95" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="55" kpx2="146"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-18" kpx2="102"/>
+ <pair kern="-10" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-95" kpx2="111"/>
+ <pair kern="-18" kpx2="79"/>
+ <pair kern="-37" kpx2="119"/>
+ <pair kern="-74" kpx2="58"/>
+ <pair kern="-37" kpx2="114"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-92" kpx2="44"/>
+ <pair kern="-74" kpx2="59"/>
+ <pair kern="-92" kpx2="45"/>
+ <pair kern="-37" kpx2="105"/>
+ <pair kern="-55" kpx2="65"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-37" kpx2="117"/>
+ <pair kern="-37" kpx2="121"/>
+ <pair kern="-92" kpx2="46"/>
+ <pair kern="-92" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-37" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-37" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="-10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="-10" kpx2="98"/>
+ <pair kern="0" kpx2="120"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="-10" kpx2="107"/>
+ <pair kern="-10" kpx2="104"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-15" kpx2="79"/>
+ <pair kern="-55" kpx2="58"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-74" kpx2="44"/>
+ <pair kern="-55" kpx2="59"/>
+ <pair kern="-50" kpx2="45"/>
+ <pair kern="-37" kpx2="105"/>
+ <pair kern="-74" kpx2="65"/>
+ <pair kern="-85" kpx2="97"/>
+ <pair kern="-55" kpx2="117"/>
+ <pair kern="-55" kpx2="121"/>
+ <pair kern="-74" kpx2="46"/>
+ <pair kern="-90" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="71">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="105">
+ <pair kern="0" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-50" kpx2="79"/>
+ <pair kern="-74" kpx2="146"/>
+ <pair kern="-74" kpx2="119"/>
+ <pair kern="-100" kpx2="87"/>
+ <pair kern="-65" kpx2="67"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-55" kpx2="81"/>
+ <pair kern="-60" kpx2="71"/>
+ <pair kern="-95" kpx2="86"/>
+ <pair kern="-74" kpx2="118"/>
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-30" kpx2="117"/>
+ <pair kern="-70" kpx2="89"/>
+ <pair kern="-74" kpx2="121"/>
+ <pair kern="-55" kpx2="84"/>
+ </kerning>
+ <kerning kpx1="147">
+ <pair kern="0" kpx2="65"/>
+ <pair kern="0" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="78">
+ <pair kern="-30" kpx2="65"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="0" kpx2="119"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-25" kpx2="119"/>
+ <pair kern="-10" kpx2="121"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="-10" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="100"/>
+ <pair kern="0" kpx2="107"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="0" kpx2="99"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="113"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="-65" kpx2="44"/>
+ <pair kern="0" kpx2="45"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="109"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-65" kpx2="46"/>
+ <pair kern="0" kpx2="110"/>
+ <pair kern="0" kpx2="115"/>
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="108">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-55" kpx2="146"/>
+ <pair kern="-37" kpx2="87"/>
+ <pair kern="-37" kpx2="89"/>
+ <pair kern="-37" kpx2="121"/>
+ <pair kern="-18" kpx2="84"/>
+ <pair kern="-37" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-111" kpx2="111"/>
+ <pair kern="-92" kpx2="45"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-25" kpx2="79"/>
+ <pair kern="-92" kpx2="58"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-74" kpx2="65"/>
+ <pair kern="-92" kpx2="117"/>
+ <pair kern="-74" kpx2="46"/>
+ <pair kern="-111" kpx2="101"/>
+ <pair kern="-92" kpx2="59"/>
+ <pair kern="-92" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-40" kpx2="111"/>
+ <pair kern="-40" kpx2="97"/>
+ <pair kern="-25" kpx2="65"/>
+ <pair kern="-40" kpx2="117"/>
+ <pair kern="-10" kpx2="46"/>
+ <pair kern="-40" kpx2="101"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-95" kpx2="148"/>
+ <pair kern="-95" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="118"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/TimesItalic.xml b/fop-core/src/main/codegen/fonts/TimesItalic.xml
new file mode 100644
index 000000000..607f4d701
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/TimesItalic.xml
@@ -0,0 +1,645 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-Italic</font-name>
+ <full-name>Times Italic</full-name>
+ <family-name>Times</family-name>
+ <class-name>TimesItalic</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>653</cap-height>
+ <x-height>441</x-height>
+ <ascender>683</ascender>
+ <descender>-205</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="611" llx="-51" lly="0" urx="564" ury="668"/>
+ <char name="AE" width="889" llx="-27" lly="0" urx="911" ury="653"/>
+ <char name="Aacute" width="611" llx="-51" lly="0" urx="564" ury="876"/>
+ <char name="Acircumflex" width="611" llx="-51" lly="0" urx="564" ury="873"/>
+ <char name="Adieresis" width="611" llx="-51" lly="0" urx="564" ury="818"/>
+ <char name="Agrave" width="611" llx="-51" lly="0" urx="564" ury="876"/>
+ <char name="Aring" width="611" llx="-51" lly="0" urx="564" ury="883"/>
+ <char name="Atilde" width="611" llx="-51" lly="0" urx="566" ury="836"/>
+ <char name="B" width="611" llx="-8" lly="0" urx="588" ury="653"/>
+ <char name="C" width="667" llx="66" lly="-18" urx="689" ury="666"/>
+ <char name="Ccedilla" width="667" llx="66" lly="-217" urx="689" ury="666"/>
+ <char name="D" width="722" llx="-8" lly="0" urx="700" ury="653"/>
+ <char name="E" width="611" llx="-1" lly="0" urx="634" ury="653"/>
+ <char name="Eacute" width="611" llx="-1" lly="0" urx="634" ury="876"/>
+ <char name="Ecircumflex" width="611" llx="-1" lly="0" urx="634" ury="873"/>
+ <char name="Edieresis" width="611" llx="-1" lly="0" urx="634" ury="818"/>
+ <char name="Egrave" width="611" llx="-1" lly="0" urx="634" ury="876"/>
+ <char name="Eth" width="722" llx="-8" lly="0" urx="700" ury="653"/>
+ <char name="Euro" width="500" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="611" llx="8" lly="0" urx="645" ury="653"/>
+ <char name="G" width="722" llx="52" lly="-18" urx="722" ury="666"/>
+ <char name="H" width="722" llx="-8" lly="0" urx="767" ury="653"/>
+ <char name="I" width="333" llx="-8" lly="0" urx="384" ury="653"/>
+ <char name="Iacute" width="333" llx="-8" lly="0" urx="433" ury="876"/>
+ <char name="Icircumflex" width="333" llx="-8" lly="0" urx="425" ury="873"/>
+ <char name="Idieresis" width="333" llx="-8" lly="0" urx="435" ury="818"/>
+ <char name="Igrave" width="333" llx="-8" lly="0" urx="384" ury="876"/>
+ <char name="J" width="444" llx="-6" lly="-18" urx="491" ury="653"/>
+ <char name="K" width="667" llx="7" lly="0" urx="722" ury="653"/>
+ <char name="L" width="556" llx="-8" lly="0" urx="559" ury="653"/>
+ <char name="Lslash" width="556" llx="-8" lly="0" urx="559" ury="653"/>
+ <char name="M" width="833" llx="-18" lly="0" urx="873" ury="653"/>
+ <char name="N" width="667" llx="-20" lly="-15" urx="727" ury="653"/>
+ <char name="Ntilde" width="667" llx="-20" lly="-15" urx="727" ury="836"/>
+ <char name="O" width="722" llx="60" lly="-18" urx="699" ury="666"/>
+ <char name="OE" width="944" llx="49" lly="-8" urx="964" ury="666"/>
+ <char name="Oacute" width="722" llx="60" lly="-18" urx="699" ury="876"/>
+ <char name="Ocircumflex" width="722" llx="60" lly="-18" urx="699" ury="873"/>
+ <char name="Odieresis" width="722" llx="60" lly="-18" urx="699" ury="818"/>
+ <char name="Ograve" width="722" llx="60" lly="-18" urx="699" ury="876"/>
+ <char name="Oslash" width="722" llx="60" lly="-105" urx="699" ury="722"/>
+ <char name="Otilde" width="722" llx="60" lly="-18" urx="699" ury="836"/>
+ <char name="P" width="611" llx="0" lly="0" urx="605" ury="653"/>
+ <char name="Q" width="722" llx="59" lly="-182" urx="699" ury="666"/>
+ <char name="R" width="611" llx="-13" lly="0" urx="588" ury="653"/>
+ <char name="S" width="500" llx="17" lly="-18" urx="508" ury="667"/>
+ <char name="Scaron" width="500" llx="17" lly="-18" urx="520" ury="873"/>
+ <char name="T" width="556" llx="59" lly="0" urx="633" ury="653"/>
+ <char name="Thorn" width="611" llx="0" lly="0" urx="569" ury="653"/>
+ <char name="U" width="722" llx="102" lly="-18" urx="765" ury="653"/>
+ <char name="Uacute" width="722" llx="102" lly="-18" urx="765" ury="876"/>
+ <char name="Ucircumflex" width="722" llx="102" lly="-18" urx="765" ury="873"/>
+ <char name="Udieresis" width="722" llx="102" lly="-18" urx="765" ury="818"/>
+ <char name="Ugrave" width="722" llx="102" lly="-18" urx="765" ury="876"/>
+ <char name="V" width="611" llx="76" lly="-18" urx="688" ury="653"/>
+ <char name="W" width="833" llx="71" lly="-18" urx="906" ury="653"/>
+ <char name="X" width="611" llx="-29" lly="0" urx="655" ury="653"/>
+ <char name="Y" width="556" llx="78" lly="0" urx="633" ury="653"/>
+ <char name="Yacute" width="556" llx="78" lly="0" urx="633" ury="876"/>
+ <char name="Ydieresis" width="556" llx="78" lly="0" urx="633" ury="818"/>
+ <char name="Z" width="556" llx="-6" lly="0" urx="606" ury="653"/>
+ <char name="Zcaron" width="556" llx="-6" lly="0" urx="606" ury="873"/>
+ <char name="a" width="500" llx="17" lly="-11" urx="476" ury="441"/>
+ <char name="aacute" width="500" llx="17" lly="-11" urx="487" ury="664"/>
+ <char name="acircumflex" width="500" llx="17" lly="-11" urx="476" ury="661"/>
+ <char name="acute" width="333" llx="180" lly="494" urx="403" ury="664"/>
+ <char name="adieresis" width="500" llx="17" lly="-11" urx="489" ury="606"/>
+ <char name="ae" width="667" llx="23" lly="-11" urx="640" ury="441"/>
+ <char name="agrave" width="500" llx="17" lly="-11" urx="476" ury="664"/>
+ <char name="ampersand" width="778" llx="76" lly="-18" urx="723" ury="666"/>
+ <char name="aring" width="500" llx="17" lly="-11" urx="476" ury="691"/>
+ <char name="asciicircum" width="422" llx="0" lly="301" urx="422" ury="666"/>
+ <char name="asciitilde" width="541" llx="40" lly="183" urx="502" ury="323"/>
+ <char name="asterisk" width="500" llx="128" lly="255" urx="492" ury="666"/>
+ <char name="at" width="920" llx="118" lly="-18" urx="806" ury="666"/>
+ <char name="atilde" width="500" llx="17" lly="-11" urx="511" ury="624"/>
+ <char name="b" width="500" llx="23" lly="-11" urx="473" ury="683"/>
+ <char name="backslash" width="278" llx="-41" lly="-18" urx="319" ury="666"/>
+ <char name="bar" width="275" llx="105" lly="-217" urx="171" ury="783"/>
+ <char name="braceleft" width="400" llx="51" lly="-177" urx="407" ury="687"/>
+ <char name="braceright" width="400" llx="-7" lly="-177" urx="349" ury="687"/>
+ <char name="bracketleft" width="389" llx="21" lly="-153" urx="391" ury="663"/>
+ <char name="bracketright" width="389" llx="12" lly="-153" urx="382" ury="663"/>
+ <char name="breve" width="333" llx="117" lly="492" urx="418" ury="650"/>
+ <char name="brokenbar" width="275" llx="105" lly="-142" urx="171" ury="708"/>
+ <char name="bullet" width="350" llx="40" lly="191" urx="310" ury="461"/>
+ <char name="c" width="444" llx="30" lly="-11" urx="425" ury="441"/>
+ <char name="caron" width="333" llx="121" lly="492" urx="426" ury="661"/>
+ <char name="ccedilla" width="444" llx="30" lly="-217" urx="425" ury="441"/>
+ <char name="cedilla" width="333" llx="-30" lly="-217" urx="182" ury="0"/>
+ <char name="cent" width="500" llx="77" lly="-143" urx="472" ury="560"/>
+ <char name="circumflex" width="333" llx="91" lly="492" urx="385" ury="661"/>
+ <char name="colon" width="333" llx="50" lly="-11" urx="261" ury="441"/>
+ <char name="comma" width="250" llx="-4" lly="-129" urx="135" ury="101"/>
+ <char name="copyright" width="760" llx="41" lly="-18" urx="719" ury="666"/>
+ <char name="currency" width="500" llx="-22" lly="53" urx="522" ury="597"/>
+ <char name="d" width="500" llx="15" lly="-13" urx="527" ury="683"/>
+ <char name="dagger" width="500" llx="101" lly="-159" urx="488" ury="666"/>
+ <char name="daggerdbl" width="500" llx="22" lly="-143" urx="491" ury="666"/>
+ <char name="degree" width="400" llx="101" lly="390" urx="387" ury="676"/>
+ <char name="dieresis" width="333" llx="107" lly="548" urx="405" ury="646"/>
+ <char name="divide" width="675" llx="86" lly="-11" urx="590" ury="517"/>
+ <char name="dollar" width="500" llx="31" lly="-89" urx="497" ury="731"/>
+ <char name="dotaccent" width="333" llx="207" lly="548" urx="305" ury="646"/>
+ <char name="dotlessi" width="278" llx="49" lly="-11" urx="235" ury="441"/>
+ <char name="e" width="444" llx="31" lly="-11" urx="412" ury="441"/>
+ <char name="eacute" width="444" llx="31" lly="-11" urx="459" ury="664"/>
+ <char name="ecircumflex" width="444" llx="31" lly="-11" urx="441" ury="661"/>
+ <char name="edieresis" width="444" llx="31" lly="-11" urx="451" ury="606"/>
+ <char name="egrave" width="444" llx="31" lly="-11" urx="412" ury="664"/>
+ <char name="eight" width="500" llx="30" lly="-7" urx="493" ury="676"/>
+ <char name="ellipsis" width="889" llx="57" lly="-11" urx="762" ury="100"/>
+ <char name="emdash" width="889" llx="-6" lly="197" urx="894" ury="243"/>
+ <char name="endash" width="500" llx="-6" lly="197" urx="505" ury="243"/>
+ <char name="equal" width="675" llx="86" lly="120" urx="590" ury="386"/>
+ <char name="eth" width="500" llx="27" lly="-11" urx="482" ury="683"/>
+ <char name="exclam" width="333" llx="39" lly="-11" urx="302" ury="667"/>
+ <char name="exclamdown" width="389" llx="59" lly="-205" urx="322" ury="473"/>
+ <char name="f" width="278" llx="-147" lly="-207" urx="424" ury="678"/>
+ <char name="fi" width="500" llx="-141" lly="-207" urx="481" ury="681"/>
+ <char name="five" width="500" llx="15" lly="-7" urx="491" ury="666"/>
+ <char name="fl" width="500" llx="-141" lly="-204" urx="518" ury="682"/>
+ <char name="florin" width="500" llx="25" lly="-182" urx="507" ury="682"/>
+ <char name="four" width="500" llx="1" lly="0" urx="479" ury="676"/>
+ <char name="fraction" width="167" llx="-169" lly="-10" urx="337" ury="676"/>
+ <char name="g" width="500" llx="8" lly="-206" urx="472" ury="441"/>
+ <char name="germandbls" width="500" llx="-168" lly="-207" urx="493" ury="679"/>
+ <char name="grave" width="333" llx="121" lly="492" urx="311" ury="664"/>
+ <char name="greater" width="675" llx="84" lly="-8" urx="592" ury="514"/>
+ <char name="guillemotleft" width="500" llx="53" lly="37" urx="445" ury="403"/>
+ <char name="guillemotright" width="500" llx="55" lly="37" urx="447" ury="403"/>
+ <char name="guilsinglleft" width="333" llx="51" lly="37" urx="281" ury="403"/>
+ <char name="guilsinglright" width="333" llx="52" lly="37" urx="282" ury="403"/>
+ <char name="h" width="500" llx="19" lly="-9" urx="478" ury="683"/>
+ <char name="hungarumlaut" width="333" llx="93" lly="494" urx="486" ury="664"/>
+ <char name="hyphen" width="333" llx="49" lly="192" urx="282" ury="255"/>
+ <char name="i" width="278" llx="49" lly="-11" urx="264" ury="654"/>
+ <char name="iacute" width="278" llx="49" lly="-11" urx="355" ury="664"/>
+ <char name="icircumflex" width="278" llx="33" lly="-11" urx="327" ury="661"/>
+ <char name="idieresis" width="278" llx="49" lly="-11" urx="352" ury="606"/>
+ <char name="igrave" width="278" llx="49" lly="-11" urx="284" ury="664"/>
+ <char name="j" width="278" llx="-124" lly="-207" urx="276" ury="654"/>
+ <char name="k" width="444" llx="14" lly="-11" urx="461" ury="683"/>
+ <char name="l" width="278" llx="41" lly="-11" urx="279" ury="683"/>
+ <char name="less" width="675" llx="84" lly="-8" urx="592" ury="514"/>
+ <char name="logicalnot" width="675" llx="86" lly="108" urx="590" ury="386"/>
+ <char name="lslash" width="278" llx="41" lly="-11" urx="312" ury="683"/>
+ <char name="m" width="722" llx="12" lly="-9" urx="704" ury="441"/>
+ <char name="macron" width="333" llx="99" lly="532" urx="411" ury="583"/>
+ <char name="minus" width="675" llx="86" lly="220" urx="590" ury="286"/>
+ <char name="mu" width="500" llx="-30" lly="-209" urx="497" ury="428"/>
+ <char name="multiply" width="675" llx="93" lly="8" urx="582" ury="497"/>
+ <char name="n" width="500" llx="14" lly="-9" urx="474" ury="441"/>
+ <char name="nine" width="500" llx="23" lly="-17" urx="492" ury="676"/>
+ <char name="ntilde" width="500" llx="14" lly="-9" urx="476" ury="624"/>
+ <char name="numbersign" width="500" llx="2" lly="0" urx="540" ury="676"/>
+ <char name="o" width="500" llx="27" lly="-11" urx="468" ury="441"/>
+ <char name="oacute" width="500" llx="27" lly="-11" urx="487" ury="664"/>
+ <char name="ocircumflex" width="500" llx="27" lly="-11" urx="468" ury="661"/>
+ <char name="odieresis" width="500" llx="27" lly="-11" urx="489" ury="606"/>
+ <char name="oe" width="667" llx="20" lly="-12" urx="646" ury="441"/>
+ <char name="ogonek" width="333" llx="20" lly="-169" urx="203" ury="40"/>
+ <char name="ograve" width="500" llx="27" lly="-11" urx="468" ury="664"/>
+ <char name="one" width="500" llx="49" lly="0" urx="409" ury="676"/>
+ <char name="onehalf" width="750" llx="34" lly="-10" urx="749" ury="676"/>
+ <char name="onequarter" width="750" llx="33" lly="-10" urx="736" ury="676"/>
+ <char name="onesuperior" width="300" llx="43" lly="271" urx="284" ury="676"/>
+ <char name="ordfeminine" width="276" llx="42" lly="406" urx="352" ury="676"/>
+ <char name="ordmasculine" width="310" llx="67" lly="406" urx="362" ury="676"/>
+ <char name="oslash" width="500" llx="28" lly="-135" urx="469" ury="554"/>
+ <char name="otilde" width="500" llx="27" lly="-11" urx="496" ury="624"/>
+ <char name="p" width="500" llx="-75" lly="-205" urx="469" ury="441"/>
+ <char name="paragraph" width="523" llx="55" lly="-123" urx="616" ury="653"/>
+ <char name="parenleft" width="333" llx="42" lly="-181" urx="315" ury="669"/>
+ <char name="parenright" width="333" llx="16" lly="-180" urx="289" ury="669"/>
+ <char name="percent" width="833" llx="79" lly="-13" urx="790" ury="676"/>
+ <char name="period" width="250" llx="27" lly="-11" urx="138" ury="100"/>
+ <char name="periodcentered" width="250" llx="70" lly="199" urx="181" ury="310"/>
+ <char name="perthousand" width="1000" llx="25" lly="-19" urx="1010" ury="706"/>
+ <char name="plus" width="675" llx="86" lly="0" urx="590" ury="506"/>
+ <char name="plusminus" width="675" llx="86" lly="0" urx="590" ury="506"/>
+ <char name="q" width="500" llx="25" lly="-209" urx="483" ury="441"/>
+ <char name="question" width="500" llx="132" lly="-12" urx="472" ury="664"/>
+ <char name="questiondown" width="500" llx="28" lly="-205" urx="368" ury="471"/>
+ <char name="quotedbl" width="420" llx="144" lly="421" urx="432" ury="666"/>
+ <char name="quotedblbase" width="556" llx="57" lly="-129" urx="405" ury="101"/>
+ <char name="quotedblleft" width="556" llx="166" lly="436" urx="514" ury="666"/>
+ <char name="quotedblright" width="556" llx="151" lly="436" urx="499" ury="666"/>
+ <char name="quoteleft" width="333" llx="171" lly="436" urx="310" ury="666"/>
+ <char name="quoteright" width="333" llx="151" lly="436" urx="290" ury="666"/>
+ <char name="quotesinglbase" width="333" llx="44" lly="-129" urx="183" ury="101"/>
+ <char name="quotesingle" width="214" llx="132" lly="421" urx="241" ury="666"/>
+ <char name="r" width="389" llx="45" lly="0" urx="412" ury="441"/>
+ <char name="registered" width="760" llx="41" lly="-18" urx="719" ury="666"/>
+ <char name="ring" width="333" llx="155" lly="492" urx="355" ury="691"/>
+ <char name="s" width="389" llx="16" lly="-13" urx="366" ury="442"/>
+ <char name="scaron" width="389" llx="16" lly="-13" urx="454" ury="661"/>
+ <char name="section" width="500" llx="53" lly="-162" urx="461" ury="666"/>
+ <char name="semicolon" width="333" llx="27" lly="-129" urx="261" ury="441"/>
+ <char name="seven" width="500" llx="75" lly="-8" urx="537" ury="666"/>
+ <char name="six" width="500" llx="30" lly="-7" urx="521" ury="686"/>
+ <char name="slash" width="278" llx="-65" lly="-18" urx="386" ury="666"/>
+ <char name="space" width="250" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="500" llx="10" lly="-6" urx="517" ury="670"/>
+ <char name="t" width="278" llx="37" lly="-11" urx="296" ury="546"/>
+ <char name="thorn" width="500" llx="-75" lly="-205" urx="469" ury="683"/>
+ <char name="three" width="500" llx="15" lly="-7" urx="465" ury="676"/>
+ <char name="threequarters" width="750" llx="23" lly="-10" urx="736" ury="676"/>
+ <char name="threesuperior" width="300" llx="43" lly="268" urx="339" ury="676"/>
+ <char name="tilde" width="333" llx="100" lly="517" urx="427" ury="624"/>
+ <char name="trademark" width="980" llx="30" lly="247" urx="957" ury="653"/>
+ <char name="two" width="500" llx="12" lly="0" urx="452" ury="676"/>
+ <char name="twosuperior" width="300" llx="33" lly="271" urx="324" ury="676"/>
+ <char name="u" width="500" llx="42" lly="-11" urx="475" ury="441"/>
+ <char name="uacute" width="500" llx="42" lly="-11" urx="477" ury="664"/>
+ <char name="ucircumflex" width="500" llx="42" lly="-11" urx="475" ury="661"/>
+ <char name="udieresis" width="500" llx="42" lly="-11" urx="479" ury="606"/>
+ <char name="ugrave" width="500" llx="42" lly="-11" urx="475" ury="664"/>
+ <char name="underscore" width="500" llx="0" lly="-125" urx="500" ury="-75"/>
+ <char name="v" width="444" llx="21" lly="-18" urx="426" ury="441"/>
+ <char name="w" width="667" llx="16" lly="-18" urx="648" ury="441"/>
+ <char name="x" width="444" llx="-27" lly="-11" urx="447" ury="441"/>
+ <char name="y" width="444" llx="-24" lly="-206" urx="426" ury="441"/>
+ <char name="yacute" width="444" llx="-24" lly="-206" urx="459" ury="664"/>
+ <char name="ydieresis" width="444" llx="-24" lly="-206" urx="441" ury="606"/>
+ <char name="yen" width="500" llx="27" lly="0" urx="603" ury="653"/>
+ <char name="z" width="389" llx="-2" lly="-81" urx="380" ury="428"/>
+ <char name="zcaron" width="389" llx="-2" lly="-81" urx="434" ury="661"/>
+ <char name="zero" width="500" llx="32" lly="-7" urx="497" ury="676"/>
+ </char-metrics>
+ <kerning kpx1="79">
+ <pair kern="-55" kpx2="65"/>
+ <pair kern="-50" kpx2="87"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-40" kpx2="88"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="107">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="-10" kpx2="121"/>
+ <pair kern="-10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-80" kpx2="97"/>
+ <pair kern="-90" kpx2="65"/>
+ <pair kern="-135" kpx2="46"/>
+ <pair kern="-80" kpx2="101"/>
+ <pair kern="-135" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-111" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-65" kpx2="58"/>
+ <pair kern="0" kpx2="71"/>
+ <pair kern="-129" kpx2="44"/>
+ <pair kern="-74" kpx2="59"/>
+ <pair kern="-55" kpx2="45"/>
+ <pair kern="-74" kpx2="105"/>
+ <pair kern="-60" kpx2="65"/>
+ <pair kern="-111" kpx2="97"/>
+ <pair kern="-74" kpx2="117"/>
+ <pair kern="-129" kpx2="46"/>
+ <pair kern="-111" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-74" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-74" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-18" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="0" kpx2="147"/>
+ <pair kern="-75" kpx2="89"/>
+ <pair kern="-18" kpx2="84"/>
+ <pair kern="0" kpx2="145"/>
+ <pair kern="-35" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="0" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-105" kpx2="111"/>
+ <pair kern="-45" kpx2="105"/>
+ <pair kern="-55" kpx2="114"/>
+ <pair kern="-75" kpx2="97"/>
+ <pair kern="-115" kpx2="65"/>
+ <pair kern="-135" kpx2="46"/>
+ <pair kern="-75" kpx2="101"/>
+ <pair kern="-135" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-25" kpx2="46"/>
+ <pair kern="-25" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="100">
+ <pair kern="0" kpx2="100"/>
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="83">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-35" kpx2="65"/>
+ <pair kern="-40" kpx2="87"/>
+ <pair kern="-40" kpx2="89"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-40" kpx2="86"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-25" kpx2="100"/>
+ <pair kern="-111" kpx2="32"/>
+ <pair kern="-111" kpx2="146"/>
+ <pair kern="-25" kpx2="114"/>
+ <pair kern="-30" kpx2="116"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-40" kpx2="115"/>
+ <pair kern="-10" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-74" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-74" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-40" kpx2="111"/>
+ <pair kern="-50" kpx2="79"/>
+ <pair kern="-40" kpx2="117"/>
+ <pair kern="-40" kpx2="121"/>
+ <pair kern="-35" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-18" kpx2="87"/>
+ <pair kern="-40" kpx2="85"/>
+ <pair kern="-18" kpx2="89"/>
+ <pair kern="0" kpx2="84"/>
+ <pair kern="-18" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="0" kpx2="65"/>
+ <pair kern="-111" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="-10" kpx2="101"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-25" kpx2="65"/>
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-140" kpx2="148"/>
+ <pair kern="0" kpx2="32"/>
+ <pair kern="-140" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="0" kpx2="111"/>
+ <pair kern="-20" kpx2="105"/>
+ <pair kern="92" kpx2="146"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-18" kpx2="102"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-92" kpx2="111"/>
+ <pair kern="-18" kpx2="79"/>
+ <pair kern="-74" kpx2="119"/>
+ <pair kern="-55" kpx2="58"/>
+ <pair kern="-55" kpx2="114"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-74" kpx2="44"/>
+ <pair kern="-65" kpx2="59"/>
+ <pair kern="-74" kpx2="45"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-55" kpx2="117"/>
+ <pair kern="-74" kpx2="121"/>
+ <pair kern="-74" kpx2="46"/>
+ <pair kern="-92" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-55" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-55" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-15" kpx2="46"/>
+ <pair kern="-40" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="-20" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="-10" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="-20" kpx2="107"/>
+ <pair kern="-15" kpx2="104"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-92" kpx2="111"/>
+ <pair kern="-25" kpx2="79"/>
+ <pair kern="-65" kpx2="58"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-92" kpx2="44"/>
+ <pair kern="-65" kpx2="59"/>
+ <pair kern="-37" kpx2="45"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-60" kpx2="65"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-55" kpx2="117"/>
+ <pair kern="-70" kpx2="121"/>
+ <pair kern="-92" kpx2="46"/>
+ <pair kern="-92" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="71">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="105">
+ <pair kern="0" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-37" kpx2="146"/>
+ <pair kern="-55" kpx2="119"/>
+ <pair kern="-95" kpx2="87"/>
+ <pair kern="-30" kpx2="67"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-40" kpx2="81"/>
+ <pair kern="-35" kpx2="71"/>
+ <pair kern="-105" kpx2="86"/>
+ <pair kern="-55" kpx2="118"/>
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-50" kpx2="85"/>
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="-55" kpx2="89"/>
+ <pair kern="-55" kpx2="121"/>
+ <pair kern="-37" kpx2="84"/>
+ </kerning>
+ <kerning kpx1="147">
+ <pair kern="0" kpx2="65"/>
+ <pair kern="0" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="78">
+ <pair kern="-27" kpx2="65"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="0" kpx2="119"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-10" kpx2="103"/>
+ <pair kern="0" kpx2="120"/>
+ <pair kern="-10" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="-45" kpx2="111"/>
+ <pair kern="-37" kpx2="100"/>
+ <pair kern="0" kpx2="107"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="-37" kpx2="99"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-37" kpx2="103"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="-37" kpx2="113"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="-111" kpx2="44"/>
+ <pair kern="-20" kpx2="45"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="109"/>
+ <pair kern="-15" kpx2="97"/>
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-111" kpx2="46"/>
+ <pair kern="0" kpx2="110"/>
+ <pair kern="-10" kpx2="115"/>
+ <pair kern="-37" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="108">
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-37" kpx2="146"/>
+ <pair kern="-55" kpx2="87"/>
+ <pair kern="-20" kpx2="89"/>
+ <pair kern="-30" kpx2="121"/>
+ <pair kern="-20" kpx2="84"/>
+ <pair kern="-55" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-92" kpx2="111"/>
+ <pair kern="-74" kpx2="45"/>
+ <pair kern="-74" kpx2="105"/>
+ <pair kern="-15" kpx2="79"/>
+ <pair kern="-65" kpx2="58"/>
+ <pair kern="-92" kpx2="97"/>
+ <pair kern="-50" kpx2="65"/>
+ <pair kern="-92" kpx2="117"/>
+ <pair kern="-92" kpx2="46"/>
+ <pair kern="-92" kpx2="101"/>
+ <pair kern="-65" kpx2="59"/>
+ <pair kern="-92" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="-25" kpx2="111"/>
+ <pair kern="-35" kpx2="97"/>
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-35" kpx2="117"/>
+ <pair kern="-25" kpx2="46"/>
+ <pair kern="-25" kpx2="101"/>
+ <pair kern="-25" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-140" kpx2="148"/>
+ <pair kern="-140" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="118"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/TimesRoman.xml b/fop-core/src/main/codegen/fonts/TimesRoman.xml
new file mode 100644
index 000000000..9e16b6a3b
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/TimesRoman.xml
@@ -0,0 +1,645 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these metrics in XML were kindly produced by Fotis Jannidis -->
+<font-metrics>
+ <font-name>Times-Roman</font-name>
+ <full-name>Times Roman</full-name>
+ <family-name>Times</family-name>
+ <class-name>TimesRoman</class-name>
+ <encoding>StandardEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>662</cap-height>
+ <x-height>450</x-height>
+ <ascender>683</ascender>
+ <descender>-217</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="A" width="722" llx="15" lly="0" urx="706" ury="674"/>
+ <char name="AE" width="889" llx="0" lly="0" urx="863" ury="662"/>
+ <char name="Aacute" width="722" llx="15" lly="0" urx="706" ury="890"/>
+ <char name="Acircumflex" width="722" llx="15" lly="0" urx="706" ury="886"/>
+ <char name="Adieresis" width="722" llx="15" lly="0" urx="706" ury="835"/>
+ <char name="Agrave" width="722" llx="15" lly="0" urx="706" ury="890"/>
+ <char name="Aring" width="722" llx="15" lly="0" urx="706" ury="898"/>
+ <char name="Atilde" width="722" llx="15" lly="0" urx="706" ury="850"/>
+ <char name="B" width="667" llx="17" lly="0" urx="593" ury="662"/>
+ <char name="C" width="667" llx="28" lly="-14" urx="633" ury="676"/>
+ <char name="Ccedilla" width="667" llx="28" lly="-215" urx="633" ury="676"/>
+ <char name="D" width="722" llx="16" lly="0" urx="685" ury="662"/>
+ <char name="E" width="611" llx="12" lly="0" urx="597" ury="662"/>
+ <char name="Eacute" width="611" llx="12" lly="0" urx="597" ury="890"/>
+ <char name="Ecircumflex" width="611" llx="12" lly="0" urx="597" ury="886"/>
+ <char name="Edieresis" width="611" llx="12" lly="0" urx="597" ury="835"/>
+ <char name="Egrave" width="611" llx="12" lly="0" urx="597" ury="890"/>
+ <char name="Eth" width="722" llx="16" lly="0" urx="685" ury="662"/>
+ <char name="Euro" width="500" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="F" width="556" llx="12" lly="0" urx="546" ury="662"/>
+ <char name="G" width="722" llx="32" lly="-14" urx="709" ury="676"/>
+ <char name="H" width="722" llx="19" lly="0" urx="702" ury="662"/>
+ <char name="I" width="333" llx="18" lly="0" urx="315" ury="662"/>
+ <char name="Iacute" width="333" llx="18" lly="0" urx="317" ury="890"/>
+ <char name="Icircumflex" width="333" llx="11" lly="0" urx="322" ury="886"/>
+ <char name="Idieresis" width="333" llx="18" lly="0" urx="315" ury="835"/>
+ <char name="Igrave" width="333" llx="18" lly="0" urx="315" ury="890"/>
+ <char name="J" width="389" llx="10" lly="-14" urx="370" ury="662"/>
+ <char name="K" width="722" llx="34" lly="0" urx="723" ury="662"/>
+ <char name="L" width="611" llx="12" lly="0" urx="598" ury="662"/>
+ <char name="Lslash" width="611" llx="12" lly="0" urx="598" ury="662"/>
+ <char name="M" width="889" llx="12" lly="0" urx="863" ury="662"/>
+ <char name="N" width="722" llx="12" lly="-11" urx="707" ury="662"/>
+ <char name="Ntilde" width="722" llx="12" lly="-11" urx="707" ury="850"/>
+ <char name="O" width="722" llx="34" lly="-14" urx="688" ury="676"/>
+ <char name="OE" width="889" llx="30" lly="-6" urx="885" ury="668"/>
+ <char name="Oacute" width="722" llx="34" lly="-14" urx="688" ury="890"/>
+ <char name="Ocircumflex" width="722" llx="34" lly="-14" urx="688" ury="886"/>
+ <char name="Odieresis" width="722" llx="34" lly="-14" urx="688" ury="835"/>
+ <char name="Ograve" width="722" llx="34" lly="-14" urx="688" ury="890"/>
+ <char name="Oslash" width="722" llx="34" lly="-80" urx="688" ury="734"/>
+ <char name="Otilde" width="722" llx="34" lly="-14" urx="688" ury="850"/>
+ <char name="P" width="556" llx="16" lly="0" urx="542" ury="662"/>
+ <char name="Q" width="722" llx="34" lly="-178" urx="701" ury="676"/>
+ <char name="R" width="667" llx="17" lly="0" urx="659" ury="662"/>
+ <char name="S" width="556" llx="42" lly="-14" urx="491" ury="676"/>
+ <char name="Scaron" width="556" llx="42" lly="-14" urx="491" ury="886"/>
+ <char name="T" width="611" llx="17" lly="0" urx="593" ury="662"/>
+ <char name="Thorn" width="556" llx="16" lly="0" urx="542" ury="662"/>
+ <char name="U" width="722" llx="14" lly="-14" urx="705" ury="662"/>
+ <char name="Uacute" width="722" llx="14" lly="-14" urx="705" ury="890"/>
+ <char name="Ucircumflex" width="722" llx="14" lly="-14" urx="705" ury="886"/>
+ <char name="Udieresis" width="722" llx="14" lly="-14" urx="705" ury="835"/>
+ <char name="Ugrave" width="722" llx="14" lly="-14" urx="705" ury="890"/>
+ <char name="V" width="722" llx="16" lly="-11" urx="697" ury="662"/>
+ <char name="W" width="944" llx="5" lly="-11" urx="932" ury="662"/>
+ <char name="X" width="722" llx="10" lly="0" urx="704" ury="662"/>
+ <char name="Y" width="722" llx="22" lly="0" urx="703" ury="662"/>
+ <char name="Yacute" width="722" llx="22" lly="0" urx="703" ury="890"/>
+ <char name="Ydieresis" width="722" llx="22" lly="0" urx="703" ury="835"/>
+ <char name="Z" width="611" llx="9" lly="0" urx="597" ury="662"/>
+ <char name="Zcaron" width="611" llx="9" lly="0" urx="597" ury="886"/>
+ <char name="a" width="444" llx="37" lly="-10" urx="442" ury="460"/>
+ <char name="aacute" width="444" llx="37" lly="-10" urx="442" ury="678"/>
+ <char name="acircumflex" width="444" llx="37" lly="-10" urx="442" ury="674"/>
+ <char name="acute" width="333" llx="93" lly="507" urx="317" ury="678"/>
+ <char name="adieresis" width="444" llx="37" lly="-10" urx="442" ury="623"/>
+ <char name="ae" width="667" llx="38" lly="-10" urx="632" ury="460"/>
+ <char name="agrave" width="444" llx="37" lly="-10" urx="442" ury="678"/>
+ <char name="ampersand" width="778" llx="42" lly="-13" urx="750" ury="676"/>
+ <char name="aring" width="444" llx="37" lly="-10" urx="442" ury="711"/>
+ <char name="asciicircum" width="469" llx="24" lly="297" urx="446" ury="662"/>
+ <char name="asciitilde" width="541" llx="40" lly="183" urx="502" ury="323"/>
+ <char name="asterisk" width="500" llx="69" lly="265" urx="432" ury="676"/>
+ <char name="at" width="921" llx="116" lly="-14" urx="809" ury="676"/>
+ <char name="atilde" width="444" llx="37" lly="-10" urx="442" ury="638"/>
+ <char name="b" width="500" llx="3" lly="-10" urx="468" ury="683"/>
+ <char name="backslash" width="278" llx="-9" lly="-14" urx="287" ury="676"/>
+ <char name="bar" width="200" llx="67" lly="-218" urx="133" ury="782"/>
+ <char name="braceleft" width="480" llx="100" lly="-181" urx="350" ury="680"/>
+ <char name="braceright" width="480" llx="130" lly="-181" urx="380" ury="680"/>
+ <char name="bracketleft" width="333" llx="88" lly="-156" urx="299" ury="662"/>
+ <char name="bracketright" width="333" llx="34" lly="-156" urx="245" ury="662"/>
+ <char name="breve" width="333" llx="26" lly="507" urx="307" ury="664"/>
+ <char name="brokenbar" width="200" llx="67" lly="-143" urx="133" ury="707"/>
+ <char name="bullet" width="350" llx="40" lly="196" urx="310" ury="466"/>
+ <char name="c" width="444" llx="25" lly="-10" urx="412" ury="460"/>
+ <char name="caron" width="333" llx="11" lly="507" urx="322" ury="674"/>
+ <char name="ccedilla" width="444" llx="25" lly="-215" urx="412" ury="460"/>
+ <char name="cedilla" width="333" llx="52" lly="-215" urx="261" ury="0"/>
+ <char name="cent" width="500" llx="53" lly="-138" urx="448" ury="579"/>
+ <char name="circumflex" width="333" llx="11" lly="507" urx="322" ury="674"/>
+ <char name="colon" width="278" llx="81" lly="-11" urx="192" ury="459"/>
+ <char name="comma" width="250" llx="56" lly="-141" urx="195" ury="102"/>
+ <char name="copyright" width="760" llx="38" lly="-14" urx="722" ury="676"/>
+ <char name="currency" width="500" llx="-22" lly="58" urx="522" ury="602"/>
+ <char name="d" width="500" llx="27" lly="-10" urx="491" ury="683"/>
+ <char name="dagger" width="500" llx="59" lly="-149" urx="442" ury="676"/>
+ <char name="daggerdbl" width="500" llx="58" lly="-153" urx="442" ury="676"/>
+ <char name="degree" width="400" llx="57" lly="390" urx="343" ury="676"/>
+ <char name="dieresis" width="333" llx="18" lly="581" urx="315" ury="681"/>
+ <char name="divide" width="564" llx="30" lly="-10" urx="534" ury="516"/>
+ <char name="dollar" width="500" llx="44" lly="-87" urx="457" ury="727"/>
+ <char name="dotaccent" width="333" llx="118" lly="581" urx="216" ury="681"/>
+ <char name="dotlessi" width="278" llx="16" lly="0" urx="253" ury="460"/>
+ <char name="e" width="444" llx="25" lly="-10" urx="424" ury="460"/>
+ <char name="eacute" width="444" llx="25" lly="-10" urx="424" ury="678"/>
+ <char name="ecircumflex" width="444" llx="25" lly="-10" urx="424" ury="674"/>
+ <char name="edieresis" width="444" llx="25" lly="-10" urx="424" ury="623"/>
+ <char name="egrave" width="444" llx="25" lly="-10" urx="424" ury="678"/>
+ <char name="eight" width="500" llx="56" lly="-14" urx="445" ury="676"/>
+ <char name="ellipsis" width="1000" llx="111" lly="-11" urx="888" ury="100"/>
+ <char name="emdash" width="1000" llx="0" lly="201" urx="1000" ury="250"/>
+ <char name="endash" width="500" llx="0" lly="201" urx="500" ury="250"/>
+ <char name="equal" width="564" llx="30" lly="120" urx="534" ury="386"/>
+ <char name="eth" width="500" llx="29" lly="-10" urx="471" ury="686"/>
+ <char name="exclam" width="333" llx="130" lly="-9" urx="238" ury="676"/>
+ <char name="exclamdown" width="333" llx="97" lly="-218" urx="205" ury="467"/>
+ <char name="f" width="333" llx="20" lly="0" urx="383" ury="683"/>
+ <char name="fi" width="556" llx="31" lly="0" urx="521" ury="683"/>
+ <char name="five" width="500" llx="32" lly="-14" urx="438" ury="688"/>
+ <char name="fl" width="556" llx="32" lly="0" urx="521" ury="683"/>
+ <char name="florin" width="500" llx="7" lly="-189" urx="490" ury="676"/>
+ <char name="four" width="500" llx="12" lly="0" urx="472" ury="676"/>
+ <char name="fraction" width="167" llx="-168" lly="-14" urx="331" ury="676"/>
+ <char name="g" width="500" llx="28" lly="-218" urx="470" ury="460"/>
+ <char name="germandbls" width="500" llx="12" lly="-9" urx="468" ury="683"/>
+ <char name="grave" width="333" llx="19" lly="507" urx="242" ury="678"/>
+ <char name="greater" width="564" llx="28" lly="-8" urx="536" ury="514"/>
+ <char name="guillemotleft" width="500" llx="42" lly="33" urx="456" ury="416"/>
+ <char name="guillemotright" width="500" llx="44" lly="33" urx="458" ury="416"/>
+ <char name="guilsinglleft" width="333" llx="63" lly="33" urx="285" ury="416"/>
+ <char name="guilsinglright" width="333" llx="48" lly="33" urx="270" ury="416"/>
+ <char name="h" width="500" llx="9" lly="0" urx="487" ury="683"/>
+ <char name="hungarumlaut" width="333" llx="-3" lly="507" urx="377" ury="678"/>
+ <char name="hyphen" width="333" llx="39" lly="194" urx="285" ury="257"/>
+ <char name="i" width="278" llx="16" lly="0" urx="253" ury="683"/>
+ <char name="iacute" width="278" llx="16" lly="0" urx="290" ury="678"/>
+ <char name="icircumflex" width="278" llx="-16" lly="0" urx="295" ury="674"/>
+ <char name="idieresis" width="278" llx="-9" lly="0" urx="288" ury="623"/>
+ <char name="igrave" width="278" llx="-8" lly="0" urx="253" ury="678"/>
+ <char name="j" width="278" llx="-70" lly="-218" urx="194" ury="683"/>
+ <char name="k" width="500" llx="7" lly="0" urx="505" ury="683"/>
+ <char name="l" width="278" llx="19" lly="0" urx="257" ury="683"/>
+ <char name="less" width="564" llx="28" lly="-8" urx="536" ury="514"/>
+ <char name="logicalnot" width="564" llx="30" lly="108" urx="534" ury="386"/>
+ <char name="lslash" width="278" llx="19" lly="0" urx="259" ury="683"/>
+ <char name="m" width="778" llx="16" lly="0" urx="775" ury="460"/>
+ <char name="macron" width="333" llx="11" lly="547" urx="322" ury="601"/>
+ <char name="minus" width="324" llx="30" lly="220" urx="534" ury="286"/>
+ <char name="mu" width="500" llx="36" lly="-218" urx="512" ury="450"/>
+ <char name="multiply" width="564" llx="38" lly="8" urx="527" ury="497"/>
+ <char name="n" width="500" llx="16" lly="0" urx="485" ury="460"/>
+ <char name="nine" width="500" llx="30" lly="-22" urx="459" ury="676"/>
+ <char name="ntilde" width="500" llx="16" lly="0" urx="485" ury="638"/>
+ <char name="numbersign" width="500" llx="5" lly="0" urx="496" ury="662"/>
+ <char name="o" width="500" llx="29" lly="-10" urx="470" ury="460"/>
+ <char name="oacute" width="500" llx="29" lly="-10" urx="470" ury="678"/>
+ <char name="ocircumflex" width="500" llx="29" lly="-10" urx="470" ury="674"/>
+ <char name="odieresis" width="500" llx="29" lly="-10" urx="470" ury="623"/>
+ <char name="oe" width="722" llx="30" lly="-10" urx="690" ury="460"/>
+ <char name="ogonek" width="333" llx="62" lly="-165" urx="243" ury="0"/>
+ <char name="ograve" width="500" llx="29" lly="-10" urx="470" ury="678"/>
+ <char name="one" width="500" llx="111" lly="0" urx="394" ury="676"/>
+ <char name="onehalf" width="750" llx="31" lly="-14" urx="746" ury="676"/>
+ <char name="onequarter" width="750" llx="37" lly="-14" urx="718" ury="676"/>
+ <char name="onesuperior" width="300" llx="57" lly="270" urx="248" ury="676"/>
+ <char name="ordfeminine" width="276" llx="4" lly="394" urx="270" ury="676"/>
+ <char name="ordmasculine" width="310" llx="6" lly="394" urx="304" ury="676"/>
+ <char name="oslash" width="500" llx="29" lly="-112" urx="470" ury="551"/>
+ <char name="otilde" width="500" llx="29" lly="-10" urx="470" ury="638"/>
+ <char name="p" width="500" llx="5" lly="-217" urx="470" ury="460"/>
+ <char name="paragraph" width="453" llx="-22" lly="-154" urx="450" ury="662"/>
+ <char name="parenleft" width="333" llx="48" lly="-177" urx="304" ury="676"/>
+ <char name="parenright" width="333" llx="29" lly="-177" urx="285" ury="676"/>
+ <char name="percent" width="833" llx="61" lly="-13" urx="772" ury="676"/>
+ <char name="period" width="250" llx="70" lly="-11" urx="181" ury="100"/>
+ <char name="periodcentered" width="250" llx="70" lly="199" urx="181" ury="310"/>
+ <char name="perthousand" width="1000" llx="7" lly="-19" urx="994" ury="706"/>
+ <char name="plus" width="564" llx="30" lly="0" urx="534" ury="506"/>
+ <char name="plusminus" width="564" llx="30" lly="0" urx="534" ury="506"/>
+ <char name="q" width="500" llx="24" lly="-217" urx="488" ury="460"/>
+ <char name="question" width="444" llx="68" lly="-8" urx="414" ury="676"/>
+ <char name="questiondown" width="444" llx="30" lly="-218" urx="376" ury="466"/>
+ <char name="quotedbl" width="408" llx="77" lly="431" urx="331" ury="676"/>
+ <char name="quotedblbase" width="444" llx="45" lly="-141" urx="416" ury="102"/>
+ <char name="quotedblleft" width="444" llx="43" lly="433" urx="414" ury="676"/>
+ <char name="quotedblright" width="444" llx="30" lly="433" urx="401" ury="676"/>
+ <char name="quoteleft" width="333" llx="115" lly="433" urx="254" ury="676"/>
+ <char name="quoteright" width="333" llx="79" lly="433" urx="218" ury="676"/>
+ <char name="quotesinglbase" width="333" llx="79" lly="-141" urx="218" ury="102"/>
+ <char name="quotesingle" width="180" llx="48" lly="431" urx="133" ury="676"/>
+ <char name="r" width="333" llx="5" lly="0" urx="335" ury="460"/>
+ <char name="registered" width="760" llx="38" lly="-14" urx="722" ury="676"/>
+ <char name="ring" width="333" llx="67" lly="512" urx="266" ury="711"/>
+ <char name="s" width="389" llx="51" lly="-10" urx="348" ury="460"/>
+ <char name="scaron" width="389" llx="39" lly="-10" urx="350" ury="674"/>
+ <char name="section" width="500" llx="70" lly="-148" urx="426" ury="676"/>
+ <char name="semicolon" width="278" llx="80" lly="-141" urx="219" ury="459"/>
+ <char name="seven" width="500" llx="20" lly="-8" urx="449" ury="662"/>
+ <char name="six" width="500" llx="34" lly="-14" urx="468" ury="684"/>
+ <char name="slash" width="278" llx="-9" lly="-14" urx="287" ury="676"/>
+ <char name="space" width="250" llx="0" lly="0" urx="0" ury="0"/>
+ <!-- JKT: the following has been manually added -->
+ <char name="sterling" width="500" llx="12" lly="-8" urx="490" ury="676"/>
+ <char name="t" width="278" llx="13" lly="-10" urx="279" ury="579"/>
+ <char name="thorn" width="500" llx="5" lly="-217" urx="470" ury="683"/>
+ <char name="three" width="500" llx="43" lly="-14" urx="431" ury="676"/>
+ <char name="threequarters" width="750" llx="15" lly="-14" urx="718" ury="676"/>
+ <char name="threesuperior" width="300" llx="15" lly="262" urx="291" ury="676"/>
+ <char name="tilde" width="333" llx="1" lly="532" urx="331" ury="638"/>
+ <char name="trademark" width="980" llx="30" lly="256" urx="957" ury="662"/>
+ <char name="two" width="500" llx="30" lly="0" urx="475" ury="676"/>
+ <char name="twosuperior" width="300" llx="1" lly="270" urx="296" ury="676"/>
+ <char name="u" width="500" llx="9" lly="-10" urx="479" ury="450"/>
+ <char name="uacute" width="500" llx="9" lly="-10" urx="479" ury="678"/>
+ <char name="ucircumflex" width="500" llx="9" lly="-10" urx="479" ury="674"/>
+ <char name="udieresis" width="500" llx="9" lly="-10" urx="479" ury="623"/>
+ <char name="ugrave" width="500" llx="9" lly="-10" urx="479" ury="678"/>
+ <char name="underscore" width="500" llx="0" lly="-125" urx="500" ury="-75"/>
+ <char name="v" width="500" llx="19" lly="-14" urx="477" ury="450"/>
+ <char name="w" width="722" llx="21" lly="-14" urx="694" ury="450"/>
+ <char name="x" width="500" llx="17" lly="0" urx="479" ury="450"/>
+ <char name="y" width="500" llx="14" lly="-218" urx="475" ury="450"/>
+ <char name="yacute" width="500" llx="14" lly="-218" urx="475" ury="678"/>
+ <char name="ydieresis" width="500" llx="14" lly="-218" urx="475" ury="623"/>
+ <char name="yen" width="500" llx="-53" lly="0" urx="512" ury="662"/>
+ <char name="z" width="444" llx="27" lly="0" urx="418" ury="450"/>
+ <char name="zcaron" width="444" llx="27" lly="0" urx="418" ury="674"/>
+ <char name="zero" width="500" llx="24" lly="-14" urx="476" ury="676"/>
+ </char-metrics>
+ <kerning kpx1="79">
+ <pair kern="-35" kpx2="65"/>
+ <pair kern="-35" kpx2="87"/>
+ <pair kern="-50" kpx2="89"/>
+ <pair kern="-40" kpx2="84"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-50" kpx2="86"/>
+ <pair kern="-40" kpx2="88"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="107">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-10" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="112">
+ <pair kern="-10" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="80">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="-15" kpx2="97"/>
+ <pair kern="-92" kpx2="65"/>
+ <pair kern="-111" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-111" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="86">
+ <pair kern="-129" kpx2="111"/>
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-74" kpx2="58"/>
+ <pair kern="-15" kpx2="71"/>
+ <pair kern="-129" kpx2="44"/>
+ <pair kern="-74" kpx2="59"/>
+ <pair kern="-100" kpx2="45"/>
+ <pair kern="-60" kpx2="105"/>
+ <pair kern="-135" kpx2="65"/>
+ <pair kern="-111" kpx2="97"/>
+ <pair kern="-75" kpx2="117"/>
+ <pair kern="-129" kpx2="46"/>
+ <pair kern="-111" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="118">
+ <pair kern="-20" kpx2="111"/>
+ <pair kern="-25" kpx2="97"/>
+ <pair kern="-65" kpx2="46"/>
+ <pair kern="-15" kpx2="101"/>
+ <pair kern="-65" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="32">
+ <pair kern="-55" kpx2="65"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="0" kpx2="147"/>
+ <pair kern="-90" kpx2="89"/>
+ <pair kern="-18" kpx2="84"/>
+ <pair kern="0" kpx2="145"/>
+ <pair kern="-50" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="97">
+ <pair kern="-15" kpx2="119"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="-20" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="70">
+ <pair kern="-15" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="-15" kpx2="97"/>
+ <pair kern="-74" kpx2="65"/>
+ <pair kern="-80" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-80" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="85">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="100">
+ <pair kern="0" kpx2="100"/>
+ <pair kern="0" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="83">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="122">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="68">
+ <pair kern="-40" kpx2="65"/>
+ <pair kern="-30" kpx2="87"/>
+ <pair kern="-55" kpx2="89"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-40" kpx2="86"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="146">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-50" kpx2="100"/>
+ <pair kern="-74" kpx2="32"/>
+ <pair kern="-74" kpx2="146"/>
+ <pair kern="-50" kpx2="114"/>
+ <pair kern="-18" kpx2="116"/>
+ <pair kern="-10" kpx2="108"/>
+ <pair kern="-55" kpx2="115"/>
+ <pair kern="-50" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="58">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="119">
+ <pair kern="-10" kpx2="111"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-65" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-65" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="75">
+ <pair kern="-35" kpx2="111"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-15" kpx2="117"/>
+ <pair kern="-25" kpx2="121"/>
+ <pair kern="-25" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="82">
+ <pair kern="-40" kpx2="79"/>
+ <pair kern="-55" kpx2="87"/>
+ <pair kern="-40" kpx2="85"/>
+ <pair kern="-65" kpx2="89"/>
+ <pair kern="-60" kpx2="84"/>
+ <pair kern="-80" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="145">
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="-74" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="103">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="-5" kpx2="97"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="66">
+ <pair kern="-35" kpx2="65"/>
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="98">
+ <pair kern="-20" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-40" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="-15" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="81">
+ <pair kern="-10" kpx2="85"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="44">
+ <pair kern="-70" kpx2="148"/>
+ <pair kern="0" kpx2="32"/>
+ <pair kern="-70" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="102">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="0" kpx2="111"/>
+ <pair kern="-20" kpx2="105"/>
+ <pair kern="55" kpx2="146"/>
+ <pair kern="-10" kpx2="97"/>
+ <pair kern="-25" kpx2="102"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="84">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-18" kpx2="79"/>
+ <pair kern="-80" kpx2="119"/>
+ <pair kern="-50" kpx2="58"/>
+ <pair kern="-35" kpx2="114"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-74" kpx2="44"/>
+ <pair kern="-55" kpx2="59"/>
+ <pair kern="-92" kpx2="45"/>
+ <pair kern="-35" kpx2="105"/>
+ <pair kern="-93" kpx2="65"/>
+ <pair kern="-80" kpx2="97"/>
+ <pair kern="-45" kpx2="117"/>
+ <pair kern="-80" kpx2="121"/>
+ <pair kern="-74" kpx2="46"/>
+ <pair kern="-70" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="121">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-65" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="-65" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="120">
+ <pair kern="-15" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="101">
+ <pair kern="-25" kpx2="119"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="-15" kpx2="103"/>
+ <pair kern="0" kpx2="98"/>
+ <pair kern="-15" kpx2="120"/>
+ <pair kern="-25" kpx2="118"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="99">
+ <pair kern="0" kpx2="107"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="87">
+ <pair kern="-80" kpx2="111"/>
+ <pair kern="-10" kpx2="79"/>
+ <pair kern="-37" kpx2="58"/>
+ <pair kern="0" kpx2="104"/>
+ <pair kern="-92" kpx2="44"/>
+ <pair kern="-37" kpx2="59"/>
+ <pair kern="-65" kpx2="45"/>
+ <pair kern="-40" kpx2="105"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-80" kpx2="97"/>
+ <pair kern="-50" kpx2="117"/>
+ <pair kern="-73" kpx2="121"/>
+ <pair kern="-92" kpx2="46"/>
+ <pair kern="-80" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="104">
+ <pair kern="-5" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="71">
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="105">
+ <pair kern="-25" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="65">
+ <pair kern="-55" kpx2="79"/>
+ <pair kern="-111" kpx2="146"/>
+ <pair kern="-92" kpx2="119"/>
+ <pair kern="-90" kpx2="87"/>
+ <pair kern="-40" kpx2="67"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-55" kpx2="81"/>
+ <pair kern="-40" kpx2="71"/>
+ <pair kern="-135" kpx2="86"/>
+ <pair kern="-74" kpx2="118"/>
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-55" kpx2="85"/>
+ <pair kern="0" kpx2="117"/>
+ <pair kern="-105" kpx2="89"/>
+ <pair kern="-92" kpx2="121"/>
+ <pair kern="-111" kpx2="84"/>
+ </kerning>
+ <kerning kpx1="147">
+ <pair kern="-80" kpx2="65"/>
+ <pair kern="0" kpx2="145"/>
+ </kerning>
+ <kerning kpx1="78">
+ <pair kern="-35" kpx2="65"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="115">
+ <pair kern="0" kpx2="119"/>
+ </kerning>
+ <kerning kpx1="111">
+ <pair kern="-25" kpx2="119"/>
+ <pair kern="-10" kpx2="121"/>
+ <pair kern="0" kpx2="103"/>
+ <pair kern="0" kpx2="120"/>
+ <pair kern="-15" kpx2="118"/>
+ </kerning>
+ <kerning kpx1="114">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="100"/>
+ <pair kern="0" kpx2="107"/>
+ <pair kern="0" kpx2="114"/>
+ <pair kern="0" kpx2="99"/>
+ <pair kern="0" kpx2="112"/>
+ <pair kern="-18" kpx2="103"/>
+ <pair kern="0" kpx2="108"/>
+ <pair kern="0" kpx2="113"/>
+ <pair kern="0" kpx2="118"/>
+ <pair kern="-40" kpx2="44"/>
+ <pair kern="-20" kpx2="45"/>
+ <pair kern="0" kpx2="105"/>
+ <pair kern="0" kpx2="109"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="116"/>
+ <pair kern="0" kpx2="121"/>
+ <pair kern="-55" kpx2="46"/>
+ <pair kern="0" kpx2="110"/>
+ <pair kern="0" kpx2="115"/>
+ <pair kern="0" kpx2="101"/>
+ </kerning>
+ <kerning kpx1="108">
+ <pair kern="-10" kpx2="119"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="76">
+ <pair kern="0" kpx2="148"/>
+ <pair kern="-92" kpx2="146"/>
+ <pair kern="-74" kpx2="87"/>
+ <pair kern="-100" kpx2="89"/>
+ <pair kern="-55" kpx2="121"/>
+ <pair kern="-92" kpx2="84"/>
+ <pair kern="-100" kpx2="86"/>
+ </kerning>
+ <kerning kpx1="148">
+ <pair kern="0" kpx2="32"/>
+ </kerning>
+ <kerning kpx1="109">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="121"/>
+ </kerning>
+ <kerning kpx1="89">
+ <pair kern="-110" kpx2="111"/>
+ <pair kern="-111" kpx2="45"/>
+ <pair kern="-55" kpx2="105"/>
+ <pair kern="-30" kpx2="79"/>
+ <pair kern="-92" kpx2="58"/>
+ <pair kern="-100" kpx2="97"/>
+ <pair kern="-120" kpx2="65"/>
+ <pair kern="-111" kpx2="117"/>
+ <pair kern="-129" kpx2="46"/>
+ <pair kern="-100" kpx2="101"/>
+ <pair kern="-92" kpx2="59"/>
+ <pair kern="-129" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="74">
+ <pair kern="0" kpx2="111"/>
+ <pair kern="0" kpx2="97"/>
+ <pair kern="-60" kpx2="65"/>
+ <pair kern="0" kpx2="117"/>
+ <pair kern="0" kpx2="46"/>
+ <pair kern="0" kpx2="101"/>
+ <pair kern="0" kpx2="44"/>
+ </kerning>
+ <kerning kpx1="46">
+ <pair kern="-70" kpx2="148"/>
+ <pair kern="-70" kpx2="146"/>
+ </kerning>
+ <kerning kpx1="110">
+ <pair kern="0" kpx2="117"/>
+ <pair kern="-15" kpx2="121"/>
+ <pair kern="-40" kpx2="118"/>
+ </kerning>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/ZapfDingbats.xml b/fop-core/src/main/codegen/fonts/ZapfDingbats.xml
new file mode 100644
index 000000000..bd72901dc
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/ZapfDingbats.xml
@@ -0,0 +1,236 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<font-metrics>
+ <font-name>ZapfDingbats</font-name>
+ <full-name>ITC Zapf Dingbats</full-name>
+ <family-name>ZapfDingbats</family-name>
+ <class-name>ZapfDingbats</class-name>
+ <encoding>ZapfDingbatsEncoding</encoding>
+ <underline-position>-100</underline-position>
+ <underline-thickness>50</underline-thickness>
+ <cap-height>820</cap-height>
+ <x-height>426</x-height>
+ <ascender>820</ascender>
+ <descender>-143</descender>
+ <first-char>32</first-char>
+ <last-char>255</last-char>
+ <char-metrics>
+ <char name="space" width="278" llx="0" lly="0" urx="0" ury="0"/>
+ <char name="a1" width="974" llx="35" lly="72" urx="939" ury="621"/>
+ <char name="a2" width="961" llx="35" lly="81" urx="927" ury="611"/>
+ <char name="a202" width="974" llx="35" lly="72" urx="939" ury="621"/>
+ <char name="a3" width="980" llx="35" lly="0" urx="945" ury="692"/>
+ <char name="a4" width="719" llx="34" lly="139" urx="685" ury="566"/>
+ <char name="a5" width="789" llx="35" lly="-14" urx="755" ury="705"/>
+ <char name="a119" width="790" llx="35" lly="-14" urx="755" ury="705"/>
+ <char name="a118" width="791" llx="35" lly="-13" urx="761" ury="705"/>
+ <char name="a117" width="690" llx="34" lly="138" urx="655" ury="553"/>
+ <char name="a11" width="960" llx="35" lly="123" urx="925" ury="568"/>
+ <char name="a12" width="939" llx="35" lly="134" urx="904" ury="559"/>
+ <char name="a13" width="549" llx="29" lly="-11" urx="516" ury="705"/>
+ <char name="a14" width="855" llx="34" lly="59" urx="820" ury="632"/>
+ <char name="a15" width="911" llx="35" lly="50" urx="876" ury="642"/>
+ <char name="a16" width="933" llx="35" lly="139" urx="899" ury="550"/>
+ <char name="a105" width="911" llx="35" lly="50" urx="876" ury="642"/>
+ <char name="a17" width="945" llx="35" lly="139" urx="909" ury="553"/>
+ <char name="a18" width="974" llx="35" lly="104" urx="938" ury="587"/>
+ <char name="a19" width="755" llx="34" lly="-13" urx="721" ury="705"/>
+ <char name="a20" width="846" llx="36" lly="-14" urx="811" ury="705"/>
+ <char name="a21" width="762" llx="35" lly="0" urx="727" ury="692"/>
+ <char name="a22" width="761" llx="35" lly="0" urx="727" ury="692"/>
+ <char name="a23" width="571" llx="-1" lly="-68" urx="571" ury="661"/>
+ <char name="a24" width="677" llx="36" lly="-13" urx="642" ury="705"/>
+ <char name="a25" width="763" llx="35" lly="0" urx="728" ury="692"/>
+ <char name="a26" width="760" llx="35" lly="0" urx="726" ury="692"/>
+ <char name="a27" width="759" llx="35" lly="0" urx="725" ury="692"/>
+ <char name="a28" width="754" llx="35" lly="0" urx="720" ury="692"/>
+ <char name="a6" width="494" llx="35" lly="0" urx="460" ury="692"/>
+ <char name="a7" width="552" llx="35" lly="0" urx="517" ury="692"/>
+ <char name="a8" width="537" llx="35" lly="0" urx="503" ury="692"/>
+ <char name="a9" width="577" llx="35" lly="96" urx="542" ury="596"/>
+ <char name="a10" width="692" llx="35" lly="-14" urx="657" ury="705"/>
+ <char name="a29" width="786" llx="35" lly="-14" urx="751" ury="705"/>
+ <char name="a30" width="788" llx="35" lly="-14" urx="752" ury="705"/>
+ <char name="a31" width="788" llx="35" lly="-14" urx="753" ury="705"/>
+ <char name="a32" width="790" llx="35" lly="-14" urx="756" ury="705"/>
+ <char name="a33" width="793" llx="35" lly="-13" urx="759" ury="705"/>
+ <char name="a34" width="794" llx="35" lly="-13" urx="759" ury="705"/>
+ <char name="a35" width="816" llx="35" lly="-14" urx="782" ury="705"/>
+ <char name="a36" width="823" llx="35" lly="-14" urx="787" ury="705"/>
+ <char name="a37" width="789" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a38" width="841" llx="35" lly="-14" urx="807" ury="705"/>
+ <char name="a39" width="823" llx="35" lly="-14" urx="789" ury="705"/>
+ <char name="a40" width="833" llx="35" lly="-14" urx="798" ury="705"/>
+ <char name="a41" width="816" llx="35" lly="-13" urx="782" ury="705"/>
+ <char name="a42" width="831" llx="35" lly="-14" urx="796" ury="705"/>
+ <char name="a43" width="923" llx="35" lly="-14" urx="888" ury="705"/>
+ <char name="a44" width="744" llx="35" lly="0" urx="710" ury="692"/>
+ <char name="a45" width="723" llx="35" lly="0" urx="688" ury="692"/>
+ <char name="a46" width="749" llx="35" lly="0" urx="714" ury="692"/>
+ <char name="a47" width="790" llx="34" lly="-14" urx="756" ury="705"/>
+ <char name="a48" width="792" llx="35" lly="-14" urx="758" ury="705"/>
+ <char name="a49" width="695" llx="35" lly="-14" urx="661" ury="706"/>
+ <char name="a50" width="776" llx="35" lly="-6" urx="741" ury="699"/>
+ <char name="a51" width="768" llx="35" lly="-7" urx="734" ury="699"/>
+ <char name="a52" width="792" llx="35" lly="-14" urx="757" ury="705"/>
+ <char name="a53" width="759" llx="35" lly="0" urx="725" ury="692"/>
+ <char name="a54" width="707" llx="35" lly="-13" urx="672" ury="704"/>
+ <char name="a55" width="708" llx="35" lly="-14" urx="672" ury="705"/>
+ <char name="a56" width="682" llx="35" lly="-14" urx="647" ury="705"/>
+ <char name="a57" width="701" llx="35" lly="-14" urx="666" ury="705"/>
+ <char name="a58" width="826" llx="35" lly="-14" urx="791" ury="705"/>
+ <char name="a59" width="815" llx="35" lly="-14" urx="780" ury="705"/>
+ <char name="a60" width="789" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a61" width="789" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a62" width="707" llx="34" lly="-14" urx="673" ury="705"/>
+ <char name="a63" width="687" llx="36" lly="0" urx="651" ury="692"/>
+ <char name="a64" width="696" llx="35" lly="0" urx="661" ury="691"/>
+ <char name="a65" width="689" llx="35" lly="0" urx="655" ury="692"/>
+ <char name="a66" width="786" llx="34" lly="-14" urx="751" ury="705"/>
+ <char name="a67" width="787" llx="35" lly="-14" urx="752" ury="705"/>
+ <char name="a68" width="713" llx="35" lly="-14" urx="678" ury="705"/>
+ <char name="a69" width="791" llx="35" lly="-14" urx="756" ury="705"/>
+ <char name="a70" width="785" llx="36" lly="-14" urx="751" ury="705"/>
+ <char name="a71" width="791" llx="35" lly="-14" urx="757" ury="705"/>
+ <char name="a72" width="873" llx="35" lly="-14" urx="838" ury="705"/>
+ <char name="a73" width="761" llx="35" lly="0" urx="726" ury="692"/>
+ <char name="a74" width="762" llx="35" lly="0" urx="727" ury="692"/>
+ <char name="a203" width="762" llx="35" lly="0" urx="727" ury="692"/>
+ <char name="a75" width="759" llx="35" lly="0" urx="725" ury="692"/>
+ <char name="a204" width="759" llx="35" lly="0" urx="725" ury="692"/>
+ <char name="a76" width="892" llx="35" lly="0" urx="858" ury="705"/>
+ <char name="a77" width="892" llx="35" lly="-14" urx="858" ury="692"/>
+ <char name="a78" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a79" width="784" llx="35" lly="-14" urx="749" ury="705"/>
+ <char name="a81" width="438" llx="35" lly="-14" urx="403" ury="705"/>
+ <char name="a82" width="138" llx="35" lly="0" urx="104" ury="692"/>
+ <char name="a83" width="277" llx="35" lly="0" urx="242" ury="692"/>
+ <char name="a84" width="415" llx="35" lly="0" urx="380" ury="692"/>
+ <char name="a97" width="392" llx="35" lly="263" urx="357" ury="705"/>
+ <char name="a98" width="392" llx="34" lly="263" urx="357" ury="705"/>
+ <char name="a99" width="668" llx="35" lly="263" urx="633" ury="705"/>
+ <char name="a100" width="668" llx="36" lly="263" urx="634" ury="705"/>
+ <char name="a101" width="732" llx="35" lly="-143" urx="697" ury="806"/>
+ <char name="a102" width="544" llx="56" lly="-14" urx="488" ury="706"/>
+ <char name="a103" width="544" llx="34" lly="-14" urx="508" ury="705"/>
+ <char name="a104" width="910" llx="35" lly="40" urx="875" ury="651"/>
+ <char name="a106" width="667" llx="35" lly="-14" urx="633" ury="705"/>
+ <char name="a107" width="760" llx="35" lly="-14" urx="726" ury="705"/>
+ <char name="a108" width="760" llx="0" lly="121" urx="758" ury="569"/>
+ <char name="a112" width="776" llx="35" lly="0" urx="741" ury="705"/>
+ <char name="a111" width="595" llx="34" lly="-14" urx="560" ury="705"/>
+ <char name="a110" width="694" llx="35" lly="-14" urx="659" ury="705"/>
+ <char name="a109" width="626" llx="34" lly="0" urx="591" ury="705"/>
+ <char name="a120" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a121" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a122" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a123" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a124" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a125" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a126" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a127" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a128" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a129" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a130" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a131" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a132" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a133" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a134" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a135" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a136" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a137" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a138" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a139" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a140" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a141" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a142" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a143" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a144" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a145" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a146" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a147" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a148" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a149" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a150" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a151" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a152" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a153" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a154" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a155" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a156" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a157" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a158" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a159" width="788" llx="35" lly="-14" urx="754" ury="705"/>
+ <char name="a160" width="894" llx="35" lly="58" urx="860" ury="634"/>
+ <char name="a161" width="838" llx="35" lly="152" urx="803" ury="540"/>
+ <char name="a163" width="1016" llx="34" lly="152" urx="981" ury="540"/>
+ <char name="a164" width="458" llx="35" lly="-127" urx="422" ury="820"/>
+ <char name="a196" width="748" llx="35" lly="94" urx="698" ury="597"/>
+ <char name="a165" width="924" llx="35" lly="140" urx="890" ury="552"/>
+ <char name="a192" width="748" llx="35" lly="94" urx="698" ury="597"/>
+ <char name="a166" width="918" llx="35" lly="166" urx="884" ury="526"/>
+ <char name="a167" width="927" llx="35" lly="32" urx="892" ury="660"/>
+ <char name="a168" width="928" llx="35" lly="129" urx="891" ury="562"/>
+ <char name="a169" width="928" llx="35" lly="128" urx="893" ury="563"/>
+ <char name="a170" width="834" llx="35" lly="155" urx="799" ury="537"/>
+ <char name="a171" width="873" llx="35" lly="93" urx="838" ury="599"/>
+ <char name="a172" width="828" llx="35" lly="104" urx="791" ury="588"/>
+ <char name="a173" width="924" llx="35" lly="98" urx="889" ury="594"/>
+ <char name="a162" width="924" llx="35" lly="98" urx="889" ury="594"/>
+ <char name="a174" width="917" llx="35" lly="0" urx="882" ury="692"/>
+ <char name="a175" width="930" llx="35" lly="84" urx="896" ury="608"/>
+ <char name="a176" width="931" llx="35" lly="84" urx="896" ury="608"/>
+ <char name="a177" width="463" llx="35" lly="-99" urx="429" ury="791"/>
+ <char name="a178" width="883" llx="35" lly="71" urx="848" ury="623"/>
+ <char name="a179" width="836" llx="35" lly="44" urx="802" ury="648"/>
+ <char name="a193" width="836" llx="35" lly="44" urx="802" ury="648"/>
+ <char name="a180" width="867" llx="35" lly="101" urx="832" ury="591"/>
+ <char name="a199" width="867" llx="35" lly="101" urx="832" ury="591"/>
+ <char name="a181" width="696" llx="35" lly="44" urx="661" ury="648"/>
+ <char name="a200" width="696" llx="35" lly="44" urx="661" ury="648"/>
+ <char name="a182" width="874" llx="35" lly="77" urx="840" ury="619"/>
+ <char name="a201" width="874" llx="35" lly="73" urx="840" ury="615"/>
+ <char name="a183" width="760" llx="35" lly="0" urx="725" ury="692"/>
+ <char name="a184" width="946" llx="35" lly="160" urx="911" ury="533"/>
+ <char name="a197" width="771" llx="34" lly="37" urx="736" ury="655"/>
+ <char name="a185" width="865" llx="35" lly="207" urx="830" ury="481"/>
+ <char name="a194" width="771" llx="34" lly="37" urx="736" ury="655"/>
+ <char name="a198" width="888" llx="34" lly="-19" urx="853" ury="712"/>
+ <char name="a186" width="967" llx="35" lly="124" urx="932" ury="568"/>
+ <char name="a195" width="888" llx="34" lly="-19" urx="853" ury="712"/>
+ <char name="a187" width="831" llx="35" lly="113" urx="796" ury="579"/>
+ <char name="a188" width="873" llx="36" lly="118" urx="838" ury="578"/>
+ <char name="a189" width="927" llx="35" lly="150" urx="891" ury="542"/>
+ <char name="a190" width="970" llx="35" lly="76" urx="931" ury="616"/>
+ <char name="a191" width="918" llx="34" lly="99" urx="884" ury="593"/>
+ <char name="a86" width="410" llx="35" lly="0" urx="375" ury="692"/>
+ <char name="a85" width="509" llx="35" lly="0" urx="475" ury="692"/>
+ <char name="a95" width="334" llx="35" lly="0" urx="299" ury="692"/>
+ <char name="a205" width="509" llx="35" lly="0" urx="475" ury="692"/>
+ <char name="a89" width="390" llx="35" lly="-14" urx="356" ury="705"/>
+ <char name="a87" width="234" llx="35" lly="-14" urx="199" ury="705"/>
+ <char name="a91" width="276" llx="35" lly="0" urx="242" ury="692"/>
+ <char name="a90" width="390" llx="35" lly="-14" urx="355" ury="705"/>
+ <char name="a206" width="410" llx="35" lly="0" urx="375" ury="692"/>
+ <char name="a94" width="317" llx="35" lly="0" urx="283" ury="692"/>
+ <char name="a93" width="317" llx="35" lly="0" urx="283" ury="692"/>
+ <char name="a92" width="276" llx="35" lly="0" urx="242" ury="692"/>
+ <char name="a96" width="334" llx="35" lly="0" urx="299" ury="692"/>
+ <char name="a88" width="234" llx="35" lly="-14" urx="199" ury="705"/>
+ </char-metrics>
+</font-metrics>
diff --git a/fop-core/src/main/codegen/fonts/charlist.xml b/fop-core/src/main/codegen/fonts/charlist.xml
new file mode 100644
index 000000000..110714af6
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/charlist.xml
@@ -0,0 +1,633 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- JKT: these mappings were kindly produced by Fotis Jannidis -->
+<font-mappings>
+ <map adobe-name="A" win-ansi="0x0041" unicode="0x0041"/>
+ <map adobe-name="AE" win-ansi="0x00C6" unicode="0x00C6"/>
+ <map adobe-name="Aacute" win-ansi="0x00C1" unicode="0x00C1"/>
+ <map adobe-name="Acircumflex" win-ansi="0x00C2" unicode="0x00C2"/>
+ <map adobe-name="Adieresis" win-ansi="0x00C4" unicode="0x00C4"/>
+ <map adobe-name="Agrave" win-ansi="0x00C0" unicode="0x00C0"/>
+ <map adobe-name="Aring" win-ansi="0x00C5" unicode="0x00C5"/>
+ <map adobe-name="Atilde" win-ansi="0x00C3" unicode="0x00C3"/>
+ <map adobe-name="B" win-ansi="0x0042" unicode="0x0042"/>
+ <map adobe-name="C" win-ansi="0x0043" unicode="0x0043"/>
+ <map adobe-name="Ccedilla" win-ansi="0x00C7" unicode="0x00C7"/>
+ <map adobe-name="D" win-ansi="0x0044" unicode="0x0044"/>
+ <map adobe-name="E" win-ansi="0x0045" unicode="0x0045"/>
+ <map adobe-name="Eacute" win-ansi="0x00C9" unicode="0x00C9"/>
+ <map adobe-name="Ecircumflex" win-ansi="0x00CA" unicode="0x00CA"/>
+ <map adobe-name="Edieresis" win-ansi="0x00CB" unicode="0x00CB"/>
+ <map adobe-name="Egrave" win-ansi="0x00C8" unicode="0x00C8"/>
+ <map adobe-name="Eth" win-ansi="0x00D0" unicode="0x00D0"/>
+ <map adobe-name="Euro" win-ansi="0x0080" unicode="0x20AC"/>
+ <map adobe-name="F" win-ansi="0x0046" unicode="0x0046"/>
+ <map adobe-name="G" win-ansi="0x0047" unicode="0x0047"/>
+ <map adobe-name="Gcaron" win-ansi="-1" unicode="0x01E6"/>
+ <map adobe-name="H" win-ansi="0x0048" unicode="0x0048"/>
+ <map adobe-name="I" win-ansi="0x0049" unicode="0x0049"/>
+ <map adobe-name="Iacute" win-ansi="0x00CD" unicode="0x00CD"/>
+ <map adobe-name="Icircumflex" win-ansi="0x00CE" unicode="0x00CE"/>
+ <map adobe-name="Idieresis" win-ansi="0x00CF" unicode="0x00CF"/>
+ <map adobe-name="Idot" win-ansi="-1" unicode="0x0130"/>
+ <map adobe-name="Igrave" win-ansi="0x00CC" unicode="0x00CC"/>
+ <map adobe-name="IJ" win-ansi="-1" unicode="0x0132"/>
+ <map adobe-name="J" win-ansi="0x004A" unicode="0x004A"/>
+ <map adobe-name="K" win-ansi="0x004B" unicode="0x004B"/>
+ <map adobe-name="L" win-ansi="0x004C" unicode="0x004C"/>
+ <map adobe-name="Lslash" win-ansi="-1" unicode="0x0141"/>
+ <map adobe-name="M" win-ansi="0x004D" unicode="0x004D"/>
+ <map adobe-name="N" win-ansi="0x004E" unicode="0x004E"/>
+ <map adobe-name="Ntilde" win-ansi="0x00D1" unicode="0x00D1"/>
+ <map adobe-name="O" win-ansi="0x004F" unicode="0x004F"/>
+ <map adobe-name="OE" win-ansi="0x008C" unicode="0x0152"/>
+ <map adobe-name="Oacute" win-ansi="0x00D3" unicode="0x00D3"/>
+ <map adobe-name="Ocircumflex" win-ansi="0x00D4" unicode="0x00D4"/>
+ <map adobe-name="Odieresis" win-ansi="0x00D6" unicode="0x00D6"/>
+ <map adobe-name="Ograve" win-ansi="0x00D2" unicode="0x00D2"/>
+ <map adobe-name="Oslash" win-ansi="0x00D8" unicode="0x00D8"/>
+ <map adobe-name="Otilde" win-ansi="0x00D5" unicode="0x00D5"/>
+ <map adobe-name="P" win-ansi="0x0050" unicode="0x0050"/>
+ <map adobe-name="Q" win-ansi="0x0051" unicode="0x0051"/>
+ <map adobe-name="R" win-ansi="0x0052" unicode="0x0052"/>
+ <map adobe-name="S" win-ansi="0x0053" unicode="0x0053"/>
+ <map adobe-name="Scaron" win-ansi="0x008A" unicode="0x0160"/>
+ <map adobe-name="Scedilla" win-ansi="-1" unicode="0x015E"/>
+ <map adobe-name="T" win-ansi="0x0054" unicode="0x0054"/>
+ <map adobe-name="Thorn" win-ansi="0x00DE" unicode="0x00DE"/>
+ <map adobe-name="U" win-ansi="0x0055" unicode="0x0055"/>
+ <map adobe-name="Uacute" win-ansi="0x00DA" unicode="0x00DA"/>
+ <map adobe-name="Ucircumflex" win-ansi="0x00DB" unicode="0x00DB"/>
+ <map adobe-name="Udieresis" win-ansi="0x00DC" unicode="0x00DC"/>
+ <map adobe-name="Ugrave" win-ansi="0x00D9" unicode="0x00D9"/>
+ <map adobe-name="V" win-ansi="0x0056" unicode="0x0056"/>
+ <map adobe-name="W" win-ansi="0x0057" unicode="0x0057"/>
+ <map adobe-name="X" win-ansi="0x0058" unicode="0x0058"/>
+ <map adobe-name="Y" win-ansi="0x0059" unicode="0x0059"/>
+ <map adobe-name="Yacute" win-ansi="0x00DD" unicode="0x00DD"/>
+ <map adobe-name="Ydieresis" win-ansi="0x009F" unicode="0x0178"/>
+ <map adobe-name="Z" win-ansi="0x005A" unicode="0x005A"/>
+ <map adobe-name="Zcaron" win-ansi="-1" unicode="0x017D"/>
+ <map adobe-name="a" win-ansi="0x0061" unicode="0x0061"/>
+ <map adobe-name="aacute" win-ansi="0x00E1" unicode="0x00E1"/>
+ <map adobe-name="acircumflex" win-ansi="0x00E2" unicode="0x00E2"/>
+ <map adobe-name="acute" win-ansi="0x00B4" unicode="0x00B4"/>
+ <map adobe-name="adieresis" win-ansi="0x00E4" unicode="0x00E4"/>
+ <map adobe-name="ae" win-ansi="0x00E6" unicode="0x00E6"/>
+ <map adobe-name="agrave" win-ansi="0x00E0" unicode="0x00E0"/>
+ <map adobe-name="ampersand" win-ansi="0x0026" unicode="0x0026"/>
+ <map adobe-name="aring" win-ansi="0x00E5" unicode="0x00E5"/>
+ <!-- fj <map adobe-name="arrowboth" win-ansi="-1" unicode="0x2195"/>-->
+ <!-- fj <map adobe-name="arrowdown" win-ansi="-1" unicode="0x2193"/>-->
+ <!-- fj <map adobe-name="arrowleft" win-ansi="-1" unicode="0x2194"/>-->
+ <!-- fj <map adobe-name="arrowright" win-ansi="-1" unicode="0x2192"/>-->
+ <!-- fj <map adobe-name="arrowup" win-ansi="-1" unicode="0x2191"/>-->
+ <map adobe-name="asciicircum" win-ansi="0x005E" unicode="0x005E"/>
+ <map adobe-name="asciitilde" win-ansi="0x007E" unicode="0x007E"/>
+ <map adobe-name="asterisk" win-ansi="0x002A" unicode="0x002A"/>
+ <map adobe-name="at" win-ansi="0x0040" unicode="0x0040"/>
+ <map adobe-name="atilde" win-ansi="0x00E3" unicode="0x00E3"/>
+ <map adobe-name="b" win-ansi="0x0062" unicode="0x0062"/>
+ <map adobe-name="backslash" win-ansi="0x005C" unicode="0x005C"/>
+ <map adobe-name="bar" win-ansi="0x007C" unicode="0x007C"/>
+ <map adobe-name="braceleft" win-ansi="0x007B" unicode="0x007B"/>
+ <map adobe-name="braceright" win-ansi="0x007D" unicode="0x007D"/>
+ <map adobe-name="bracketleft" win-ansi="0x005B" unicode="0x005B"/>
+ <map adobe-name="bracketright" win-ansi="0x005D" unicode="0x005D"/>
+ <map adobe-name="breve" win-ansi="-1" unicode="0x02D8"/>
+ <map adobe-name="brokenbar" win-ansi="0x00A6" unicode="0x00A6"/>
+ <map adobe-name="bullet" win-ansi="0x0095" unicode="0x2022"/>
+ <map adobe-name="c" win-ansi="0x0063" unicode="0x0063"/>
+ <map adobe-name="caron" win-ansi="-1" unicode="0x02C7"/>
+ <map adobe-name="ccedilla" win-ansi="0x00E7" unicode="0x00E7"/>
+ <map adobe-name="cedilla" win-ansi="0x00B8" unicode="0x00B8"/>
+ <map adobe-name="cent" win-ansi="0x00A2" unicode="0x00A2"/>
+ <map adobe-name="circumflex" win-ansi="0x0088" unicode="0x02C6"/>
+ <map adobe-name="colon" win-ansi="0x003A" unicode="0x003A"/>
+ <map adobe-name="comma" win-ansi="0x002C" unicode="0x002C"/>
+ <map adobe-name="copyright" win-ansi="0x00A9" unicode="0x00A9"/>
+ <map adobe-name="currency" win-ansi="0x00A4" unicode="0x00A4"/>
+ <map adobe-name="d" win-ansi="0x0064" unicode="0x0064"/>
+ <map adobe-name="dagger" win-ansi="0x0086" unicode="0x2020"/>
+ <map adobe-name="daggerdbl" win-ansi="0x0087" unicode="0x2021"/>
+ <map adobe-name="degree" win-ansi="0x00B0" unicode="0x00B0"/>
+ <map adobe-name="dieresis" win-ansi="0x00A8" unicode="0x00A8"/>
+ <map adobe-name="divide" win-ansi="0x00F7" unicode="0x00F7"/>
+ <map adobe-name="dollar" win-ansi="0x0024" unicode="0x0024"/>
+ <map adobe-name="dotaccent" win-ansi="-1" unicode="0x02D9"/>
+ <map adobe-name="dotlessi" win-ansi="-1" unicode="0x0269"/>
+ <map adobe-name="e" win-ansi="0x0065" unicode="0x0065"/>
+ <map adobe-name="eacute" win-ansi="0x00E9" unicode="0x00E9"/>
+ <map adobe-name="ecircumflex" win-ansi="0x00EA" unicode="0x00EA"/>
+ <map adobe-name="edieresis" win-ansi="0x00EB" unicode="0x00EB"/>
+ <map adobe-name="egrave" win-ansi="0x00E8" unicode="0x00E8"/>
+ <map adobe-name="eight" win-ansi="0x0038" unicode="0x0038"/>
+ <map adobe-name="ellipsis" win-ansi="0x0085" unicode="0x2026"/>
+ <map adobe-name="emdash" win-ansi="0x0097" unicode="0x2014"/>
+ <map adobe-name="endash" win-ansi="0x0096" unicode="0x2013"/>
+ <map adobe-name="equal" win-ansi="0x003D" unicode="0x003D"/>
+ <map adobe-name="eth" win-ansi="0x00F0" unicode="0x00F0"/>
+ <map adobe-name="exclam" win-ansi="0x0021" unicode="0x0021"/>
+ <map adobe-name="exclamdown" win-ansi="0x00A1" unicode="0x00A1"/>
+ <map adobe-name="f" win-ansi="0x0066" unicode="0x0066"/>
+ <map adobe-name="fi" win-ansi="-1" unicode="-1"/>
+ <map adobe-name="five" win-ansi="0x0035" unicode="0x0035"/>
+ <map adobe-name="fl" win-ansi="-1" unicode="-1"/>
+ <map adobe-name="florin" win-ansi="0x0083" unicode="0x0083"/>
+ <map adobe-name="four" win-ansi="0x0034" unicode="0x0034"/>
+ <!-- fj <map adobe-name="fraction" win-ansi="-1" unicode="0x2044"/> -->
+ <map adobe-name="g" win-ansi="0x0067" unicode="0x0067"/>
+ <map adobe-name="gcaron" win-ansi="-1" unicode="0x01E7"/>
+ <map adobe-name="germandbls" win-ansi="0x00DF" unicode="0x00DF"/>
+ <map adobe-name="grave" win-ansi="0x0060" unicode="0x0060"/>
+ <map adobe-name="greater" win-ansi="0x003E" unicode="0x003E"/>
+ <map adobe-name="guillemotleft" win-ansi="0x00AB" unicode="0x00AB"/>
+ <map adobe-name="guillemotright" win-ansi="0x00BB" unicode="0x00BB"/>
+ <map adobe-name="guilsinglleft" win-ansi="0x008B" unicode="0x2039"/>
+ <map adobe-name="guilsinglright" win-ansi="0x009B" unicode="0x203A"/>
+ <map adobe-name="h" win-ansi="0x0068" unicode="0x0068"/>
+ <map adobe-name="hungarumlaut" win-ansi="-1" unicode="0x02DD"/>
+ <map adobe-name="hyphen" win-ansi="0x002D" unicode="0x002D"/>
+ <map adobe-name="i" win-ansi="0x0069" unicode="0x0069"/>
+ <map adobe-name="iacute" win-ansi="0x00ED" unicode="0x00ED"/>
+ <map adobe-name="icircumflex" win-ansi="0x00EE" unicode="0x00EE"/>
+ <map adobe-name="idieresis" win-ansi="0x00EF" unicode="0x00EF"/>
+ <map adobe-name="igrave" win-ansi="0x00EC" unicode="0x00EC"/>
+ <map adobe-name="ij" win-ansi="-1" unicode="0x0133"/>
+ <map adobe-name="j" win-ansi="0x006A" unicode="0x006A"/>
+ <map adobe-name="k" win-ansi="0x006B" unicode="0x006B"/>
+ <map adobe-name="l" win-ansi="0x006C" unicode="0x006C"/>
+ <map adobe-name="less" win-ansi="0x003C" unicode="0x003C"/>
+ <map adobe-name="lira" win-ansi="-1" unicode="0x20A4"/>
+ <map adobe-name="logicalnot" win-ansi="0x00AC" unicode="0x00AC"/>
+ <map adobe-name="lslash" win-ansi="-1" unicode="0x0142"/>
+ <map adobe-name="m" win-ansi="0x006D" unicode="0x006D"/>
+ <map adobe-name="macron" win-ansi="0x00AF" unicode="0x00AF"/>
+ <!-- fj <map adobe-name="minus" win-ansi="-1" unicode="0x2212"/>-->
+ <map adobe-name="mu" win-ansi="0x00B5" unicode="0x00B5"/>
+ <map adobe-name="multiply" win-ansi="0x00D7" unicode="0x00D7"/>
+ <map adobe-name="n" win-ansi="0x006E" unicode="0x006E"/>
+ <!-- JKT: the following is not actually an adobe named character -->
+ <map adobe-name="nbsp" win-ansi="0x00A0" unicode="0x00A0"/>
+ <map adobe-name="nine" win-ansi="0x0039" unicode="0x0039"/>
+ <map adobe-name="ntilde" win-ansi="0x00F1" unicode="0x00F1"/>
+ <map adobe-name="numbersign" win-ansi="0x0023" unicode="0x0023"/>
+ <map adobe-name="o" win-ansi="0x006F" unicode="0x006F"/>
+ <map adobe-name="oacute" win-ansi="0x00F3" unicode="0x00F3"/>
+ <map adobe-name="ocircumflex" win-ansi="0x00F4" unicode="0x00F4"/>
+ <map adobe-name="odieresis" win-ansi="0x00F6" unicode="0x00F6"/>
+ <map adobe-name="oe" win-ansi="0x009C" unicode="0x0153"/>
+ <map adobe-name="ogonek" win-ansi="-1" unicode="0x02DB"/>
+ <map adobe-name="ograve" win-ansi="0x00F2" unicode="0x00F2"/>
+ <map adobe-name="one" win-ansi="0x0031" unicode="0x0031"/>
+ <map adobe-name="onehalf" win-ansi="0x00BD" unicode="0x00BD"/>
+ <map adobe-name="onequarter" win-ansi="0x00BC" unicode="0x00BC"/>
+ <map adobe-name="onesuperior" win-ansi="0x00B9" unicode="0x00B9"/>
+ <map adobe-name="ordfeminine" win-ansi="0x00AA" unicode="0x00AA"/>
+ <map adobe-name="ordmasculine" win-ansi="0x00BA" unicode="0x00BA"/>
+ <map adobe-name="oslash" win-ansi="0x00F8" unicode="0x00F8"/>
+ <map adobe-name="otilde" win-ansi="0x00F5" unicode="0x00F5"/>
+ <map adobe-name="p" win-ansi="0x0070" unicode="0x0070"/>
+ <map adobe-name="paragraph" win-ansi="0x00B6" unicode="0x00B6"/>
+ <map adobe-name="parenleft" win-ansi="0x0028" unicode="0x0028"/>
+ <map adobe-name="parenright" win-ansi="0x0029" unicode="0x0029"/>
+ <map adobe-name="percent" win-ansi="0x0025" unicode="0x0025"/>
+ <map adobe-name="period" win-ansi="0x002E" unicode="0x002E"/>
+ <map adobe-name="periodcentered" win-ansi="0x00B7" unicode="0x00B7"/>
+ <map adobe-name="perthousand" win-ansi="0x0089" unicode="0x2030"/>
+ <map adobe-name="plus" win-ansi="0x002B" unicode="0x002B"/>
+ <map adobe-name="plusminus" win-ansi="0x00B1" unicode="0x00B1"/>
+ <map adobe-name="q" win-ansi="0x0071" unicode="0x0071"/>
+ <map adobe-name="question" win-ansi="0x003F" unicode="0x003F"/>
+ <map adobe-name="questiondown" win-ansi="0x00BF" unicode="0x00BF"/>
+ <map adobe-name="quotedbl" win-ansi="0x0022" unicode="0x0022"/>
+ <map adobe-name="quotedblbase" win-ansi="0x0084" unicode="0x201E"/>
+ <map adobe-name="quotedblleft" win-ansi="0x0093" unicode="0x201C"/>
+ <map adobe-name="quotedblright" win-ansi="0x0094" unicode="0x201D"/>
+ <map adobe-name="quoteleft" win-ansi="0x0091" unicode="0x2018"/>
+ <map adobe-name="quoteright" win-ansi="0x0092" unicode="0x2019"/>
+ <map adobe-name="quotesinglbase" win-ansi="0x0082" unicode="0x201A"/>
+ <map adobe-name="quotesingle" win-ansi="0x0027" unicode="0x0027"/>
+ <map adobe-name="r" win-ansi="0x0072" unicode="0x0072"/>
+ <map adobe-name="registered" win-ansi="0x00AE" unicode="0x00AE"/>
+ <map adobe-name="s" win-ansi="0x0073" unicode="0x0073"/>
+ <map adobe-name="scaron" win-ansi="0x009A" unicode="0x0161"/>
+ <map adobe-name="scedilla" win-ansi="-1" unicode="0x015F"/>
+ <map adobe-name="section" win-ansi="0x00A7" unicode="0x00A7"/>
+ <map adobe-name="semicolon" win-ansi="0x003B" unicode="0x003B"/>
+ <map adobe-name="seven" win-ansi="0x0037" unicode="0x0037"/>
+ <map adobe-name="six" win-ansi="0x0036" unicode="0x0036"/>
+ <map adobe-name="slash" win-ansi="0x002F" unicode="0x002F"/>
+ <map adobe-name="space" win-ansi="0x0020" unicode="0x0020"/>
+ <map adobe-name="sterling" win-ansi="0x00A3" unicode="0x00A3"/>
+ <map adobe-name="t" win-ansi="0x0074" unicode="0x0074"/>
+ <map adobe-name="thorn" win-ansi="0x00FE" unicode="0x00FE"/>
+ <map adobe-name="three" win-ansi="0x0033" unicode="0x0033"/>
+ <map adobe-name="threequarters" win-ansi="0x00BE" unicode="0x00BE"/>
+ <map adobe-name="threesuperior" win-ansi="0x00B3" unicode="0x00B3"/>
+ <map adobe-name="tilde" win-ansi="0x0098" unicode="0x02DC"/>
+ <map adobe-name="trademark" win-ansi="0x0099" unicode="0x2122"/>
+ <map adobe-name="two" win-ansi="0x0032" unicode="0x0032"/>
+ <map adobe-name="twosuperior" win-ansi="0x00B2" unicode="0x00B2"/>
+ <map adobe-name="u" win-ansi="0x0075" unicode="0x0075"/>
+ <map adobe-name="uacute" win-ansi="0x00FA" unicode="0x00FA"/>
+ <map adobe-name="ucircumflex" win-ansi="0x00FB" unicode="0x00FB"/>
+ <map adobe-name="udieresis" win-ansi="0x00FC" unicode="0x00FC"/>
+ <map adobe-name="ugrave" win-ansi="0x00F9" unicode="0x00F9"/>
+ <map adobe-name="underscore" win-ansi="0x005F" unicode="0x005F"/>
+ <map adobe-name="v" win-ansi="0x0076" unicode="0x0076"/>
+ <map adobe-name="w" win-ansi="0x0077" unicode="0x0077"/>
+ <map adobe-name="x" win-ansi="0x0078" unicode="0x0078"/>
+ <map adobe-name="y" win-ansi="0x0079" unicode="0x0079"/>
+ <map adobe-name="yacute" win-ansi="0x00FD" unicode="0x00FD"/>
+ <map adobe-name="ydieresis" win-ansi="0x00FF" unicode="0x00FF"/>
+ <map adobe-name="yen" win-ansi="0x00A5" unicode="0x00A5"/>
+ <map adobe-name="z" win-ansi="0x007A" unicode="0x007A"/>
+ <map adobe-name="zcaron" win-ansi="-1" unicode="0x017E"/>
+ <map adobe-name="zero" win-ansi="0x0030" unicode="0x0030"/>
+ <!-- the following mappings are used for the font zapfdingbats -->
+ <map adobe-name="a1" win-ansi="0x0021" unicode="0x2701" unicodeName="UPPER BLADE SCISSORS"/>
+ <map adobe-name="a2" win-ansi="0x0022" unicode="0x2702" unicodeName="BLACK SCISSORS"/>
+ <map adobe-name="a202" win-ansi="0x0023" unicode="0x2703" unicodeName="LOWER BLADE SCISSORS"/>
+ <map adobe-name="a3" win-ansi="0x0024" unicode="0x2704" unicodeName="WHITE SCISSORS"/>
+ <map adobe-name="a4" win-ansi="0x0025" unicode="0x260E" unicodeName="BLACK TELEPHONE"/>
+ <map adobe-name="a5" win-ansi="0x0026" unicode="0x2706" unicodeName="TELEPHONE LOCATION SIGN"/>
+ <map adobe-name="a119" win-ansi="0x0027" unicode="0x2707" unicodeName="TAPE DRIVE"/>
+ <map adobe-name="a118" win-ansi="0x0028" unicode="0x2708" unicodeName="AIRPLANE"/>
+ <map adobe-name="a117" win-ansi="0x0029" unicode="0x2709" unicodeName="ENVELOPE"/>
+ <map adobe-name="a11" win-ansi="0x002A" unicode="0x261B" unicodeName="BLACK RIGHT POINTING INDEX"/>
+ <map adobe-name="a12" win-ansi="0x002B" unicode="0x261E" unicodeName="WHITE RIGHT POINTING INDEX"/>
+ <map adobe-name="a13" win-ansi="0x002C" unicode="0x270C" unicodeName="VICTORY HAND"/>
+ <map adobe-name="a14" win-ansi="0x002D" unicode="0x270D" unicodeName="WRITING HAND"/>
+ <map adobe-name="a15" win-ansi="0x002E" unicode="0x270E" unicodeName="LOWER RIGHT PENCIL"/>
+ <map adobe-name="a16" win-ansi="0x002F" unicode="0x270F" unicodeName="PENCIL"/>
+ <map adobe-name="a105" win-ansi="0x0030" unicode="0x2710" unicodeName="UPPER RIGHT PENCIL"/>
+ <map adobe-name="a17" win-ansi="0x0031" unicode="0x2711" unicodeName="WHITE NIB"/>
+ <map adobe-name="a18" win-ansi="0x0032" unicode="0x2712" unicodeName="BLACK NIB"/>
+ <map adobe-name="a19" win-ansi="0x0033" unicode="0x2713" unicodeName="CHECK MARK"/>
+ <map adobe-name="a20" win-ansi="0x0034" unicode="0x2714" unicodeName="HEAVY CHECK MARK"/>
+ <map adobe-name="a21" win-ansi="0x0035" unicode="0x2715" unicodeName="MULTIPLICATION X"/>
+ <map adobe-name="a22" win-ansi="0x0036" unicode="0x2716" unicodeName="HEAVY MULTIPLICATION X"/>
+ <map adobe-name="a23" win-ansi="0x0037" unicode="0x2717" unicodeName="BALLOT X"/>
+ <map adobe-name="a24" win-ansi="0x0038" unicode="0x2718" unicodeName="HEAVY BALLOT X"/>
+ <map adobe-name="a25" win-ansi="0x0039" unicode="0x2719" unicodeName="OUTLINED GREEK CROSS"/>
+ <map adobe-name="a26" win-ansi="0x003A" unicode="0x271A" unicodeName="HEAVY GREEK CROSS"/>
+ <map adobe-name="a27" win-ansi="0x003B" unicode="0x271B" unicodeName="OPEN CENTRE CROSS"/>
+ <map adobe-name="a28" win-ansi="0x003C" unicode="0x271C" unicodeName="HEAVY OPEN CENTRE CROSS"/>
+ <map adobe-name="a6" win-ansi="0x003D" unicode="0x271D" unicodeName="LATIN CROSS"/>
+ <map adobe-name="a7" win-ansi="0x003E" unicode="0x271E" unicodeName="SHADOWED WHITE LATIN CROSS"/>
+ <map adobe-name="a8" win-ansi="0x003F" unicode="0x271F" unicodeName="OUTLINED LATIN CROSS"/>
+ <map adobe-name="a9" win-ansi="0x0040" unicode="0x2720" unicodeName="MALTESE CROSS"/>
+ <map adobe-name="a10" win-ansi="0x0041" unicode="0x2721" unicodeName="STAR OF DAVID"/>
+ <map adobe-name="a29" win-ansi="0x0042" unicode="0x2722" unicodeName="FOUR TEARDROP-SPOKED ASTERISK"/>
+ <map adobe-name="a30" win-ansi="0x0043" unicode="0x2723" unicodeName="FOUR BALLOON-SPOKED ASTERISK"/>
+ <map adobe-name="a31" win-ansi="0x0044" unicode="0x2724" unicodeName="HEAVY FOUR BALLOON-SPOKED ASTERISK"/>
+ <map adobe-name="a32" win-ansi="0x0045" unicode="0x2725" unicodeName="FOUR CLUB-SPOKED ASTERISK"/>
+ <map adobe-name="a33" win-ansi="0x0046" unicode="0x2726" unicodeName="BLACK FOUR POINTED STAR"/>
+ <map adobe-name="a34" win-ansi="0x0047" unicode="0x2727" unicodeName="WHITE FOUR POINTED STAR"/>
+ <map adobe-name="a35" win-ansi="0x0048" unicode="0x2605" unicodeName="BLACK STAR"/>
+ <map adobe-name="a36" win-ansi="0x0049" unicode="0x2729" unicodeName="STRESS OUTLINED WHITE STAR"/>
+ <map adobe-name="a37" win-ansi="0x004A" unicode="0x272A" unicodeName="CIRCLED WHITE STAR"/>
+ <map adobe-name="a38" win-ansi="0x004B" unicode="0x272B" unicodeName="OPEN CENTRE BLACK STAR"/>
+ <map adobe-name="a39" win-ansi="0x004C" unicode="0x272C" unicodeName="BLACK CENTRE WHITE STAR"/>
+ <map adobe-name="a40" win-ansi="0x004D" unicode="0x272D" unicodeName="OUTLINED BLACK STAR"/>
+ <map adobe-name="a41" win-ansi="0x004E" unicode="0x272E" unicodeName="HEAVY OUTLINED BLACK STAR"/>
+ <map adobe-name="a42" win-ansi="0x004F" unicode="0x272F" unicodeName="PINWHEEL STAR"/>
+ <map adobe-name="a43" win-ansi="0x0050" unicode="0x2730" unicodeName="SHADOWED WHITE STAR"/>
+ <map adobe-name="a44" win-ansi="0x0051" unicode="0x2731" unicodeName="HEAVY ASTERISK"/>
+ <map adobe-name="a45" win-ansi="0x0052" unicode="0x2732" unicodeName="OPEN CENTRE ASTERISK"/>
+ <map adobe-name="a46" win-ansi="0x0053" unicode="0x2733" unicodeName="EIGHT SPOKED ASTERISK"/>
+ <map adobe-name="a47" win-ansi="0x0054" unicode="0x2734" unicodeName="EIGHT POINTED BLACK STAR"/>
+ <map adobe-name="a48" win-ansi="0x0055" unicode="0x2735" unicodeName="EIGHT POINTED PINWHEEL STAR"/>
+ <map adobe-name="a49" win-ansi="0x0056" unicode="0x2736" unicodeName="SIX POINTED BLACK STAR"/>
+ <map adobe-name="a50" win-ansi="0x0057" unicode="0x2737" unicodeName="EIGHT POINTED RECTILINEAR BLACK STAR"/>
+ <map adobe-name="a51" win-ansi="0x0058" unicode="0x2738" unicodeName="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR"/>
+ <map adobe-name="a52" win-ansi="0x0059" unicode="0x2739" unicodeName="TWELVE POINTED BLACK STAR"/>
+ <map adobe-name="a53" win-ansi="0x005A" unicode="0x273A" unicodeName="SIXTEEN POINTED ASTERISK"/>
+ <map adobe-name="a54" win-ansi="0x005B" unicode="0x273B" unicodeName="TEARDROP-SPOKED ASTERISK"/>
+ <map adobe-name="a55" win-ansi="0x005C" unicode="0x273C" unicodeName="OPEN CENTRE TEARDROP-SPOKED ASTERISK"/>
+ <map adobe-name="a56" win-ansi="0x005D" unicode="0x273D" unicodeName="HEAVY TEARDROP-SPOKED ASTERISK"/>
+ <map adobe-name="a57" win-ansi="0x005E" unicode="0x273E" unicodeName="SIX PETALLED BLACK AND WHITE FLORETTE"/>
+ <map adobe-name="a58" win-ansi="0x005F" unicode="0x273F" unicodeName="BLACK FLORETTE"/>
+ <map adobe-name="a59" win-ansi="0x0060" unicode="0x2740" unicodeName="WHITE FLORETTE"/>
+ <map adobe-name="a60" win-ansi="0x0061" unicode="0x2741" unicodeName="EIGHT PETALLED OUTLINED BLACK FLORETTE"/>
+ <map adobe-name="a61" win-ansi="0x0062" unicode="0x2742" unicodeName="CIRCLED OPEN CENTRE EIGHT POINTED STAR"/>
+ <map adobe-name="a62" win-ansi="0x0063" unicode="0x2743" unicodeName="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK"/>
+ <map adobe-name="a63" win-ansi="0x0064" unicode="0x2744" unicodeName="SNOWFLAKE"/>
+ <map adobe-name="a64" win-ansi="0x0065" unicode="0x2745" unicodeName="TIGHT TRIFOLIATE SNOWFLAKE"/>
+ <map adobe-name="a65" win-ansi="0x0066" unicode="0x2746" unicodeName="HEAVY CHEVRON SNOWFLAKE"/>
+ <map adobe-name="a66" win-ansi="0x0067" unicode="0x2747" unicodeName="SPARKLE"/>
+ <map adobe-name="a67" win-ansi="0x0068" unicode="0x2748" unicodeName="HEAVY SPARKLE"/>
+ <map adobe-name="a68" win-ansi="0x0069" unicode="0x2749" unicodeName="BALLOON-SPOKED ASTERISK"/>
+ <map adobe-name="a69" win-ansi="0x006A" unicode="0x274A" unicodeName="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"/>
+ <map adobe-name="a70" win-ansi="0x006B" unicode="0x274B" unicodeName="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"/>
+ <map adobe-name="a71" win-ansi="0x006C" unicode="0x25CF" unicodeName="BLACK CIRCLE"/>
+ <map adobe-name="a72" win-ansi="0x006D" unicode="0x274D" unicodeName="SHADOWED WHITE CIRCLE"/>
+ <map adobe-name="a73" win-ansi="0x006E" unicode="0x25A0" unicodeName="BLACK SQUARE"/>
+ <map adobe-name="a74" win-ansi="0x006F" unicode="0x274F" unicodeName="LOWER RIGHT DROP-SHADOWED WHITE SQUARE"/>
+ <map adobe-name="a203" win-ansi="0x0070" unicode="0x2750" unicodeName="UPPER RIGHT DROP-SHADOWED WHITE SQUARE"/>
+ <map adobe-name="a75" win-ansi="0x0071" unicode="0x2751" unicodeName="LOWER RIGHT SHADOWED WHITE SQUARE"/>
+ <map adobe-name="a204" win-ansi="0x0072" unicode="0x2752" unicodeName="UPPER RIGHT SHADOWED WHITE SQUARE"/>
+ <map adobe-name="a76" win-ansi="0x0073" unicode="0x25B2" unicodeName="BLACK UP-POINTING TRIANGLE"/>
+ <map adobe-name="a77" win-ansi="0x0074" unicode="0x25BC" unicodeName="BLACK DOWN-POINTING TRIANGLE"/>
+ <map adobe-name="a78" win-ansi="0x0075" unicode="0x25C6" unicodeName="BLACK DIAMOND"/>
+ <map adobe-name="a79" win-ansi="0x0076" unicode="0x2756" unicodeName="BLACK DIAMOND MINUS WHITE X"/>
+ <map adobe-name="a81" win-ansi="0x0077" unicode="0x25D7" unicodeName="RIGHT HALF BLACK CIRCLE"/>
+ <map adobe-name="a82" win-ansi="0x0078" unicode="0x2758" unicodeName="LIGHT VERTICAL BAR"/>
+ <map adobe-name="a83" win-ansi="0x0079" unicode="0x2759" unicodeName="MEDIUM VERTICAL BAR"/>
+ <map adobe-name="a84" win-ansi="0x007A" unicode="0x275A" unicodeName="HEAVY VERTICAL BAR"/>
+ <map adobe-name="a97" win-ansi="0x007B" unicode="0x275B" unicodeName="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT"/>
+ <map adobe-name="a98" win-ansi="0x007C" unicode="0x275C" unicodeName="HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT"/>
+ <map adobe-name="a99" win-ansi="0x007D" unicode="0x275D" unicodeName="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT"/>
+ <map adobe-name="a100" win-ansi="0x007E" unicode="0x275E" unicodeName="HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT"/>
+ <map adobe-name="a89" win-ansi="0x0080" unicode="0xF8D7" unicodeName="MEDIUM LEFT PARENTHESIS ORNAMENT"/>
+ <map adobe-name="a90" win-ansi="0x0081" unicode="0xF8D8" unicodeName="MEDIUM RIGHT PARENTHESIS ORNAMENT"/>
+ <map adobe-name="a93" win-ansi="0x0082" unicode="0xF8D9" unicodeName="MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT"/>
+ <map adobe-name="a94" win-ansi="0x0083" unicode="0xF8DA" unicodeName="MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT"/>
+ <map adobe-name="a91" win-ansi="0x0084" unicode="0xF8DB" unicodeName="MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT"/>
+ <map adobe-name="a92" win-ansi="0x0085" unicode="0xF8DC" unicodeName="MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT"/>
+ <map adobe-name="a205" win-ansi="0x0086" unicode="0xF8DD" unicodeName="HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT"/>
+ <map adobe-name="a85" win-ansi="0x0087" unicode="0xF8DE" unicodeName="HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT"/>
+ <map adobe-name="a206" win-ansi="0x0088" unicode="0xF8DF" unicodeName="HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT"/>
+ <map adobe-name="a86" win-ansi="0x0089" unicode="0xF8E0" unicodeName="HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT"/>
+ <map adobe-name="a87" win-ansi="0x008A" unicode="0xF8E1" unicodeName="LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT"/>
+ <map adobe-name="a88" win-ansi="0x008B" unicode="0xF8E2" unicodeName="LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT"/>
+ <map adobe-name="a95" win-ansi="0x008C" unicode="0xF8E3" unicodeName="MEDIUM LEFT CURLY BRACKET ORNAMENT"/>
+ <map adobe-name="a96" win-ansi="0x008D" unicode="0xF8E4" unicodeName="MEDIUM RIGHT CURLY BRACKET ORNAMENT"/>
+ <map adobe-name="a101" win-ansi="0x00A1" unicode="0x2761" unicodeName="CURVED STEM PARAGRAPH SIGN ORNAMENT"/>
+ <map adobe-name="a102" win-ansi="0x00A2" unicode="0x2762" unicodeName="HEAVY EXCLAMATION MARK ORNAMENT"/>
+ <map adobe-name="a103" win-ansi="0x00A3" unicode="0x2763" unicodeName="HEAVY HEART EXCLAMATION MARK ORNAMENT"/>
+ <map adobe-name="a104" win-ansi="0x00A4" unicode="0x2764" unicodeName="HEAVY BLACK HEART"/>
+ <map adobe-name="a106" win-ansi="0x00A5" unicode="0x2765" unicodeName="ROTATED HEAVY BLACK HEART BULLET"/>
+ <map adobe-name="a107" win-ansi="0x00A6" unicode="0x2766" unicodeName="FLORAL HEART"/>
+ <map adobe-name="a108" win-ansi="0x00A7" unicode="0x2767" unicodeName="ROTATED FLORAL HEART BULLET"/>
+ <map adobe-name="a120" win-ansi="0x00AC" unicode="0x2460" unicodeName="CIRCLED DIGIT ONE"/>
+ <map adobe-name="a121" win-ansi="0x00AD" unicode="0x2461" unicodeName="CIRCLED DIGIT TWO"/>
+ <map adobe-name="a122" win-ansi="0x00AE" unicode="0x2462" unicodeName="CIRCLED DIGIT THREE"/>
+ <map adobe-name="a123" win-ansi="0x00AF" unicode="0x2463" unicodeName="CIRCLED DIGIT FOUR"/>
+ <map adobe-name="a124" win-ansi="0x00B0" unicode="0x2464" unicodeName="CIRCLED DIGIT FIVE"/>
+ <map adobe-name="a125" win-ansi="0x00B1" unicode="0x2465" unicodeName="CIRCLED DIGIT SIX"/>
+ <map adobe-name="a126" win-ansi="0x00B2" unicode="0x2466" unicodeName="CIRCLED DIGIT SEVEN"/>
+ <map adobe-name="a127" win-ansi="0x00B3" unicode="0x2467" unicodeName="CIRCLED DIGIT EIGHT"/>
+ <map adobe-name="a128" win-ansi="0x00B4" unicode="0x2468" unicodeName="CIRCLED DIGIT NINE"/>
+ <map adobe-name="a129" win-ansi="0x00B5" unicode="0x2469" unicodeName="CIRCLED NUMBER TEN"/>
+ <map adobe-name="a130" win-ansi="0x00B6" unicode="0x2776" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT ONE"/>
+ <map adobe-name="a131" win-ansi="0x00B7" unicode="0x2777" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT TWO"/>
+ <map adobe-name="a132" win-ansi="0x00B8" unicode="0x2778" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT THREE"/>
+ <map adobe-name="a133" win-ansi="0x00B9" unicode="0x2779" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT FOUR"/>
+ <map adobe-name="a134" win-ansi="0x00BA" unicode="0x277A" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT FIVE"/>
+ <map adobe-name="a135" win-ansi="0x00BB" unicode="0x277B" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT SIX"/>
+ <map adobe-name="a136" win-ansi="0x00BC" unicode="0x277C" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN"/>
+ <map adobe-name="a137" win-ansi="0x00BD" unicode="0x277D" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT"/>
+ <map adobe-name="a138" win-ansi="0x00BE" unicode="0x277E" unicodeName="DINGBAT NEGATIVE CIRCLED DIGIT NINE"/>
+ <map adobe-name="a139" win-ansi="0x00BF" unicode="0x277F" unicodeName="DINGBAT NEGATIVE CIRCLED NUMBER TEN"/>
+ <map adobe-name="a140" win-ansi="0x00C0" unicode="0x2780" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT ONE"/>
+ <map adobe-name="a141" win-ansi="0x00C1" unicode="0x2781" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT TWO"/>
+ <map adobe-name="a142" win-ansi="0x00C2" unicode="0x2782" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT THREE"/>
+ <map adobe-name="a143" win-ansi="0x00C3" unicode="0x2783" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR"/>
+ <map adobe-name="a144" win-ansi="0x00C4" unicode="0x2784" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE"/>
+ <map adobe-name="a145" win-ansi="0x00C5" unicode="0x2785" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT SIX"/>
+ <map adobe-name="a146" win-ansi="0x00C6" unicode="0x2786" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN"/>
+ <map adobe-name="a147" win-ansi="0x00C7" unicode="0x2787" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT"/>
+ <map adobe-name="a148" win-ansi="0x00C8" unicode="0x2788" unicodeName="DINGBAT CIRCLED SANS-SERIF DIGIT NINE"/>
+ <map adobe-name="a149" win-ansi="0x00C9" unicode="0x2789" unicodeName="DINGBAT CIRCLED SANS-SERIF NUMBER TEN"/>
+ <map adobe-name="a150" win-ansi="0x00CA" unicode="0x278A" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE"/>
+ <map adobe-name="a151" win-ansi="0x00CB" unicode="0x278B" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO"/>
+ <map adobe-name="a152" win-ansi="0x00CC" unicode="0x278C" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE"/>
+ <map adobe-name="a153" win-ansi="0x00CD" unicode="0x278D" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR"/>
+ <map adobe-name="a154" win-ansi="0x00CE" unicode="0x278E" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE"/>
+ <map adobe-name="a155" win-ansi="0x00CF" unicode="0x278F" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX"/>
+ <map adobe-name="a156" win-ansi="0x00D0" unicode="0x2790" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN"/>
+ <map adobe-name="a157" win-ansi="0x00D1" unicode="0x2791" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT"/>
+ <map adobe-name="a158" win-ansi="0x00D2" unicode="0x2792" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE"/>
+ <map adobe-name="a159" win-ansi="0x00D3" unicode="0x2793" unicodeName="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN"/>
+ <map adobe-name="a160" win-ansi="0x00D4" unicode="0x2794" unicodeName="HEAVY WIDE-HEADED RIGHTWARDS ARROW"/>
+ <map adobe-name="a164" win-ansi="0x00D7" unicode="0x2195" unicodeName="UP DOWN ARROW"/>
+ <map adobe-name="a196" win-ansi="0x00D8" unicode="0x2798" unicodeName="HEAVY SOUTH EAST ARROW"/>
+ <map adobe-name="a165" win-ansi="0x00D9" unicode="0x2799" unicodeName="HEAVY RIGHTWARDS ARROW"/>
+ <map adobe-name="a192" win-ansi="0x00DA" unicode="0x279A" unicodeName="HEAVY NORTH EAST ARROW"/>
+ <map adobe-name="a166" win-ansi="0x00DB" unicode="0x279B" unicodeName="DRAFTING POINT RIGHTWARDS ARROW"/>
+ <map adobe-name="a167" win-ansi="0x00DC" unicode="0x279C" unicodeName="HEAVY ROUND-TIPPED RIGHTWARDS ARROW"/>
+ <map adobe-name="a168" win-ansi="0x00DD" unicode="0x279D" unicodeName="TRIANGLE-HEADED RIGHTWARDS ARROW"/>
+ <map adobe-name="a169" win-ansi="0x00DE" unicode="0x279E" unicodeName="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW"/>
+ <map adobe-name="a170" win-ansi="0x00DF" unicode="0x279F" unicodeName="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"/>
+ <map adobe-name="a171" win-ansi="0x00E0" unicode="0x27A0" unicodeName="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"/>
+ <map adobe-name="a172" win-ansi="0x00E1" unicode="0x27A1" unicodeName="BLACK RIGHTWARDS ARROW"/>
+ <map adobe-name="a173" win-ansi="0x00E2" unicode="0x27A2" unicodeName="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD"/>
+ <map adobe-name="a162" win-ansi="0x00E3" unicode="0x27A3" unicodeName="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD"/>
+ <map adobe-name="a174" win-ansi="0x00E4" unicode="0x27A4" unicodeName="BLACK RIGHTWARDS ARROWHEAD"/>
+ <map adobe-name="a175" win-ansi="0x00E5" unicode="0x27A5" unicodeName="HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW"/>
+ <map adobe-name="a176" win-ansi="0x00E6" unicode="0x27A6" unicodeName="HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW"/>
+ <map adobe-name="a177" win-ansi="0x00E7" unicode="0x27A7" unicodeName="SQUAT BLACK RIGHTWARDS ARROW"/>
+ <map adobe-name="a178" win-ansi="0x00E8" unicode="0x27A8" unicodeName="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW"/>
+ <map adobe-name="a179" win-ansi="0x00E9" unicode="0x27A9" unicodeName="RIGHT-SHADED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a193" win-ansi="0x00EA" unicode="0x27AA" unicodeName="LEFT-SHADED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a180" win-ansi="0x00EB" unicode="0x27AB" unicodeName="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a199" win-ansi="0x00EC" unicode="0x27AC" unicodeName="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a181" win-ansi="0x00ED" unicode="0x27AD" unicodeName="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a200" win-ansi="0x00EE" unicode="0x27AE" unicodeName="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a182" win-ansi="0x00EF" unicode="0x27AF" unicodeName="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a201" win-ansi="0x00F1" unicode="0x27B1" unicodeName="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a183" win-ansi="0x00F2" unicode="0x27B2" unicodeName="CIRCLED HEAVY WHITE RIGHTWARDS ARROW"/>
+ <map adobe-name="a184" win-ansi="0x00F3" unicode="0x27B3" unicodeName="WHITE-FEATHERED RIGHTWARDS ARROW"/>
+ <map adobe-name="a197" win-ansi="0x00F4" unicode="0x27B4" unicodeName="BLACK-FEATHERED SOUTH EAST ARROW"/>
+ <map adobe-name="a185" win-ansi="0x00F5" unicode="0x27B5" unicodeName="BLACK-FEATHERED RIGHTWARDS ARROW"/>
+ <map adobe-name="a194" win-ansi="0x00F6" unicode="0x27B6" unicodeName="BLACK-FEATHERED NORTH EAST ARROW"/>
+ <map adobe-name="a198" win-ansi="0x00F7" unicode="0x27B7" unicodeName="HEAVY BLACK-FEATHERED SOUTH EAST ARROW"/>
+ <map adobe-name="a186" win-ansi="0x00F8" unicode="0x27B8" unicodeName="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW"/>
+ <map adobe-name="a195" win-ansi="0x00F9" unicode="0x27B9" unicodeName="HEAVY BLACK-FEATHERED NORTH EAST ARROW"/>
+ <map adobe-name="a187" win-ansi="0x00FA" unicode="0x27BA" unicodeName="TEARDROP-BARBED RIGHTWARDS ARROW"/>
+ <map adobe-name="a188" win-ansi="0x00FB" unicode="0x27BB" unicodeName="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW"/>
+ <map adobe-name="a189" win-ansi="0x00FC" unicode="0x27BC" unicodeName="WEDGE-TAILED RIGHTWARDS ARROW"/>
+ <map adobe-name="a190" win-ansi="0x00FD" unicode="0x27BD" unicodeName="HEAVY WEDGE-TAILED RIGHTWARDS ARROW"/>
+ <map adobe-name="a191" win-ansi="0x00FE" unicode="0x27BE" unicodeName="OPEN-OUTLINED RIGHTWARDS ARROW"/>
+ <!-- the following mappings are used for the Symbol font
+ TBD: remove doublettes -->
+ <map adobe-name="universal" win-ansi="0x22" unicode="0x2200"/>
+ <map adobe-name="existential" win-ansi="0x24" unicode="0x2203"/>
+ <map adobe-name="suchthat" win-ansi="0x27" unicode="0x220B"/>
+ <map adobe-name="asteriskmath" win-ansi="0x2A" unicode="0x2217"/>
+ <map adobe-name="minus" win-ansi="0x2D" unicode="0x2212"/>
+ <map adobe-name="congruent" win-ansi="0x40" unicode="0x2245"/>
+ <map adobe-name="Alpha" win-ansi="0x41" unicode="0x0391"/>
+ <map adobe-name="Beta" win-ansi="0x42" unicode="0x0392"/>
+ <map adobe-name="Chi" win-ansi="0x43" unicode="0x03A7"/>
+ <map adobe-name="Delta" win-ansi="0x44" unicode="0x2206"/>
+ <map adobe-name="Epsilon" win-ansi="0x45" unicode="0x0395"/>
+ <map adobe-name="Phi" win-ansi="0x46" unicode="0x03A6"/>
+ <map adobe-name="Gamma" win-ansi="0x47" unicode="0x0393"/>
+ <map adobe-name="Eta" win-ansi="0x48" unicode="0x0397"/>
+ <map adobe-name="Iota" win-ansi="0x49" unicode="0x0399"/>
+ <map adobe-name="theta1" win-ansi="0x4A" unicode="0x03D1"/>
+ <map adobe-name="Kappa" win-ansi="0x4B" unicode="0x039A"/>
+ <map adobe-name="Lambda" win-ansi="0x4C" unicode="0x039B"/>
+ <map adobe-name="Mu" win-ansi="0x4D" unicode="0x039C"/>
+ <map adobe-name="Nu" win-ansi="0x4E" unicode="0x039D"/>
+ <map adobe-name="Omicron" win-ansi="0x4F" unicode="0x039F"/>
+ <map adobe-name="Pi" win-ansi="0x50" unicode="0x03A0"/>
+ <map adobe-name="Theta" win-ansi="0x51" unicode="0x0398"/>
+ <map adobe-name="Rho" win-ansi="0x52" unicode="0x03A1"/>
+ <map adobe-name="Sigma" win-ansi="0x53" unicode="0x03A3"/>
+ <map adobe-name="Tau" win-ansi="0x54" unicode="0x03A4"/>
+ <map adobe-name="Upsilon" win-ansi="0x55" unicode="0x03A5"/>
+ <map adobe-name="sigma1" win-ansi="0x56" unicode="0x03C2"/>
+ <map adobe-name="Omega" win-ansi="0x57" unicode="0x2126"/>
+ <map adobe-name="Xi" win-ansi="0x58" unicode="0x039E"/>
+ <map adobe-name="Psi" win-ansi="0x59" unicode="0x03A8"/>
+ <map adobe-name="Zeta" win-ansi="0x5A" unicode="0x0396"/>
+ <map adobe-name="therefore" win-ansi="0x5C" unicode="0x2234"/>
+ <map adobe-name="perpendicular" win-ansi="0x5E" unicode="0x22A5"/>
+ <map adobe-name="radicalex" win-ansi="0x60" unicode="0xF8E5"/>
+ <map adobe-name="alpha" win-ansi="0x61" unicode="0x03B1"/>
+ <map adobe-name="beta" win-ansi="0x62" unicode="0x03B2"/>
+ <map adobe-name="chi" win-ansi="0x63" unicode="0x03C7"/>
+ <map adobe-name="delta" win-ansi="0x64" unicode="0x03B4"/>
+ <map adobe-name="epsilon" win-ansi="0x65" unicode="0x03B5"/>
+ <map adobe-name="phi" win-ansi="0x66" unicode="0x03C6"/>
+ <map adobe-name="gamma" win-ansi="0x67" unicode="0x03B3"/>
+ <map adobe-name="eta" win-ansi="0x68" unicode="0x03B7"/>
+ <map adobe-name="iota" win-ansi="0x69" unicode="0x03B9"/>
+ <map adobe-name="phi1" win-ansi="0x6A" unicode="0x03D5"/>
+ <map adobe-name="kappa" win-ansi="0x6B" unicode="0x03BA"/>
+ <map adobe-name="lambda" win-ansi="0x6C" unicode="0x03BB"/>
+ <map adobe-name="nu" win-ansi="0x6E" unicode="0x03BD"/>
+ <map adobe-name="omicron" win-ansi="0x6F" unicode="0x03BF"/>
+ <map adobe-name="pi" win-ansi="0x70" unicode="0x03C0"/>
+ <map adobe-name="theta" win-ansi="0x71" unicode="0x03B8"/>
+ <map adobe-name="rho" win-ansi="0x72" unicode="0x03C1"/>
+ <map adobe-name="sigma" win-ansi="0x73" unicode="0x03C3"/>
+ <map adobe-name="tau" win-ansi="0x74" unicode="0x03C4"/>
+ <map adobe-name="upsilon" win-ansi="0x75" unicode="0x03C5"/>
+ <map adobe-name="omega1" win-ansi="0x76" unicode="0x03D6"/>
+ <map adobe-name="omega" win-ansi="0x77" unicode="0x03C9"/>
+ <map adobe-name="xi" win-ansi="0x78" unicode="0x03BE"/>
+ <map adobe-name="psi" win-ansi="0x79" unicode="0x03C8"/>
+ <map adobe-name="zeta" win-ansi="0x7A" unicode="0x03B6"/>
+ <map adobe-name="similar" win-ansi="0x7E" unicode="0x223C"/>
+ <map adobe-name="Upsilon1" win-ansi="0xA1" unicode="0x03D2"/>
+ <map adobe-name="minute" win-ansi="0xA2" unicode="0x2032"/>
+ <map adobe-name="lessequal" win-ansi="0xA3" unicode="0x2264"/>
+ <map adobe-name="fraction" win-ansi="0xA4" unicode="0x2044"/>
+ <map adobe-name="infinity" win-ansi="0xA5" unicode="0x221E"/>
+ <map adobe-name="florin" win-ansi="0xA6" unicode="0x0192"/>
+ <map adobe-name="club" win-ansi="0xA7" unicode="0x2663"/>
+ <map adobe-name="diamond" win-ansi="0xA8" unicode="0x2666"/>
+ <map adobe-name="heart" win-ansi="0xA9" unicode="0x2665"/>
+ <map adobe-name="spade" win-ansi="0xAA" unicode="0x2660"/>
+ <map adobe-name="arrowboth" win-ansi="0xAB" unicode="0x2194"/>
+ <map adobe-name="arrowleft" win-ansi="0xAC" unicode="0x2190"/>
+ <map adobe-name="arrowup" win-ansi="0xAD" unicode="0x2191"/>
+ <map adobe-name="arrowright" win-ansi="0xAE" unicode="0x2192"/>
+ <map adobe-name="arrowdown" win-ansi="0xAF" unicode="0x2193"/>
+ <map adobe-name="second" win-ansi="0xB2" unicode="0x2033"/>
+ <map adobe-name="greaterequal" win-ansi="0xB3" unicode="0x2265"/>
+ <map adobe-name="proportional" win-ansi="0xB5" unicode="0x221D"/>
+ <map adobe-name="partialdiff" win-ansi="0xB6" unicode="0x2202"/>
+ <map adobe-name="notequal" win-ansi="0xB9" unicode="0x2260"/>
+ <map adobe-name="equivalence" win-ansi="0xBA" unicode="0x2261"/>
+ <map adobe-name="approxequal" win-ansi="0xBB" unicode="0x2248"/>
+ <map adobe-name="arrowvertex" win-ansi="0xBD" unicode="0xF8E6"/>
+ <map adobe-name="arrowhorizex" win-ansi="0xBE" unicode="0xF8E7"/>
+ <map adobe-name="carriagereturn" win-ansi="0xBF" unicode="0x21B5"/>
+ <map adobe-name="aleph" win-ansi="0xC0" unicode="0x2135"/>
+ <map adobe-name="Ifraktur" win-ansi="0xC1" unicode="0x2111"/>
+ <map adobe-name="Rfraktur" win-ansi="0xC2" unicode="0x211C"/>
+ <map adobe-name="weierstrass" win-ansi="0xC3" unicode="0x2118"/>
+ <map adobe-name="circlemultiply" win-ansi="0xC4" unicode="0x2297"/>
+ <map adobe-name="circleplus" win-ansi="0xC5" unicode="0x2295"/>
+ <map adobe-name="emptyset" win-ansi="0xC6" unicode="0x2205"/>
+ <map adobe-name="intersection" win-ansi="0xC7" unicode="0x2229"/>
+ <map adobe-name="union" win-ansi="0xC8" unicode="0x222A"/>
+ <map adobe-name="propersuperset" win-ansi="0xC9" unicode="0x2283"/>
+ <map adobe-name="reflexsuperset" win-ansi="0xCA" unicode="0x2287"/>
+ <map adobe-name="notsubset" win-ansi="0xCB" unicode="0x2284"/>
+ <map adobe-name="propersubset" win-ansi="0xCC" unicode="0x2282"/>
+ <map adobe-name="reflexsubset" win-ansi="0xCD" unicode="0x2286"/>
+ <map adobe-name="element" win-ansi="0xCE" unicode="0x2208"/>
+ <map adobe-name="notelement" win-ansi="0xCF" unicode="0x2209"/>
+ <map adobe-name="angle" win-ansi="0xD0" unicode="0x2220"/>
+ <map adobe-name="gradient" win-ansi="0xD1" unicode="0x2207"/>
+ <map adobe-name="registerserif" win-ansi="0xD2" unicode="0xF6DA"/>
+ <map adobe-name="copyrightserif" win-ansi="0xD3" unicode="0xF6D9"/>
+ <map adobe-name="trademarkserif" win-ansi="0xD4" unicode="0xF6DB"/>
+ <map adobe-name="product" win-ansi="0xD5" unicode="0x220F"/>
+ <map adobe-name="radical" win-ansi="0xD6" unicode="0x221A"/>
+ <map adobe-name="dotmath" win-ansi="0xD7" unicode="0x22C5"/>
+ <map adobe-name="logicaland" win-ansi="0xD9" unicode="0x2227"/>
+ <map adobe-name="logicalor" win-ansi="0xDA" unicode="0x2228"/>
+ <map adobe-name="arrowdblboth" win-ansi="0xDB" unicode="0x21D4"/>
+ <map adobe-name="arrowdblleft" win-ansi="0xDC" unicode="0x21D0"/>
+ <map adobe-name="arrowdblup" win-ansi="0xDD" unicode="0x21D1"/>
+ <map adobe-name="arrowdblright" win-ansi="0xDE" unicode="0x21D2"/>
+ <map adobe-name="arrowdbldown" win-ansi="0xDF" unicode="0x21D3"/>
+ <map adobe-name="lozenge" win-ansi="0xE0" unicode="0x25CA"/>
+ <map adobe-name="angleleft" win-ansi="0xE1" unicode="0x2329"/>
+ <map adobe-name="registersans" win-ansi="0xE2" unicode="0xF8E8"/>
+ <map adobe-name="copyrightsans" win-ansi="0xE3" unicode="0xF8E9"/>
+ <map adobe-name="trademarksans" win-ansi="0xE4" unicode="0xF8EA"/>
+ <map adobe-name="summation" win-ansi="0xE5" unicode="0x2211"/>
+ <map adobe-name="parenlefttp" win-ansi="0xE6" unicode="0xF8EB"/>
+ <map adobe-name="parenleftex" win-ansi="0xE7" unicode="0xF8EC"/>
+ <map adobe-name="parenleftbt" win-ansi="0xE8" unicode="0xF8ED"/>
+ <map adobe-name="bracketlefttp" win-ansi="0xE9" unicode="0xF8EE"/>
+ <map adobe-name="bracketleftex" win-ansi="0xEA" unicode="0xF8EF"/>
+ <map adobe-name="bracketleftbt" win-ansi="0xEB" unicode="0xF8F0"/>
+ <map adobe-name="bracelefttp" win-ansi="0xEC" unicode="0xF8F1"/>
+ <map adobe-name="braceleftmid" win-ansi="0xED" unicode="0xF8F2"/>
+ <map adobe-name="braceleftbt" win-ansi="0xEE" unicode="0xF8F3"/>
+ <map adobe-name="braceex" win-ansi="0xEF" unicode="0xF8F4"/>
+ <map adobe-name="angleright" win-ansi="0xF1" unicode="0x232A"/>
+ <map adobe-name="integral" win-ansi="0xF2" unicode="0x222B"/>
+ <map adobe-name="integraltp" win-ansi="0xF3" unicode="0x2320"/>
+ <map adobe-name="integralex" win-ansi="0xF4" unicode="0xF8F5"/>
+ <map adobe-name="integralbt" win-ansi="0xF5" unicode="0x2321"/>
+ <map adobe-name="parenrighttp" win-ansi="0xF6" unicode="0xF8F6"/>
+ <map adobe-name="parenrightex" win-ansi="0xF7" unicode="0xF8F7"/>
+ <map adobe-name="parenrightbt" win-ansi="0xF8" unicode="0xF8F8"/>
+ <map adobe-name="bracketrighttp" win-ansi="0xF9" unicode="0xF8F9"/>
+ <map adobe-name="bracketrightex" win-ansi="0xFA" unicode="0xF8FA"/>
+ <map adobe-name="bracketrightbt" win-ansi="0xFB" unicode="0xF8FB"/>
+ <map adobe-name="bracerighttp" win-ansi="0xFC" unicode="0xF8FC"/>
+ <map adobe-name="bracerightmid" win-ansi="0xFD" unicode="0xF8FD"/>
+ <map adobe-name="bracerightbt" win-ansi="0xFE" unicode="0xF8FE"/>
+ <map adobe-name="apple" win-ansi="-1" unicode="0xF8FE"/>
+</font-mappings>
+<!-- I couldn't find the following characters in the unicode tables -->
+<!--
+ <map adobe-name="center" win-ansi="-1" unicode=""/>
+ <map adobe-name="dectab" win-ansi="-1" unicode=""/>
+ <map adobe-name="down" win-ansi="-1" unicode=""/>
+ <map adobe-name="format" win-ansi="-1" unicode=""/>
+ <map adobe-name="graybox" win-ansi="-1" unicode=""/>
+ <map adobe-name="indent" win-ansi="-1" unicode=""/>
+ <map adobe-name="largebullet" win-ansi="-1" unicode=""/>
+ <map adobe-name="left" win-ansi="-1" unicode=""/>
+ <map adobe-name="ll" win-ansi="-1" unicode=""/>
+ <map adobe-name="LL" win-ansi="-1" unicode=""/>
+ <map adobe-name="merge" win-ansi="-1" unicode=""/>
+ <map adobe-name="notegraphic" win-ansi="-1" unicode=""/>
+ <map adobe-name="overscore" win-ansi="-1" unicode=""/>
+ <map adobe-name="prescription" win-ansi="-1" unicode=""/>
+ <map adobe-name="return" win-ansi="-1" unicode=""/>
+ <map adobe-name="square" win-ansi="-1" unicode=""/>
+ <map adobe-name="stop" win-ansi="-1" unicode=""/>
+ <map adobe-name="tab" win-ansi="-1" unicode=""/>
+ <map adobe-name="up" win-ansi="-1" unicode=""/>
+ <map adobe-name="zer" win-ansi="-1" unicode=""/>
+
+-->
diff --git a/fop-core/src/main/codegen/fonts/code-point-mapping.xsl b/fop-core/src/main/codegen/fonts/code-point-mapping.xsl
new file mode 100644
index 000000000..7c49034c5
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/code-point-mapping.xsl
@@ -0,0 +1,171 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<xsl:stylesheet version="2.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:output method="text"/>
+ <xsl:variable name='glyphlists'
+ select="document('glyphlist.xml')/glyphlist-set"/>
+
+ <xsl:template match="encoding-set"> /*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.fop.fonts;
+
+import java.util.Map;
+import java.util.Collections;
+
+public class CodePointMapping extends AbstractCodePointMapping {
+
+<xsl:apply-templates mode="constant"/>
+
+ public CodePointMapping(String name, int[] table) {
+ super(name, table);
+ }
+
+ public CodePointMapping(String name, int[] table, String[] charNameMap) {
+ super(name, table, charNameMap);
+ }
+
+ private static Map mappings;
+ static {
+ mappings = Collections.synchronizedMap(new java.util.HashMap());
+ }
+
+ public static CodePointMapping getMapping(String encoding) {
+ CodePointMapping mapping = (CodePointMapping) mappings.get(encoding);
+ if (mapping != null) {
+ return mapping;
+ } <xsl:apply-templates mode="get"/>
+ throw new UnsupportedOperationException("Unknown encoding: " + encoding);
+ }
+<xsl:apply-templates mode="table"/>
+<xsl:apply-templates select="encoding" mode="names"/>
+}
+ </xsl:template>
+
+ <xsl:template match="encoding" mode="constant"> public static final String <xsl:value-of select="@constant"/> = "<xsl:value-of select="@id"/>";</xsl:template>
+
+ <xsl:template match="encoding" mode="get">
+ else if (encoding.equals(<xsl:value-of select="@constant"/>)) {
+ mapping = new CodePointMapping(<xsl:value-of select="@constant"/>, enc<xsl:value-of select="@id"/>, names<xsl:value-of select="@id"/>);
+ mappings.put(<xsl:value-of select="@constant"/>, mapping);
+ return mapping;
+ }
+ </xsl:template>
+
+ <xsl:template match="encoding" mode="table">
+ <xsl:variable name="glyphlist-name" select="@glyphlist"/>
+ <xsl:variable name="glyphlist"
+ select="$glyphlists/glyphlist[@id=$glyphlist-name]"/>
+ private static final int[] enc<xsl:value-of select="@id"/>
+ = {<xsl:for-each select="glyph">
+ <xsl:variable name="codepoint" select="@codepoint"/>
+ <xsl:variable name="name" select="@name"/><xsl:for-each select="$glyphlist/glyph[@name=$name]">
+ 0x<xsl:value-of select="$codepoint"/>, 0x<xsl:value-of select="@codepoint"/>, // <xsl:value-of select="$name"/>
+</xsl:for-each></xsl:for-each>
+ };
+ </xsl:template>
+
+ <xsl:template match="encoding" mode="names">
+ private static final String[] names<xsl:value-of select="@id"/>
+ = {
+<xsl:call-template name="charname">
+ <xsl:with-param name="idx" select="0"/>
+</xsl:call-template>
+ };
+ </xsl:template>
+
+ <xsl:template name="charname">
+ <xsl:param name="idx"/>
+ <xsl:variable name="idxHEXraw">
+ <xsl:call-template name="toHex">
+ <xsl:with-param name="decimalNumber" select="$idx"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="idxHEX">
+ <xsl:call-template name="padnumber">
+ <xsl:with-param name="num" select="$idxHEXraw"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="idxhex" select="translate($idxHEX, 'ABCDEF', 'abcdef')"></xsl:variable>
+ <!--
+ <xsl:value-of select="$idx"/>-<xsl:value-of select="$idxHEXraw"/>-<xsl:value-of select="$idxHEX"/>-<xsl:value-of select="$idxhex"/>
+ -->
+ <xsl:if test="($idx mod 4) = 0">
+ <xsl:text>&#x0D; /*</xsl:text><xsl:value-of select="$idxHEX"/><xsl:text>*/ </xsl:text>
+ </xsl:if>
+ <xsl:variable name="v">
+ <xsl:value-of select="child::glyph[@codepoint = $idxHEX or @codepoint = $idxhex]/@name"/><!--<xsl:value-of select="glyph[@codepoint = $idxhex]/@name"/>-->
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($v) > 0">
+ <xsl:text>"</xsl:text><xsl:value-of select="$v"/><xsl:text>"</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>null</xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:if test="$idx &lt; 255">
+ <xsl:text>, </xsl:text>
+ <xsl:call-template name="charname">
+ <xsl:with-param name="idx" select="$idx + 1"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:variable name="hexDigits" select="'0123456789ABCDEF'"/>
+ <xsl:template name="toHex">
+ <xsl:param name="decimalNumber" />
+ <xsl:if test="$decimalNumber >= 16">
+ <xsl:call-template name="toHex">
+ <xsl:with-param name="decimalNumber" select="floor($decimalNumber div 16)" />
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:value-of select="substring($hexDigits, ($decimalNumber mod 16) + 1, 1)" />
+ </xsl:template>
+
+ <xsl:template name="padnumber">
+ <xsl:param name="num"/>
+ <xsl:param name="len" select="2"/>
+ <!--
+ <xsl:text> </xsl:text><xsl:value-of select="$num"/>/<xsl:value-of select="$len"/>
+ -->
+ <xsl:choose>
+ <xsl:when test="string-length($num) &lt; $len">
+ <xsl:call-template name="padnumber">
+ <xsl:with-param name="num" select="concat('0',$num)"/>
+ <xsl:with-param name="len" select="$len"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise><xsl:value-of select="$num"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/fop-core/src/main/codegen/fonts/encodings.xml b/fop-core/src/main/codegen/fonts/encodings.xml
new file mode 100644
index 000000000..d7855000e
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/encodings.xml
@@ -0,0 +1,1654 @@
+<?xml version='1.0'?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!DOCTYPE encoding-set [
+ <!ELEMENT encoding-set (encoding+)>
+ <!ELEMENT encoding (glyph+)>
+ <!ATTLIST encoding id ID #REQUIRED constant CDATA #REQUIRED glyphlist CDATA "AGL">
+ <!ELEMENT glyph EMPTY>
+ <!ATTLIST glyph codepoint CDATA #REQUIRED name CDATA #REQUIRED>
+]>
+<encoding-set>
+ <encoding id='StandardEncoding' constant="STANDARD_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='quotedbl'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='dollar'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='quoteright'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asterisk'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='hyphen'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='at'/>
+ <glyph codepoint='41' name='A'/>
+ <glyph codepoint='42' name='B'/>
+ <glyph codepoint='43' name='C'/>
+ <glyph codepoint='44' name='D'/>
+ <glyph codepoint='45' name='E'/>
+ <glyph codepoint='46' name='F'/>
+ <glyph codepoint='47' name='G'/>
+ <glyph codepoint='48' name='H'/>
+ <glyph codepoint='49' name='I'/>
+ <glyph codepoint='4a' name='J'/>
+ <glyph codepoint='4b' name='K'/>
+ <glyph codepoint='4c' name='L'/>
+ <glyph codepoint='4d' name='M'/>
+ <glyph codepoint='4e' name='N'/>
+ <glyph codepoint='4f' name='O'/>
+ <glyph codepoint='50' name='P'/>
+ <glyph codepoint='51' name='Q'/>
+ <glyph codepoint='52' name='R'/>
+ <glyph codepoint='53' name='S'/>
+ <glyph codepoint='54' name='T'/>
+ <glyph codepoint='55' name='U'/>
+ <glyph codepoint='56' name='V'/>
+ <glyph codepoint='57' name='W'/>
+ <glyph codepoint='58' name='X'/>
+ <glyph codepoint='59' name='Y'/>
+ <glyph codepoint='5a' name='Z'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='backslash'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='asciicircum'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='quoteleft'/>
+ <glyph codepoint='61' name='a'/>
+ <glyph codepoint='62' name='b'/>
+ <glyph codepoint='63' name='c'/>
+ <glyph codepoint='64' name='d'/>
+ <glyph codepoint='65' name='e'/>
+ <glyph codepoint='66' name='f'/>
+ <glyph codepoint='67' name='g'/>
+ <glyph codepoint='68' name='h'/>
+ <glyph codepoint='69' name='i'/>
+ <glyph codepoint='6a' name='j'/>
+ <glyph codepoint='6b' name='k'/>
+ <glyph codepoint='6c' name='l'/>
+ <glyph codepoint='6d' name='m'/>
+ <glyph codepoint='6e' name='n'/>
+ <glyph codepoint='6f' name='o'/>
+ <glyph codepoint='70' name='p'/>
+ <glyph codepoint='71' name='q'/>
+ <glyph codepoint='72' name='r'/>
+ <glyph codepoint='73' name='s'/>
+ <glyph codepoint='74' name='t'/>
+ <glyph codepoint='75' name='u'/>
+ <glyph codepoint='76' name='v'/>
+ <glyph codepoint='77' name='w'/>
+ <glyph codepoint='78' name='x'/>
+ <glyph codepoint='79' name='y'/>
+ <glyph codepoint='7a' name='z'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='asciitilde'/>
+ <glyph codepoint='a1' name='exclamdown'/>
+ <glyph codepoint='a2' name='cent'/>
+ <glyph codepoint='a3' name='sterling'/>
+ <glyph codepoint='a4' name='fraction'/>
+ <glyph codepoint='a5' name='yen'/>
+ <glyph codepoint='a6' name='florin'/>
+ <glyph codepoint='a7' name='section'/>
+ <glyph codepoint='a8' name='currency'/>
+ <glyph codepoint='a9' name='quotesingle'/>
+ <glyph codepoint='aa' name='quotedblleft'/>
+ <glyph codepoint='ab' name='guillemotleft'/>
+ <glyph codepoint='ac' name='guilsinglleft'/>
+ <glyph codepoint='ad' name='guilsinglright'/>
+ <glyph codepoint='ae' name='fi'/>
+ <glyph codepoint='af' name='fl'/>
+ <glyph codepoint='b1' name='endash'/>
+ <glyph codepoint='b2' name='dagger'/>
+ <glyph codepoint='b3' name='daggerdbl'/>
+ <glyph codepoint='b4' name='periodcentered'/>
+ <glyph codepoint='b6' name='paragraph'/>
+ <glyph codepoint='b7' name='bullet'/>
+ <glyph codepoint='b8' name='quotesinglbase'/>
+ <glyph codepoint='b9' name='quotedblbase'/>
+ <glyph codepoint='ba' name='quotedblright'/>
+ <glyph codepoint='bb' name='guillemotright'/>
+ <glyph codepoint='bc' name='ellipsis'/>
+ <glyph codepoint='bd' name='perthousand'/>
+ <glyph codepoint='bf' name='questiondown'/>
+ <glyph codepoint='c1' name='grave'/>
+ <glyph codepoint='c2' name='acute'/>
+ <glyph codepoint='c3' name='circumflex'/>
+ <glyph codepoint='c4' name='tilde'/>
+ <glyph codepoint='c5' name='macron'/>
+ <glyph codepoint='c6' name='breve'/>
+ <glyph codepoint='c7' name='dotaccent'/>
+ <glyph codepoint='c8' name='dieresis'/>
+ <glyph codepoint='ca' name='ring'/>
+ <glyph codepoint='cb' name='cedilla'/>
+ <glyph codepoint='cd' name='hungarumlaut'/>
+ <glyph codepoint='ce' name='ogonek'/>
+ <glyph codepoint='cf' name='caron'/>
+ <glyph codepoint='d0' name='emdash'/>
+ <glyph codepoint='e1' name='AE'/>
+ <glyph codepoint='e3' name='ordfeminine'/>
+ <glyph codepoint='e8' name='Lslash'/>
+ <glyph codepoint='e9' name='Oslash'/>
+ <glyph codepoint='ea' name='OE'/>
+ <glyph codepoint='eb' name='ordmasculine'/>
+ <glyph codepoint='f1' name='ae'/>
+ <glyph codepoint='f5' name='dotlessi'/>
+ <glyph codepoint='f8' name='lslash'/>
+ <glyph codepoint='f9' name='oslash'/>
+ <glyph codepoint='fa' name='oe'/>
+ <glyph codepoint='fb' name='germandbls'/>
+ </encoding>
+ <encoding id='ISOLatin1Encoding' constant="ISOLATIN1_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='quotedbl'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='dollar'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='quoteright'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asterisk'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='minus'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='at'/>
+ <glyph codepoint='41' name='A'/>
+ <glyph codepoint='42' name='B'/>
+ <glyph codepoint='43' name='C'/>
+ <glyph codepoint='44' name='D'/>
+ <glyph codepoint='45' name='E'/>
+ <glyph codepoint='46' name='F'/>
+ <glyph codepoint='47' name='G'/>
+ <glyph codepoint='48' name='H'/>
+ <glyph codepoint='49' name='I'/>
+ <glyph codepoint='4a' name='J'/>
+ <glyph codepoint='4b' name='K'/>
+ <glyph codepoint='4c' name='L'/>
+ <glyph codepoint='4d' name='M'/>
+ <glyph codepoint='4e' name='N'/>
+ <glyph codepoint='4f' name='O'/>
+ <glyph codepoint='50' name='P'/>
+ <glyph codepoint='51' name='Q'/>
+ <glyph codepoint='52' name='R'/>
+ <glyph codepoint='53' name='S'/>
+ <glyph codepoint='54' name='T'/>
+ <glyph codepoint='55' name='U'/>
+ <glyph codepoint='56' name='V'/>
+ <glyph codepoint='57' name='W'/>
+ <glyph codepoint='58' name='X'/>
+ <glyph codepoint='59' name='Y'/>
+ <glyph codepoint='5a' name='Z'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='backslash'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='asciicircum'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='quoteleft'/>
+ <glyph codepoint='61' name='a'/>
+ <glyph codepoint='62' name='b'/>
+ <glyph codepoint='63' name='c'/>
+ <glyph codepoint='64' name='d'/>
+ <glyph codepoint='65' name='e'/>
+ <glyph codepoint='66' name='f'/>
+ <glyph codepoint='67' name='g'/>
+ <glyph codepoint='68' name='h'/>
+ <glyph codepoint='69' name='i'/>
+ <glyph codepoint='6a' name='j'/>
+ <glyph codepoint='6b' name='k'/>
+ <glyph codepoint='6c' name='l'/>
+ <glyph codepoint='6d' name='m'/>
+ <glyph codepoint='6e' name='n'/>
+ <glyph codepoint='6f' name='o'/>
+ <glyph codepoint='70' name='p'/>
+ <glyph codepoint='71' name='q'/>
+ <glyph codepoint='72' name='r'/>
+ <glyph codepoint='73' name='s'/>
+ <glyph codepoint='74' name='t'/>
+ <glyph codepoint='75' name='u'/>
+ <glyph codepoint='76' name='v'/>
+ <glyph codepoint='77' name='w'/>
+ <glyph codepoint='78' name='x'/>
+ <glyph codepoint='79' name='y'/>
+ <glyph codepoint='7a' name='z'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='asciitilde'/>
+ <glyph codepoint='90' name='dotlessi'/>
+ <glyph codepoint='91' name='grave'/>
+ <glyph codepoint='93' name='circumflex'/>
+ <glyph codepoint='94' name='tilde'/>
+ <glyph codepoint='96' name='breve'/>
+ <glyph codepoint='97' name='dotaccent'/>
+ <glyph codepoint='9a' name='ring'/>
+ <glyph codepoint='9d' name='hungarumlaut'/>
+ <glyph codepoint='9e' name='ogonek'/>
+ <glyph codepoint='9f' name='caron'/>
+ <glyph codepoint='a1' name='exclamdown'/>
+ <glyph codepoint='a2' name='cent'/>
+ <glyph codepoint='a3' name='sterling'/>
+ <glyph codepoint='a4' name='currency'/>
+ <glyph codepoint='a5' name='yen'/>
+ <glyph codepoint='a6' name='brokenbar'/>
+ <glyph codepoint='a7' name='section'/>
+ <glyph codepoint='a8' name='dieresis'/>
+ <glyph codepoint='a9' name='copyright'/>
+ <glyph codepoint='aa' name='ordfeminine'/>
+ <glyph codepoint='ab' name='guillemotleft'/>
+ <glyph codepoint='ac' name='logicalnot'/>
+ <glyph codepoint='ad' name='hyphen'/>
+ <glyph codepoint='ae' name='registered'/>
+ <glyph codepoint='af' name='macron'/>
+ <glyph codepoint='b0' name='degree'/>
+ <glyph codepoint='b1' name='plusminus'/>
+ <glyph codepoint='b2' name='twosuperior'/>
+ <glyph codepoint='b3' name='threesuperior'/>
+ <glyph codepoint='b4' name='acute'/>
+ <glyph codepoint='b5' name='mu'/>
+ <glyph codepoint='b6' name='paragraph'/>
+ <glyph codepoint='b7' name='periodcentered'/>
+ <glyph codepoint='b8' name='cedilla'/>
+ <glyph codepoint='b9' name='onesuperior'/>
+ <glyph codepoint='ba' name='ordmasculine'/>
+ <glyph codepoint='bb' name='guillemotright'/>
+ <glyph codepoint='bc' name='onequarter'/>
+ <glyph codepoint='bd' name='onehalf'/>
+ <glyph codepoint='be' name='threequarters'/>
+ <glyph codepoint='bf' name='questiondown'/>
+ <glyph codepoint='c0' name='Agrave'/>
+ <glyph codepoint='c1' name='Aacute'/>
+ <glyph codepoint='c2' name='Acircumflex'/>
+ <glyph codepoint='c3' name='Atilde'/>
+ <glyph codepoint='c4' name='Adieresis'/>
+ <glyph codepoint='c5' name='Aring'/>
+ <glyph codepoint='c6' name='AE'/>
+ <glyph codepoint='c7' name='Ccedilla'/>
+ <glyph codepoint='c8' name='Egrave'/>
+ <glyph codepoint='c9' name='Eacute'/>
+ <glyph codepoint='ca' name='Ecircumflex'/>
+ <glyph codepoint='cb' name='Edieresis'/>
+ <glyph codepoint='cc' name='Igrave'/>
+ <glyph codepoint='cd' name='Iacute'/>
+ <glyph codepoint='ce' name='Icircumflex'/>
+ <glyph codepoint='cf' name='Idieresis'/>
+ <glyph codepoint='d0' name='Eth'/>
+ <glyph codepoint='d1' name='Ntilde'/>
+ <glyph codepoint='d2' name='Ograve'/>
+ <glyph codepoint='d3' name='Oacute'/>
+ <glyph codepoint='d4' name='Ocircumflex'/>
+ <glyph codepoint='d5' name='Otilde'/>
+ <glyph codepoint='d6' name='Odieresis'/>
+ <glyph codepoint='d7' name='multiply'/>
+ <glyph codepoint='d8' name='Oslash'/>
+ <glyph codepoint='d9' name='Ugrave'/>
+ <glyph codepoint='da' name='Uacute'/>
+ <glyph codepoint='db' name='Ucircumflex'/>
+ <glyph codepoint='dc' name='Udieresis'/>
+ <glyph codepoint='dd' name='Yacute'/>
+ <glyph codepoint='de' name='Thorn'/>
+ <glyph codepoint='df' name='germandbls'/>
+ <glyph codepoint='e0' name='agrave'/>
+ <glyph codepoint='e1' name='aacute'/>
+ <glyph codepoint='e2' name='acircumflex'/>
+ <glyph codepoint='e3' name='atilde'/>
+ <glyph codepoint='e4' name='adieresis'/>
+ <glyph codepoint='e5' name='aring'/>
+ <glyph codepoint='e6' name='ae'/>
+ <glyph codepoint='e7' name='ccedilla'/>
+ <glyph codepoint='e8' name='egrave'/>
+ <glyph codepoint='e9' name='eacute'/>
+ <glyph codepoint='ea' name='ecircumflex'/>
+ <glyph codepoint='eb' name='edieresis'/>
+ <glyph codepoint='ec' name='igrave'/>
+ <glyph codepoint='ed' name='iacute'/>
+ <glyph codepoint='ee' name='icircumflex'/>
+ <glyph codepoint='ef' name='idieresis'/>
+ <glyph codepoint='f0' name='eth'/>
+ <glyph codepoint='f1' name='ntilde'/>
+ <glyph codepoint='f2' name='ograve'/>
+ <glyph codepoint='f3' name='oacute'/>
+ <glyph codepoint='f4' name='ocircumflex'/>
+ <glyph codepoint='f5' name='otilde'/>
+ <glyph codepoint='f6' name='odieresis'/>
+ <glyph codepoint='f7' name='divide'/>
+ <glyph codepoint='f8' name='oslash'/>
+ <glyph codepoint='f9' name='ugrave'/>
+ <glyph codepoint='fa' name='uacute'/>
+ <glyph codepoint='fb' name='ucircumflex'/>
+ <glyph codepoint='fc' name='udieresis'/>
+ <glyph codepoint='fd' name='yacute'/>
+ <glyph codepoint='fe' name='thorn'/>
+ <glyph codepoint='ff' name='ydieresis'/>
+ </encoding>
+ <encoding id='CEEncoding' constant="CE_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='quotedbl'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='dollar'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='quotesingle'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asterisk'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='hyphen'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='at'/>
+ <glyph codepoint='41' name='A'/>
+ <glyph codepoint='42' name='B'/>
+ <glyph codepoint='43' name='C'/>
+ <glyph codepoint='44' name='D'/>
+ <glyph codepoint='45' name='E'/>
+ <glyph codepoint='46' name='F'/>
+ <glyph codepoint='47' name='G'/>
+ <glyph codepoint='48' name='H'/>
+ <glyph codepoint='49' name='I'/>
+ <glyph codepoint='4a' name='J'/>
+ <glyph codepoint='4b' name='K'/>
+ <glyph codepoint='4c' name='L'/>
+ <glyph codepoint='4d' name='M'/>
+ <glyph codepoint='4e' name='N'/>
+ <glyph codepoint='4f' name='O'/>
+ <glyph codepoint='50' name='P'/>
+ <glyph codepoint='51' name='Q'/>
+ <glyph codepoint='52' name='R'/>
+ <glyph codepoint='53' name='S'/>
+ <glyph codepoint='54' name='T'/>
+ <glyph codepoint='55' name='U'/>
+ <glyph codepoint='56' name='V'/>
+ <glyph codepoint='57' name='W'/>
+ <glyph codepoint='58' name='X'/>
+ <glyph codepoint='59' name='Y'/>
+ <glyph codepoint='5a' name='Z'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='backslash'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='asciicircum'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='grave'/>
+ <glyph codepoint='61' name='a'/>
+ <glyph codepoint='62' name='b'/>
+ <glyph codepoint='63' name='c'/>
+ <glyph codepoint='64' name='d'/>
+ <glyph codepoint='65' name='e'/>
+ <glyph codepoint='66' name='f'/>
+ <glyph codepoint='67' name='g'/>
+ <glyph codepoint='68' name='h'/>
+ <glyph codepoint='69' name='i'/>
+ <glyph codepoint='6a' name='j'/>
+ <glyph codepoint='6b' name='k'/>
+ <glyph codepoint='6c' name='l'/>
+ <glyph codepoint='6d' name='m'/>
+ <glyph codepoint='6e' name='n'/>
+ <glyph codepoint='6f' name='o'/>
+ <glyph codepoint='70' name='p'/>
+ <glyph codepoint='71' name='q'/>
+ <glyph codepoint='72' name='r'/>
+ <glyph codepoint='73' name='s'/>
+ <glyph codepoint='74' name='t'/>
+ <glyph codepoint='75' name='u'/>
+ <glyph codepoint='76' name='v'/>
+ <glyph codepoint='77' name='w'/>
+ <glyph codepoint='78' name='x'/>
+ <glyph codepoint='79' name='y'/>
+ <glyph codepoint='7a' name='z'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='asciitilde'/>
+ <glyph codepoint='82' name='quotesinglbase'/>
+ <glyph codepoint='84' name='quotedblbase'/>
+ <glyph codepoint='85' name='ellipsis'/>
+ <glyph codepoint='86' name='dagger'/>
+ <glyph codepoint='87' name='daggerdbl'/>
+ <glyph codepoint='89' name='perthousand'/>
+ <glyph codepoint='8a' name='Scaron'/>
+ <glyph codepoint='8b' name='guilsinglleft'/>
+ <glyph codepoint='8c' name='Sacute'/>
+ <glyph codepoint='8d' name='Tcaron'/>
+ <glyph codepoint='8e' name='Zcaron'/>
+ <glyph codepoint='8f' name='Zacute'/>
+ <glyph codepoint='91' name='quoteleft'/>
+ <glyph codepoint='92' name='quoteright'/>
+ <glyph codepoint='93' name='quotedblleft'/>
+ <glyph codepoint='94' name='quotedblright'/>
+ <glyph codepoint='95' name='bullet'/>
+ <glyph codepoint='96' name='endash'/>
+ <glyph codepoint='97' name='emdash'/>
+ <glyph codepoint='99' name='trademark'/>
+ <glyph codepoint='9a' name='scaron'/>
+ <glyph codepoint='9b' name='guilsinglright'/>
+ <glyph codepoint='9c' name='sacute'/>
+ <glyph codepoint='9d' name='tcaron'/>
+ <glyph codepoint='9e' name='zcaron'/>
+ <glyph codepoint='9f' name='zacute'/>
+ <glyph codepoint='a1' name='caron'/>
+ <glyph codepoint='a2' name='breve'/>
+ <glyph codepoint='a3' name='Lslash'/>
+ <glyph codepoint='a4' name='currency'/>
+ <glyph codepoint='a5' name='Aogonek'/>
+ <glyph codepoint='a6' name='brokenbar'/>
+ <glyph codepoint='a7' name='section'/>
+ <glyph codepoint='a8' name='dieresis'/>
+ <glyph codepoint='a9' name='copyright'/>
+ <glyph codepoint='aa' name='Scommaaccent'/>
+ <glyph codepoint='ab' name='guillemotleft'/>
+ <glyph codepoint='ac' name='logicalnot'/>
+ <glyph codepoint='ae' name='registered'/>
+ <glyph codepoint='af' name='Zdotaccent'/>
+ <glyph codepoint='b0' name='degree'/>
+ <glyph codepoint='b1' name='plusminus'/>
+ <glyph codepoint='b2' name='ogonek'/>
+ <glyph codepoint='b3' name='lslash'/>
+ <glyph codepoint='b4' name='acute'/>
+ <glyph codepoint='b5' name='mu'/>
+ <glyph codepoint='b6' name='paragraph'/>
+ <glyph codepoint='b7' name='periodcentered'/>
+ <glyph codepoint='b8' name='cedilla'/>
+ <glyph codepoint='b9' name='aogonek'/>
+ <glyph codepoint='ba' name='scommaaccent'/>
+ <glyph codepoint='bb' name='guillemotright'/>
+ <glyph codepoint='bc' name='Lcaron'/>
+ <glyph codepoint='bd' name='hungarumlaut'/>
+ <glyph codepoint='be' name='lcaron'/>
+ <glyph codepoint='bf' name='zdotaccent'/>
+ <glyph codepoint='c0' name='Racute'/>
+ <glyph codepoint='c1' name='Aacute'/>
+ <glyph codepoint='c2' name='Acircumflex'/>
+ <glyph codepoint='c3' name='Abreve'/>
+ <glyph codepoint='c4' name='Adieresis'/>
+ <glyph codepoint='c5' name='Lacute'/>
+ <glyph codepoint='c6' name='Cacute'/>
+ <glyph codepoint='c7' name='Ccedilla'/>
+ <glyph codepoint='c8' name='Ccaron'/>
+ <glyph codepoint='c9' name='Eacute'/>
+ <glyph codepoint='ca' name='Eogonek'/>
+ <glyph codepoint='cb' name='Edieresis'/>
+ <glyph codepoint='cc' name='Ecaron'/>
+ <glyph codepoint='cd' name='Iacute'/>
+ <glyph codepoint='ce' name='Icircumflex'/>
+ <glyph codepoint='cf' name='Dcaron'/>
+ <glyph codepoint='d0' name='Dcroat'/>
+ <glyph codepoint='d1' name='Nacute'/>
+ <glyph codepoint='d2' name='Ncaron'/>
+ <glyph codepoint='d3' name='Oacute'/>
+ <glyph codepoint='d4' name='Ocircumflex'/>
+ <glyph codepoint='d5' name='Ohungarumlaut'/>
+ <glyph codepoint='d6' name='Odieresis'/>
+ <glyph codepoint='d7' name='multiply'/>
+ <glyph codepoint='d8' name='Rcaron'/>
+ <glyph codepoint='d9' name='Uring'/>
+ <glyph codepoint='da' name='Uacute'/>
+ <glyph codepoint='db' name='Uhungarumlaut'/>
+ <glyph codepoint='dc' name='Udieresis'/>
+ <glyph codepoint='dd' name='Yacute'/>
+ <glyph codepoint='de' name='Tcommaaccent'/>
+ <glyph codepoint='df' name='germandbls'/>
+ <glyph codepoint='e0' name='racute'/>
+ <glyph codepoint='e1' name='aacute'/>
+ <glyph codepoint='e2' name='acircumflex'/>
+ <glyph codepoint='e3' name='abreve'/>
+ <glyph codepoint='e4' name='adieresis'/>
+ <glyph codepoint='e5' name='lacute'/>
+ <glyph codepoint='e6' name='cacute'/>
+ <glyph codepoint='e7' name='ccedilla'/>
+ <glyph codepoint='e8' name='ccaron'/>
+ <glyph codepoint='e9' name='eacute'/>
+ <glyph codepoint='ea' name='eogonek'/>
+ <glyph codepoint='eb' name='edieresis'/>
+ <glyph codepoint='ec' name='ecaron'/>
+ <glyph codepoint='ed' name='iacute'/>
+ <glyph codepoint='ee' name='icircumflex'/>
+ <glyph codepoint='ef' name='dcaron'/>
+ <glyph codepoint='f0' name='dcroat'/>
+ <glyph codepoint='f1' name='nacute'/>
+ <glyph codepoint='f2' name='ncaron'/>
+ <glyph codepoint='f3' name='oacute'/>
+ <glyph codepoint='f4' name='ocircumflex'/>
+ <glyph codepoint='f5' name='ohungarumlaut'/>
+ <glyph codepoint='f6' name='odieresis'/>
+ <glyph codepoint='f7' name='divide'/>
+ <glyph codepoint='f8' name='rcaron'/>
+ <glyph codepoint='f9' name='uring'/>
+ <glyph codepoint='fa' name='uacute'/>
+ <glyph codepoint='fb' name='uhungarumlaut'/>
+ <glyph codepoint='fc' name='udieresis'/>
+ <glyph codepoint='fd' name='yacute'/>
+ <glyph codepoint='fe' name='tcommaaccent'/>
+ <glyph codepoint='ff' name='dotaccent'/>
+ </encoding>
+ <encoding id='MacRomanEncoding' constant="MAC_ROMAN_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='quotedbl'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='dollar'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='quotesingle'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asterisk'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='hyphen'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='at'/>
+ <glyph codepoint='41' name='A'/>
+ <glyph codepoint='42' name='B'/>
+ <glyph codepoint='43' name='C'/>
+ <glyph codepoint='44' name='D'/>
+ <glyph codepoint='45' name='E'/>
+ <glyph codepoint='46' name='F'/>
+ <glyph codepoint='47' name='G'/>
+ <glyph codepoint='48' name='H'/>
+ <glyph codepoint='49' name='I'/>
+ <glyph codepoint='4a' name='J'/>
+ <glyph codepoint='4b' name='K'/>
+ <glyph codepoint='4c' name='L'/>
+ <glyph codepoint='4d' name='M'/>
+ <glyph codepoint='4e' name='N'/>
+ <glyph codepoint='4f' name='O'/>
+ <glyph codepoint='50' name='P'/>
+ <glyph codepoint='51' name='Q'/>
+ <glyph codepoint='52' name='R'/>
+ <glyph codepoint='53' name='S'/>
+ <glyph codepoint='54' name='T'/>
+ <glyph codepoint='55' name='U'/>
+ <glyph codepoint='56' name='V'/>
+ <glyph codepoint='57' name='W'/>
+ <glyph codepoint='58' name='X'/>
+ <glyph codepoint='59' name='Y'/>
+ <glyph codepoint='5a' name='Z'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='backslash'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='asciicircum'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='grave'/>
+ <glyph codepoint='61' name='a'/>
+ <glyph codepoint='62' name='b'/>
+ <glyph codepoint='63' name='c'/>
+ <glyph codepoint='64' name='d'/>
+ <glyph codepoint='65' name='e'/>
+ <glyph codepoint='66' name='f'/>
+ <glyph codepoint='67' name='g'/>
+ <glyph codepoint='68' name='h'/>
+ <glyph codepoint='69' name='i'/>
+ <glyph codepoint='6a' name='j'/>
+ <glyph codepoint='6b' name='k'/>
+ <glyph codepoint='6c' name='l'/>
+ <glyph codepoint='6d' name='m'/>
+ <glyph codepoint='6e' name='n'/>
+ <glyph codepoint='6f' name='o'/>
+ <glyph codepoint='70' name='p'/>
+ <glyph codepoint='71' name='q'/>
+ <glyph codepoint='72' name='r'/>
+ <glyph codepoint='73' name='s'/>
+ <glyph codepoint='74' name='t'/>
+ <glyph codepoint='75' name='u'/>
+ <glyph codepoint='76' name='v'/>
+ <glyph codepoint='77' name='w'/>
+ <glyph codepoint='78' name='x'/>
+ <glyph codepoint='79' name='y'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='asciitilde'/>
+ <glyph codepoint='80' name='Adieresis'/>
+ <glyph codepoint='81' name='Aring'/>
+ <glyph codepoint='82' name='Ccedilla'/>
+ <glyph codepoint='83' name='Eacute'/>
+ <glyph codepoint='84' name='Ntilde'/>
+ <glyph codepoint='85' name='Odieresis'/>
+ <glyph codepoint='86' name='Udieresis'/>
+ <glyph codepoint='87' name='aacute'/>
+ <glyph codepoint='88' name='agrave'/>
+ <glyph codepoint='89' name='acircumflex'/>
+ <glyph codepoint='8a' name='adieresis'/>
+ <glyph codepoint='8b' name='atilde'/>
+ <glyph codepoint='8c' name='aring'/>
+ <glyph codepoint='8d' name='ccedilla'/>
+ <glyph codepoint='8e' name='eacute'/>
+ <glyph codepoint='8f' name='egrave'/>
+ <glyph codepoint='90' name='ecircumflex'/>
+ <glyph codepoint='91' name='edieresis'/>
+ <glyph codepoint='92' name='iacute'/>
+ <glyph codepoint='93' name='igrave'/>
+ <glyph codepoint='94' name='icircumflex'/>
+ <glyph codepoint='95' name='idieresis'/>
+ <glyph codepoint='96' name='ntilde'/>
+ <glyph codepoint='97' name='oacute'/>
+ <glyph codepoint='98' name='ograve'/>
+ <glyph codepoint='99' name='ocircumflex'/>
+ <glyph codepoint='9a' name='odieresis'/>
+ <glyph codepoint='9b' name='otilde'/>
+ <glyph codepoint='9c' name='uacute'/>
+ <glyph codepoint='9d' name='ugrave'/>
+ <glyph codepoint='9e' name='ucircumflex'/>
+ <glyph codepoint='9f' name='udieresis'/>
+ <glyph codepoint='a0' name='dagger'/>
+ <glyph codepoint='a1' name='degree'/>
+ <glyph codepoint='a2' name='cent'/>
+ <glyph codepoint='a3' name='sterling'/>
+ <glyph codepoint='a4' name='section'/>
+ <glyph codepoint='a5' name='bullet'/>
+ <glyph codepoint='a6' name='paragraph'/>
+ <glyph codepoint='a7' name='germandbls'/>
+ <glyph codepoint='a8' name='registered'/>
+ <glyph codepoint='a9' name='copyright'/>
+ <glyph codepoint='aa' name='trademark'/>
+ <glyph codepoint='ab' name='acute'/>
+ <glyph codepoint='ac' name='dieresis'/>
+ <glyph codepoint='ae' name='AE'/>
+ <glyph codepoint='af' name='Oslash'/>
+ <glyph codepoint='b1' name='plusminus'/>
+ <glyph codepoint='b5' name='mu'/>
+ <glyph codepoint='bb' name='ordfeminine'/>
+ <glyph codepoint='bc' name='ordmasculine'/>
+ <glyph codepoint='be' name='ae'/>
+ <glyph codepoint='bf' name='oslash'/>
+ <glyph codepoint='c0' name='questiondown'/>
+ <glyph codepoint='c1' name='exclamdown'/>
+ <glyph codepoint='c2' name='logicalnot'/>
+ <glyph codepoint='c4' name='florin'/>
+ <glyph codepoint='c7' name='guillemotleft'/>
+ <glyph codepoint='c8' name='guillemotright'/>
+ <glyph codepoint='c9' name='ellipsis'/>
+ <glyph codepoint='cb' name='Agrave'/>
+ <glyph codepoint='cc' name='Atilde'/>
+ <glyph codepoint='cd' name='Otilde'/>
+ <glyph codepoint='ce' name='OE'/>
+ <glyph codepoint='cf' name='oe'/>
+ <glyph codepoint='d0' name='endash'/>
+ <glyph codepoint='d1' name='emdash'/>
+ <glyph codepoint='d2' name='quotedblleft'/>
+ <glyph codepoint='d3' name='quotedblright'/>
+ <glyph codepoint='d4' name='quoteleft'/>
+ <glyph codepoint='d5' name='quoteright'/>
+ <glyph codepoint='d6' name='divide'/>
+ <glyph codepoint='d9' name='Ydieresis'/>
+ <glyph codepoint='da' name='fraction'/>
+ <glyph codepoint='db' name='currency'/>
+ <glyph codepoint='dc' name='guilsinglleft'/>
+ <glyph codepoint='dd' name='guilsinglright'/>
+ <glyph codepoint='de' name='fi'/>
+ <glyph codepoint='df' name='fl'/>
+ <glyph codepoint='e0' name='daggerdbl'/>
+ <glyph codepoint='e1' name='periodcentered'/>
+ <glyph codepoint='e2' name='quotesinglbase'/>
+ <glyph codepoint='e3' name='quotedblbase'/>
+ <glyph codepoint='e4' name='perthousand'/>
+ <glyph codepoint='e5' name='Acircumflex'/>
+ <glyph codepoint='e6' name='Ecircumflex'/>
+ <glyph codepoint='e7' name='Aacute'/>
+ <glyph codepoint='e8' name='Edieresis'/>
+ <glyph codepoint='e9' name='Egrave'/>
+ <glyph codepoint='ea' name='Iacute'/>
+ <glyph codepoint='eb' name='Icircumflex'/>
+ <glyph codepoint='ec' name='Idieresis'/>
+ <glyph codepoint='ed' name='Igrave'/>
+ <glyph codepoint='ee' name='Oacute'/>
+ <glyph codepoint='ef' name='Ocircumflex'/>
+ <glyph codepoint='f1' name='Ograve'/>
+ <glyph codepoint='f2' name='Uacute'/>
+ <glyph codepoint='f3' name='Ucircumflex'/>
+ <glyph codepoint='f4' name='Ugrave'/>
+ <glyph codepoint='f5' name='dotlessi'/>
+ <glyph codepoint='f6' name='circumflex'/>
+ <glyph codepoint='f7' name='tilde'/>
+ <glyph codepoint='f8' name='macron'/>
+ <glyph codepoint='f9' name='breve'/>
+ <glyph codepoint='fa' name='dotaccent'/>
+ <glyph codepoint='fb' name='ring'/>
+ <glyph codepoint='fc' name='cedilla'/>
+ <glyph codepoint='fd' name='hungarumlaut'/>
+ <glyph codepoint='fe' name='ogonek'/>
+ <glyph codepoint='ff' name='caron'/>
+ <glyph codepoint='d8' name='ydieresis'/>
+ <glyph codepoint='b4' name='yen'/>
+ <glyph codepoint='7a' name='z'/>
+ </encoding>
+ <encoding id='WinAnsiEncoding' constant="WIN_ANSI_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='quotedbl'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='dollar'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='quotesingle'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asterisk'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='hyphen'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='at'/>
+ <glyph codepoint='41' name='A'/>
+ <glyph codepoint='42' name='B'/>
+ <glyph codepoint='43' name='C'/>
+ <glyph codepoint='44' name='D'/>
+ <glyph codepoint='45' name='E'/>
+ <glyph codepoint='46' name='F'/>
+ <glyph codepoint='47' name='G'/>
+ <glyph codepoint='48' name='H'/>
+ <glyph codepoint='49' name='I'/>
+ <glyph codepoint='4a' name='J'/>
+ <glyph codepoint='4b' name='K'/>
+ <glyph codepoint='4c' name='L'/>
+ <glyph codepoint='4d' name='M'/>
+ <glyph codepoint='4e' name='N'/>
+ <glyph codepoint='4f' name='O'/>
+ <glyph codepoint='50' name='P'/>
+ <glyph codepoint='51' name='Q'/>
+ <glyph codepoint='52' name='R'/>
+ <glyph codepoint='53' name='S'/>
+ <glyph codepoint='54' name='T'/>
+ <glyph codepoint='55' name='U'/>
+ <glyph codepoint='56' name='V'/>
+ <glyph codepoint='57' name='W'/>
+ <glyph codepoint='58' name='X'/>
+ <glyph codepoint='59' name='Y'/>
+ <glyph codepoint='5a' name='Z'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='backslash'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='asciicircum'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='grave'/>
+ <glyph codepoint='61' name='a'/>
+ <glyph codepoint='62' name='b'/>
+ <glyph codepoint='63' name='c'/>
+ <glyph codepoint='64' name='d'/>
+ <glyph codepoint='65' name='e'/>
+ <glyph codepoint='66' name='f'/>
+ <glyph codepoint='67' name='g'/>
+ <glyph codepoint='68' name='h'/>
+ <glyph codepoint='69' name='i'/>
+ <glyph codepoint='6a' name='j'/>
+ <glyph codepoint='6b' name='k'/>
+ <glyph codepoint='6c' name='l'/>
+ <glyph codepoint='6d' name='m'/>
+ <glyph codepoint='6e' name='n'/>
+ <glyph codepoint='6f' name='o'/>
+ <glyph codepoint='70' name='p'/>
+ <glyph codepoint='71' name='q'/>
+ <glyph codepoint='72' name='r'/>
+ <glyph codepoint='73' name='s'/>
+ <glyph codepoint='74' name='t'/>
+ <glyph codepoint='75' name='u'/>
+ <glyph codepoint='76' name='v'/>
+ <glyph codepoint='77' name='w'/>
+ <glyph codepoint='78' name='x'/>
+ <glyph codepoint='79' name='y'/>
+ <glyph codepoint='7a' name='z'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='asciitilde'/>
+ <glyph codepoint='80' name='Euro'/>
+ <glyph codepoint='82' name='quotesinglbase'/>
+ <glyph codepoint='83' name='florin'/>
+ <glyph codepoint='84' name='quotedblbase'/>
+ <glyph codepoint='85' name='ellipsis'/>
+ <glyph codepoint='86' name='dagger'/>
+ <glyph codepoint='87' name='daggerdbl'/>
+ <glyph codepoint='88' name='circumflex'/>
+ <glyph codepoint='89' name='perthousand'/>
+ <glyph codepoint='8a' name='Scaron'/>
+ <glyph codepoint='8b' name='guilsinglleft'/>
+ <glyph codepoint='8c' name='OE'/>
+ <glyph codepoint='8e' name='Zcaron'/>
+ <glyph codepoint='91' name='quoteleft'/>
+ <glyph codepoint='92' name='quoteright'/>
+ <glyph codepoint='93' name='quotedblleft'/>
+ <glyph codepoint='94' name='quotedblright'/>
+ <glyph codepoint='95' name='bullet'/>
+ <glyph codepoint='96' name='endash'/>
+ <glyph codepoint='97' name='emdash'/>
+ <glyph codepoint='98' name='tilde'/>
+ <glyph codepoint='99' name='trademark'/>
+ <glyph codepoint='9a' name='scaron'/>
+ <glyph codepoint='9b' name='guilsinglright'/>
+ <glyph codepoint='9c' name='oe'/>
+ <glyph codepoint='9e' name='zcaron'/>
+ <glyph codepoint='9f' name='Ydieresis'/>
+ <glyph codepoint='a1' name='exclamdown'/>
+ <glyph codepoint='a2' name='cent'/>
+ <glyph codepoint='a3' name='sterling'/>
+ <glyph codepoint='a4' name='currency'/>
+ <glyph codepoint='a5' name='yen'/>
+ <glyph codepoint='a6' name='brokenbar'/>
+ <glyph codepoint='a7' name='section'/>
+ <glyph codepoint='a8' name='dieresis'/>
+ <glyph codepoint='a9' name='copyright'/>
+ <glyph codepoint='aa' name='ordfeminine'/>
+ <glyph codepoint='ab' name='guillemotleft'/>
+ <glyph codepoint='ac' name='logicalnot'/>
+ <glyph codepoint='ae' name='registered'/>
+ <glyph codepoint='af' name='macron'/>
+ <glyph codepoint='b0' name='degree'/>
+ <glyph codepoint='b1' name='plusminus'/>
+ <glyph codepoint='b2' name='twosuperior'/>
+ <glyph codepoint='b3' name='threesuperior'/>
+ <glyph codepoint='b4' name='acute'/>
+ <glyph codepoint='b5' name='mu'/>
+ <glyph codepoint='b6' name='paragraph'/>
+ <glyph codepoint='b7' name='periodcentered'/>
+ <glyph codepoint='b8' name='cedilla'/>
+ <glyph codepoint='b9' name='onesuperior'/>
+ <glyph codepoint='ba' name='ordmasculine'/>
+ <glyph codepoint='bb' name='guillemotright'/>
+ <glyph codepoint='bc' name='onequarter'/>
+ <glyph codepoint='bd' name='onehalf'/>
+ <glyph codepoint='be' name='threequarters'/>
+ <glyph codepoint='bf' name='questiondown'/>
+ <glyph codepoint='c0' name='Agrave'/>
+ <glyph codepoint='c1' name='Aacute'/>
+ <glyph codepoint='c2' name='Acircumflex'/>
+ <glyph codepoint='c3' name='Atilde'/>
+ <glyph codepoint='c4' name='Adieresis'/>
+ <glyph codepoint='c5' name='Aring'/>
+ <glyph codepoint='c6' name='AE'/>
+ <glyph codepoint='c7' name='Ccedilla'/>
+ <glyph codepoint='c8' name='Egrave'/>
+ <glyph codepoint='c9' name='Eacute'/>
+ <glyph codepoint='ca' name='Ecircumflex'/>
+ <glyph codepoint='cb' name='Edieresis'/>
+ <glyph codepoint='cc' name='Igrave'/>
+ <glyph codepoint='cd' name='Iacute'/>
+ <glyph codepoint='ce' name='Icircumflex'/>
+ <glyph codepoint='cf' name='Idieresis'/>
+ <glyph codepoint='d0' name='Eth'/>
+ <glyph codepoint='d1' name='Ntilde'/>
+ <glyph codepoint='d2' name='Ograve'/>
+ <glyph codepoint='d3' name='Oacute'/>
+ <glyph codepoint='d4' name='Ocircumflex'/>
+ <glyph codepoint='d5' name='Otilde'/>
+ <glyph codepoint='d6' name='Odieresis'/>
+ <glyph codepoint='d7' name='multiply'/>
+ <glyph codepoint='d8' name='Oslash'/>
+ <glyph codepoint='d9' name='Ugrave'/>
+ <glyph codepoint='da' name='Uacute'/>
+ <glyph codepoint='db' name='Ucircumflex'/>
+ <glyph codepoint='dc' name='Udieresis'/>
+ <glyph codepoint='dd' name='Yacute'/>
+ <glyph codepoint='de' name='Thorn'/>
+ <glyph codepoint='df' name='germandbls'/>
+ <glyph codepoint='e0' name='agrave'/>
+ <glyph codepoint='e1' name='aacute'/>
+ <glyph codepoint='e2' name='acircumflex'/>
+ <glyph codepoint='e3' name='atilde'/>
+ <glyph codepoint='e4' name='adieresis'/>
+ <glyph codepoint='e5' name='aring'/>
+ <glyph codepoint='e6' name='ae'/>
+ <glyph codepoint='e7' name='ccedilla'/>
+ <glyph codepoint='e8' name='egrave'/>
+ <glyph codepoint='e9' name='eacute'/>
+ <glyph codepoint='ea' name='ecircumflex'/>
+ <glyph codepoint='eb' name='edieresis'/>
+ <glyph codepoint='ec' name='igrave'/>
+ <glyph codepoint='ed' name='iacute'/>
+ <glyph codepoint='ee' name='icircumflex'/>
+ <glyph codepoint='ef' name='idieresis'/>
+ <glyph codepoint='f0' name='eth'/>
+ <glyph codepoint='f1' name='ntilde'/>
+ <glyph codepoint='f2' name='ograve'/>
+ <glyph codepoint='f3' name='oacute'/>
+ <glyph codepoint='f4' name='ocircumflex'/>
+ <glyph codepoint='f5' name='otilde'/>
+ <glyph codepoint='f6' name='odieresis'/>
+ <glyph codepoint='f7' name='divide'/>
+ <glyph codepoint='f8' name='oslash'/>
+ <glyph codepoint='f9' name='ugrave'/>
+ <glyph codepoint='fa' name='uacute'/>
+ <glyph codepoint='fb' name='ucircumflex'/>
+ <glyph codepoint='fc' name='udieresis'/>
+ <glyph codepoint='fd' name='yacute'/>
+ <glyph codepoint='fe' name='thorn'/>
+ <glyph codepoint='ff' name='ydieresis'/>
+ </encoding>
+ <encoding id='PDFDocEncoding' constant="PDF_DOC_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='18' name='breve'/>
+ <glyph codepoint='19' name='caron'/>
+ <glyph codepoint='1a' name='circumflex'/>
+ <glyph codepoint='1b' name='dotaccent'/>
+ <glyph codepoint='1c' name='hungarumlaut'/>
+ <glyph codepoint='1d' name='ogonek'/>
+ <glyph codepoint='1e' name='ring'/>
+ <glyph codepoint='1f' name='tilde'/>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='quotedbl'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='dollar'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='quotesingle'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asterisk'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='hyphen'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='at'/>
+ <glyph codepoint='41' name='A'/>
+ <glyph codepoint='42' name='B'/>
+ <glyph codepoint='43' name='C'/>
+ <glyph codepoint='44' name='D'/>
+ <glyph codepoint='45' name='E'/>
+ <glyph codepoint='46' name='F'/>
+ <glyph codepoint='47' name='G'/>
+ <glyph codepoint='48' name='H'/>
+ <glyph codepoint='49' name='I'/>
+ <glyph codepoint='4a' name='J'/>
+ <glyph codepoint='4b' name='K'/>
+ <glyph codepoint='4c' name='L'/>
+ <glyph codepoint='4d' name='M'/>
+ <glyph codepoint='4e' name='N'/>
+ <glyph codepoint='4f' name='O'/>
+ <glyph codepoint='50' name='P'/>
+ <glyph codepoint='51' name='Q'/>
+ <glyph codepoint='52' name='R'/>
+ <glyph codepoint='53' name='S'/>
+ <glyph codepoint='54' name='T'/>
+ <glyph codepoint='55' name='U'/>
+ <glyph codepoint='56' name='V'/>
+ <glyph codepoint='57' name='W'/>
+ <glyph codepoint='58' name='X'/>
+ <glyph codepoint='59' name='Y'/>
+ <glyph codepoint='5a' name='Z'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='backslash'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='asciicircum'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='grave'/>
+ <glyph codepoint='61' name='a'/>
+ <glyph codepoint='62' name='b'/>
+ <glyph codepoint='63' name='c'/>
+ <glyph codepoint='64' name='d'/>
+ <glyph codepoint='65' name='e'/>
+ <glyph codepoint='66' name='f'/>
+ <glyph codepoint='67' name='g'/>
+ <glyph codepoint='68' name='h'/>
+ <glyph codepoint='69' name='i'/>
+ <glyph codepoint='6a' name='j'/>
+ <glyph codepoint='6b' name='k'/>
+ <glyph codepoint='6c' name='l'/>
+ <glyph codepoint='6d' name='m'/>
+ <glyph codepoint='6e' name='n'/>
+ <glyph codepoint='6f' name='o'/>
+ <glyph codepoint='70' name='p'/>
+ <glyph codepoint='71' name='q'/>
+ <glyph codepoint='72' name='r'/>
+ <glyph codepoint='73' name='s'/>
+ <glyph codepoint='74' name='t'/>
+ <glyph codepoint='75' name='u'/>
+ <glyph codepoint='76' name='v'/>
+ <glyph codepoint='77' name='w'/>
+ <glyph codepoint='78' name='x'/>
+ <glyph codepoint='79' name='y'/>
+ <glyph codepoint='7a' name='z'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='asciitilde'/>
+ <glyph codepoint='80' name='bullet'/>
+ <glyph codepoint='81' name='dagger'/>
+ <glyph codepoint='82' name='daggerdbl'/>
+ <glyph codepoint='83' name='ellipsis'/>
+ <glyph codepoint='84' name='emdash'/>
+ <glyph codepoint='85' name='endash'/>
+ <glyph codepoint='86' name='florin'/>
+ <glyph codepoint='87' name='fraction'/>
+ <glyph codepoint='88' name='guilsinglleft'/>
+ <glyph codepoint='89' name='guilsinglright'/>
+ <glyph codepoint='8a' name='minus'/>
+ <glyph codepoint='8b' name='perthousand'/>
+ <glyph codepoint='8c' name='quotedblbase'/>
+ <glyph codepoint='8d' name='quotedblleft'/>
+ <glyph codepoint='8e' name='quotedblright'/>
+ <glyph codepoint='8f' name='quoteleft'/>
+ <glyph codepoint='90' name='quoteright'/>
+ <glyph codepoint='91' name='quotesinglbase'/>
+ <glyph codepoint='92' name='trademark'/>
+ <glyph codepoint='93' name='fi'/>
+ <glyph codepoint='94' name='fl'/>
+ <glyph codepoint='95' name='Lslash'/>
+ <glyph codepoint='96' name='OE'/>
+ <glyph codepoint='97' name='Scaron'/>
+ <glyph codepoint='98' name='Ydieresis'/>
+ <glyph codepoint='99' name='Zcaron'/>
+ <glyph codepoint='9a' name='dotlessi'/>
+ <glyph codepoint='9b' name='lslash'/>
+ <glyph codepoint='9c' name='oe'/>
+ <glyph codepoint='9d' name='scaron'/>
+ <glyph codepoint='9e' name='zcaron'/>
+ <glyph codepoint='a0' name='Euro'/>
+ <glyph codepoint='a1' name='exclamdown'/>
+ <glyph codepoint='a2' name='cent'/>
+ <glyph codepoint='a3' name='sterling'/>
+ <glyph codepoint='a4' name='currency'/>
+ <glyph codepoint='a5' name='yen'/>
+ <glyph codepoint='a6' name='brokenbar'/>
+ <glyph codepoint='a7' name='section'/>
+ <glyph codepoint='a8' name='dieresis'/>
+ <glyph codepoint='a9' name='copyright'/>
+ <glyph codepoint='aa' name='ordfeminine'/>
+ <glyph codepoint='ab' name='guillemotleft'/>
+ <glyph codepoint='ac' name='logicalnot'/>
+ <glyph codepoint='ae' name='registered'/>
+ <glyph codepoint='af' name='macron'/>
+ <glyph codepoint='b0' name='degree'/>
+ <glyph codepoint='b1' name='plusminus'/>
+ <glyph codepoint='b2' name='twosuperior'/>
+ <glyph codepoint='b3' name='threesuperior'/>
+ <glyph codepoint='b4' name='acute'/>
+ <glyph codepoint='b5' name='mu'/>
+ <glyph codepoint='b6' name='paragraph'/>
+ <glyph codepoint='b7' name='periodcentered'/>
+ <glyph codepoint='b8' name='cedilla'/>
+ <glyph codepoint='b9' name='onesuperior'/>
+ <glyph codepoint='ba' name='ordmasculine'/>
+ <glyph codepoint='bb' name='guillemotright'/>
+ <glyph codepoint='bc' name='onequarter'/>
+ <glyph codepoint='bd' name='onehalf'/>
+ <glyph codepoint='be' name='threequarters'/>
+ <glyph codepoint='bf' name='questiondown'/>
+ <glyph codepoint='c0' name='Agrave'/>
+ <glyph codepoint='c1' name='Aacute'/>
+ <glyph codepoint='c2' name='Acircumflex'/>
+ <glyph codepoint='c3' name='Atilde'/>
+ <glyph codepoint='c4' name='Adieresis'/>
+ <glyph codepoint='c5' name='Aring'/>
+ <glyph codepoint='c6' name='AE'/>
+ <glyph codepoint='c7' name='Ccedilla'/>
+ <glyph codepoint='c8' name='Egrave'/>
+ <glyph codepoint='c9' name='Eacute'/>
+ <glyph codepoint='ca' name='Ecircumflex'/>
+ <glyph codepoint='cb' name='Edieresis'/>
+ <glyph codepoint='cc' name='Igrave'/>
+ <glyph codepoint='cd' name='Iacute'/>
+ <glyph codepoint='ce' name='Icircumflex'/>
+ <glyph codepoint='cf' name='Idieresis'/>
+ <glyph codepoint='d0' name='Eth'/>
+ <glyph codepoint='d1' name='Ntilde'/>
+ <glyph codepoint='d2' name='Ograve'/>
+ <glyph codepoint='d3' name='Oacute'/>
+ <glyph codepoint='d4' name='Ocircumflex'/>
+ <glyph codepoint='d5' name='Otilde'/>
+ <glyph codepoint='d6' name='Odieresis'/>
+ <glyph codepoint='d7' name='multiply'/>
+ <glyph codepoint='d8' name='Oslash'/>
+ <glyph codepoint='d9' name='Ugrave'/>
+ <glyph codepoint='da' name='Uacute'/>
+ <glyph codepoint='db' name='Ucircumflex'/>
+ <glyph codepoint='dc' name='Udieresis'/>
+ <glyph codepoint='dd' name='Yacute'/>
+ <glyph codepoint='de' name='Thorn'/>
+ <glyph codepoint='df' name='germandbls'/>
+ <glyph codepoint='e0' name='agrave'/>
+ <glyph codepoint='e1' name='aacute'/>
+ <glyph codepoint='e2' name='acircumflex'/>
+ <glyph codepoint='e3' name='atilde'/>
+ <glyph codepoint='e4' name='adieresis'/>
+ <glyph codepoint='e5' name='aring'/>
+ <glyph codepoint='e6' name='ae'/>
+ <glyph codepoint='e7' name='ccedilla'/>
+ <glyph codepoint='e8' name='egrave'/>
+ <glyph codepoint='e9' name='eacute'/>
+ <glyph codepoint='ea' name='ecircumflex'/>
+ <glyph codepoint='eb' name='edieresis'/>
+ <glyph codepoint='ec' name='igrave'/>
+ <glyph codepoint='ed' name='iacute'/>
+ <glyph codepoint='ee' name='icircumflex'/>
+ <glyph codepoint='ef' name='idieresis'/>
+ <glyph codepoint='f0' name='eth'/>
+ <glyph codepoint='f1' name='ntilde'/>
+ <glyph codepoint='f2' name='ograve'/>
+ <glyph codepoint='f3' name='oacute'/>
+ <glyph codepoint='f4' name='ocircumflex'/>
+ <glyph codepoint='f5' name='otilde'/>
+ <glyph codepoint='f6' name='odieresis'/>
+ <glyph codepoint='f7' name='divide'/>
+ <glyph codepoint='f8' name='oslash'/>
+ <glyph codepoint='f9' name='ugrave'/>
+ <glyph codepoint='fa' name='uacute'/>
+ <glyph codepoint='fb' name='ucircumflex'/>
+ <glyph codepoint='fc' name='udieresis'/>
+ <glyph codepoint='fd' name='yacute'/>
+ <glyph codepoint='fe' name='thorn'/>
+ <glyph codepoint='ff' name='ydieresis'/>
+ </encoding>
+ <encoding id='SymbolEncoding' constant="SYMBOL_ENCODING" glyphlist='AGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='exclam'/>
+ <glyph codepoint='22' name='universal'/>
+ <glyph codepoint='23' name='numbersign'/>
+ <glyph codepoint='24' name='existential'/>
+ <glyph codepoint='25' name='percent'/>
+ <glyph codepoint='26' name='ampersand'/>
+ <glyph codepoint='27' name='suchthat'/>
+ <glyph codepoint='28' name='parenleft'/>
+ <glyph codepoint='29' name='parenright'/>
+ <glyph codepoint='2a' name='asteriskmath'/>
+ <glyph codepoint='2b' name='plus'/>
+ <glyph codepoint='2c' name='comma'/>
+ <glyph codepoint='2d' name='minus'/>
+ <glyph codepoint='2e' name='period'/>
+ <glyph codepoint='2f' name='slash'/>
+ <glyph codepoint='30' name='zero'/>
+ <glyph codepoint='31' name='one'/>
+ <glyph codepoint='32' name='two'/>
+ <glyph codepoint='33' name='three'/>
+ <glyph codepoint='34' name='four'/>
+ <glyph codepoint='35' name='five'/>
+ <glyph codepoint='36' name='six'/>
+ <glyph codepoint='37' name='seven'/>
+ <glyph codepoint='38' name='eight'/>
+ <glyph codepoint='39' name='nine'/>
+ <glyph codepoint='3a' name='colon'/>
+ <glyph codepoint='3b' name='semicolon'/>
+ <glyph codepoint='3c' name='less'/>
+ <glyph codepoint='3d' name='equal'/>
+ <glyph codepoint='3e' name='greater'/>
+ <glyph codepoint='3f' name='question'/>
+ <glyph codepoint='40' name='congruent'/>
+ <glyph codepoint='41' name='Alpha'/>
+ <glyph codepoint='42' name='Beta'/>
+ <glyph codepoint='43' name='Chi'/>
+ <glyph codepoint='44' name='Delta'/>
+ <glyph codepoint='45' name='Epsilon'/>
+ <glyph codepoint='46' name='Phi'/>
+ <glyph codepoint='47' name='Gamma'/>
+ <glyph codepoint='48' name='Eta'/>
+ <glyph codepoint='49' name='Iota'/>
+ <glyph codepoint='4a' name='theta1'/>
+ <glyph codepoint='4b' name='Kappa'/>
+ <glyph codepoint='4c' name='Lambda'/>
+ <glyph codepoint='4d' name='Mu'/>
+ <glyph codepoint='4e' name='Nu'/>
+ <glyph codepoint='4f' name='Omicron'/>
+ <glyph codepoint='50' name='Pi'/>
+ <glyph codepoint='51' name='Theta'/>
+ <glyph codepoint='52' name='Rho'/>
+ <glyph codepoint='53' name='Sigma'/>
+ <glyph codepoint='54' name='Tau'/>
+ <glyph codepoint='55' name='Upsilon'/>
+ <glyph codepoint='56' name='sigma1'/>
+ <glyph codepoint='57' name='Omega'/>
+ <glyph codepoint='58' name='Xi'/>
+ <glyph codepoint='59' name='Psi'/>
+ <glyph codepoint='5a' name='Zeta'/>
+ <glyph codepoint='5b' name='bracketleft'/>
+ <glyph codepoint='5c' name='therefore'/>
+ <glyph codepoint='5d' name='bracketright'/>
+ <glyph codepoint='5e' name='perpendicular'/>
+ <glyph codepoint='5f' name='underscore'/>
+ <glyph codepoint='60' name='radicalex'/>
+ <glyph codepoint='61' name='alpha'/>
+ <glyph codepoint='62' name='beta'/>
+ <glyph codepoint='63' name='chi'/>
+ <glyph codepoint='64' name='delta'/>
+ <glyph codepoint='65' name='epsilon'/>
+ <glyph codepoint='66' name='phi'/>
+ <glyph codepoint='67' name='gamma'/>
+ <glyph codepoint='68' name='eta'/>
+ <glyph codepoint='69' name='iota'/>
+ <glyph codepoint='6a' name='phi1'/>
+ <glyph codepoint='6b' name='kappa'/>
+ <glyph codepoint='6c' name='lambda'/>
+ <glyph codepoint='6d' name='mu'/>
+ <glyph codepoint='6e' name='nu'/>
+ <glyph codepoint='6f' name='omicron'/>
+ <glyph codepoint='70' name='pi'/>
+ <glyph codepoint='71' name='theta'/>
+ <glyph codepoint='72' name='rho'/>
+ <glyph codepoint='73' name='sigma'/>
+ <glyph codepoint='74' name='tau'/>
+ <glyph codepoint='75' name='upsilon'/>
+ <glyph codepoint='76' name='omega1'/>
+ <glyph codepoint='77' name='omega'/>
+ <glyph codepoint='78' name='xi'/>
+ <glyph codepoint='79' name='psi'/>
+ <glyph codepoint='7a' name='zeta'/>
+ <glyph codepoint='7b' name='braceleft'/>
+ <glyph codepoint='7c' name='bar'/>
+ <glyph codepoint='7d' name='braceright'/>
+ <glyph codepoint='7e' name='similar'/>
+ <glyph codepoint='a0' name='Euro'/>
+ <glyph codepoint='a1' name='Upsilon1'/>
+ <glyph codepoint='a2' name='minute'/>
+ <glyph codepoint='a3' name='lessequal'/>
+ <glyph codepoint='a4' name='fraction'/>
+ <glyph codepoint='a5' name='infinity'/>
+ <glyph codepoint='a6' name='florin'/>
+ <glyph codepoint='a7' name='club'/>
+ <glyph codepoint='a8' name='diamond'/>
+ <glyph codepoint='a9' name='heart'/>
+ <glyph codepoint='aa' name='spade'/>
+ <glyph codepoint='ab' name='arrowboth'/>
+ <glyph codepoint='ac' name='arrowleft'/>
+ <glyph codepoint='ad' name='arrowup'/>
+ <glyph codepoint='ae' name='arrowright'/>
+ <glyph codepoint='af' name='arrowdown'/>
+ <glyph codepoint='b0' name='degree'/>
+ <glyph codepoint='b1' name='plusminus'/>
+ <glyph codepoint='b2' name='second'/>
+ <glyph codepoint='b3' name='greaterequal'/>
+ <glyph codepoint='b4' name='multiply'/>
+ <glyph codepoint='b5' name='proportional'/>
+ <glyph codepoint='b6' name='partialdiff'/>
+ <glyph codepoint='b7' name='bullet'/>
+ <glyph codepoint='b8' name='divide'/>
+ <glyph codepoint='b9' name='notequal'/>
+ <glyph codepoint='ba' name='equivalence'/>
+ <glyph codepoint='bb' name='approxequal'/>
+ <glyph codepoint='bc' name='ellipsis'/>
+ <glyph codepoint='bd' name='arrowvertex'/>
+ <glyph codepoint='be' name='arrowhorizex'/>
+ <glyph codepoint='bf' name='carriagereturn'/>
+ <glyph codepoint='c0' name='aleph'/>
+ <glyph codepoint='c1' name='Ifraktur'/>
+ <glyph codepoint='c2' name='Rfraktur'/>
+ <glyph codepoint='c3' name='weierstrass'/>
+ <glyph codepoint='c4' name='circlemultiply'/>
+ <glyph codepoint='c5' name='circleplus'/>
+ <glyph codepoint='c6' name='emptyset'/>
+ <glyph codepoint='c7' name='intersection'/>
+ <glyph codepoint='c8' name='union'/>
+ <glyph codepoint='c9' name='propersuperset'/>
+ <glyph codepoint='ca' name='reflexsuperset'/>
+ <glyph codepoint='cb' name='notsubset'/>
+ <glyph codepoint='cc' name='propersubset'/>
+ <glyph codepoint='cd' name='reflexsubset'/>
+ <glyph codepoint='ce' name='element'/>
+ <glyph codepoint='cf' name='notelement'/>
+ <glyph codepoint='d0' name='angle'/>
+ <glyph codepoint='d1' name='gradient'/>
+ <glyph codepoint='d2' name='registerserif'/>
+ <glyph codepoint='d3' name='copyrightserif'/>
+ <glyph codepoint='d4' name='trademarkserif'/>
+ <glyph codepoint='d5' name='product'/>
+ <glyph codepoint='d6' name='radical'/>
+ <glyph codepoint='d7' name='dotmath'/>
+ <glyph codepoint='d8' name='logicalnot'/>
+ <glyph codepoint='d9' name='logicaland'/>
+ <glyph codepoint='da' name='logicalor'/>
+ <glyph codepoint='db' name='arrowdblboth'/>
+ <glyph codepoint='dc' name='arrowdblleft'/>
+ <glyph codepoint='dd' name='arrowdblup'/>
+ <glyph codepoint='de' name='arrowdblright'/>
+ <glyph codepoint='df' name='arrowdbldown'/>
+ <glyph codepoint='e0' name='lozenge'/>
+ <glyph codepoint='e1' name='angleleft'/>
+ <glyph codepoint='e2' name='registersans'/>
+ <glyph codepoint='e3' name='copyrightsans'/>
+ <glyph codepoint='e4' name='trademarksans'/>
+ <glyph codepoint='e5' name='summation'/>
+ <glyph codepoint='e6' name='parenlefttp'/>
+ <glyph codepoint='e7' name='parenleftex'/>
+ <glyph codepoint='e8' name='parenleftbt'/>
+ <glyph codepoint='e9' name='bracketlefttp'/>
+ <glyph codepoint='ea' name='bracketleftex'/>
+ <glyph codepoint='eb' name='bracketleftbt'/>
+ <glyph codepoint='ec' name='bracelefttp'/>
+ <glyph codepoint='ed' name='braceleftmid'/>
+ <glyph codepoint='ee' name='braceleftbt'/>
+ <glyph codepoint='ef' name='braceex'/>
+ <glyph codepoint='f1' name='angleright'/>
+ <glyph codepoint='f2' name='integral'/>
+ <glyph codepoint='f3' name='integraltp'/>
+ <glyph codepoint='f4' name='integralex'/>
+ <glyph codepoint='f5' name='integralbt'/>
+ <glyph codepoint='f6' name='parenrighttp'/>
+ <glyph codepoint='f7' name='parenrightex'/>
+ <glyph codepoint='f8' name='parenrightbt'/>
+ <glyph codepoint='f9' name='bracketrighttp'/>
+ <glyph codepoint='fa' name='bracketrightex'/>
+ <glyph codepoint='fb' name='bracketrightbt'/>
+ <glyph codepoint='fc' name='bracerighttp'/>
+ <glyph codepoint='fd' name='bracerightmid'/>
+ <glyph codepoint='fe' name='bracerightbt'/>
+ </encoding>
+ <encoding id='ZapfDingbatsEncoding' constant="ZAPF_DINGBATS_ENCODING" glyphlist='ZGL'>
+ <glyph codepoint='20' name='space'/>
+ <glyph codepoint='21' name='a1'/>
+ <glyph codepoint='22' name='a2'/>
+ <glyph codepoint='23' name='a202'/>
+ <glyph codepoint='24' name='a3'/>
+ <glyph codepoint='25' name='a4'/>
+ <glyph codepoint='26' name='a5'/>
+ <glyph codepoint='27' name='a119'/>
+ <glyph codepoint='28' name='a118'/>
+ <glyph codepoint='29' name='a117'/>
+ <glyph codepoint='2A' name='a11'/>
+ <glyph codepoint='2B' name='a12'/>
+ <glyph codepoint='2C' name='a13'/>
+ <glyph codepoint='2D' name='a14'/>
+ <glyph codepoint='2E' name='a15'/>
+ <glyph codepoint='2F' name='a16'/>
+ <glyph codepoint='30' name='a105'/>
+ <glyph codepoint='31' name='a17'/>
+ <glyph codepoint='32' name='a18'/>
+ <glyph codepoint='33' name='a19'/>
+ <glyph codepoint='34' name='a20'/>
+ <glyph codepoint='35' name='a21'/>
+ <glyph codepoint='36' name='a22'/>
+ <glyph codepoint='37' name='a23'/>
+ <glyph codepoint='38' name='a24'/>
+ <glyph codepoint='39' name='a25'/>
+ <glyph codepoint='3A' name='a26'/>
+ <glyph codepoint='3B' name='a27'/>
+ <glyph codepoint='3C' name='a28'/>
+ <glyph codepoint='3D' name='a6'/>
+ <glyph codepoint='3E' name='a7'/>
+ <glyph codepoint='3F' name='a8'/>
+ <glyph codepoint='40' name='a9'/>
+ <glyph codepoint='41' name='a10'/>
+ <glyph codepoint='42' name='a29'/>
+ <glyph codepoint='43' name='a30'/>
+ <glyph codepoint='44' name='a31'/>
+ <glyph codepoint='45' name='a32'/>
+ <glyph codepoint='46' name='a33'/>
+ <glyph codepoint='47' name='a34'/>
+ <glyph codepoint='48' name='a35'/>
+ <glyph codepoint='49' name='a36'/>
+ <glyph codepoint='4A' name='a37'/>
+ <glyph codepoint='4B' name='a38'/>
+ <glyph codepoint='4C' name='a39'/>
+ <glyph codepoint='4D' name='a40'/>
+ <glyph codepoint='4E' name='a41'/>
+ <glyph codepoint='4F' name='a42'/>
+ <glyph codepoint='50' name='a43'/>
+ <glyph codepoint='51' name='a44'/>
+ <glyph codepoint='52' name='a45'/>
+ <glyph codepoint='53' name='a46'/>
+ <glyph codepoint='54' name='a47'/>
+ <glyph codepoint='55' name='a48'/>
+ <glyph codepoint='56' name='a49'/>
+ <glyph codepoint='57' name='a50'/>
+ <glyph codepoint='58' name='a51'/>
+ <glyph codepoint='59' name='a52'/>
+ <glyph codepoint='5A' name='a53'/>
+ <glyph codepoint='5B' name='a54'/>
+ <glyph codepoint='5C' name='a55'/>
+ <glyph codepoint='5D' name='a56'/>
+ <glyph codepoint='5E' name='a57'/>
+ <glyph codepoint='5F' name='a58'/>
+ <glyph codepoint='60' name='a59'/>
+ <glyph codepoint='61' name='a60'/>
+ <glyph codepoint='62' name='a61'/>
+ <glyph codepoint='63' name='a62'/>
+ <glyph codepoint='64' name='a63'/>
+ <glyph codepoint='65' name='a64'/>
+ <glyph codepoint='66' name='a65'/>
+ <glyph codepoint='67' name='a66'/>
+ <glyph codepoint='68' name='a67'/>
+ <glyph codepoint='69' name='a68'/>
+ <glyph codepoint='6A' name='a69'/>
+ <glyph codepoint='6B' name='a70'/>
+ <glyph codepoint='6C' name='a71'/>
+ <glyph codepoint='6D' name='a72'/>
+ <glyph codepoint='6E' name='a73'/>
+ <glyph codepoint='6F' name='a74'/>
+ <glyph codepoint='70' name='a203'/>
+ <glyph codepoint='71' name='a75'/>
+ <glyph codepoint='72' name='a204'/>
+ <glyph codepoint='73' name='a76'/>
+ <glyph codepoint='74' name='a77'/>
+ <glyph codepoint='75' name='a78'/>
+ <glyph codepoint='76' name='a79'/>
+ <glyph codepoint='77' name='a81'/>
+ <glyph codepoint='78' name='a82'/>
+ <glyph codepoint='79' name='a83'/>
+ <glyph codepoint='7A' name='a84'/>
+ <glyph codepoint='7B' name='a97'/>
+ <glyph codepoint='7C' name='a98'/>
+ <glyph codepoint='7D' name='a99'/>
+ <glyph codepoint='7E' name='a100'/>
+ <glyph codepoint='80' name='a89'/>
+ <glyph codepoint='81' name='a90'/>
+ <glyph codepoint='82' name='a93'/>
+ <glyph codepoint='83' name='a94'/>
+ <glyph codepoint='84' name='a91'/>
+ <glyph codepoint='85' name='a92'/>
+ <glyph codepoint='86' name='a205'/>
+ <glyph codepoint='87' name='a85'/>
+ <glyph codepoint='88' name='a206'/>
+ <glyph codepoint='89' name='a86'/>
+ <glyph codepoint='8A' name='a87'/>
+ <glyph codepoint='8B' name='a88'/>
+ <glyph codepoint='8C' name='a95'/>
+ <glyph codepoint='8D' name='a96'/>
+ <glyph codepoint='A1' name='a101'/>
+ <glyph codepoint='A2' name='a102'/>
+ <glyph codepoint='A3' name='a103'/>
+ <glyph codepoint='A4' name='a104'/>
+ <glyph codepoint='A5' name='a106'/>
+ <glyph codepoint='A6' name='a107'/>
+ <glyph codepoint='A7' name='a108'/>
+ <glyph codepoint='A8' name='a112'/>
+ <glyph codepoint='A9' name='a111'/>
+ <glyph codepoint='AA' name='a110'/>
+ <glyph codepoint='AB' name='a109'/>
+ <glyph codepoint='AC' name='a120'/>
+ <glyph codepoint='AD' name='a121'/>
+ <glyph codepoint='AE' name='a122'/>
+ <glyph codepoint='AF' name='a123'/>
+ <glyph codepoint='B0' name='a124'/>
+ <glyph codepoint='B1' name='a125'/>
+ <glyph codepoint='B2' name='a126'/>
+ <glyph codepoint='B3' name='a127'/>
+ <glyph codepoint='B4' name='a128'/>
+ <glyph codepoint='B5' name='a129'/>
+ <glyph codepoint='B6' name='a130'/>
+ <glyph codepoint='B7' name='a131'/>
+ <glyph codepoint='B8' name='a132'/>
+ <glyph codepoint='B9' name='a133'/>
+ <glyph codepoint='BA' name='a134'/>
+ <glyph codepoint='BB' name='a135'/>
+ <glyph codepoint='BC' name='a136'/>
+ <glyph codepoint='BD' name='a137'/>
+ <glyph codepoint='BE' name='a138'/>
+ <glyph codepoint='BF' name='a139'/>
+ <glyph codepoint='C0' name='a140'/>
+ <glyph codepoint='C1' name='a141'/>
+ <glyph codepoint='C2' name='a142'/>
+ <glyph codepoint='C3' name='a143'/>
+ <glyph codepoint='C4' name='a144'/>
+ <glyph codepoint='C5' name='a145'/>
+ <glyph codepoint='C6' name='a146'/>
+ <glyph codepoint='C7' name='a147'/>
+ <glyph codepoint='C8' name='a148'/>
+ <glyph codepoint='C9' name='a149'/>
+ <glyph codepoint='CA' name='a150'/>
+ <glyph codepoint='CB' name='a151'/>
+ <glyph codepoint='CC' name='a152'/>
+ <glyph codepoint='CD' name='a153'/>
+ <glyph codepoint='CE' name='a154'/>
+ <glyph codepoint='CF' name='a155'/>
+ <glyph codepoint='D0' name='a156'/>
+ <glyph codepoint='D1' name='a157'/>
+ <glyph codepoint='D2' name='a158'/>
+ <glyph codepoint='D3' name='a159'/>
+ <glyph codepoint='D4' name='a160'/>
+ <glyph codepoint='D5' name='a161'/>
+ <glyph codepoint='D6' name='a163'/>
+ <glyph codepoint='D7' name='a164'/>
+ <glyph codepoint='D8' name='a196'/>
+ <glyph codepoint='D9' name='a165'/>
+ <glyph codepoint='DA' name='a192'/>
+ <glyph codepoint='DB' name='a166'/>
+ <glyph codepoint='DC' name='a167'/>
+ <glyph codepoint='DD' name='a168'/>
+ <glyph codepoint='DE' name='a169'/>
+ <glyph codepoint='DF' name='a170'/>
+ <glyph codepoint='E0' name='a171'/>
+ <glyph codepoint='E1' name='a172'/>
+ <glyph codepoint='E2' name='a173'/>
+ <glyph codepoint='E3' name='a162'/>
+ <glyph codepoint='E4' name='a174'/>
+ <glyph codepoint='E5' name='a175'/>
+ <glyph codepoint='E6' name='a176'/>
+ <glyph codepoint='E7' name='a177'/>
+ <glyph codepoint='E8' name='a178'/>
+ <glyph codepoint='E9' name='a179'/>
+ <glyph codepoint='EA' name='a193'/>
+ <glyph codepoint='EB' name='a180'/>
+ <glyph codepoint='EC' name='a199'/>
+ <glyph codepoint='ED' name='a181'/>
+ <glyph codepoint='EE' name='a200'/>
+ <glyph codepoint='EF' name='a182'/>
+ <glyph codepoint='F1' name='a201'/>
+ <glyph codepoint='F2' name='a183'/>
+ <glyph codepoint='F3' name='a184'/>
+ <glyph codepoint='F4' name='a197'/>
+ <glyph codepoint='F5' name='a185'/>
+ <glyph codepoint='F6' name='a194'/>
+ <glyph codepoint='F7' name='a198'/>
+ <glyph codepoint='F8' name='a186'/>
+ <glyph codepoint='F9' name='a195'/>
+ <glyph codepoint='FA' name='a187'/>
+ <glyph codepoint='FB' name='a188'/>
+ <glyph codepoint='FC' name='a189'/>
+ <glyph codepoint='FD' name='a190'/>
+ <glyph codepoint='FE' name='a191'/>
+ </encoding>
+ <!--
+ TODO: Provide data for ExpertEncoding and ExpertSubsetEncoding
+ see http://www.adobe.com/devnet/font/pdfs/5176.CFF.pdf for details.
+ -->
+</encoding-set>
diff --git a/fop-core/src/main/codegen/fonts/font-file.xsl b/fop-core/src/main/codegen/fonts/font-file.xsl
new file mode 100644
index 000000000..082160606
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/font-file.xsl
@@ -0,0 +1,234 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!-- This file writes the class files for the fonts (Courier.java,
+ Helvetica.java etc.). It uses the information in the font
+ description files (Courier.xml, Helvetica.xml) to do this. In these
+ font description files each character is referenced by its adobe
+ glyph name:
+ <char name="A" width="667"/>
+ To resolve this name and to find the code for this character it looks
+ up the adobe name in the file encodings.xml and extracts the appropriate
+ code. -->
+<xsl:stylesheet version="2.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output method="text"/>
+
+ <xsl:param name="encoding" select="/font-metrics/encoding"/>
+ <xsl:variable name="glyphs" select="document('encodings.xml')/encoding-set/encoding[@id=$encoding]/glyph"/>
+
+ <xsl:template match="font-metrics">
+package org.apache.fop.fonts.base14;
+
+import java.awt.Rectangle;
+import java.net.URI;
+<xsl:if test="count(kerning) &gt; 0">
+import java.util.Map;
+</xsl:if>
+import java.util.Set;
+import org.apache.fop.fonts.FontType;
+import org.apache.fop.fonts.Base14Font;
+import org.apache.fop.fonts.CodePointMapping;
+import org.apache.fop.fonts.Typeface;
+
+public class <xsl:value-of select="class-name"/> extends Base14Font {
+ private final static URI fontFileURI;
+ private final static String fontName = "<xsl:value-of select="font-name"/>";
+ private final static String fullName = "<xsl:value-of select="full-name"/>";
+ private final static Set familyNames;
+ private final static int underlinePosition = <xsl:value-of select="underline-position"/>;
+ private final static int underlineThickness = <xsl:value-of select="underline-thickness"/>;
+ private final static String encoding = "<xsl:value-of select="$encoding"/>";
+ private final static int capHeight = <xsl:value-of select="cap-height"/>;
+ private final static int xHeight = <xsl:value-of select="x-height"/>;
+ private final static int ascender = <xsl:value-of select="ascender"/>;
+ private final static int descender = <xsl:value-of select="descender"/>;
+ private final static int firstChar = <xsl:value-of select="first-char"/>;
+ private final static int lastChar = <xsl:value-of select="last-char"/>;
+ private final static int[] width;
+ private final static Rectangle[] boundingBoxes;
+ private final CodePointMapping mapping =
+ CodePointMapping.getMapping("<xsl:value-of select="$encoding"/>");
+<xsl:if test="count(kerning) &gt; 0">
+ private final static Map kerning;
+</xsl:if>
+
+ private boolean enableKerning = false;
+
+ static {
+ URI uri = null;
+ try {
+ uri = new URI("base14:" + fontName.toLowerCase());
+ } catch (java.net.URISyntaxException e) {
+ }
+ fontFileURI = uri;
+ width = new int[256];
+ boundingBoxes = new Rectangle[256];
+ <xsl:apply-templates select="char-metrics"/>
+<xsl:if test="count(kerning) &gt; 0">
+ kerning = new java.util.HashMap();
+ Integer first, second;
+ Map pairs;
+ <xsl:apply-templates select="kerning"/>
+</xsl:if>
+ familyNames = new java.util.HashSet();
+ familyNames.add("<xsl:value-of select="family-name"/>");
+ }
+
+ public <xsl:value-of select="class-name"/>() {
+ this(false);
+ }
+
+ public <xsl:value-of select="class-name"/>(boolean enableKerning) {
+ this.enableKerning = enableKerning;
+ }
+
+ public String getEncodingName() {
+ return encoding;
+ }
+
+ public URI getFontURI() {
+ return fontFileURI;
+ }
+
+ public String getFontName() {
+ return fontName;
+ }
+
+ public String getEmbedFontName() {
+ return getFontName();
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public Set getFamilyNames() {
+ return familyNames;
+ }
+
+ public FontType getFontType() {
+ return FontType.TYPE1;
+ }
+
+ public int getAscender(int size) {
+ return size * ascender;
+ }
+
+ public int getCapHeight(int size) {
+ return size * capHeight;
+ }
+
+ public int getDescender(int size) {
+ return size * descender;
+ }
+
+ public int getXHeight(int size) {
+ return size * xHeight;
+ }
+
+ public int getUnderlinePosition(int size) {
+ return size * underlinePosition;
+ }
+
+ public int getUnderlineThickness(int size) {
+ return size * underlineThickness;
+ }
+
+ public int getFirstChar() {
+ return firstChar;
+ }
+
+ public int getLastChar() {
+ return lastChar;
+ }
+
+ public int getWidth(int i,int size) {
+ return size * width[i];
+ }
+
+ public Rectangle getBoundingBox(int glyphIndex, int size) {
+ Rectangle bbox = boundingBoxes[glyphIndex];
+ return new Rectangle(bbox.x * size, bbox.y * size, bbox.width * size, bbox.height * size);
+ }
+
+ public int[] getWidths() {
+ int[] arr = new int[getLastChar() - getFirstChar() + 1];
+ System.arraycopy(width, getFirstChar(), arr, 0, getLastChar() - getFirstChar() + 1);
+ return arr;
+ }
+
+<xsl:choose>
+ <xsl:when test="count(kerning) &gt; 0">
+ public boolean hasKerningInfo() {
+ return enableKerning;
+ }
+
+ public java.util.Map getKerningInfo() {
+ return kerning;
+ }
+ </xsl:when>
+ <xsl:otherwise>
+ public boolean hasKerningInfo() {
+ return false;
+ }
+
+ public java.util.Map getKerningInfo() {
+ return java.util.Collections.EMPTY_MAP;
+ }
+ </xsl:otherwise>
+</xsl:choose>
+
+ public char mapChar(char c) {
+ notifyMapOperation();
+ char d = mapping.mapChar(c);
+ if (d != 0) {
+ return d;
+ } else {
+ this.warnMissingGlyph(c);
+ return Typeface.NOT_FOUND;
+ }
+ }
+
+ public boolean hasChar(char c) {
+ return (mapping.mapChar(c) > 0);
+ }
+
+}
+ </xsl:template>
+
+ <xsl:template match="char-metrics/char">
+ <xsl:variable name="char-name" select="@name"/><xsl:variable name="char-num" select="$glyphs[@name = $char-name]/@codepoint"/><xsl:if test="$char-num!=''"> width[0x<xsl:value-of select="$char-num"/>] = <xsl:value-of select="@width"/>;
+ boundingBoxes[0x<xsl:value-of select="$char-num"/>] = new Rectangle(<xsl:value-of select="@llx"/>,<xsl:value-of select="@lly"/>,<xsl:value-of select="@urx - @llx"/>,<xsl:value-of select="@ury - @lly"/>);</xsl:if></xsl:template>
+
+ <xsl:template match="kerning">
+ first = new Integer(<xsl:value-of select="@kpx1"/>);
+ pairs = (Map)kerning.get(first);
+ if (pairs == null) {
+ pairs = new java.util.HashMap();
+ kerning.put(first, pairs);
+ }
+ <xsl:apply-templates select="pair"/>
+ </xsl:template>
+
+ <xsl:template match="pair">
+ second = new Integer(<xsl:value-of select="@kpx2"/>);
+ pairs.put(second, new Integer(<xsl:value-of select="@kern"/>));
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/fop-core/src/main/codegen/fonts/glyphlist.xml b/fop-core/src/main/codegen/fonts/glyphlist.xml
new file mode 100644
index 000000000..aeb56e2b6
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/glyphlist.xml
@@ -0,0 +1,1293 @@
+<?xml version='1.0'?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!DOCTYPE glyphlist-set [
+ <!ELEMENT glyphlist-set (glyphlist+)>
+ <!ELEMENT glyphlist (glyph+)>
+ <!ATTLIST glyphlist id ID #REQUIRED>
+ <!ELEMENT glyph EMPTY>
+ <!ATTLIST glyph codepoint CDATA #REQUIRED name CDATA #REQUIRED>
+]>
+<glyphlist-set>
+
+ <!-- This encodes the Adobe Glyph List, version 1.2 (22 Oct 1998),
+ located at http://partners.adobe.com/asn/developer/type/glyphlist.txt
+ -->
+ <glyphlist id='AGL'>
+ <glyph codepoint='0041' name='A'/>
+ <glyph codepoint='00C6' name='AE'/>
+ <glyph codepoint='01FC' name='AEacute'/>
+ <glyph codepoint='F7E6' name='AEsmall'/>
+ <glyph codepoint='00C1' name='Aacute'/>
+ <glyph codepoint='F7E1' name='Aacutesmall'/>
+ <glyph codepoint='0102' name='Abreve'/>
+ <glyph codepoint='00C2' name='Acircumflex'/>
+ <glyph codepoint='F7E2' name='Acircumflexsmall'/>
+ <glyph codepoint='F6C9' name='Acute'/>
+ <glyph codepoint='F7B4' name='Acutesmall'/>
+ <glyph codepoint='00C4' name='Adieresis'/>
+ <glyph codepoint='F7E4' name='Adieresissmall'/>
+ <glyph codepoint='00C0' name='Agrave'/>
+ <glyph codepoint='F7E0' name='Agravesmall'/>
+ <glyph codepoint='0391' name='Alpha'/>
+ <glyph codepoint='0386' name='Alphatonos'/>
+ <glyph codepoint='0100' name='Amacron'/>
+ <glyph codepoint='0104' name='Aogonek'/>
+ <glyph codepoint='00C5' name='Aring'/>
+ <glyph codepoint='01FA' name='Aringacute'/>
+ <glyph codepoint='F7E5' name='Aringsmall'/>
+ <glyph codepoint='F761' name='Asmall'/>
+ <glyph codepoint='00C3' name='Atilde'/>
+ <glyph codepoint='F7E3' name='Atildesmall'/>
+ <glyph codepoint='0042' name='B'/>
+ <glyph codepoint='0392' name='Beta'/>
+ <glyph codepoint='F6F4' name='Brevesmall'/>
+ <glyph codepoint='F762' name='Bsmall'/>
+ <glyph codepoint='0043' name='C'/>
+ <glyph codepoint='0106' name='Cacute'/>
+ <glyph codepoint='F6CA' name='Caron'/>
+ <glyph codepoint='F6F5' name='Caronsmall'/>
+ <glyph codepoint='010C' name='Ccaron'/>
+ <glyph codepoint='00C7' name='Ccedilla'/>
+ <glyph codepoint='F7E7' name='Ccedillasmall'/>
+ <glyph codepoint='0108' name='Ccircumflex'/>
+ <glyph codepoint='010A' name='Cdotaccent'/>
+ <glyph codepoint='F7B8' name='Cedillasmall'/>
+ <glyph codepoint='03A7' name='Chi'/>
+ <glyph codepoint='F6F6' name='Circumflexsmall'/>
+ <glyph codepoint='F763' name='Csmall'/>
+ <glyph codepoint='0044' name='D'/>
+ <glyph codepoint='010E' name='Dcaron'/>
+ <glyph codepoint='0110' name='Dcroat'/>
+ <glyph codepoint='2206' name='Delta'/>
+ <glyph codepoint='0394' name='Delta'/>
+ <glyph codepoint='F6CB' name='Dieresis'/>
+ <glyph codepoint='F6CC' name='DieresisAcute'/>
+ <glyph codepoint='F6CD' name='DieresisGrave'/>
+ <glyph codepoint='F7A8' name='Dieresissmall'/>
+ <glyph codepoint='F6F7' name='Dotaccentsmall'/>
+ <glyph codepoint='F764' name='Dsmall'/>
+ <glyph codepoint='0045' name='E'/>
+ <glyph codepoint='00C9' name='Eacute'/>
+ <glyph codepoint='F7E9' name='Eacutesmall'/>
+ <glyph codepoint='0114' name='Ebreve'/>
+ <glyph codepoint='011A' name='Ecaron'/>
+ <glyph codepoint='00CA' name='Ecircumflex'/>
+ <glyph codepoint='F7EA' name='Ecircumflexsmall'/>
+ <glyph codepoint='00CB' name='Edieresis'/>
+ <glyph codepoint='F7EB' name='Edieresissmall'/>
+ <glyph codepoint='0116' name='Edotaccent'/>
+ <glyph codepoint='00C8' name='Egrave'/>
+ <glyph codepoint='F7E8' name='Egravesmall'/>
+ <glyph codepoint='0112' name='Emacron'/>
+ <glyph codepoint='014A' name='Eng'/>
+ <glyph codepoint='0118' name='Eogonek'/>
+ <glyph codepoint='0395' name='Epsilon'/>
+ <glyph codepoint='0388' name='Epsilontonos'/>
+ <glyph codepoint='F765' name='Esmall'/>
+ <glyph codepoint='0397' name='Eta'/>
+ <glyph codepoint='0389' name='Etatonos'/>
+ <glyph codepoint='00D0' name='Eth'/>
+ <glyph codepoint='F7F0' name='Ethsmall'/>
+ <glyph codepoint='20AC' name='Euro'/>
+ <glyph codepoint='0046' name='F'/>
+ <glyph codepoint='F766' name='Fsmall'/>
+ <glyph codepoint='0047' name='G'/>
+ <glyph codepoint='0393' name='Gamma'/>
+ <glyph codepoint='011E' name='Gbreve'/>
+ <glyph codepoint='01E6' name='Gcaron'/>
+ <glyph codepoint='011C' name='Gcircumflex'/>
+ <glyph codepoint='0122' name='Gcommaaccent'/>
+ <glyph codepoint='0120' name='Gdotaccent'/>
+ <glyph codepoint='F6CE' name='Grave'/>
+ <glyph codepoint='F760' name='Gravesmall'/>
+ <glyph codepoint='F767' name='Gsmall'/>
+ <glyph codepoint='0048' name='H'/>
+ <glyph codepoint='25CF' name='H18533'/>
+ <glyph codepoint='25AA' name='H18543'/>
+ <glyph codepoint='25AB' name='H18551'/>
+ <glyph codepoint='25A1' name='H22073'/>
+ <glyph codepoint='0126' name='Hbar'/>
+ <glyph codepoint='0124' name='Hcircumflex'/>
+ <glyph codepoint='F768' name='Hsmall'/>
+ <glyph codepoint='F6CF' name='Hungarumlaut'/>
+ <glyph codepoint='F6F8' name='Hungarumlautsmall'/>
+ <glyph codepoint='0049' name='I'/>
+ <glyph codepoint='0132' name='IJ'/>
+ <glyph codepoint='00CD' name='Iacute'/>
+ <glyph codepoint='F7ED' name='Iacutesmall'/>
+ <glyph codepoint='012C' name='Ibreve'/>
+ <glyph codepoint='00CE' name='Icircumflex'/>
+ <glyph codepoint='F7EE' name='Icircumflexsmall'/>
+ <glyph codepoint='00CF' name='Idieresis'/>
+ <glyph codepoint='F7EF' name='Idieresissmall'/>
+ <glyph codepoint='0130' name='Idotaccent'/>
+ <glyph codepoint='2111' name='Ifraktur'/>
+ <glyph codepoint='00CC' name='Igrave'/>
+ <glyph codepoint='F7EC' name='Igravesmall'/>
+ <glyph codepoint='012A' name='Imacron'/>
+ <glyph codepoint='012E' name='Iogonek'/>
+ <glyph codepoint='0399' name='Iota'/>
+ <glyph codepoint='03AA' name='Iotadieresis'/>
+ <glyph codepoint='038A' name='Iotatonos'/>
+ <glyph codepoint='F769' name='Ismall'/>
+ <glyph codepoint='0128' name='Itilde'/>
+ <glyph codepoint='004A' name='J'/>
+ <glyph codepoint='0134' name='Jcircumflex'/>
+ <glyph codepoint='F76A' name='Jsmall'/>
+ <glyph codepoint='004B' name='K'/>
+ <glyph codepoint='039A' name='Kappa'/>
+ <glyph codepoint='0136' name='Kcommaaccent'/>
+ <glyph codepoint='F76B' name='Ksmall'/>
+ <glyph codepoint='004C' name='L'/>
+ <glyph codepoint='F6BF' name='LL'/>
+ <glyph codepoint='0139' name='Lacute'/>
+ <glyph codepoint='039B' name='Lambda'/>
+ <glyph codepoint='013D' name='Lcaron'/>
+ <glyph codepoint='013B' name='Lcommaaccent'/>
+ <glyph codepoint='013F' name='Ldot'/>
+ <glyph codepoint='0141' name='Lslash'/>
+ <glyph codepoint='F6F9' name='Lslashsmall'/>
+ <glyph codepoint='F76C' name='Lsmall'/>
+ <glyph codepoint='004D' name='M'/>
+ <glyph codepoint='F6D0' name='Macron'/>
+ <glyph codepoint='F7AF' name='Macronsmall'/>
+ <glyph codepoint='F76D' name='Msmall'/>
+ <glyph codepoint='039C' name='Mu'/>
+ <glyph codepoint='004E' name='N'/>
+ <glyph codepoint='0143' name='Nacute'/>
+ <glyph codepoint='0147' name='Ncaron'/>
+ <glyph codepoint='0145' name='Ncommaaccent'/>
+ <glyph codepoint='F76E' name='Nsmall'/>
+ <glyph codepoint='00D1' name='Ntilde'/>
+ <glyph codepoint='F7F1' name='Ntildesmall'/>
+ <glyph codepoint='039D' name='Nu'/>
+ <glyph codepoint='004F' name='O'/>
+ <glyph codepoint='0152' name='OE'/>
+ <glyph codepoint='F6FA' name='OEsmall'/>
+ <glyph codepoint='00D3' name='Oacute'/>
+ <glyph codepoint='F7F3' name='Oacutesmall'/>
+ <glyph codepoint='014E' name='Obreve'/>
+ <glyph codepoint='00D4' name='Ocircumflex'/>
+ <glyph codepoint='F7F4' name='Ocircumflexsmall'/>
+ <glyph codepoint='00D6' name='Odieresis'/>
+ <glyph codepoint='F7F6' name='Odieresissmall'/>
+ <glyph codepoint='F6FB' name='Ogoneksmall'/>
+ <glyph codepoint='00D2' name='Ograve'/>
+ <glyph codepoint='F7F2' name='Ogravesmall'/>
+ <glyph codepoint='01A0' name='Ohorn'/>
+ <glyph codepoint='0150' name='Ohungarumlaut'/>
+ <glyph codepoint='014C' name='Omacron'/>
+ <glyph codepoint='2126' name='Omega'/>
+ <glyph codepoint='03A9' name='Omega'/>
+ <glyph codepoint='038F' name='Omegatonos'/>
+ <glyph codepoint='039F' name='Omicron'/>
+ <glyph codepoint='038C' name='Omicrontonos'/>
+ <glyph codepoint='00D8' name='Oslash'/>
+ <glyph codepoint='01FE' name='Oslashacute'/>
+ <glyph codepoint='F7F8' name='Oslashsmall'/>
+ <glyph codepoint='F76F' name='Osmall'/>
+ <glyph codepoint='00D5' name='Otilde'/>
+ <glyph codepoint='F7F5' name='Otildesmall'/>
+ <glyph codepoint='0050' name='P'/>
+ <glyph codepoint='03A6' name='Phi'/>
+ <glyph codepoint='03A0' name='Pi'/>
+ <glyph codepoint='03A8' name='Psi'/>
+ <glyph codepoint='F770' name='Psmall'/>
+ <glyph codepoint='0051' name='Q'/>
+ <glyph codepoint='F771' name='Qsmall'/>
+ <glyph codepoint='0052' name='R'/>
+ <glyph codepoint='0154' name='Racute'/>
+ <glyph codepoint='0158' name='Rcaron'/>
+ <glyph codepoint='0156' name='Rcommaaccent'/>
+ <glyph codepoint='211C' name='Rfraktur'/>
+ <glyph codepoint='03A1' name='Rho'/>
+ <glyph codepoint='F6FC' name='Ringsmall'/>
+ <glyph codepoint='F772' name='Rsmall'/>
+ <glyph codepoint='0053' name='S'/>
+ <glyph codepoint='250C' name='SF010000'/>
+ <glyph codepoint='2514' name='SF020000'/>
+ <glyph codepoint='2510' name='SF030000'/>
+ <glyph codepoint='2518' name='SF040000'/>
+ <glyph codepoint='253C' name='SF050000'/>
+ <glyph codepoint='252C' name='SF060000'/>
+ <glyph codepoint='2534' name='SF070000'/>
+ <glyph codepoint='251C' name='SF080000'/>
+ <glyph codepoint='2524' name='SF090000'/>
+ <glyph codepoint='2500' name='SF100000'/>
+ <glyph codepoint='2502' name='SF110000'/>
+ <glyph codepoint='2561' name='SF190000'/>
+ <glyph codepoint='2562' name='SF200000'/>
+ <glyph codepoint='2556' name='SF210000'/>
+ <glyph codepoint='2555' name='SF220000'/>
+ <glyph codepoint='2563' name='SF230000'/>
+ <glyph codepoint='2551' name='SF240000'/>
+ <glyph codepoint='2557' name='SF250000'/>
+ <glyph codepoint='255D' name='SF260000'/>
+ <glyph codepoint='255C' name='SF270000'/>
+ <glyph codepoint='255B' name='SF280000'/>
+ <glyph codepoint='255E' name='SF360000'/>
+ <glyph codepoint='255F' name='SF370000'/>
+ <glyph codepoint='255A' name='SF380000'/>
+ <glyph codepoint='2554' name='SF390000'/>
+ <glyph codepoint='2569' name='SF400000'/>
+ <glyph codepoint='2566' name='SF410000'/>
+ <glyph codepoint='2560' name='SF420000'/>
+ <glyph codepoint='2550' name='SF430000'/>
+ <glyph codepoint='256C' name='SF440000'/>
+ <glyph codepoint='2567' name='SF450000'/>
+ <glyph codepoint='2568' name='SF460000'/>
+ <glyph codepoint='2564' name='SF470000'/>
+ <glyph codepoint='2565' name='SF480000'/>
+ <glyph codepoint='2559' name='SF490000'/>
+ <glyph codepoint='2558' name='SF500000'/>
+ <glyph codepoint='2552' name='SF510000'/>
+ <glyph codepoint='2553' name='SF520000'/>
+ <glyph codepoint='256B' name='SF530000'/>
+ <glyph codepoint='256A' name='SF540000'/>
+ <glyph codepoint='015A' name='Sacute'/>
+ <glyph codepoint='0160' name='Scaron'/>
+ <glyph codepoint='F6FD' name='Scaronsmall'/>
+ <glyph codepoint='015E' name='Scedilla'/>
+ <glyph codepoint='F6C1' name='Scedilla'/>
+ <glyph codepoint='015C' name='Scircumflex'/>
+ <glyph codepoint='0218' name='Scommaaccent'/>
+ <glyph codepoint='03A3' name='Sigma'/>
+ <glyph codepoint='F773' name='Ssmall'/>
+ <glyph codepoint='0054' name='T'/>
+ <glyph codepoint='03A4' name='Tau'/>
+ <glyph codepoint='0166' name='Tbar'/>
+ <glyph codepoint='0164' name='Tcaron'/>
+ <glyph codepoint='0162' name='Tcommaaccent'/>
+ <glyph codepoint='021A' name='Tcommaaccent'/>
+ <glyph codepoint='0398' name='Theta'/>
+ <glyph codepoint='00DE' name='Thorn'/>
+ <glyph codepoint='F7FE' name='Thornsmall'/>
+ <glyph codepoint='F6FE' name='Tildesmall'/>
+ <glyph codepoint='F774' name='Tsmall'/>
+ <glyph codepoint='0055' name='U'/>
+ <glyph codepoint='00DA' name='Uacute'/>
+ <glyph codepoint='F7FA' name='Uacutesmall'/>
+ <glyph codepoint='016C' name='Ubreve'/>
+ <glyph codepoint='00DB' name='Ucircumflex'/>
+ <glyph codepoint='F7FB' name='Ucircumflexsmall'/>
+ <glyph codepoint='00DC' name='Udieresis'/>
+ <glyph codepoint='F7FC' name='Udieresissmall'/>
+ <glyph codepoint='00D9' name='Ugrave'/>
+ <glyph codepoint='F7F9' name='Ugravesmall'/>
+ <glyph codepoint='01AF' name='Uhorn'/>
+ <glyph codepoint='0170' name='Uhungarumlaut'/>
+ <glyph codepoint='016A' name='Umacron'/>
+ <glyph codepoint='0172' name='Uogonek'/>
+ <glyph codepoint='03A5' name='Upsilon'/>
+ <glyph codepoint='03D2' name='Upsilon1'/>
+ <glyph codepoint='03AB' name='Upsilondieresis'/>
+ <glyph codepoint='038E' name='Upsilontonos'/>
+ <glyph codepoint='016E' name='Uring'/>
+ <glyph codepoint='F775' name='Usmall'/>
+ <glyph codepoint='0168' name='Utilde'/>
+ <glyph codepoint='0056' name='V'/>
+ <glyph codepoint='F776' name='Vsmall'/>
+ <glyph codepoint='0057' name='W'/>
+ <glyph codepoint='1E82' name='Wacute'/>
+ <glyph codepoint='0174' name='Wcircumflex'/>
+ <glyph codepoint='1E84' name='Wdieresis'/>
+ <glyph codepoint='1E80' name='Wgrave'/>
+ <glyph codepoint='F777' name='Wsmall'/>
+ <glyph codepoint='0058' name='X'/>
+ <glyph codepoint='039E' name='Xi'/>
+ <glyph codepoint='F778' name='Xsmall'/>
+ <glyph codepoint='0059' name='Y'/>
+ <glyph codepoint='00DD' name='Yacute'/>
+ <glyph codepoint='F7FD' name='Yacutesmall'/>
+ <glyph codepoint='0176' name='Ycircumflex'/>
+ <glyph codepoint='0178' name='Ydieresis'/>
+ <glyph codepoint='F7FF' name='Ydieresissmall'/>
+ <glyph codepoint='1EF2' name='Ygrave'/>
+ <glyph codepoint='F779' name='Ysmall'/>
+ <glyph codepoint='005A' name='Z'/>
+ <glyph codepoint='0179' name='Zacute'/>
+ <glyph codepoint='017D' name='Zcaron'/>
+ <glyph codepoint='F6FF' name='Zcaronsmall'/>
+ <glyph codepoint='017B' name='Zdotaccent'/>
+ <glyph codepoint='0396' name='Zeta'/>
+ <glyph codepoint='F77A' name='Zsmall'/>
+ <glyph codepoint='0061' name='a'/>
+ <glyph codepoint='00E1' name='aacute'/>
+ <glyph codepoint='0103' name='abreve'/>
+ <glyph codepoint='00E2' name='acircumflex'/>
+ <glyph codepoint='00B4' name='acute'/>
+ <glyph codepoint='0301' name='acutecomb'/>
+ <glyph codepoint='00E4' name='adieresis'/>
+ <glyph codepoint='00E6' name='ae'/>
+ <glyph codepoint='01FD' name='aeacute'/>
+ <glyph codepoint='2015' name='afii00208'/>
+ <glyph codepoint='0410' name='afii10017'/>
+ <glyph codepoint='0411' name='afii10018'/>
+ <glyph codepoint='0412' name='afii10019'/>
+ <glyph codepoint='0413' name='afii10020'/>
+ <glyph codepoint='0414' name='afii10021'/>
+ <glyph codepoint='0415' name='afii10022'/>
+ <glyph codepoint='0401' name='afii10023'/>
+ <glyph codepoint='0416' name='afii10024'/>
+ <glyph codepoint='0417' name='afii10025'/>
+ <glyph codepoint='0418' name='afii10026'/>
+ <glyph codepoint='0419' name='afii10027'/>
+ <glyph codepoint='041A' name='afii10028'/>
+ <glyph codepoint='041B' name='afii10029'/>
+ <glyph codepoint='041C' name='afii10030'/>
+ <glyph codepoint='041D' name='afii10031'/>
+ <glyph codepoint='041E' name='afii10032'/>
+ <glyph codepoint='041F' name='afii10033'/>
+ <glyph codepoint='0420' name='afii10034'/>
+ <glyph codepoint='0421' name='afii10035'/>
+ <glyph codepoint='0422' name='afii10036'/>
+ <glyph codepoint='0423' name='afii10037'/>
+ <glyph codepoint='0424' name='afii10038'/>
+ <glyph codepoint='0425' name='afii10039'/>
+ <glyph codepoint='0426' name='afii10040'/>
+ <glyph codepoint='0427' name='afii10041'/>
+ <glyph codepoint='0428' name='afii10042'/>
+ <glyph codepoint='0429' name='afii10043'/>
+ <glyph codepoint='042A' name='afii10044'/>
+ <glyph codepoint='042B' name='afii10045'/>
+ <glyph codepoint='042C' name='afii10046'/>
+ <glyph codepoint='042D' name='afii10047'/>
+ <glyph codepoint='042E' name='afii10048'/>
+ <glyph codepoint='042F' name='afii10049'/>
+ <glyph codepoint='0490' name='afii10050'/>
+ <glyph codepoint='0402' name='afii10051'/>
+ <glyph codepoint='0403' name='afii10052'/>
+ <glyph codepoint='0404' name='afii10053'/>
+ <glyph codepoint='0405' name='afii10054'/>
+ <glyph codepoint='0406' name='afii10055'/>
+ <glyph codepoint='0407' name='afii10056'/>
+ <glyph codepoint='0408' name='afii10057'/>
+ <glyph codepoint='0409' name='afii10058'/>
+ <glyph codepoint='040A' name='afii10059'/>
+ <glyph codepoint='040B' name='afii10060'/>
+ <glyph codepoint='040C' name='afii10061'/>
+ <glyph codepoint='040E' name='afii10062'/>
+ <glyph codepoint='F6C4' name='afii10063'/>
+ <glyph codepoint='F6C5' name='afii10064'/>
+ <glyph codepoint='0430' name='afii10065'/>
+ <glyph codepoint='0431' name='afii10066'/>
+ <glyph codepoint='0432' name='afii10067'/>
+ <glyph codepoint='0433' name='afii10068'/>
+ <glyph codepoint='0434' name='afii10069'/>
+ <glyph codepoint='0435' name='afii10070'/>
+ <glyph codepoint='0451' name='afii10071'/>
+ <glyph codepoint='0436' name='afii10072'/>
+ <glyph codepoint='0437' name='afii10073'/>
+ <glyph codepoint='0438' name='afii10074'/>
+ <glyph codepoint='0439' name='afii10075'/>
+ <glyph codepoint='043A' name='afii10076'/>
+ <glyph codepoint='043B' name='afii10077'/>
+ <glyph codepoint='043C' name='afii10078'/>
+ <glyph codepoint='043D' name='afii10079'/>
+ <glyph codepoint='043E' name='afii10080'/>
+ <glyph codepoint='043F' name='afii10081'/>
+ <glyph codepoint='0440' name='afii10082'/>
+ <glyph codepoint='0441' name='afii10083'/>
+ <glyph codepoint='0442' name='afii10084'/>
+ <glyph codepoint='0443' name='afii10085'/>
+ <glyph codepoint='0444' name='afii10086'/>
+ <glyph codepoint='0445' name='afii10087'/>
+ <glyph codepoint='0446' name='afii10088'/>
+ <glyph codepoint='0447' name='afii10089'/>
+ <glyph codepoint='0448' name='afii10090'/>
+ <glyph codepoint='0449' name='afii10091'/>
+ <glyph codepoint='044A' name='afii10092'/>
+ <glyph codepoint='044B' name='afii10093'/>
+ <glyph codepoint='044C' name='afii10094'/>
+ <glyph codepoint='044D' name='afii10095'/>
+ <glyph codepoint='044E' name='afii10096'/>
+ <glyph codepoint='044F' name='afii10097'/>
+ <glyph codepoint='0491' name='afii10098'/>
+ <glyph codepoint='0452' name='afii10099'/>
+ <glyph codepoint='0453' name='afii10100'/>
+ <glyph codepoint='0454' name='afii10101'/>
+ <glyph codepoint='0455' name='afii10102'/>
+ <glyph codepoint='0456' name='afii10103'/>
+ <glyph codepoint='0457' name='afii10104'/>
+ <glyph codepoint='0458' name='afii10105'/>
+ <glyph codepoint='0459' name='afii10106'/>
+ <glyph codepoint='045A' name='afii10107'/>
+ <glyph codepoint='045B' name='afii10108'/>
+ <glyph codepoint='045C' name='afii10109'/>
+ <glyph codepoint='045E' name='afii10110'/>
+ <glyph codepoint='040F' name='afii10145'/>
+ <glyph codepoint='0462' name='afii10146'/>
+ <glyph codepoint='0472' name='afii10147'/>
+ <glyph codepoint='0474' name='afii10148'/>
+ <glyph codepoint='F6C6' name='afii10192'/>
+ <glyph codepoint='045F' name='afii10193'/>
+ <glyph codepoint='0463' name='afii10194'/>
+ <glyph codepoint='0473' name='afii10195'/>
+ <glyph codepoint='0475' name='afii10196'/>
+ <glyph codepoint='F6C7' name='afii10831'/>
+ <glyph codepoint='F6C8' name='afii10832'/>
+ <glyph codepoint='04D9' name='afii10846'/>
+ <glyph codepoint='200E' name='afii299'/>
+ <glyph codepoint='200F' name='afii300'/>
+ <glyph codepoint='200D' name='afii301'/>
+ <glyph codepoint='066A' name='afii57381'/>
+ <glyph codepoint='060C' name='afii57388'/>
+ <glyph codepoint='0660' name='afii57392'/>
+ <glyph codepoint='0661' name='afii57393'/>
+ <glyph codepoint='0662' name='afii57394'/>
+ <glyph codepoint='0663' name='afii57395'/>
+ <glyph codepoint='0664' name='afii57396'/>
+ <glyph codepoint='0665' name='afii57397'/>
+ <glyph codepoint='0666' name='afii57398'/>
+ <glyph codepoint='0667' name='afii57399'/>
+ <glyph codepoint='0668' name='afii57400'/>
+ <glyph codepoint='0669' name='afii57401'/>
+ <glyph codepoint='061B' name='afii57403'/>
+ <glyph codepoint='061F' name='afii57407'/>
+ <glyph codepoint='0621' name='afii57409'/>
+ <glyph codepoint='0622' name='afii57410'/>
+ <glyph codepoint='0623' name='afii57411'/>
+ <glyph codepoint='0624' name='afii57412'/>
+ <glyph codepoint='0625' name='afii57413'/>
+ <glyph codepoint='0626' name='afii57414'/>
+ <glyph codepoint='0627' name='afii57415'/>
+ <glyph codepoint='0628' name='afii57416'/>
+ <glyph codepoint='0629' name='afii57417'/>
+ <glyph codepoint='062A' name='afii57418'/>
+ <glyph codepoint='062B' name='afii57419'/>
+ <glyph codepoint='062C' name='afii57420'/>
+ <glyph codepoint='062D' name='afii57421'/>
+ <glyph codepoint='062E' name='afii57422'/>
+ <glyph codepoint='062F' name='afii57423'/>
+ <glyph codepoint='0630' name='afii57424'/>
+ <glyph codepoint='0631' name='afii57425'/>
+ <glyph codepoint='0632' name='afii57426'/>
+ <glyph codepoint='0633' name='afii57427'/>
+ <glyph codepoint='0634' name='afii57428'/>
+ <glyph codepoint='0635' name='afii57429'/>
+ <glyph codepoint='0636' name='afii57430'/>
+ <glyph codepoint='0637' name='afii57431'/>
+ <glyph codepoint='0638' name='afii57432'/>
+ <glyph codepoint='0639' name='afii57433'/>
+ <glyph codepoint='063A' name='afii57434'/>
+ <glyph codepoint='0640' name='afii57440'/>
+ <glyph codepoint='0641' name='afii57441'/>
+ <glyph codepoint='0642' name='afii57442'/>
+ <glyph codepoint='0643' name='afii57443'/>
+ <glyph codepoint='0644' name='afii57444'/>
+ <glyph codepoint='0645' name='afii57445'/>
+ <glyph codepoint='0646' name='afii57446'/>
+ <glyph codepoint='0648' name='afii57448'/>
+ <glyph codepoint='0649' name='afii57449'/>
+ <glyph codepoint='064A' name='afii57450'/>
+ <glyph codepoint='064B' name='afii57451'/>
+ <glyph codepoint='064C' name='afii57452'/>
+ <glyph codepoint='064D' name='afii57453'/>
+ <glyph codepoint='064E' name='afii57454'/>
+ <glyph codepoint='064F' name='afii57455'/>
+ <glyph codepoint='0650' name='afii57456'/>
+ <glyph codepoint='0651' name='afii57457'/>
+ <glyph codepoint='0652' name='afii57458'/>
+ <glyph codepoint='0647' name='afii57470'/>
+ <glyph codepoint='06A4' name='afii57505'/>
+ <glyph codepoint='067E' name='afii57506'/>
+ <glyph codepoint='0686' name='afii57507'/>
+ <glyph codepoint='0698' name='afii57508'/>
+ <glyph codepoint='06AF' name='afii57509'/>
+ <glyph codepoint='0679' name='afii57511'/>
+ <glyph codepoint='0688' name='afii57512'/>
+ <glyph codepoint='0691' name='afii57513'/>
+ <glyph codepoint='06BA' name='afii57514'/>
+ <glyph codepoint='06D2' name='afii57519'/>
+ <glyph codepoint='06D5' name='afii57534'/>
+ <glyph codepoint='20AA' name='afii57636'/>
+ <glyph codepoint='05BE' name='afii57645'/>
+ <glyph codepoint='05C3' name='afii57658'/>
+ <glyph codepoint='05D0' name='afii57664'/>
+ <glyph codepoint='05D1' name='afii57665'/>
+ <glyph codepoint='05D2' name='afii57666'/>
+ <glyph codepoint='05D3' name='afii57667'/>
+ <glyph codepoint='05D4' name='afii57668'/>
+ <glyph codepoint='05D5' name='afii57669'/>
+ <glyph codepoint='05D6' name='afii57670'/>
+ <glyph codepoint='05D7' name='afii57671'/>
+ <glyph codepoint='05D8' name='afii57672'/>
+ <glyph codepoint='05D9' name='afii57673'/>
+ <glyph codepoint='05DA' name='afii57674'/>
+ <glyph codepoint='05DB' name='afii57675'/>
+ <glyph codepoint='05DC' name='afii57676'/>
+ <glyph codepoint='05DD' name='afii57677'/>
+ <glyph codepoint='05DE' name='afii57678'/>
+ <glyph codepoint='05DF' name='afii57679'/>
+ <glyph codepoint='05E0' name='afii57680'/>
+ <glyph codepoint='05E1' name='afii57681'/>
+ <glyph codepoint='05E2' name='afii57682'/>
+ <glyph codepoint='05E3' name='afii57683'/>
+ <glyph codepoint='05E4' name='afii57684'/>
+ <glyph codepoint='05E5' name='afii57685'/>
+ <glyph codepoint='05E6' name='afii57686'/>
+ <glyph codepoint='05E7' name='afii57687'/>
+ <glyph codepoint='05E8' name='afii57688'/>
+ <glyph codepoint='05E9' name='afii57689'/>
+ <glyph codepoint='05EA' name='afii57690'/>
+ <glyph codepoint='FB2A' name='afii57694'/>
+ <glyph codepoint='FB2B' name='afii57695'/>
+ <glyph codepoint='FB4B' name='afii57700'/>
+ <glyph codepoint='FB1F' name='afii57705'/>
+ <glyph codepoint='05F0' name='afii57716'/>
+ <glyph codepoint='05F1' name='afii57717'/>
+ <glyph codepoint='05F2' name='afii57718'/>
+ <glyph codepoint='FB35' name='afii57723'/>
+ <glyph codepoint='05B4' name='afii57793'/>
+ <glyph codepoint='05B5' name='afii57794'/>
+ <glyph codepoint='05B6' name='afii57795'/>
+ <glyph codepoint='05BB' name='afii57796'/>
+ <glyph codepoint='05B8' name='afii57797'/>
+ <glyph codepoint='05B7' name='afii57798'/>
+ <glyph codepoint='05B0' name='afii57799'/>
+ <glyph codepoint='05B2' name='afii57800'/>
+ <glyph codepoint='05B1' name='afii57801'/>
+ <glyph codepoint='05B3' name='afii57802'/>
+ <glyph codepoint='05C2' name='afii57803'/>
+ <glyph codepoint='05C1' name='afii57804'/>
+ <glyph codepoint='05B9' name='afii57806'/>
+ <glyph codepoint='05BC' name='afii57807'/>
+ <glyph codepoint='05BD' name='afii57839'/>
+ <glyph codepoint='05BF' name='afii57841'/>
+ <glyph codepoint='05C0' name='afii57842'/>
+ <glyph codepoint='02BC' name='afii57929'/>
+ <glyph codepoint='2105' name='afii61248'/>
+ <glyph codepoint='2113' name='afii61289'/>
+ <glyph codepoint='2116' name='afii61352'/>
+ <glyph codepoint='202C' name='afii61573'/>
+ <glyph codepoint='202D' name='afii61574'/>
+ <glyph codepoint='202E' name='afii61575'/>
+ <glyph codepoint='200C' name='afii61664'/>
+ <glyph codepoint='066D' name='afii63167'/>
+ <glyph codepoint='02BD' name='afii64937'/>
+ <glyph codepoint='00E0' name='agrave'/>
+ <glyph codepoint='2135' name='aleph'/>
+ <glyph codepoint='03B1' name='alpha'/>
+ <glyph codepoint='03AC' name='alphatonos'/>
+ <glyph codepoint='0101' name='amacron'/>
+ <glyph codepoint='0026' name='ampersand'/>
+ <glyph codepoint='F726' name='ampersandsmall'/>
+ <glyph codepoint='2220' name='angle'/>
+ <glyph codepoint='2329' name='angleleft'/>
+ <glyph codepoint='232A' name='angleright'/>
+ <glyph codepoint='0387' name='anoteleia'/>
+ <glyph codepoint='0105' name='aogonek'/>
+ <glyph codepoint='2248' name='approxequal'/>
+ <glyph codepoint='00E5' name='aring'/>
+ <glyph codepoint='01FB' name='aringacute'/>
+ <glyph codepoint='2194' name='arrowboth'/>
+ <glyph codepoint='21D4' name='arrowdblboth'/>
+ <glyph codepoint='21D3' name='arrowdbldown'/>
+ <glyph codepoint='21D0' name='arrowdblleft'/>
+ <glyph codepoint='21D2' name='arrowdblright'/>
+ <glyph codepoint='21D1' name='arrowdblup'/>
+ <glyph codepoint='2193' name='arrowdown'/>
+ <glyph codepoint='F8E7' name='arrowhorizex'/>
+ <glyph codepoint='2190' name='arrowleft'/>
+ <glyph codepoint='2192' name='arrowright'/>
+ <glyph codepoint='2191' name='arrowup'/>
+ <glyph codepoint='2195' name='arrowupdn'/>
+ <glyph codepoint='21A8' name='arrowupdnbse'/>
+ <glyph codepoint='F8E6' name='arrowvertex'/>
+ <glyph codepoint='005E' name='asciicircum'/>
+ <glyph codepoint='007E' name='asciitilde'/>
+ <glyph codepoint='002A' name='asterisk'/>
+ <glyph codepoint='2217' name='asteriskmath'/>
+ <glyph codepoint='F6E9' name='asuperior'/>
+ <glyph codepoint='0040' name='at'/>
+ <glyph codepoint='00E3' name='atilde'/>
+ <glyph codepoint='0062' name='b'/>
+ <glyph codepoint='005C' name='backslash'/>
+ <glyph codepoint='007C' name='bar'/>
+ <glyph codepoint='03B2' name='beta'/>
+ <glyph codepoint='2588' name='block'/>
+ <glyph codepoint='F8F4' name='braceex'/>
+ <glyph codepoint='007B' name='braceleft'/>
+ <glyph codepoint='F8F3' name='braceleftbt'/>
+ <glyph codepoint='F8F2' name='braceleftmid'/>
+ <glyph codepoint='F8F1' name='bracelefttp'/>
+ <glyph codepoint='007D' name='braceright'/>
+ <glyph codepoint='F8FE' name='bracerightbt'/>
+ <glyph codepoint='F8FD' name='bracerightmid'/>
+ <glyph codepoint='F8FC' name='bracerighttp'/>
+ <glyph codepoint='005B' name='bracketleft'/>
+ <glyph codepoint='F8F0' name='bracketleftbt'/>
+ <glyph codepoint='F8EF' name='bracketleftex'/>
+ <glyph codepoint='F8EE' name='bracketlefttp'/>
+ <glyph codepoint='005D' name='bracketright'/>
+ <glyph codepoint='F8FB' name='bracketrightbt'/>
+ <glyph codepoint='F8FA' name='bracketrightex'/>
+ <glyph codepoint='F8F9' name='bracketrighttp'/>
+ <glyph codepoint='02D8' name='breve'/>
+ <glyph codepoint='00A6' name='brokenbar'/>
+ <glyph codepoint='F6EA' name='bsuperior'/>
+ <glyph codepoint='2022' name='bullet'/>
+ <glyph codepoint='0063' name='c'/>
+ <glyph codepoint='0107' name='cacute'/>
+ <glyph codepoint='02C7' name='caron'/>
+ <glyph codepoint='21B5' name='carriagereturn'/>
+ <glyph codepoint='010D' name='ccaron'/>
+ <glyph codepoint='00E7' name='ccedilla'/>
+ <glyph codepoint='0109' name='ccircumflex'/>
+ <glyph codepoint='010B' name='cdotaccent'/>
+ <glyph codepoint='00B8' name='cedilla'/>
+ <glyph codepoint='00A2' name='cent'/>
+ <glyph codepoint='F6DF' name='centinferior'/>
+ <glyph codepoint='F7A2' name='centoldstyle'/>
+ <glyph codepoint='F6E0' name='centsuperior'/>
+ <glyph codepoint='03C7' name='chi'/>
+ <glyph codepoint='25CB' name='circle'/>
+ <glyph codepoint='2297' name='circlemultiply'/>
+ <glyph codepoint='2295' name='circleplus'/>
+ <glyph codepoint='02C6' name='circumflex'/>
+ <glyph codepoint='2663' name='club'/>
+ <glyph codepoint='003A' name='colon'/>
+ <glyph codepoint='20A1' name='colonmonetary'/>
+ <glyph codepoint='002C' name='comma'/>
+ <glyph codepoint='F6C3' name='commaaccent'/>
+ <glyph codepoint='F6E1' name='commainferior'/>
+ <glyph codepoint='F6E2' name='commasuperior'/>
+ <glyph codepoint='2245' name='congruent'/>
+ <glyph codepoint='00A9' name='copyright'/>
+ <glyph codepoint='F8E9' name='copyrightsans'/>
+ <glyph codepoint='F6D9' name='copyrightserif'/>
+ <glyph codepoint='00A4' name='currency'/>
+ <glyph codepoint='F6D1' name='cyrBreve'/>
+ <glyph codepoint='F6D2' name='cyrFlex'/>
+ <glyph codepoint='F6D4' name='cyrbreve'/>
+ <glyph codepoint='F6D5' name='cyrflex'/>
+ <glyph codepoint='0064' name='d'/>
+ <glyph codepoint='2020' name='dagger'/>
+ <glyph codepoint='2021' name='daggerdbl'/>
+ <glyph codepoint='F6D3' name='dblGrave'/>
+ <glyph codepoint='F6D6' name='dblgrave'/>
+ <glyph codepoint='010F' name='dcaron'/>
+ <glyph codepoint='0111' name='dcroat'/>
+ <glyph codepoint='00B0' name='degree'/>
+ <glyph codepoint='03B4' name='delta'/>
+ <glyph codepoint='2666' name='diamond'/>
+ <glyph codepoint='00A8' name='dieresis'/>
+ <glyph codepoint='F6D7' name='dieresisacute'/>
+ <glyph codepoint='F6D8' name='dieresisgrave'/>
+ <glyph codepoint='0385' name='dieresistonos'/>
+ <glyph codepoint='00F7' name='divide'/>
+ <glyph codepoint='2593' name='dkshade'/>
+ <glyph codepoint='2584' name='dnblock'/>
+ <glyph codepoint='0024' name='dollar'/>
+ <glyph codepoint='F6E3' name='dollarinferior'/>
+ <glyph codepoint='F724' name='dollaroldstyle'/>
+ <glyph codepoint='F6E4' name='dollarsuperior'/>
+ <glyph codepoint='20AB' name='dong'/>
+ <glyph codepoint='02D9' name='dotaccent'/>
+ <glyph codepoint='0323' name='dotbelowcomb'/>
+ <glyph codepoint='0131' name='dotlessi'/>
+ <glyph codepoint='F6BE' name='dotlessj'/>
+ <glyph codepoint='22C5' name='dotmath'/>
+ <glyph codepoint='F6EB' name='dsuperior'/>
+ <glyph codepoint='0065' name='e'/>
+ <glyph codepoint='00E9' name='eacute'/>
+ <glyph codepoint='0115' name='ebreve'/>
+ <glyph codepoint='011B' name='ecaron'/>
+ <glyph codepoint='00EA' name='ecircumflex'/>
+ <glyph codepoint='00EB' name='edieresis'/>
+ <glyph codepoint='0117' name='edotaccent'/>
+ <glyph codepoint='00E8' name='egrave'/>
+ <glyph codepoint='0038' name='eight'/>
+ <glyph codepoint='2088' name='eightinferior'/>
+ <glyph codepoint='F738' name='eightoldstyle'/>
+ <glyph codepoint='2078' name='eightsuperior'/>
+ <glyph codepoint='2208' name='element'/>
+ <glyph codepoint='2026' name='ellipsis'/>
+ <glyph codepoint='0113' name='emacron'/>
+ <glyph codepoint='2014' name='emdash'/>
+ <glyph codepoint='2205' name='emptyset'/>
+ <glyph codepoint='2013' name='endash'/>
+ <glyph codepoint='014B' name='eng'/>
+ <glyph codepoint='0119' name='eogonek'/>
+ <glyph codepoint='03B5' name='epsilon'/>
+ <glyph codepoint='03AD' name='epsilontonos'/>
+ <glyph codepoint='003D' name='equal'/>
+ <glyph codepoint='2261' name='equivalence'/>
+ <glyph codepoint='212E' name='estimated'/>
+ <glyph codepoint='F6EC' name='esuperior'/>
+ <glyph codepoint='03B7' name='eta'/>
+ <glyph codepoint='03AE' name='etatonos'/>
+ <glyph codepoint='00F0' name='eth'/>
+ <glyph codepoint='0021' name='exclam'/>
+ <glyph codepoint='203C' name='exclamdbl'/>
+ <glyph codepoint='00A1' name='exclamdown'/>
+ <glyph codepoint='F7A1' name='exclamdownsmall'/>
+ <glyph codepoint='F721' name='exclamsmall'/>
+ <glyph codepoint='2203' name='existential'/>
+ <glyph codepoint='0066' name='f'/>
+ <glyph codepoint='2640' name='female'/>
+ <glyph codepoint='FB00' name='ff'/>
+ <glyph codepoint='FB03' name='ffi'/>
+ <glyph codepoint='FB04' name='ffl'/>
+ <glyph codepoint='FB01' name='fi'/>
+ <glyph codepoint='2012' name='figuredash'/>
+ <glyph codepoint='25A0' name='filledbox'/>
+ <glyph codepoint='25AC' name='filledrect'/>
+ <glyph codepoint='0035' name='five'/>
+ <glyph codepoint='215D' name='fiveeighths'/>
+ <glyph codepoint='2085' name='fiveinferior'/>
+ <glyph codepoint='F735' name='fiveoldstyle'/>
+ <glyph codepoint='2075' name='fivesuperior'/>
+ <glyph codepoint='FB02' name='fl'/>
+ <glyph codepoint='0192' name='florin'/>
+ <glyph codepoint='0034' name='four'/>
+ <glyph codepoint='2084' name='fourinferior'/>
+ <glyph codepoint='F734' name='fouroldstyle'/>
+ <glyph codepoint='2074' name='foursuperior'/>
+ <glyph codepoint='2044' name='fraction'/>
+ <glyph codepoint='2215' name='fraction'/>
+ <glyph codepoint='20A3' name='franc'/>
+ <glyph codepoint='0067' name='g'/>
+ <glyph codepoint='03B3' name='gamma'/>
+ <glyph codepoint='011F' name='gbreve'/>
+ <glyph codepoint='01E7' name='gcaron'/>
+ <glyph codepoint='011D' name='gcircumflex'/>
+ <glyph codepoint='0123' name='gcommaaccent'/>
+ <glyph codepoint='0121' name='gdotaccent'/>
+ <glyph codepoint='00DF' name='germandbls'/>
+ <glyph codepoint='2207' name='gradient'/>
+ <glyph codepoint='0060' name='grave'/>
+ <glyph codepoint='0300' name='gravecomb'/>
+ <glyph codepoint='003E' name='greater'/>
+ <glyph codepoint='2265' name='greaterequal'/>
+ <glyph codepoint='00AB' name='guillemotleft'/>
+ <glyph codepoint='00BB' name='guillemotright'/>
+ <glyph codepoint='2039' name='guilsinglleft'/>
+ <glyph codepoint='203A' name='guilsinglright'/>
+ <glyph codepoint='0068' name='h'/>
+ <glyph codepoint='0127' name='hbar'/>
+ <glyph codepoint='0125' name='hcircumflex'/>
+ <glyph codepoint='2665' name='heart'/>
+ <glyph codepoint='0309' name='hookabovecomb'/>
+ <glyph codepoint='2302' name='house'/>
+ <glyph codepoint='02DD' name='hungarumlaut'/>
+ <glyph codepoint='002D' name='hyphen'/>
+ <glyph codepoint='00AD' name='hyphen'/>
+ <glyph codepoint='F6E5' name='hypheninferior'/>
+ <glyph codepoint='F6E6' name='hyphensuperior'/>
+ <glyph codepoint='0069' name='i'/>
+ <glyph codepoint='00ED' name='iacute'/>
+ <glyph codepoint='012D' name='ibreve'/>
+ <glyph codepoint='00EE' name='icircumflex'/>
+ <glyph codepoint='00EF' name='idieresis'/>
+ <glyph codepoint='00EC' name='igrave'/>
+ <glyph codepoint='0133' name='ij'/>
+ <glyph codepoint='012B' name='imacron'/>
+ <glyph codepoint='221E' name='infinity'/>
+ <glyph codepoint='222B' name='integral'/>
+ <glyph codepoint='2321' name='integralbt'/>
+ <glyph codepoint='F8F5' name='integralex'/>
+ <glyph codepoint='2320' name='integraltp'/>
+ <glyph codepoint='2229' name='intersection'/>
+ <glyph codepoint='25D8' name='invbullet'/>
+ <glyph codepoint='25D9' name='invcircle'/>
+ <glyph codepoint='263B' name='invsmileface'/>
+ <glyph codepoint='012F' name='iogonek'/>
+ <glyph codepoint='03B9' name='iota'/>
+ <glyph codepoint='03CA' name='iotadieresis'/>
+ <glyph codepoint='0390' name='iotadieresistonos'/>
+ <glyph codepoint='03AF' name='iotatonos'/>
+ <glyph codepoint='F6ED' name='isuperior'/>
+ <glyph codepoint='0129' name='itilde'/>
+ <glyph codepoint='006A' name='j'/>
+ <glyph codepoint='0135' name='jcircumflex'/>
+ <glyph codepoint='006B' name='k'/>
+ <glyph codepoint='03BA' name='kappa'/>
+ <glyph codepoint='0137' name='kcommaaccent'/>
+ <glyph codepoint='0138' name='kgreenlandic'/>
+ <glyph codepoint='006C' name='l'/>
+ <glyph codepoint='013A' name='lacute'/>
+ <glyph codepoint='03BB' name='lambda'/>
+ <glyph codepoint='013E' name='lcaron'/>
+ <glyph codepoint='013C' name='lcommaaccent'/>
+ <glyph codepoint='0140' name='ldot'/>
+ <glyph codepoint='003C' name='less'/>
+ <glyph codepoint='2264' name='lessequal'/>
+ <glyph codepoint='258C' name='lfblock'/>
+ <glyph codepoint='20A4' name='lira'/>
+ <glyph codepoint='F6C0' name='ll'/>
+ <glyph codepoint='2227' name='logicaland'/>
+ <glyph codepoint='00AC' name='logicalnot'/>
+ <glyph codepoint='2228' name='logicalor'/>
+ <glyph codepoint='017F' name='longs'/>
+ <glyph codepoint='25CA' name='lozenge'/>
+ <glyph codepoint='0142' name='lslash'/>
+ <glyph codepoint='F6EE' name='lsuperior'/>
+ <glyph codepoint='2591' name='ltshade'/>
+ <glyph codepoint='006D' name='m'/>
+ <glyph codepoint='00AF' name='macron'/>
+ <glyph codepoint='02C9' name='macron'/>
+ <glyph codepoint='2642' name='male'/>
+ <glyph codepoint='2212' name='minus'/>
+ <glyph codepoint='2032' name='minute'/>
+ <glyph codepoint='F6EF' name='msuperior'/>
+ <glyph codepoint='00B5' name='mu'/>
+ <glyph codepoint='03BC' name='mu'/>
+ <glyph codepoint='00D7' name='multiply'/>
+ <glyph codepoint='266A' name='musicalnote'/>
+ <glyph codepoint='266B' name='musicalnotedbl'/>
+ <glyph codepoint='006E' name='n'/>
+ <glyph codepoint='0144' name='nacute'/>
+ <glyph codepoint='0149' name='napostrophe'/>
+ <glyph codepoint='0148' name='ncaron'/>
+ <glyph codepoint='0146' name='ncommaaccent'/>
+ <glyph codepoint='0039' name='nine'/>
+ <glyph codepoint='2089' name='nineinferior'/>
+ <glyph codepoint='F739' name='nineoldstyle'/>
+ <glyph codepoint='2079' name='ninesuperior'/>
+ <glyph codepoint='2209' name='notelement'/>
+ <glyph codepoint='2260' name='notequal'/>
+ <glyph codepoint='2284' name='notsubset'/>
+ <glyph codepoint='207F' name='nsuperior'/>
+ <glyph codepoint='00F1' name='ntilde'/>
+ <glyph codepoint='03BD' name='nu'/>
+ <glyph codepoint='0023' name='numbersign'/>
+ <glyph codepoint='006F' name='o'/>
+ <glyph codepoint='00F3' name='oacute'/>
+ <glyph codepoint='014F' name='obreve'/>
+ <glyph codepoint='00F4' name='ocircumflex'/>
+ <glyph codepoint='00F6' name='odieresis'/>
+ <glyph codepoint='0153' name='oe'/>
+ <glyph codepoint='02DB' name='ogonek'/>
+ <glyph codepoint='00F2' name='ograve'/>
+ <glyph codepoint='01A1' name='ohorn'/>
+ <glyph codepoint='0151' name='ohungarumlaut'/>
+ <glyph codepoint='014D' name='omacron'/>
+ <glyph codepoint='03C9' name='omega'/>
+ <glyph codepoint='03D6' name='omega1'/>
+ <glyph codepoint='03CE' name='omegatonos'/>
+ <glyph codepoint='03BF' name='omicron'/>
+ <glyph codepoint='03CC' name='omicrontonos'/>
+ <glyph codepoint='0031' name='one'/>
+ <glyph codepoint='2024' name='onedotenleader'/>
+ <glyph codepoint='215B' name='oneeighth'/>
+ <glyph codepoint='F6DC' name='onefitted'/>
+ <glyph codepoint='00BD' name='onehalf'/>
+ <glyph codepoint='2081' name='oneinferior'/>
+ <glyph codepoint='F731' name='oneoldstyle'/>
+ <glyph codepoint='00BC' name='onequarter'/>
+ <glyph codepoint='00B9' name='onesuperior'/>
+ <glyph codepoint='2153' name='onethird'/>
+ <glyph codepoint='25E6' name='openbullet'/>
+ <glyph codepoint='00AA' name='ordfeminine'/>
+ <glyph codepoint='00BA' name='ordmasculine'/>
+ <glyph codepoint='221F' name='orthogonal'/>
+ <glyph codepoint='00F8' name='oslash'/>
+ <glyph codepoint='01FF' name='oslashacute'/>
+ <glyph codepoint='F6F0' name='osuperior'/>
+ <glyph codepoint='00F5' name='otilde'/>
+ <glyph codepoint='0070' name='p'/>
+ <glyph codepoint='00B6' name='paragraph'/>
+ <glyph codepoint='0028' name='parenleft'/>
+ <glyph codepoint='F8ED' name='parenleftbt'/>
+ <glyph codepoint='F8EC' name='parenleftex'/>
+ <glyph codepoint='208D' name='parenleftinferior'/>
+ <glyph codepoint='207D' name='parenleftsuperior'/>
+ <glyph codepoint='F8EB' name='parenlefttp'/>
+ <glyph codepoint='0029' name='parenright'/>
+ <glyph codepoint='F8F8' name='parenrightbt'/>
+ <glyph codepoint='F8F7' name='parenrightex'/>
+ <glyph codepoint='208E' name='parenrightinferior'/>
+ <glyph codepoint='207E' name='parenrightsuperior'/>
+ <glyph codepoint='F8F6' name='parenrighttp'/>
+ <glyph codepoint='2202' name='partialdiff'/>
+ <glyph codepoint='0025' name='percent'/>
+ <glyph codepoint='002E' name='period'/>
+ <glyph codepoint='00B7' name='periodcentered'/>
+ <glyph codepoint='2219' name='periodcentered'/>
+ <glyph codepoint='F6E7' name='periodinferior'/>
+ <glyph codepoint='F6E8' name='periodsuperior'/>
+ <glyph codepoint='22A5' name='perpendicular'/>
+ <glyph codepoint='2030' name='perthousand'/>
+ <glyph codepoint='20A7' name='peseta'/>
+ <glyph codepoint='03C6' name='phi'/>
+ <glyph codepoint='03D5' name='phi1'/>
+ <glyph codepoint='03C0' name='pi'/>
+ <glyph codepoint='002B' name='plus'/>
+ <glyph codepoint='00B1' name='plusminus'/>
+ <glyph codepoint='211E' name='prescription'/>
+ <glyph codepoint='220F' name='product'/>
+ <glyph codepoint='2282' name='propersubset'/>
+ <glyph codepoint='2283' name='propersuperset'/>
+ <glyph codepoint='221D' name='proportional'/>
+ <glyph codepoint='03C8' name='psi'/>
+ <glyph codepoint='0071' name='q'/>
+ <glyph codepoint='003F' name='question'/>
+ <glyph codepoint='00BF' name='questiondown'/>
+ <glyph codepoint='F7BF' name='questiondownsmall'/>
+ <glyph codepoint='F73F' name='questionsmall'/>
+ <glyph codepoint='0022' name='quotedbl'/>
+ <glyph codepoint='201E' name='quotedblbase'/>
+ <glyph codepoint='201C' name='quotedblleft'/>
+ <glyph codepoint='201D' name='quotedblright'/>
+ <glyph codepoint='2018' name='quoteleft'/>
+ <glyph codepoint='201B' name='quotereversed'/>
+ <glyph codepoint='2019' name='quoteright'/>
+ <glyph codepoint='201A' name='quotesinglbase'/>
+ <glyph codepoint='0027' name='quotesingle'/>
+ <glyph codepoint='0072' name='r'/>
+ <glyph codepoint='0155' name='racute'/>
+ <glyph codepoint='221A' name='radical'/>
+ <glyph codepoint='F8E5' name='radicalex'/>
+ <glyph codepoint='0159' name='rcaron'/>
+ <glyph codepoint='0157' name='rcommaaccent'/>
+ <glyph codepoint='2286' name='reflexsubset'/>
+ <glyph codepoint='2287' name='reflexsuperset'/>
+ <glyph codepoint='00AE' name='registered'/>
+ <glyph codepoint='F8E8' name='registersans'/>
+ <glyph codepoint='F6DA' name='registerserif'/>
+ <glyph codepoint='2310' name='revlogicalnot'/>
+ <glyph codepoint='03C1' name='rho'/>
+ <glyph codepoint='02DA' name='ring'/>
+ <glyph codepoint='F6F1' name='rsuperior'/>
+ <glyph codepoint='2590' name='rtblock'/>
+ <glyph codepoint='F6DD' name='rupiah'/>
+ <glyph codepoint='0073' name='s'/>
+ <glyph codepoint='015B' name='sacute'/>
+ <glyph codepoint='0161' name='scaron'/>
+ <glyph codepoint='015F' name='scedilla'/>
+ <glyph codepoint='F6C2' name='scedilla'/>
+ <glyph codepoint='015D' name='scircumflex'/>
+ <glyph codepoint='0219' name='scommaaccent'/>
+ <glyph codepoint='2033' name='second'/>
+ <glyph codepoint='00A7' name='section'/>
+ <glyph codepoint='003B' name='semicolon'/>
+ <glyph codepoint='0037' name='seven'/>
+ <glyph codepoint='215E' name='seveneighths'/>
+ <glyph codepoint='2087' name='seveninferior'/>
+ <glyph codepoint='F737' name='sevenoldstyle'/>
+ <glyph codepoint='2077' name='sevensuperior'/>
+ <glyph codepoint='2592' name='shade'/>
+ <glyph codepoint='03C3' name='sigma'/>
+ <glyph codepoint='03C2' name='sigma1'/>
+ <glyph codepoint='223C' name='similar'/>
+ <glyph codepoint='0036' name='six'/>
+ <glyph codepoint='2086' name='sixinferior'/>
+ <glyph codepoint='F736' name='sixoldstyle'/>
+ <glyph codepoint='2076' name='sixsuperior'/>
+ <glyph codepoint='002F' name='slash'/>
+ <glyph codepoint='263A' name='smileface'/>
+ <glyph codepoint='0020' name='space'/>
+ <glyph codepoint='00A0' name='space'/>
+ <glyph codepoint='2660' name='spade'/>
+ <glyph codepoint='F6F2' name='ssuperior'/>
+ <glyph codepoint='00A3' name='sterling'/>
+ <glyph codepoint='220B' name='suchthat'/>
+ <glyph codepoint='2211' name='summation'/>
+ <glyph codepoint='263C' name='sun'/>
+ <glyph codepoint='0074' name='t'/>
+ <glyph codepoint='03C4' name='tau'/>
+ <glyph codepoint='0167' name='tbar'/>
+ <glyph codepoint='0165' name='tcaron'/>
+ <glyph codepoint='0163' name='tcommaaccent'/>
+ <glyph codepoint='021B' name='tcommaaccent'/>
+ <glyph codepoint='2234' name='therefore'/>
+ <glyph codepoint='03B8' name='theta'/>
+ <glyph codepoint='03D1' name='theta1'/>
+ <glyph codepoint='00FE' name='thorn'/>
+ <glyph codepoint='0033' name='three'/>
+ <glyph codepoint='215C' name='threeeighths'/>
+ <glyph codepoint='2083' name='threeinferior'/>
+ <glyph codepoint='F733' name='threeoldstyle'/>
+ <glyph codepoint='00BE' name='threequarters'/>
+ <glyph codepoint='F6DE' name='threequartersemdash'/>
+ <glyph codepoint='00B3' name='threesuperior'/>
+ <glyph codepoint='02DC' name='tilde'/>
+ <glyph codepoint='0303' name='tildecomb'/>
+ <glyph codepoint='0384' name='tonos'/>
+ <glyph codepoint='2122' name='trademark'/>
+ <glyph codepoint='F8EA' name='trademarksans'/>
+ <glyph codepoint='F6DB' name='trademarkserif'/>
+ <glyph codepoint='25BC' name='triagdn'/>
+ <glyph codepoint='25C4' name='triaglf'/>
+ <glyph codepoint='25BA' name='triagrt'/>
+ <glyph codepoint='25B2' name='triagup'/>
+ <glyph codepoint='F6F3' name='tsuperior'/>
+ <glyph codepoint='0032' name='two'/>
+ <glyph codepoint='2025' name='twodotenleader'/>
+ <glyph codepoint='2082' name='twoinferior'/>
+ <glyph codepoint='F732' name='twooldstyle'/>
+ <glyph codepoint='00B2' name='twosuperior'/>
+ <glyph codepoint='2154' name='twothirds'/>
+ <glyph codepoint='0075' name='u'/>
+ <glyph codepoint='00FA' name='uacute'/>
+ <glyph codepoint='016D' name='ubreve'/>
+ <glyph codepoint='00FB' name='ucircumflex'/>
+ <glyph codepoint='00FC' name='udieresis'/>
+ <glyph codepoint='00F9' name='ugrave'/>
+ <glyph codepoint='01B0' name='uhorn'/>
+ <glyph codepoint='0171' name='uhungarumlaut'/>
+ <glyph codepoint='016B' name='umacron'/>
+ <glyph codepoint='005F' name='underscore'/>
+ <glyph codepoint='2017' name='underscoredbl'/>
+ <glyph codepoint='222A' name='union'/>
+ <glyph codepoint='2200' name='universal'/>
+ <glyph codepoint='0173' name='uogonek'/>
+ <glyph codepoint='2580' name='upblock'/>
+ <glyph codepoint='03C5' name='upsilon'/>
+ <glyph codepoint='03CB' name='upsilondieresis'/>
+ <glyph codepoint='03B0' name='upsilondieresistonos'/>
+ <glyph codepoint='03CD' name='upsilontonos'/>
+ <glyph codepoint='016F' name='uring'/>
+ <glyph codepoint='0169' name='utilde'/>
+ <glyph codepoint='0076' name='v'/>
+ <glyph codepoint='0077' name='w'/>
+ <glyph codepoint='1E83' name='wacute'/>
+ <glyph codepoint='0175' name='wcircumflex'/>
+ <glyph codepoint='1E85' name='wdieresis'/>
+ <glyph codepoint='2118' name='weierstrass'/>
+ <glyph codepoint='1E81' name='wgrave'/>
+ <glyph codepoint='0078' name='x'/>
+ <glyph codepoint='03BE' name='xi'/>
+ <glyph codepoint='0079' name='y'/>
+ <glyph codepoint='00FD' name='yacute'/>
+ <glyph codepoint='0177' name='ycircumflex'/>
+ <glyph codepoint='00FF' name='ydieresis'/>
+ <glyph codepoint='00A5' name='yen'/>
+ <glyph codepoint='1EF3' name='ygrave'/>
+ <glyph codepoint='007A' name='z'/>
+ <glyph codepoint='017A' name='zacute'/>
+ <glyph codepoint='017E' name='zcaron'/>
+ <glyph codepoint='017C' name='zdotaccent'/>
+ <glyph codepoint='0030' name='zero'/>
+ <glyph codepoint='2080' name='zeroinferior'/>
+ <glyph codepoint='F730' name='zerooldstyle'/>
+ <glyph codepoint='2070' name='zerosuperior'/>
+ <glyph codepoint='03B6' name='zeta'/>
+ </glyphlist>
+
+ <!-- This encodes the Zapf Dingbats Glyph List, version 1.0 (17 July 1997)
+ located at http://partners.adobe.com/asn/developer/type/zapfdingbats.txt
+ -->
+ <glyphlist id='ZGL'>
+ <glyph codepoint='0020' name='space'/>
+ <glyph codepoint='00A0' name='space'/>
+ <glyph codepoint='2701' name='a1'/>
+ <glyph codepoint='2702' name='a2'/>
+ <glyph codepoint='2703' name='a202'/>
+ <glyph codepoint='2704' name='a3'/>
+ <glyph codepoint='260E' name='a4'/>
+ <glyph codepoint='2706' name='a5'/>
+ <glyph codepoint='2707' name='a119'/>
+ <glyph codepoint='2708' name='a118'/>
+ <glyph codepoint='2709' name='a117'/>
+ <glyph codepoint='261B' name='a11'/>
+ <glyph codepoint='261E' name='a12'/>
+ <glyph codepoint='270C' name='a13'/>
+ <glyph codepoint='270D' name='a14'/>
+ <glyph codepoint='270E' name='a15'/>
+ <glyph codepoint='270F' name='a16'/>
+ <glyph codepoint='2710' name='a105'/>
+ <glyph codepoint='2711' name='a17'/>
+ <glyph codepoint='2712' name='a18'/>
+ <glyph codepoint='2713' name='a19'/>
+ <glyph codepoint='2714' name='a20'/>
+ <glyph codepoint='2715' name='a21'/>
+ <glyph codepoint='2716' name='a22'/>
+ <glyph codepoint='2717' name='a23'/>
+ <glyph codepoint='2718' name='a24'/>
+ <glyph codepoint='2719' name='a25'/>
+ <glyph codepoint='271A' name='a26'/>
+ <glyph codepoint='271B' name='a27'/>
+ <glyph codepoint='271C' name='a28'/>
+ <glyph codepoint='271D' name='a6'/>
+ <glyph codepoint='271E' name='a7'/>
+ <glyph codepoint='271F' name='a8'/>
+ <glyph codepoint='2720' name='a9'/>
+ <glyph codepoint='2721' name='a10'/>
+ <glyph codepoint='2722' name='a29'/>
+ <glyph codepoint='2723' name='a30'/>
+ <glyph codepoint='2724' name='a31'/>
+ <glyph codepoint='2725' name='a32'/>
+ <glyph codepoint='2726' name='a33'/>
+ <glyph codepoint='2727' name='a34'/>
+ <glyph codepoint='2605' name='a35'/>
+ <glyph codepoint='2729' name='a36'/>
+ <glyph codepoint='272A' name='a37'/>
+ <glyph codepoint='272B' name='a38'/>
+ <glyph codepoint='272C' name='a39'/>
+ <glyph codepoint='272D' name='a40'/>
+ <glyph codepoint='272E' name='a41'/>
+ <glyph codepoint='272F' name='a42'/>
+ <glyph codepoint='2730' name='a43'/>
+ <glyph codepoint='2731' name='a44'/>
+ <glyph codepoint='2732' name='a45'/>
+ <glyph codepoint='2733' name='a46'/>
+ <glyph codepoint='2734' name='a47'/>
+ <glyph codepoint='2735' name='a48'/>
+ <glyph codepoint='2736' name='a49'/>
+ <glyph codepoint='2737' name='a50'/>
+ <glyph codepoint='2738' name='a51'/>
+ <glyph codepoint='2739' name='a52'/>
+ <glyph codepoint='273A' name='a53'/>
+ <glyph codepoint='273B' name='a54'/>
+ <glyph codepoint='273C' name='a55'/>
+ <glyph codepoint='273D' name='a56'/>
+ <glyph codepoint='273E' name='a57'/>
+ <glyph codepoint='273F' name='a58'/>
+ <glyph codepoint='2740' name='a59'/>
+ <glyph codepoint='2741' name='a60'/>
+ <glyph codepoint='2742' name='a61'/>
+ <glyph codepoint='2743' name='a62'/>
+ <glyph codepoint='2744' name='a63'/>
+ <glyph codepoint='2745' name='a64'/>
+ <glyph codepoint='2746' name='a65'/>
+ <glyph codepoint='2747' name='a66'/>
+ <glyph codepoint='2748' name='a67'/>
+ <glyph codepoint='2749' name='a68'/>
+ <glyph codepoint='274A' name='a69'/>
+ <glyph codepoint='274B' name='a70'/>
+ <glyph codepoint='25CF' name='a71'/>
+ <glyph codepoint='274D' name='a72'/>
+ <glyph codepoint='25A0' name='a73'/>
+ <glyph codepoint='274F' name='a74'/>
+ <glyph codepoint='2750' name='a203'/>
+ <glyph codepoint='2751' name='a75'/>
+ <glyph codepoint='2752' name='a204'/>
+ <glyph codepoint='25B2' name='a76'/>
+ <glyph codepoint='25BC' name='a77'/>
+ <glyph codepoint='25C6' name='a78'/>
+ <glyph codepoint='2756' name='a79'/>
+ <glyph codepoint='25D7' name='a81'/>
+ <glyph codepoint='2758' name='a82'/>
+ <glyph codepoint='2759' name='a83'/>
+ <glyph codepoint='275A' name='a84'/>
+ <glyph codepoint='275B' name='a97'/>
+ <glyph codepoint='275C' name='a98'/>
+ <glyph codepoint='275D' name='a99'/>
+ <glyph codepoint='275E' name='a100'/>
+ <glyph codepoint='F8D7' name='a89'/>
+ <glyph codepoint='F8D8' name='a90'/>
+ <glyph codepoint='F8D9' name='a93'/>
+ <glyph codepoint='F8DA' name='a94'/>
+ <glyph codepoint='F8DB' name='a91'/>
+ <glyph codepoint='F8DC' name='a92'/>
+ <glyph codepoint='F8DD' name='a205'/>
+ <glyph codepoint='F8DE' name='a85'/>
+ <glyph codepoint='F8DF' name='a206'/>
+ <glyph codepoint='F8E0' name='a86'/>
+ <glyph codepoint='F8E1' name='a87'/>
+ <glyph codepoint='F8E2' name='a88'/>
+ <glyph codepoint='F8E3' name='a95'/>
+ <glyph codepoint='F8E4' name='a96'/>
+ <glyph codepoint='2761' name='a101'/>
+ <glyph codepoint='2762' name='a102'/>
+ <glyph codepoint='2763' name='a103'/>
+ <glyph codepoint='2764' name='a104'/>
+ <glyph codepoint='2765' name='a106'/>
+ <glyph codepoint='2766' name='a107'/>
+ <glyph codepoint='2767' name='a108'/>
+ <glyph codepoint='2663' name='a112'/>
+ <glyph codepoint='2666' name='a111'/>
+ <glyph codepoint='2665' name='a110'/>
+ <glyph codepoint='2660' name='a109'/>
+ <glyph codepoint='2460' name='a120'/>
+ <glyph codepoint='2461' name='a121'/>
+ <glyph codepoint='2462' name='a122'/>
+ <glyph codepoint='2463' name='a123'/>
+ <glyph codepoint='2464' name='a124'/>
+ <glyph codepoint='2465' name='a125'/>
+ <glyph codepoint='2466' name='a126'/>
+ <glyph codepoint='2467' name='a127'/>
+ <glyph codepoint='2468' name='a128'/>
+ <glyph codepoint='2469' name='a129'/>
+ <glyph codepoint='2776' name='a130'/>
+ <glyph codepoint='2777' name='a131'/>
+ <glyph codepoint='2778' name='a132'/>
+ <glyph codepoint='2779' name='a133'/>
+ <glyph codepoint='277A' name='a134'/>
+ <glyph codepoint='277B' name='a135'/>
+ <glyph codepoint='277C' name='a136'/>
+ <glyph codepoint='277D' name='a137'/>
+ <glyph codepoint='277E' name='a138'/>
+ <glyph codepoint='277F' name='a139'/>
+ <glyph codepoint='2780' name='a140'/>
+ <glyph codepoint='2781' name='a141'/>
+ <glyph codepoint='2782' name='a142'/>
+ <glyph codepoint='2783' name='a143'/>
+ <glyph codepoint='2784' name='a144'/>
+ <glyph codepoint='2785' name='a145'/>
+ <glyph codepoint='2786' name='a146'/>
+ <glyph codepoint='2787' name='a147'/>
+ <glyph codepoint='2788' name='a148'/>
+ <glyph codepoint='2789' name='a149'/>
+ <glyph codepoint='278A' name='a150'/>
+ <glyph codepoint='278B' name='a151'/>
+ <glyph codepoint='278C' name='a152'/>
+ <glyph codepoint='278D' name='a153'/>
+ <glyph codepoint='278E' name='a154'/>
+ <glyph codepoint='278F' name='a155'/>
+ <glyph codepoint='2790' name='a156'/>
+ <glyph codepoint='2791' name='a157'/>
+ <glyph codepoint='2792' name='a158'/>
+ <glyph codepoint='2793' name='a159'/>
+ <glyph codepoint='2794' name='a160'/>
+ <glyph codepoint='2192' name='a161'/>
+ <glyph codepoint='2194' name='a163'/>
+ <glyph codepoint='2195' name='a164'/>
+ <glyph codepoint='2798' name='a196'/>
+ <glyph codepoint='2799' name='a165'/>
+ <glyph codepoint='279A' name='a192'/>
+ <glyph codepoint='279B' name='a166'/>
+ <glyph codepoint='279C' name='a167'/>
+ <glyph codepoint='279D' name='a168'/>
+ <glyph codepoint='279E' name='a169'/>
+ <glyph codepoint='279F' name='a170'/>
+ <glyph codepoint='27A0' name='a171'/>
+ <glyph codepoint='27A1' name='a172'/>
+ <glyph codepoint='27A2' name='a173'/>
+ <glyph codepoint='27A3' name='a162'/>
+ <glyph codepoint='27A4' name='a174'/>
+ <glyph codepoint='27A5' name='a175'/>
+ <glyph codepoint='27A6' name='a176'/>
+ <glyph codepoint='27A7' name='a177'/>
+ <glyph codepoint='27A8' name='a178'/>
+ <glyph codepoint='27A9' name='a179'/>
+ <glyph codepoint='27AA' name='a193'/>
+ <glyph codepoint='27AB' name='a180'/>
+ <glyph codepoint='27AC' name='a199'/>
+ <glyph codepoint='27AD' name='a181'/>
+ <glyph codepoint='27AE' name='a200'/>
+ <glyph codepoint='27AF' name='a182'/>
+ <glyph codepoint='27B1' name='a201'/>
+ <glyph codepoint='27B2' name='a183'/>
+ <glyph codepoint='27B3' name='a184'/>
+ <glyph codepoint='27B4' name='a197'/>
+ <glyph codepoint='27B5' name='a185'/>
+ <glyph codepoint='27B6' name='a194'/>
+ <glyph codepoint='27B7' name='a198'/>
+ <glyph codepoint='27B8' name='a186'/>
+ <glyph codepoint='27B9' name='a195'/>
+ <glyph codepoint='27BA' name='a187'/>
+ <glyph codepoint='27BB' name='a188'/>
+ <glyph codepoint='27BC' name='a189'/>
+ <glyph codepoint='27BD' name='a190'/>
+ <glyph codepoint='27BE' name='a191'/>
+ </glyphlist>
+</glyphlist-set>
diff --git a/fop-core/src/main/codegen/fonts/t1font-file.xsl b/fop-core/src/main/codegen/fonts/t1font-file.xsl
new file mode 100644
index 000000000..f5c285097
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/t1font-file.xsl
@@ -0,0 +1,225 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!--
+This files writes the class files for the Adobe Type 1 fonts.
+It uses the information in the font description files (Courier.xml, Helvetica.xml) to this
+In these font description files each character is referenced by its adobe name:
+ <char name="A" width="667"/>
+To resolve this name and to find the code for this character it looks up the adobe name in the
+file charlist.xml and extracts the WinAnsi code.
+-->
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="text" />
+
+<xsl:template match="font-metrics">
+<xsl:variable name="class-name" select="class-name"/>
+<!--<redirect:write select="concat('org/apache/fop/render/pdf/fonts/', $class-name, '.java')">-->
+package org.apache.fop.render.pdf.fonts;
+
+import org.apache.fop.render.pdf.Font;
+import org.apache.fop.layout.FontDescriptor;
+import org.apache.fop.fonts.Glyphs;
+import org.apache.fop.pdf.PDFStream;
+import org.apache.fop.pdf.PDFT1Stream;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.io.BufferedInputStream;
+import java.util.HashMap;
+
+public class <xsl:value-of select="class-name"/> extends Font implements FontDescriptor {
+ private final static String fontName = "<xsl:value-of select="font-name"/>";
+ private final static String encoding = "<xsl:value-of select="encoding"/>";
+ private final static int capHeight = <xsl:value-of select="cap-height"/>;
+ private final static int xHeight = <xsl:value-of select="x-height"/>;
+ private final static int ascender = <xsl:value-of select="ascender"/>;
+ private final static int descender = <xsl:value-of select="descender"/>;
+ private final static int[] fontBBox = {
+ <xsl:value-of select="bbox/left"/>,
+ <xsl:value-of select="bbox/bottom"/>,
+ <xsl:value-of select="bbox/right"/>,
+ <xsl:value-of select="bbox/top"/>
+ };
+ private final static String embedFileName = <xsl:value-of select="embedFile"/>;
+ private final static String embedResourceName = <xsl:value-of select="embedResource"/>;
+ private static PDFT1Stream embeddedFont=null;
+ private final static int flags = <xsl:value-of select="flags"/>;
+ private final static int stemV = <xsl:value-of select="stemv"/>;
+ private final static int italicAngle = <xsl:value-of select="italicangle"/>;
+ private final static int firstChar = <xsl:value-of select="first-char"/>;
+ private final static int lastChar = <xsl:value-of select="last-char"/>;
+ private final static int[] width;
+ private final static HashMap kerning=new HashMap();
+
+ static {
+ width = new int[256];
+<xsl:for-each select="widths/char"><xsl:variable name="char-name" select="@name"/><xsl:variable name="char-num" select="document('charlist.xml')/font-mappings/map[@adobe-name=$char-name]/@win-ansi"/><xsl:if test="$char-num!='-1'"> width[<xsl:value-of select="$char-num"/>] = <xsl:value-of select="@width"/>;
+</xsl:if></xsl:for-each>
+
+ HashMap tmptable;
+<xsl:for-each select="kerning">
+<xsl:variable name="kpx1-name" select="@kpx1"/>
+ tmptable=new HashMap();<xsl:for-each select="pair"><xsl:variable name="kpx2-name" select="@kpx2"/><xsl:variable name="kern-name" select="@kern"/>
+ tmptable.put(Glyphs.glyphToString("<xsl:value-of select="$kpx2-name"/>"), new Integer(<xsl:value-of select="$kern-name"/>));</xsl:for-each>
+ kerning.put(Glyphs.glyphToString("<xsl:value-of select="$kpx1-name"/>"), tmptable);
+</xsl:for-each>
+ }
+
+ public final boolean hasKerningInfo() {return kerning.isEmpty();}
+ public final java.util.HashMap getKerningInfo() {return kerning;}
+ public byte getSubType() {return org.apache.fop.pdf.PDFFont.TYPE1;}
+
+ public boolean isEmbeddable() {
+ return (embedFileName==null &amp;&amp; embedResourceName==null) ? false : true;
+ }
+
+ public PDFStream getFontFile(int i) {
+ InputStream instream=null;
+
+ // Get file first
+ if (embedFileName!=null)
+ try {
+ instream=new FileInputStream(embedFileName);
+ } catch (Exception e) {
+ System.out.println("Failed to embed fontfile: "+embedFileName);
+ }
+
+ // Get resource
+ if (instream==null &amp;&amp; embedResourceName!=null)
+ try {
+ instream=new BufferedInputStream(this.getClass().getResourceAsStream(embedResourceName));
+ } catch (Exception e) {
+ System.out.println("Failed to embed fontresource: "+embedResourceName);
+ }
+
+ if (instream==null)
+ return (PDFStream)null;
+
+ // Read fontdata
+ byte[] file = new byte[128000];
+ int fsize = 0;
+
+ try {
+ int l = instream.read(file, 0, 128000);
+ fsize += l;
+
+ if (l==128000) {
+ // More to read - needs to extend
+ byte[] tmpbuf;
+
+ while (l &gt; 0) {
+ tmpbuf = new byte[file.length + 64000];
+ System.arraycopy(file, 0, tmpbuf, 0, file.length);
+ l=instream.read(tmpbuf, file.length, 64000);
+ fsize += l;
+ file = tmpbuf;
+
+ if (l &lt; 64000) // whole file read. No need to loop again
+ l=0;
+ }
+ }
+
+ embeddedFont=new PDFT1Stream(i, fsize);
+ embeddedFont.addFilter("flate");
+ embeddedFont.addFilter("ascii-85");
+ embeddedFont.setData(file, fsize);
+ instream.close();
+ } catch (Exception e) {}
+
+ return (PDFStream) embeddedFont;
+ }
+
+ public String encoding() {
+ return encoding;
+ }
+
+ public String fontName() {
+ return fontName;
+ }
+
+ public int getAscender() {
+ return ascender;
+ }
+
+ public int getCapHeight() {
+ return capHeight;
+ }
+
+ public int getDescender() {
+ return descender;
+ }
+
+ public int getAscender(int size) {
+ return size * ascender;
+ }
+
+ public int getCapHeight(int size) {
+ return size * capHeight;
+ }
+
+ public int getDescender(int size) {
+ return size * descender;
+ }
+
+ public int getXHeight(int size) {
+ return size * xHeight;
+ }
+
+ public int getFlags() {
+ return flags;
+ }
+
+ public int[] getFontBBox() {
+ return fontBBox;
+ }
+
+ public int getItalicAngle() {
+ return italicAngle;
+ }
+
+ public int getStemV() {
+ return stemV;
+ }
+
+ public int getFirstChar() {
+ return firstChar;
+ }
+
+ public int getLastChar() {
+ return lastChar;
+ }
+
+ public int width(int i, int size) {
+ return size * width[i];
+ }
+
+ public int[] getWidths(int size) {
+ int[] arr = new int[getLastChar()-getFirstChar()+1];
+ System.arraycopy(width, getFirstChar(), arr, 0, getLastChar()-getFirstChar()+1);
+ for( int i = 0; i &lt; arr.length; i++) arr[i] *= size;
+ return arr;
+ }
+}
+<!--</redirect:write>-->
+</xsl:template>
+</xsl:stylesheet>
+
diff --git a/fop-core/src/main/codegen/fonts/ttffontfile.xsl b/fop-core/src/main/codegen/fonts/ttffontfile.xsl
new file mode 100644
index 000000000..7231010bf
--- /dev/null
+++ b/fop-core/src/main/codegen/fonts/ttffontfile.xsl
@@ -0,0 +1,217 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- $Id$ -->
+<!--
+This files writes the class files for the Adobe Type 1 fonts.
+It uses the information in the font description files (Courier.xml, Helvetica.xml) to this
+In these font description files each character is referenced by its adobe name:
+ <char name="A" width="667"/>
+To resolve this name and to find the code for this character it looks up the adobe name in the
+file charlist.xml and extracts the WinAnsi code.
+-->
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="text" />
+
+<xsl:template match="font-metrics">
+<xsl:variable name="class-name" select="class-name"/>
+<!--<redirect:write select="concat('org/apache/fop/render/pdf/fonts/', $class-name, '.java')">-->
+package org.apache.fop.render.pdf.fonts;
+
+import org.apache.fop.render.pdf.Font;
+import org.apache.fop.layout.FontDescriptor;
+import org.apache.fop.fonts.Glyphs;
+import org.apache.fop.pdf.PDFStream;
+import org.apache.fop.pdf.PDFTTFStream;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.io.BufferedInputStream;
+import java.util.HashMap;
+
+public class <xsl:value-of select="class-name"/> extends Font implements FontDescriptor {
+ private final static String fontName = "<xsl:value-of select="font-name"/>";
+ private final static String encoding = "<xsl:value-of select="encoding"/>";
+ private final static int capHeight = <xsl:value-of select="cap-height"/>;
+ private final static int xHeight = <xsl:value-of select="x-height"/>;
+ private final static int ascender = <xsl:value-of select="ascender"/>;
+ private final static int descender = <xsl:value-of select="descender"/>;
+ private final static int[] fontBBox = {
+ <xsl:value-of select="bbox/left"/>,
+ <xsl:value-of select="bbox/bottom"/>,
+ <xsl:value-of select="bbox/right"/>,
+ <xsl:value-of select="bbox/top"/>
+ };
+
+ private final static String embedFileName = <xsl:value-of select="embedFile"/>;
+ private final static String embedResourceName = <xsl:value-of select="embedResource"/>;
+ private static PDFTTFStream embeddedFont=null;
+ private final static int flags = <xsl:value-of select="flags"/>;
+ private final static int stemV = <xsl:value-of select="stemv"/>;
+ private final static int italicAngle = <xsl:value-of select="italicangle"/>;
+ private final static int firstChar = <xsl:value-of select="first-char"/>;
+ private final static int lastChar = <xsl:value-of select="last-char"/>;
+ private final static int[] width;
+ private final static HashMap kerning=new HashMap();
+ static {
+ width = new int[256];
+<!--<xsl:for-each select="widths/char"><xsl:variable name="char-name" select="@name"/><xsl:variable name="char-num" select="document('charlist.xml')/font-mappings/map[@adobe-name=$char-name]/@win-ansi"/><xsl:if test="$char-num!='-1'"> width[<xsl:value-of select="$char-num"/>] = <xsl:value-of select="@width"/>;</xsl:if>-->
+<xsl:for-each select="widths/char"><xsl:variable name="char-name" select="@name"/> width[<xsl:value-of select="$char-name"/>] = <xsl:value-of select="@width"/>;
+</xsl:for-each>
+
+ HashMap tmptable;
+<xsl:for-each select="kerning">
+<xsl:variable name="kpx1-name" select="@kpx1"/>
+ tmptable=new HashMap();<xsl:for-each select="pair"><xsl:variable name="kpx2-name" select="@kpx2"/><xsl:variable name="kern-name" select="@kern"/>
+ tmptable.put(Glyphs.glyphToString("<xsl:value-of select="$kpx2-name"/>"), new Integer(<xsl:value-of select="$kern-name"/>));</xsl:for-each>
+ kerning.put(Glyphs.glyphToString("<xsl:value-of select="$kpx1-name"/>"), tmptable);
+</xsl:for-each>
+ }
+
+ public final boolean hasKerningInfo() {return kerning.isEmpty();}
+ public final java.util.HashMap getKerningInfo() {return kerning;}
+
+ public byte getSubType() {return org.apache.fop.pdf.PDFFont.TRUETYPE;}
+ public boolean isEmbeddable() {
+ return (embedFileName==null &amp;&amp; embedResourceName==null) ? false : true;
+ }
+ public PDFStream getFontFile(int i) {
+ InputStream instream=null;
+
+ // Get file first
+ if (embedFileName!=null)
+ try {
+ instream=new FileInputStream(embedFileName);
+ } catch (Exception e) {
+ System.out.println("Failed to embed fontfile: "+embedFileName);
+ }
+
+ // Get resource
+ if (instream==null &amp;&amp; embedResourceName!=null)
+ try {
+ instream=new BufferedInputStream(this.getClass().getResourceAsStream(embedResourceName));
+ } catch (Exception e) {
+ System.out.println("Failed to embed fontresource: "+embedResourceName);
+ }
+
+ if (instream==null)
+ return (PDFStream)null;
+
+ // Read fontdata
+ byte[] file = new byte[128000];
+ int fsize = 0;
+
+ try {
+ int l = instream.read(file, 0, 128000);
+ fsize += l;
+
+ if (l==128000) {
+ // More to read - needs to extend
+ byte[] tmpbuf;
+
+ while (l &gt; 0) {
+ tmpbuf = new byte[file.length + 64000];
+ System.arraycopy(file, 0, tmpbuf, 0, file.length);
+ l=instream.read(tmpbuf, file.length, 64000);
+ fsize += l;
+ file = tmpbuf;
+
+ if (l &lt; 64000) // whole file read. No need to loop again
+ l=0;
+ }
+ }
+
+ embeddedFont=new PDFTTFStream(i, fsize);
+ embeddedFont.addFilter("flate");
+ embeddedFont.addFilter("ascii-85");
+ embeddedFont.setData(file, fsize);
+ instream.close();
+ } catch (Exception e) {}
+
+ return (PDFStream) embeddedFont;
+ }
+ public String encoding() {
+ return encoding;
+ }
+
+ public String fontName() {
+ return fontName;
+ }
+
+ public int getAscender() {return ascender;}
+ public int getDescender() {return descender;}
+ public int getCapHeight() {return capHeight;}
+
+ public int getAscender(int size) {
+ return size * ascender;
+ }
+
+ public int getCapHeight(int size) {
+ return size * capHeight;
+ }
+
+ public int getDescender(int size) {
+ return size * descender;
+ }
+
+ public int getXHeight(int size) {
+ return size * xHeight;
+ }
+
+ public int getFlags() {
+ return flags;
+ }
+
+ public int[] getFontBBox() {
+ return fontBBox;
+ }
+
+ public int getItalicAngle() {
+ return italicAngle;
+ }
+
+ public int getStemV() {
+ return stemV;
+ }
+
+ public int getFirstChar() {
+ return firstChar;
+ }
+
+ public int getLastChar() {
+ return lastChar;
+ }
+
+ public int width(int i, int size) {
+ return size * width[i];
+ }
+
+ public int[] getWidths(int size) {
+ int[] arr = new int[getLastChar()-getFirstChar()+1];
+ System.arraycopy(width, getFirstChar(), arr, 0, getLastChar()-getFirstChar()+1);
+ for( int i = 0; i &lt; arr.length; i++) arr[i] *= size;
+ return arr;
+ }
+}
+<!--</redirect:write>-->
+</xsl:template>
+</xsl:stylesheet>
+
+
diff --git a/fop-core/src/main/codegen/jdk13.filter b/fop-core/src/main/codegen/jdk13.filter
new file mode 100644
index 000000000..c635f7063
--- /dev/null
+++ b/fop-core/src/main/codegen/jdk13.filter
@@ -0,0 +1,4 @@
+jdk14codestart = /*
+jdk14codeend = */
+
+
diff --git a/fop-core/src/main/codegen/jdk14.filter b/fop-core/src/main/codegen/jdk14.filter
new file mode 100644
index 000000000..9f0ddb6f2
--- /dev/null
+++ b/fop-core/src/main/codegen/jdk14.filter
@@ -0,0 +1,2 @@
+jdk14codestart =
+jdk14codeend =
diff --git a/fop-core/src/main/codegen/unicode/data/LineBreakPairTable.txt b/fop-core/src/main/codegen/unicode/data/LineBreakPairTable.txt
new file mode 100644
index 000000000..8e2c0c6ce
--- /dev/null
+++ b/fop-core/src/main/codegen/unicode/data/LineBreakPairTable.txt
@@ -0,0 +1,29 @@
+ OP CP CL QU GL NS EX SY IS PR PO NU AL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT
+OP ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ @ ^ ^ ^ ^ ^ ^
+CP _ ^ ^ % % ^ ^ ^ ^ % % % % _ _ % % _ _ ^ # ^ _ _ _ _ _
+CL _ ^ ^ % % ^ ^ ^ ^ % % % % _ _ % % _ _ ^ # ^ _ _ _ _ _
+QU ^ ^ ^ % % % ^ ^ ^ % % % % % % % % % % ^ # ^ % % % % %
+GL % ^ ^ % % % ^ ^ ^ % % % % % % % % % % ^ # ^ % % % % %
+NS _ ^ ^ % % % ^ ^ ^ _ _ _ _ _ _ % % _ _ ^ # ^ _ _ _ _ _
+EX _ ^ ^ % % % ^ ^ ^ _ _ _ _ _ _ % % _ _ ^ # ^ _ _ _ _ _
+SY _ ^ ^ % % % ^ ^ ^ _ _ % _ _ _ % % _ _ ^ # ^ _ _ _ _ _
+IS _ ^ ^ % % % ^ ^ ^ _ _ % % _ _ % % _ _ ^ # ^ _ _ _ _ _
+PR % ^ ^ % % % ^ ^ ^ _ _ % % % _ % % _ _ ^ # ^ % % % % %
+PO % ^ ^ % % % ^ ^ ^ _ _ % % _ _ % % _ _ ^ # ^ _ _ _ _ _
+NU % ^ ^ % % % ^ ^ ^ % % % % _ % % % _ _ ^ # ^ _ _ _ _ _
+AL % ^ ^ % % % ^ ^ ^ _ _ % % _ % % % _ _ ^ # ^ _ _ _ _ _
+ID _ ^ ^ % % % ^ ^ ^ _ % _ _ _ % % % _ _ ^ # ^ _ _ _ _ _
+IN _ ^ ^ % % % ^ ^ ^ _ _ _ _ _ % % % _ _ ^ # ^ _ _ _ _ _
+HY _ ^ ^ % % % ^ ^ ^ _ _ % _ _ _ % % _ _ ^ # ^ _ _ _ _ _
+BA _ ^ ^ % % % ^ ^ ^ _ _ _ _ _ _ % % _ _ ^ # ^ _ _ _ _ _
+BB % ^ ^ % % % ^ ^ ^ % % % % % % % % % % ^ # ^ % % % % %
+B2 _ ^ ^ % % % ^ ^ ^ _ _ _ _ _ _ % % _ ^ ^ # ^ _ _ _ _ _
+ZW _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ^ _ _ _ _ _ _ _
+CM _ ^ ^ % % % ^ ^ ^ _ _ % % _ % % % _ _ ^ # ^ _ _ _ _ _
+WJ % ^ ^ % % % ^ ^ ^ % % % % % % % % % % ^ # ^ % % % % %
+H2 _ ^ ^ % % % ^ ^ ^ _ % _ _ _ % % % _ _ ^ # ^ _ _ _ % %
+H3 _ ^ ^ % % % ^ ^ ^ _ % _ _ _ % % % _ _ ^ # ^ _ _ _ _ %
+JL _ ^ ^ % % % ^ ^ ^ _ % _ _ _ % % % _ _ ^ # ^ % % % % _
+JV _ ^ ^ % % % ^ ^ ^ _ % _ _ _ % % % _ _ ^ # ^ _ _ _ % %
+JT _ ^ ^ % % % ^ ^ ^ _ % _ _ _ % % % _ _ ^ # ^ _ _ _ _ %
+
diff --git a/fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiClass.java b/fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiClass.java
new file mode 100644
index 000000000..c6845fb1d
--- /dev/null
+++ b/fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiClass.java
@@ -0,0 +1,570 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.complexscripts.bidi;
+
+import java.io.BufferedReader;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.apache.fop.util.License;
+
+// CSOFF: LineLength
+
+/**
+ * <p>Utility for generating a Java class representing bidirectional
+ * class properties from the Unicode property files.</p>
+ *
+ * <p>This code is derived in part from GenerateLineBreakUtils.java.</p>
+ *
+ * <p>This work was originally authored by Glenn Adams (gadams@apache.org).</p>
+ */
+public final class GenerateBidiClass {
+
+ private GenerateBidiClass() {
+ }
+
+ private static byte[] bcL1 = new byte[256]; // ascii and basic latin blocks ( 0x0000 - 0x00FF )
+ private static byte[] bcR1 = new byte[368]; // hebrew and arabic blocks ( 0x0590 - 0x06FF )
+ private static int[] bcS1; // interval start indices
+ private static int[] bcE1; // interval end indices
+ private static byte[] bcC1; // interval bid classes
+
+ /**
+ * Generate a class managing bidi class properties for Unicode characters.
+ *
+ * @param bidiFileName name (as URL) of file containing bidi type data
+ * @param outFileName name of the output file
+ * @throws Exception
+ */
+ private static void convertBidiClassProperties(String bidiFileName, String outFileName) throws Exception {
+
+ readBidiClassProperties(bidiFileName);
+
+ // generate class
+ PrintWriter out = new PrintWriter(new FileWriter(outFileName));
+ License.writeJavaLicenseId(out);
+ out.println();
+ out.println("package org.apache.fop.complexscripts.bidi;");
+ out.println();
+ out.println("import java.util.Arrays;");
+ out.println("import org.apache.fop.complexscripts.bidi.BidiConstants;");
+ out.println();
+ out.println("// CSOFF: WhitespaceAfterCheck");
+ out.println("// CSOFF: LineLengthCheck");
+ out.println();
+ out.println("/*");
+ out.println(" * !!! THIS IS A GENERATED FILE !!!");
+ out.println(" * If updates to the source are needed, then:");
+ out.println(" * - apply the necessary modifications to");
+ out.println(" * 'src/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiClass.java'");
+ out.println(" * - run 'ant codegen-unicode', which will generate a new BidiClass.java");
+ out.println(" * in 'src/java/org/apache/fop/complexscripts/bidi'");
+ out.println(" * - commit BOTH changed files");
+ out.println(" */");
+ out.println();
+ out.println("/** Bidirectional class utilities. */");
+ out.println("public final class BidiClass {");
+ out.println();
+ out.println("private BidiClass() {");
+ out.println("}");
+ out.println();
+ dumpData(out);
+ out.println("/**");
+ out.println(" * Lookup bidi class for character expressed as unicode scalar value.");
+ out.println(" * @param ch a unicode scalar value");
+ out.println(" * @return bidi class");
+ out.println(" */");
+ out.println("public static int getBidiClass ( int ch ) {");
+ out.println(" if ( ch <= 0x00FF ) {");
+ out.println(" return bcL1 [ ch - 0x0000 ];");
+ out.println(" } else if ( ( ch >= 0x0590 ) && ( ch <= 0x06FF ) ) {");
+ out.println(" return bcR1 [ ch - 0x0590 ];");
+ out.println(" } else {");
+ out.println(" return getBidiClass ( ch, bcS1, bcE1, bcC1 );");
+ out.println(" }");
+ out.println("}");
+ out.println();
+ out.println("private static int getBidiClass ( int ch, int[] sa, int[] ea, byte[] ca ) {");
+ out.println(" int k = Arrays.binarySearch ( sa, ch );");
+ out.println(" if ( k >= 0 ) {");
+ out.println(" return ca [ k ];");
+ out.println(" } else {");
+ out.println(" k = - ( k + 1 );");
+ out.println(" if ( k == 0 ) {");
+ out.println(" return BidiConstants.L;");
+ out.println(" } else if ( ch <= ea [ k - 1 ] ) {");
+ out.println(" return ca [ k - 1 ];");
+ out.println(" } else {");
+ out.println(" return BidiConstants.L;");
+ out.println(" }");
+ out.println(" }");
+ out.println("}");
+ out.println();
+ out.println("}");
+ out.flush();
+ out.close();
+ }
+
+ /**
+ * Read bidi class property data.
+ *
+ * @param bidiFileName name (as URL) of bidi type data
+ */
+ private static void readBidiClassProperties(String bidiFileName) throws Exception {
+ // read property names
+ BufferedReader b = new BufferedReader(new InputStreamReader(new URL(bidiFileName).openStream()));
+ String line;
+ int lineNumber = 0;
+ TreeSet intervals = new TreeSet();
+ while ((line = b.readLine()) != null) {
+ lineNumber++;
+ if (line.startsWith("#")) {
+ continue;
+ } else if (line.length() == 0) {
+ continue;
+ } else {
+ if (line.indexOf("#") != -1) {
+ line = (line.split("#")) [ 0 ];
+ }
+ String[] fa = line.split(";");
+ if (fa.length == 2) {
+ int[] interval = parseInterval(fa[0].trim());
+ byte bidiClass = (byte) parseBidiClass(fa[1].trim());
+ if (interval[1] == interval[0]) { // singleton
+ int c = interval[0];
+ if (c <= 0x00FF) {
+ if (bcL1 [ c - 0x0000 ] == 0) {
+ bcL1 [ c - 0x0000 ] = bidiClass;
+ } else {
+ throw new Exception("duplicate singleton entry: " + c);
+ }
+ } else if ((c >= 0x0590) && (c <= 0x06FF)) {
+ if (bcR1 [ c - 0x0590 ] == 0) {
+ bcR1 [ c - 0x0590 ] = bidiClass;
+ } else {
+ throw new Exception("duplicate singleton entry: " + c);
+ }
+ } else {
+ addInterval(intervals, c, c, bidiClass);
+ }
+ } else { // non-singleton
+ int s = interval[0];
+ int e = interval[1]; // inclusive
+ if (s <= 0x00FF) {
+ for (int i = s; i <= e; i++) {
+ if (i <= 0x00FF) {
+ if (bcL1 [ i - 0x0000 ] == 0) {
+ bcL1 [ i - 0x0000 ] = bidiClass;
+ } else {
+ throw new Exception("duplicate singleton entry: " + i);
+ }
+ } else {
+ addInterval(intervals, i, e, bidiClass);
+ break;
+ }
+ }
+ } else if ((s >= 0x0590) && (s <= 0x06FF)) {
+ for (int i = s; i <= e; i++) {
+ if (i <= 0x06FF) {
+ if (bcR1 [ i - 0x0590 ] == 0) {
+ bcR1 [ i - 0x0590 ] = bidiClass;
+ } else {
+ throw new Exception("duplicate singleton entry: " + i);
+ }
+ } else {
+ addInterval(intervals, i, e, bidiClass);
+ break;
+ }
+ }
+ } else {
+ addInterval(intervals, s, e, bidiClass);
+ }
+ }
+ } else {
+ throw new Exception("bad syntax, line(" + lineNumber + "): " + line);
+ }
+ }
+ }
+ // compile interval search data
+ int ivIndex = 0;
+ int niv = intervals.size();
+ bcS1 = new int [ niv ];
+ bcE1 = new int [ niv ];
+ bcC1 = new byte [ niv ];
+ for (Iterator it = intervals.iterator(); it.hasNext(); ivIndex++) {
+ Interval iv = (Interval) it.next();
+ bcS1[ivIndex] = iv.start;
+ bcE1[ivIndex] = iv.end;
+ bcC1[ivIndex] = (byte) iv.bidiClass;
+ }
+ // test data
+ test();
+ }
+
+ private static int[] parseInterval(String interval) throws Exception {
+ int s;
+ int e;
+ String[] fa = interval.split("\\.\\.");
+ if (fa.length == 1) {
+ s = Integer.parseInt(fa[0], 16);
+ e = s;
+ } else if (fa.length == 2) {
+ s = Integer.parseInt(fa[0], 16);
+ e = Integer.parseInt(fa[1], 16);
+ } else {
+ throw new Exception("bad interval syntax: " + interval);
+ }
+ if (e < s) {
+ throw new Exception("bad interval, start must be less than or equal to end: " + interval);
+ }
+ return new int[] {s, e};
+ }
+
+ private static int parseBidiClass(String bidiClass) {
+ int bc = 0;
+ if ("L".equals(bidiClass)) {
+ bc = BidiConstants.L;
+ } else if ("LRE".equals(bidiClass)) {
+ bc = BidiConstants.LRE;
+ } else if ("LRO".equals(bidiClass)) {
+ bc = BidiConstants.LRO;
+ } else if ("R".equals(bidiClass)) {
+ bc = BidiConstants.R;
+ } else if ("AL".equals(bidiClass)) {
+ bc = BidiConstants.AL;
+ } else if ("RLE".equals(bidiClass)) {
+ bc = BidiConstants.RLE;
+ } else if ("RLO".equals(bidiClass)) {
+ bc = BidiConstants.RLO;
+ } else if ("PDF".equals(bidiClass)) {
+ bc = BidiConstants.PDF;
+ } else if ("EN".equals(bidiClass)) {
+ bc = BidiConstants.EN;
+ } else if ("ES".equals(bidiClass)) {
+ bc = BidiConstants.ES;
+ } else if ("ET".equals(bidiClass)) {
+ bc = BidiConstants.ET;
+ } else if ("AN".equals(bidiClass)) {
+ bc = BidiConstants.AN;
+ } else if ("CS".equals(bidiClass)) {
+ bc = BidiConstants.CS;
+ } else if ("NSM".equals(bidiClass)) {
+ bc = BidiConstants.NSM;
+ } else if ("BN".equals(bidiClass)) {
+ bc = BidiConstants.BN;
+ } else if ("B".equals(bidiClass)) {
+ bc = BidiConstants.B;
+ } else if ("S".equals(bidiClass)) {
+ bc = BidiConstants.S;
+ } else if ("WS".equals(bidiClass)) {
+ bc = BidiConstants.WS;
+ } else if ("ON".equals(bidiClass)) {
+ bc = BidiConstants.ON;
+ } else {
+ throw new IllegalArgumentException("unknown bidi class: " + bidiClass);
+ }
+ return bc;
+ }
+
+ private static void addInterval(SortedSet intervals, int start, int end, int bidiClass) {
+ intervals.add(new Interval(start, end, bidiClass));
+ }
+
+ private static void dumpData(PrintWriter out) {
+ boolean first;
+ StringBuffer sb = new StringBuffer();
+
+ // bcL1
+ first = true;
+ sb.setLength(0);
+ out.println("private static byte[] bcL1 = {");
+ for (int i = 0; i < bcL1.length; i++) {
+ if (!first) {
+ sb.append(",");
+ } else {
+ first = false;
+ }
+ sb.append(bcL1[i]);
+ if (sb.length() > 120) {
+ sb.append(',');
+ out.println(sb);
+ first = true;
+ sb.setLength(0);
+ }
+ }
+ if (sb.length() > 0) {
+ out.println(sb);
+ }
+ out.println("};");
+ out.println();
+
+ // bcR1
+ first = true;
+ sb.setLength(0);
+ out.println("private static byte[] bcR1 = {");
+ for (int i = 0; i < bcR1.length; i++) {
+ if (!first) {
+ sb.append(",");
+ } else {
+ first = false;
+ }
+ sb.append(bcR1[i]);
+ if (sb.length() > 120) {
+ sb.append(',');
+ out.println(sb);
+ first = true;
+ sb.setLength(0);
+ }
+ }
+ if (sb.length() > 0) {
+ out.println(sb);
+ }
+ out.println("};");
+ out.println();
+
+ // bcS1
+ first = true;
+ sb.setLength(0);
+ out.println("private static int[] bcS1 = {");
+ for (int i = 0; i < bcS1.length; i++) {
+ if (!first) {
+ sb.append(",");
+ } else {
+ first = false;
+ }
+ sb.append(bcS1[i]);
+ if (sb.length() > 120) {
+ sb.append(',');
+ out.println(sb);
+ first = true;
+ sb.setLength(0);
+ }
+ }
+ if (sb.length() > 0) {
+ out.println(sb);
+ }
+ out.println("};");
+ out.println();
+
+ // bcE1
+ first = true;
+ sb.setLength(0);
+ out.println("private static int[] bcE1 = {");
+ for (int i = 0; i < bcE1.length; i++) {
+ if (!first) {
+ sb.append(",");
+ } else {
+ first = false;
+ }
+ sb.append(bcE1[i]);
+ if (sb.length() > 120) {
+ sb.append(',');
+ out.println(sb);
+ first = true;
+ sb.setLength(0);
+ }
+ }
+ if (sb.length() > 0) {
+ out.println(sb);
+ }
+ out.println("};");
+ out.println();
+
+ // bcC1
+ first = true;
+ sb.setLength(0);
+ out.println("private static byte[] bcC1 = {");
+ for (int i = 0; i < bcC1.length; i++) {
+ if (!first) {
+ sb.append(",");
+ } else {
+ first = false;
+ }
+ sb.append(bcC1[i]);
+ if (sb.length() > 120) {
+ sb.append(',');
+ out.println(sb);
+ first = true;
+ sb.setLength(0);
+ }
+ }
+ if (sb.length() > 0) {
+ out.println(sb);
+ }
+ out.println("};");
+ out.println();
+ }
+
+ private static int getBidiClass(int ch) {
+ if (ch <= 0x00FF) {
+ return bcL1 [ ch - 0x0000 ];
+ } else if ((ch >= 0x0590) && (ch <= 0x06FF)) {
+ return bcR1 [ ch - 0x0590 ];
+ } else {
+ return getBidiClass(ch, bcS1, bcE1, bcC1);
+ }
+ }
+
+ private static int getBidiClass(int ch, int[] sa, int[] ea, byte[] ca) {
+ int k = Arrays.binarySearch(sa, ch);
+ if (k >= 0) {
+ return ca [ k ];
+ } else {
+ k = -(k + 1);
+ if (k == 0) {
+ return BidiConstants.L;
+ } else if (ch <= ea [ k - 1 ]) {
+ return ca [ k - 1 ];
+ } else {
+ return BidiConstants.L;
+ }
+ }
+ }
+
+ private static final int[] TEST_DATA =
+ {
+ 0x000000, BidiConstants.BN,
+ 0x000009, BidiConstants.S,
+ 0x00000A, BidiConstants.B,
+ 0x00000C, BidiConstants.WS,
+ 0x000020, BidiConstants.WS,
+ 0x000023, BidiConstants.ET,
+ 0x000028, BidiConstants.ON,
+ 0x00002B, BidiConstants.ES,
+ 0x00002C, BidiConstants.CS,
+ 0x000031, BidiConstants.EN,
+ 0x00003A, BidiConstants.CS,
+ 0x000041, BidiConstants.L,
+ 0x000300, BidiConstants.NSM,
+ 0x000374, BidiConstants.ON,
+ 0x0005BE, BidiConstants.R,
+ 0x000601, BidiConstants.AN,
+ 0x000608, BidiConstants.AL,
+ 0x000670, BidiConstants.NSM,
+ 0x000710, BidiConstants.AL,
+ 0x0007FA, BidiConstants.R,
+ 0x000970, BidiConstants.L,
+ 0x001392, BidiConstants.ON,
+ 0x002000, BidiConstants.WS,
+ 0x00200E, BidiConstants.L,
+ 0x00200F, BidiConstants.R,
+ 0x00202A, BidiConstants.LRE,
+ 0x00202B, BidiConstants.RLE,
+ 0x00202C, BidiConstants.PDF,
+ 0x00202D, BidiConstants.LRO,
+ 0x00202E, BidiConstants.RLO,
+ 0x0020E1, BidiConstants.NSM,
+ 0x002212, BidiConstants.ES,
+ 0x002070, BidiConstants.EN,
+ 0x003000, BidiConstants.WS,
+ 0x003009, BidiConstants.ON,
+ 0x00FBD4, BidiConstants.AL,
+ 0x00FE69, BidiConstants.ET,
+ 0x00FF0C, BidiConstants.CS,
+ 0x00FEFF, BidiConstants.BN,
+ 0x01034A, BidiConstants.L,
+ 0x010E60, BidiConstants.AN,
+ 0x01F100, BidiConstants.EN,
+ 0x0E0001, BidiConstants.BN,
+ 0x0E0100, BidiConstants.NSM,
+ 0x10FFFF, BidiConstants.BN
+ };
+
+ private static void test() throws Exception {
+ for (int i = 0, n = TEST_DATA.length / 2; i < n; i++) {
+ int ch = TEST_DATA [ i * 2 + 0 ];
+ int tc = TEST_DATA [ i * 2 + 1 ];
+ int bc = getBidiClass(ch);
+ if (bc != tc) {
+ throw new Exception("test mapping failed for character (0x" + Integer.toHexString(ch) + "): expected " + tc + ", got " + bc);
+ }
+ }
+ }
+
+ /**
+ * Main entry point for generator.
+ * @param args array of command line arguments
+ */
+ public static void main(String[] args) {
+ String bidiFileName = "http://www.unicode.org/Public/UNIDATA/extracted/DerivedBidiClass.txt";
+ String outFileName = "BidiClass.java";
+ boolean ok = true;
+ for (int i = 0; i < args.length; i = i + 2) {
+ if (i + 1 == args.length) {
+ ok = false;
+ } else {
+ String opt = args[i];
+ if ("-b".equals(opt)) {
+ bidiFileName = args [i + 1];
+ } else if ("-o".equals(opt)) {
+ outFileName = args [i + 1];
+ } else {
+ ok = false;
+ }
+ }
+ }
+ if (!ok) {
+ System.out.println("Usage: GenerateBidiClass [-b <bidiFile>] [-o <outputFile>]");
+ System.out.println(" defaults:");
+ System.out.println(" <bidiFile>: " + bidiFileName);
+ System.out.println(" <outputFile>: " + outFileName);
+ } else {
+ try {
+ convertBidiClassProperties(bidiFileName, outFileName);
+ System.out.println("Generated " + outFileName + " from");
+ System.out.println(" <bidiFile>: " + bidiFileName);
+ } catch (Exception e) {
+ System.out.println("An unexpected error occured");
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private static class Interval implements Comparable {
+ int start;
+ int end;
+ int bidiClass;
+ Interval(int start, int end, int bidiClass) {
+ this.start = start;
+ this.end = end;
+ this.bidiClass = bidiClass;
+ }
+ public int compareTo(Object o) {
+ Interval iv = (Interval) o;
+ if (start < iv.start) {
+ return -1;
+ } else if (start > iv.start) {
+ return 1;
+ } else if (end < iv.end) {
+ return -1;
+ } else if (end > iv.end) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ }
+}
diff --git a/fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiTestData.java b/fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiTestData.java
new file mode 100644
index 000000000..d13ab2534
--- /dev/null
+++ b/fop-core/src/main/codegen/unicode/java/org/apache/fop/complexscripts/bidi/GenerateBidiTestData.java
@@ -0,0 +1,1265 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.complexscripts.bidi;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.ObjectOutputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.fop.util.License;
+
+// CSOFF: LineLengthCheck
+
+/**
+ * <p>Utility for generating a Java class and associated data files representing
+ * bidirectional confomance test data from the Unicode Character Database and
+ * Unicode BidiTest data files.</p>
+ *
+ * <p>This code is derived in part from GenerateBidiClassUtils.java.</p>
+ *
+ * <p>This work was originally authored by Glenn Adams (gadams@apache.org).</p>
+ */
+public final class GenerateBidiTestData {
+
+ // local constants
+ private static final String PFX_TYPE = "@Type:";
+ private static final String PFX_LEVELS = "@Levels:";
+ private static final String PFX_REORDER = "@Reorder:";
+
+ // command line options
+ private static boolean ignoreDeprecatedTypeData;
+ private static boolean verbose;
+
+ // instrumentation
+ private static int lineNumber;
+ private static int numTypeRanges;
+ private static int numLevelSpecs;
+ private static int numTestSpecs;
+
+ // compiled data
+ private static int[][] td; // types data
+ private static int[][] ld; // levels data
+
+ // ensure non-instantiation
+ private GenerateBidiTestData() {
+ }
+
+ /**
+ * Generate a class managing bidi test data for Unicode characters.
+ *
+ * @param ucdFileName name (as URL) of file containing unicode character database data
+ * @param bidiFileName name (as URL) of file containing bidi test data
+ * @param outFileName name of the output class file
+ * @throws Exception
+ */
+ private static void convertBidiTestData(String ucdFileName, String bidiFileName, String outFileName) throws Exception {
+
+ // read type data from UCD if ignoring deprecated type data
+ if (ignoreDeprecatedTypeData) {
+ readBidiTypeData(ucdFileName);
+ }
+
+ // read bidi test data
+ readBidiTestData(bidiFileName);
+
+ // generate class
+ PrintWriter out = new PrintWriter(new FileWriter(outFileName));
+ License.writeJavaLicenseId(out);
+ out.println();
+ out.println("package org.apache.fop.complexscripts.bidi;");
+ out.println();
+ out.println("import java.io.IOException;");
+ out.println("import java.io.InputStream;");
+ out.println("import java.io.ObjectInputStream;");
+ out.println();
+ out.println("// CSOFF: WhitespaceAfterCheck");
+ out.println();
+ out.println("/*");
+ out.println(" * !!! THIS IS A GENERATED FILE !!!");
+ out.println(" * If updates to the source are needed, then:");
+ out.println(" * - apply the necessary modifications to");
+ out.println(" * 'src/codegen/unicode/java/org/apache/fop/text/bidi/GenerateBidiTestData.java'");
+ out.println(" * - run 'ant codegen-unicode', which will generate a new BidiTestData.java");
+ out.println(" * in 'test/java/org/apache/fop/complexscripts/bidi'");
+ out.println(" * - commit BOTH changed files");
+ out.println(" */");
+ out.println();
+ out.println("/** Bidirectional test data. */");
+ out.println("public final class BidiTestData {");
+ out.println();
+ out.println(" private BidiTestData() {");
+ out.println(" }");
+ out.println();
+ dumpData(out, outFileName);
+ out.println(" public static final int NUM_TEST_SEQUENCES = " + numTestSpecs + ";");
+ out.println();
+ out.println(" public static int[] readTestData ( String prefix, int index ) {");
+ out.println(" int[] data = null;");
+ out.println(" InputStream is = null;");
+ out.println(" Class btc = BidiTestData.class;");
+ out.println(" String name = btc.getSimpleName() + \"$\" + prefix + index + \".ser\";");
+ out.println(" try {");
+ out.println(" if ( ( is = btc.getResourceAsStream ( name ) ) != null ) {");
+ out.println(" ObjectInputStream ois = new ObjectInputStream ( is );");
+ out.println(" data = (int[]) ois.readObject();");
+ out.println(" ois.close();");
+ out.println(" }");
+ out.println(" } catch ( IOException e ) {");
+ out.println(" data = null;");
+ out.println(" } catch ( ClassNotFoundException e ) {");
+ out.println(" data = null;");
+ out.println(" } finally {");
+ out.println(" if ( is != null ) {");
+ out.println(" try { is.close(); } catch ( Exception e ) {}");
+ out.println(" }");
+ out.println(" }");
+ out.println(" return data;");
+ out.println(" }");
+ out.println("}");
+ out.flush();
+ out.close();
+
+ }
+
+ /**
+ * Read bidi type data.
+ *
+ * @param ucdFileName name (as URL) of unicode character database data
+ */
+ private static void readBidiTypeData(String ucdFileName) throws Exception {
+ BufferedReader b = new BufferedReader(new InputStreamReader(new URL(ucdFileName).openStream()));
+ String line;
+ int n;
+ // singleton map - derived from single char entry
+ Map/*<Integer,List>*/ sm = new HashMap/*<Integer,List>*/();
+ // interval map - derived from pair of block endpoint entries
+ Map/*<String,int[3]>*/ im = new HashMap/*<String,int[3]>*/();
+ if (verbose) {
+ System.out.print("Reading bidi type data...");
+ }
+ for (lineNumber = 0; (line = b.readLine()) != null; ) {
+ lineNumber++;
+ if (line.length() == 0) {
+ continue;
+ } else if (line.startsWith("#")) {
+ continue;
+ } else {
+ parseTypeProperties(line, sm, im);
+ }
+ }
+ // extract type data list
+ List tdl = processTypeData(sm, im, new ArrayList());
+ // dump instrumentation
+ if (verbose) {
+ System.out.println();
+ System.out.println("Read type ranges : " + numTypeRanges);
+ System.out.println("Read lines : " + lineNumber);
+ }
+ td = (int[][]) tdl.toArray(new int [ tdl.size() ] []);
+ }
+
+ private static void parseTypeProperties(String line, Map/*<Integer,List>*/ sm, Map/*<String,int[3]>*/ im) {
+ String[] sa = line.split(";");
+ if (sa.length >= 5) {
+ int uc = Integer.parseInt(sa[0], 16);
+ int bc = parseBidiClassAny(sa[4]);
+ if (bc >= 0) {
+ String ucName = sa[1];
+ if (isBlockStart(ucName)) {
+ String ucBlock = getBlockName(ucName);
+ if (!im.containsKey(ucBlock)) {
+ im.put(ucBlock, new int[] { uc, -1, bc });
+ } else {
+ throw new IllegalArgumentException("duplicate start of block '" + ucBlock + "' at entry: " + line);
+ }
+ } else if (isBlockEnd(ucName)) {
+ String ucBlock = getBlockName(ucName);
+ if (im.containsKey(ucBlock)) {
+ int[] ba = (int[]) im.get(ucBlock);
+ assert ba.length == 3;
+ if (ba[1] < 0) {
+ ba[1] = uc;
+ } else {
+ throw new IllegalArgumentException("duplicate end of block '" + ucBlock + "' at entry: " + line);
+ }
+ } else {
+ throw new IllegalArgumentException("missing start of block '" + ucBlock + "' at entry: " + line);
+ }
+ } else {
+ Integer k = Integer.valueOf(bc);
+ List sl;
+ if (!sm.containsKey(k)) {
+ sl = new ArrayList();
+ sm.put(k, sl);
+ } else {
+ sl = (List) sm.get(k);
+ }
+ assert sl != null;
+ sl.add(Integer.valueOf(uc));
+ }
+ } else {
+ throw new IllegalArgumentException("invalid bidi class '" + sa[4] + "' at entry: " + line);
+ }
+ } else {
+ throw new IllegalArgumentException("invalid unicode character database entry: " + line);
+ }
+ }
+
+ private static boolean isBlockStart(String s) {
+ return s.startsWith("<") && s.endsWith("First>");
+ }
+
+ private static boolean isBlockEnd(String s) {
+ return s.startsWith("<") && s.endsWith("Last>");
+ }
+
+ private static String getBlockName(String s) {
+ String[] sa = s.substring(1, s.length() - 1).split(",");
+ assert (sa != null) && (sa.length > 0);
+ return sa[0].trim();
+ }
+
+ private static List processTypeData(Map/*<Integer,List>*/ sm, Map/*<String,int[3]>*/ im, List tdl) {
+ for (int i = BidiConstants.FIRST, k = BidiConstants.LAST; i <= k; i++) {
+ Map/*<Integer,Integer>*/ rm = new TreeMap/*<Integer,Integer>*/();
+ // populate intervals from singleton map
+ List sl = (List) sm.get(Integer.valueOf(i));
+ if (sl != null) {
+ for (Iterator it = sl.iterator(); it.hasNext(); ) {
+ Integer s = (Integer) it.next();
+ int uc = s.intValue();
+ rm.put(Integer.valueOf(uc), Integer.valueOf(uc + 1));
+ }
+ }
+ // populate intervals from (block) interval map
+ if (!im.isEmpty()) {
+ for (Iterator it = im.values().iterator(); it.hasNext(); ) {
+ int[] ba = (int[]) it.next();
+ assert (ba != null) && (ba.length > 2);
+ if (ba[2] == i) {
+ rm.put(Integer.valueOf(ba[0]), Integer.valueOf(ba[1] + 1));
+ }
+ }
+ }
+ tdl.add(createTypeData(i, extractRanges(rm)));
+ }
+ return tdl;
+ }
+
+ private static List extractRanges(Map/*<Integer,Integer>*/ rm) {
+ List ranges = new ArrayList();
+ int sLast = 0;
+ int eLast = 0;
+ for (Iterator it = rm.entrySet().iterator(); it.hasNext(); ) {
+ Map.Entry/*<Integer,Integer>*/ me = (Map.Entry/*<Integer,Integer>*/) it.next();
+ int s = ((Integer) me.getKey()).intValue();
+ int e = ((Integer) me.getValue()).intValue();
+ if (s > eLast) {
+ if (eLast > sLast) {
+ ranges.add(new int[] { sLast, eLast });
+ if (verbose) {
+ if ((++numTypeRanges % 10) == 0) {
+ System.out.print("#");
+ }
+ }
+ }
+ sLast = s;
+ eLast = e;
+ } else if ((s >= sLast) && (e >= eLast)) {
+ eLast = e;
+ }
+ }
+ if (eLast > sLast) {
+ ranges.add(new int[] { sLast, eLast });
+ if (verbose) {
+ if ((++numTypeRanges % 10) == 0) {
+ System.out.print("#");
+ }
+ }
+ }
+ return ranges;
+ }
+
+ /**
+ * Read biditest data.
+ *
+ * @param bidiFileName name (as URL) of bidi test data
+ */
+ private static void readBidiTestData(String bidiFileName) throws Exception {
+ BufferedReader b = new BufferedReader(new InputStreamReader(new URL(bidiFileName).openStream()));
+ String line;
+ int n;
+ List tdl = new ArrayList();
+ List ldl = new ArrayList();
+ if (verbose) {
+ System.out.print("Reading bidi test data...");
+ }
+ for (lineNumber = 0; (line = b.readLine()) != null; ) {
+ lineNumber++;
+ if (line.length() == 0) {
+ continue;
+ } else if (line.startsWith("#")) {
+ continue;
+ } else if (line.startsWith(PFX_TYPE) && !ignoreDeprecatedTypeData) {
+ List lines = new ArrayList();
+ if ((n = readType(line, b, lines)) < 0) {
+ break;
+ } else {
+ lineNumber += n;
+ tdl.add(parseType(lines));
+ }
+ } else if (line.startsWith(PFX_LEVELS)) {
+ List lines = new ArrayList();
+ if ((n = readLevels(line, b, lines)) < 0) {
+ break;
+ } else {
+ lineNumber += n;
+ ldl.add(parseLevels(lines));
+ }
+ }
+ }
+ // dump instrumentation
+ if (verbose) {
+ System.out.println();
+ if (!ignoreDeprecatedTypeData) {
+ System.out.println("Read type ranges : " + numTypeRanges);
+ }
+ System.out.println("Read level specs : " + numLevelSpecs);
+ System.out.println("Read test specs : " + numTestSpecs);
+ System.out.println("Read lines : " + lineNumber);
+ }
+ if (!ignoreDeprecatedTypeData) {
+ td = (int[][]) tdl.toArray(new int [ tdl.size() ] []);
+ }
+ ld = (int[][]) ldl.toArray(new int [ ldl.size() ] []);
+ }
+
+ private static int readType(String line, BufferedReader b, List lines) throws IOException {
+ lines.add(line);
+ return 0;
+ }
+
+ private static int readLevels(String line, BufferedReader b, List lines) throws IOException {
+ boolean done = false;
+ int n = 0;
+ lines.add(line);
+ while (!done) {
+ switch (testPrefix(b, PFX_LEVELS)) {
+ case 0: // within current levels
+ if ((line = b.readLine()) != null) {
+ n++;
+ if ((line.length() > 0) && !line.startsWith("#")) {
+ lines.add(line);
+ }
+ } else {
+ done = true;
+ }
+ break;
+ case 1: // end of current levels
+ case -1: // eof
+ default:
+ done = true;
+ break;
+ }
+ }
+ return n;
+ }
+
+ private static int testPrefix(BufferedReader b, String pfx) throws IOException {
+ int rv = 0;
+ int pfxLen = pfx.length();
+ b.mark(pfxLen);
+ for (int i = 0, n = pfxLen; i < n; i++) {
+ int c = b.read();
+ if (c < 0) {
+ rv = -1;
+ break;
+ } else if (c != pfx.charAt(i)) {
+ rv = 0;
+ break;
+ } else {
+ rv = 1;
+ }
+ }
+ b.reset();
+ return rv;
+ }
+
+ private static int[] parseType(List lines) {
+ if ((lines != null) && (lines.size() >= 1)) {
+ String line = (String) lines.get(0);
+ if (line.startsWith(PFX_TYPE)) {
+ // @Type: BIDI_CLASS ':' LWSP CHARACTER_CLASS
+ String[] sa = line.split(":");
+ if (sa.length == 3) {
+ String bcs = sa[1].trim();
+ String crs = sa[2].trim();
+ int bc = parseBidiClass(bcs);
+ List rl = parseCharacterRanges(crs);
+ return createTypeData(bc, rl);
+ }
+ }
+ }
+ return null;
+ }
+
+ private static int[] createTypeData(int bc, List ranges) {
+ int[] data = new int [ 1 + (2 * ranges.size()) ];
+ int k = 0;
+ data [ k++ ] = bc;
+ for (Iterator it = ranges.iterator(); it.hasNext(); ) {
+ int[] r = (int[]) it.next();
+ data [ k++ ] = r [ 0 ];
+ data [ k++ ] = r [ 1 ];
+ }
+ return data;
+ }
+
+ private static int parseBidiClass(String bidiClass) {
+ int bc = 0;
+ if ("L".equals(bidiClass)) {
+ bc = BidiConstants.L;
+ } else if ("LRE".equals(bidiClass)) {
+ bc = BidiConstants.LRE;
+ } else if ("LRO".equals(bidiClass)) {
+ bc = BidiConstants.LRO;
+ } else if ("R".equals(bidiClass)) {
+ bc = BidiConstants.R;
+ } else if ("AL".equals(bidiClass)) {
+ bc = BidiConstants.AL;
+ } else if ("RLE".equals(bidiClass)) {
+ bc = BidiConstants.RLE;
+ } else if ("RLO".equals(bidiClass)) {
+ bc = BidiConstants.RLO;
+ } else if ("PDF".equals(bidiClass)) {
+ bc = BidiConstants.PDF;
+ } else if ("EN".equals(bidiClass)) {
+ bc = BidiConstants.EN;
+ } else if ("ES".equals(bidiClass)) {
+ bc = BidiConstants.ES;
+ } else if ("ET".equals(bidiClass)) {
+ bc = BidiConstants.ET;
+ } else if ("AN".equals(bidiClass)) {
+ bc = BidiConstants.AN;
+ } else if ("CS".equals(bidiClass)) {
+ bc = BidiConstants.CS;
+ } else if ("NSM".equals(bidiClass)) {
+ bc = BidiConstants.NSM;
+ } else if ("BN".equals(bidiClass)) {
+ bc = BidiConstants.BN;
+ } else if ("B".equals(bidiClass)) {
+ bc = BidiConstants.B;
+ } else if ("S".equals(bidiClass)) {
+ bc = BidiConstants.S;
+ } else if ("WS".equals(bidiClass)) {
+ bc = BidiConstants.WS;
+ } else if ("ON".equals(bidiClass)) {
+ bc = BidiConstants.ON;
+ } else {
+ throw new IllegalArgumentException("unknown bidi class: " + bidiClass);
+ }
+ return bc;
+ }
+
+ private static int parseBidiClassAny(String bidiClass) {
+ try {
+ return parseBidiClass(bidiClass);
+ } catch (IllegalArgumentException e) {
+ return -1;
+ }
+ }
+
+ private static List parseCharacterRanges(String charRanges) {
+ List ranges = new ArrayList();
+ CharacterIterator ci = new StringCharacterIterator(charRanges);
+ // read initial list delimiter
+ skipSpace(ci);
+ if (!readStartOfList(ci)) {
+ badRangeSpec("missing initial list delimiter", charRanges);
+ }
+ // read negation token if present
+ boolean negated = false;
+ skipSpace(ci);
+ if (maybeReadNext(ci, '^')) {
+ negated = true;
+ }
+ // read item
+ int[] r;
+ skipSpace(ci);
+ if ((r = maybeReadItem(ci)) != null) {
+ ranges.add(r);
+ if (verbose) {
+ if ((++numTypeRanges % 10) == 0) {
+ System.out.print("#");
+ }
+ }
+ } else {
+ badRangeSpec("must contain at least one item", charRanges);
+ }
+ // read more items if present
+ boolean more = true;
+ while (more) {
+ // read separator if present
+ String s;
+ skipSpace(ci);
+ if ((s = maybeReadSeparator(ci)) != null) {
+ if ((s.length() != 0) && !s.equals("||")) {
+ badRangeSpec("invalid item separator \"" + s + "\"", charRanges);
+ }
+ }
+ // read item
+ skipSpace(ci);
+ if ((r = maybeReadItem(ci)) != null) {
+ ranges.add(r);
+ if (verbose) {
+ if ((++numTypeRanges % 10) == 0) {
+ System.out.print("#");
+ }
+ }
+ } else {
+ more = false;
+ }
+ }
+ // read terminating list delimiter
+ skipSpace(ci);
+ if (!readEndOfList(ci)) {
+ badRangeSpec("missing terminating list delimiter", charRanges);
+ }
+ if (!atEnd(ci)) {
+ badRangeSpec("extraneous content prior to end of line", ci);
+ }
+ if (negated) {
+ ranges = complementRanges(ranges);
+ }
+ return removeSurrogates(ranges);
+ }
+
+ private static boolean atEnd(CharacterIterator ci) {
+ return ci.getIndex() >= ci.getEndIndex();
+ }
+
+ private static boolean readStartOfList(CharacterIterator ci) {
+ return maybeReadNext(ci, '[');
+ }
+
+ private static void skipSpace(CharacterIterator ci) {
+ while (!atEnd(ci)) {
+ char c = ci.current();
+ if (!Character.isWhitespace(c)) {
+ break;
+ } else {
+ ci.next();
+ }
+ }
+ }
+
+ private static boolean maybeReadNext(CharacterIterator ci, char next) {
+ while (!atEnd(ci)) {
+ char c = ci.current();
+ if (c == next) {
+ ci.next();
+ return true;
+ } else {
+ break;
+ }
+ }
+ return false;
+ }
+
+ private static int[] maybeReadItem(CharacterIterator ci) {
+ // read first code point
+ int p1 = -1;
+ skipSpace(ci);
+ if ((p1 = maybeReadCodePoint(ci)) < 0) {
+ return null;
+ }
+ // read second code point if present
+ int p2 = -1;
+ skipSpace(ci);
+ if (maybeReadNext(ci, '-')) {
+ skipSpace(ci);
+ if ((p2 = maybeReadCodePoint(ci)) < 0) {
+ badRangeSpec("incomplete item range, requires second item", ci);
+ }
+ }
+ if (p2 < 0) {
+ return new int[] { p1, p1 + 1 }; // convert to half open interval [ P1, P1+1 )
+ } else if (p1 <= p2) {
+ return new int[] { p1, p2 + 1 }; // convert to half open interval [ P1, P2+2 )
+ } else {
+ badRangeSpec("invalid item range, second item must be greater than or equal to first item", ci);
+ return null;
+ }
+ }
+
+ private static int maybeReadCodePoint(CharacterIterator ci) {
+ if (maybeReadNext(ci, '\\')) {
+ if (maybeReadNext(ci, 'u')) {
+ String s = maybeReadHexDigits(ci, 4);
+ if (s != null) {
+ return Integer.parseInt(s, 16);
+ } else {
+ badRangeSpec("incomplete escaped code point, requires 4 hex digits", ci);
+ }
+ } else if (maybeReadNext(ci, 'U')) {
+ String s = maybeReadHexDigits(ci, 8);
+ if (s != null) {
+ return Integer.parseInt(s, 16);
+ } else {
+ badRangeSpec("incomplete escaped code point, requires 8 hex digits", ci);
+ }
+ } else {
+ char c = ci.current();
+ if (c == CharacterIterator.DONE) {
+ badRangeSpec("incomplete escaped code point", ci);
+ } else {
+ ci.next();
+ return (int) c;
+ }
+ }
+ } else {
+ char c = ci.current();
+ if ((c == CharacterIterator.DONE) || (c == ']')) {
+ return -1;
+ } else {
+ ci.next();
+ return (int) c;
+ }
+ }
+ return -1;
+ }
+
+ private static String maybeReadHexDigits(CharacterIterator ci, int numDigits) {
+ StringBuffer sb = new StringBuffer();
+ while ((numDigits < 0) || (sb.length() < numDigits)) {
+ char c = ci.current();
+ if (c != CharacterIterator.DONE) {
+ if (isHexDigit(c)) {
+ ci.next();
+ sb.append(c);
+ } else {
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ if (((numDigits < 0) && (sb.length() > 0)) || (sb.length() == numDigits)) {
+ return sb.toString();
+ } else {
+ return null;
+ }
+ }
+
+ private static boolean isHexDigit(char c) {
+ return ((c >= '0') && (c <= '9')) || ((c >= 'a') && (c <= 'f')) || ((c >= 'A') && (c <= 'F'));
+ }
+
+ private static String maybeReadSeparator(CharacterIterator ci) {
+ if (maybeReadNext(ci, '|')) {
+ if (maybeReadNext(ci, '|')) {
+ return "||";
+ } else {
+ return "|";
+ }
+ } else {
+ return "";
+ }
+ }
+
+ private static boolean readEndOfList(CharacterIterator ci) {
+ return maybeReadNext(ci, ']');
+ }
+
+ private static List complementRanges(List ranges) {
+ Map/*<Integer,Integer>*/ rm = new TreeMap/*<Integer,Integer>*/();
+ for (Iterator it = ranges.iterator(); it.hasNext(); ) {
+ int[] r = (int[]) it.next();
+ rm.put(Integer.valueOf(r[0]), Integer.valueOf(r[1]));
+ }
+ // add complement ranges save last
+ int s;
+ int e;
+ int cs = 0;
+ List compRanges = new ArrayList(rm.size() + 1);
+ for (Iterator it = rm.entrySet().iterator(); it.hasNext(); ) {
+ Map.Entry/*<Integer,Integer>*/ me = (Map.Entry/*<Integer,Integer>*/) it.next();
+ s = ((Integer) me.getKey()).intValue();
+ e = ((Integer) me.getValue()).intValue();
+ if (s > cs) {
+ compRanges.add(new int[] { cs, s });
+ }
+ cs = e;
+ }
+ // add trailing complement range
+ if (cs < 0x110000) {
+ compRanges.add(new int[] { cs, 0x110000 });
+ }
+ return compRanges;
+ }
+
+ private static final int[] SURROGATES = new int[] { 0xD800, 0xE000 };
+
+ private static List removeSurrogates(List ranges) {
+ List rsl = new ArrayList(ranges.size());
+ for (Iterator it = ranges.iterator(); it.hasNext(); ) {
+ int[] r = (int[]) it.next();
+ if (intersectsRange(r, SURROGATES)) {
+ rsl.addAll(removeRange(r, SURROGATES));
+ } else {
+ rsl.add(r);
+ }
+ }
+ return rsl;
+ }
+
+ /**
+ * Determine if range r2 intersects with range r1.
+ */
+ private static boolean intersectsRange(int[] r1, int[] r2) {
+ if (r1[1] <= r2[0]) { // r1 precedes r2 or abuts r2 on right
+ return false;
+ } else if (r1[0] >= r2[1]) { // r2 precedes r1 or abuts r1 on left
+ return false;
+ } else if ((r1[0] < r2[0]) && (r1[1] > r2[1])) { // r1 encloses r2
+ return true;
+ } else if (r1[0] < r2[0]) { // r1 precedes and overlaps r2
+ return true;
+ } else if (r2[1] < r1[1]) { // r2 precedes and overlaps r1
+ return true;
+ } else { // r2 encloses r1
+ return true;
+ }
+ }
+
+ /**
+ * Remove range r2 from range r1, leaving zero, one, or two
+ * remaining ranges.
+ */
+ private static List removeRange(int[] r1, int[] r2) {
+ List rl = new ArrayList();
+ if (r1[1] <= r2[0]) { // r1 precedes r2 or abuts r2 on right
+ rl.add(r1);
+ } else if (r1[0] >= r2[1]) { // r2 precedes r1 or abuts r1 on left
+ rl.add(r1);
+ } else if ((r1[0] < r2[0]) && (r1[1] > r2[1])) { // r1 encloses r2
+ rl.add(new int[] { r1[0], r2[0] });
+ rl.add(new int[] { r2[1], r1[1] });
+ } else if (r1[0] < r2[0]) { // r1 precedes and overlaps r2
+ rl.add(new int[] { r1[0], r2[0] });
+ } else if (r2[1] < r1[1]) { // r2 precedes and overlaps r1
+ rl.add(new int[] { r2[1], r1[1] });
+ }
+ return rl;
+ }
+
+ private static void badRangeSpec(String reason, String charRanges) throws IllegalArgumentException {
+ if (verbose) {
+ System.out.println();
+ }
+ throw new IllegalArgumentException("bad range specification: " + reason + ": \"" + charRanges + "\"");
+ }
+
+ private static void badRangeSpec(String reason, CharacterIterator ci) throws IllegalArgumentException {
+ if (verbose) {
+ System.out.println();
+ }
+ throw new IllegalArgumentException("bad range specification: " + reason + ": starting at \"" + remainder(ci) + "\"");
+ }
+
+ private static String remainder(CharacterIterator ci) {
+ StringBuffer sb = new StringBuffer();
+ for (char c; (c = ci.current()) != CharacterIterator.DONE; ) {
+ ci.next();
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Parse levels segment, consisting of multiple lines as follows:
+ *
+ * LEVEL_SPEC \n
+ * REORDER_SPEC \n
+ * ( TEST_SPEC \n )+
+ */
+ private static int[] parseLevels(List lines) {
+ int[] la = null; // levels array
+ int[] ra = null; // reorder array
+ List tal = new ArrayList();
+ if ((lines != null) && (lines.size() >= 3)) {
+ for (Iterator it = lines.iterator(); it.hasNext(); ) {
+ String line = (String) it.next();
+ if (line.startsWith(PFX_LEVELS)) {
+ if (la == null) {
+ la = parseLevelSpec(line);
+ if (verbose) {
+ if ((++numLevelSpecs % 10) == 0) {
+ System.out.print("&");
+ }
+ }
+ } else {
+ throw new IllegalArgumentException("redundant levels array: \"" + line + "\"");
+ }
+ } else if (line.startsWith(PFX_REORDER)) {
+ if (la == null) {
+ throw new IllegalArgumentException("missing levels array before: \"" + line + "\"");
+ } else if (ra == null) {
+ ra = parseReorderSpec(line, la);
+ } else {
+ throw new IllegalArgumentException("redundant reorder array: \"" + line + "\"");
+ }
+ } else if ((la != null) && (ra != null)) {
+ int[] ta = parseTestSpec(line, la);
+ if (ta != null) {
+ if (verbose) {
+ if ((++numTestSpecs % 100) == 0) {
+ System.out.print("!");
+ }
+ }
+ tal.add(ta);
+ }
+ } else if (la == null) {
+ throw new IllegalArgumentException("missing levels array before: \"" + line + "\"");
+ } else if (ra == null) {
+ throw new IllegalArgumentException("missing reorder array before: \"" + line + "\"");
+ }
+ }
+ }
+ if ((la != null) && (ra != null)) {
+ return createLevelData(la, ra, tal);
+ } else {
+ return null;
+ }
+ }
+
+ private static int[] createLevelData(int[] la, int[] ra, List tal) {
+ int nl = la.length;
+ int[] data = new int [ 1 + nl * 2 + ((nl + 1) * tal.size()) ];
+ int k = 0;
+ data [ k++ ] = nl;
+ for (int i = 0, n = nl; i < n; i++) {
+ data [ k++ ] = la [ i ];
+ }
+ int nr = ra.length;
+ for (int i = 0, n = nr; i < n; i++) {
+ data [ k++ ] = ra [ i ];
+ }
+ for (Iterator it = tal.iterator(); it.hasNext(); ) {
+ int[] ta = (int[]) it.next();
+ if (ta == null) {
+ throw new IllegalStateException("null test array");
+ } else if (ta.length == (nl + 1)) {
+ for (int i = 0, n = ta.length; i < n; i++) {
+ data [ k++ ] = ta [ i ];
+ }
+ } else {
+ throw new IllegalStateException("test array length error, expected " + (nl + 1) + " entries, got " + ta.length + " entries");
+ }
+ }
+ assert k == data.length;
+ return data;
+ }
+
+ /**
+ * Parse level specification, which follows the following syntax:
+ *
+ * @Levels: ( LWSP ( NUMBER | 'x' ) )+
+ */
+ private static int[] parseLevelSpec(String line) {
+ CharacterIterator ci = new StringCharacterIterator(line);
+ List ll = new ArrayList();
+ // read prefix
+ skipSpace(ci);
+ if (!maybeReadToken(ci, PFX_LEVELS)) {
+ badLevelSpec("missing prefix \"" + PFX_LEVELS + "\"", ci);
+ }
+ // read level values
+ boolean more = true;
+ while (more) {
+ Integer l;
+ skipSpace(ci);
+ if ((l = maybeReadInteger(ci)) != null) {
+ ll.add(l);
+ } else if (maybeReadToken(ci, "x")) {
+ ll.add(Integer.valueOf(-1));
+ } else {
+ more = false;
+ }
+ }
+ // read to end of line
+ skipSpace(ci);
+ if (!atEnd(ci)) {
+ badLevelSpec("extraneous content prior to end of line", ci);
+ }
+ if (ll.size() == 0) {
+ badLevelSpec("must have at least one level value", ci);
+ }
+ return createLevelsArray(ll);
+ }
+
+ private static Integer maybeReadInteger(CharacterIterator ci) {
+ // read optional minus sign if present
+ boolean negative;
+ if (maybeReadNext(ci, '-')) {
+ negative = true;
+ } else {
+ negative = false;
+ }
+ // read digits
+ StringBuffer sb = new StringBuffer();
+ while (true) {
+ char c = ci.current();
+ if ((c != CharacterIterator.DONE) && isDigit(c)) {
+ ci.next();
+ sb.append(c);
+ } else {
+ break;
+ }
+ }
+ if (sb.length() == 0) {
+ return null;
+ } else {
+ int value = Integer.parseInt(sb.toString());
+ if (negative) {
+ value = -value;
+ }
+ return Integer.valueOf(value);
+ }
+ }
+
+ private static boolean isDigit(char c) {
+ return ((c >= '0') && (c <= '9'));
+ }
+
+ private static boolean maybeReadToken(CharacterIterator ci, String s) {
+ int startIndex = ci.getIndex();
+ for (int i = 0, n = s.length(); i < n; i++) {
+ char c = s.charAt(i);
+ if (ci.current() == c) {
+ ci.next();
+ } else {
+ ci.setIndex(startIndex);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private static void badLevelSpec(String reason, CharacterIterator ci) throws IllegalArgumentException {
+ if (verbose) {
+ System.out.println();
+ }
+ throw new IllegalArgumentException("bad level specification: " + reason + ": starting at \"" + remainder(ci) + "\"");
+ }
+
+ private static int[] createLevelsArray(List levels) {
+ int[] la = new int [ levels.size() ];
+ int k = 0;
+ for (Iterator it = levels.iterator(); it.hasNext(); ) {
+ la [ k++ ] = ((Integer) it.next()).intValue();
+ }
+ return la;
+ }
+
+ /**
+ * Parse reorder specification, which follows the following syntax:
+ *
+ * @Reorder: ( LWSP NUMBER )*
+ */
+ private static int[] parseReorderSpec(String line, int[] levels) {
+ CharacterIterator ci = new StringCharacterIterator(line);
+ List rl = new ArrayList();
+ // read prefix
+ skipSpace(ci);
+ if (!maybeReadToken(ci, PFX_REORDER)) {
+ badReorderSpec("missing prefix \"" + PFX_REORDER + "\"", ci);
+ }
+ // read reorder values
+ boolean more = true;
+ while (more) {
+ skipSpace(ci);
+ Integer l;
+ if ((l = maybeReadInteger(ci)) != null) {
+ rl.add(l);
+ } else {
+ more = false;
+ }
+ }
+ // read to end of line
+ skipSpace(ci);
+ if (!atEnd(ci)) {
+ badReorderSpec("extraneous content prior to end of line", ci);
+ }
+ return createReorderArray(rl, levels);
+ }
+
+ private static void badReorderSpec(String reason, CharacterIterator ci) throws IllegalArgumentException {
+ if (verbose) {
+ System.out.println();
+ }
+ throw new IllegalArgumentException("bad reorder specification: " + reason + ": starting at \"" + remainder(ci) + "\"");
+ }
+
+ private static int[] createReorderArray(List reorders, int[] levels) {
+ int nr = reorders.size();
+ int nl = levels.length;
+ if (nr <= nl) {
+ int[] ra = new int [ nl ];
+ Iterator it = reorders.iterator();
+ for (int i = 0, n = nl; i < n; i++) {
+ int r = -1;
+ if (levels [ i ] >= 0) {
+ if (it.hasNext()) {
+ r = ((Integer) it.next()).intValue();
+ }
+ }
+ ra [ i ] = r;
+ }
+ return ra;
+ } else {
+ throw new IllegalArgumentException("excessive number of reorder array entries, expected no more than " + nl + ", but got " + nr + " entries");
+ }
+ }
+
+ /**
+ * Parse test specification, which follows the following syntax:
+ *
+ * BIDI_CLASS ( LWSP BIDI_CLASS )+ ';' LWSP NUMBER
+ */
+ private static int[] parseTestSpec(String line, int[] levels) {
+ CharacterIterator ci = new StringCharacterIterator(line);
+ List cl = new ArrayList();
+ // read bidi class identifier sequence
+ while (!atEnd(ci) && !maybeReadNext(ci, ';')) {
+ skipSpace(ci);
+ int bc;
+ if ((bc = maybeReadBidiClass(ci)) >= 0) {
+ cl.add(Integer.valueOf(bc));
+ } else {
+ break;
+ }
+ }
+ // read bit set
+ skipSpace(ci);
+ String s;
+ int bs = 0;
+ if ((s = maybeReadHexDigits(ci, -1)) != null) {
+ bs = Integer.parseInt(s, 16);
+ } else {
+ badTestSpec("missing bit set", ci);
+ }
+ // read to end of line
+ skipSpace(ci);
+ if (!atEnd(ci)) {
+ badTestSpec("extraneous content prior to end of line", ci);
+ }
+ return createTestArray(cl, bs, levels);
+ }
+
+ private static String maybeReadIdentifier(CharacterIterator ci) {
+ // read keyword chars ([A-Z])
+ StringBuffer sb = new StringBuffer();
+ while (true) {
+ char c = ci.current();
+ if (c == CharacterIterator.DONE) {
+ break;
+ } else if (sb.length() == 0) {
+ if (Character.isUnicodeIdentifierStart(c)) {
+ ci.next();
+ sb.append(c);
+ } else {
+ break;
+ }
+ } else {
+ if (Character.isUnicodeIdentifierPart(c)) {
+ ci.next();
+ sb.append(c);
+ } else {
+ break;
+ }
+ }
+ }
+ if (sb.length() == 0) {
+ return null;
+ } else {
+ return sb.toString();
+ }
+ }
+
+ private static int maybeReadBidiClass(CharacterIterator ci) {
+ int bc = -1;
+ int i = ci.getIndex();
+ String s;
+ if ((s = maybeReadIdentifier(ci)) != null) {
+ try {
+ bc = parseBidiClass(s);
+ } catch (IllegalArgumentException e) {
+ throw e;
+ }
+ }
+ if (bc < 0) {
+ ci.setIndex(i);
+ }
+ return bc;
+ }
+
+ private static void badTestSpec(String reason, CharacterIterator ci) throws IllegalArgumentException {
+ if (verbose) {
+ System.out.println();
+ }
+ throw new IllegalArgumentException("bad test specification: " + reason + ": starting at \"" + remainder(ci) + "\"");
+ }
+
+ private static int[] createTestArray(List classes, int bitset, int[] levels) {
+ int nc = classes.size();
+ if (nc <= levels.length) {
+ int[] ta = new int [ 1 + nc ];
+ int k = 0;
+ ta [ k++ ] = bitset;
+ for (Iterator it = classes.iterator(); it.hasNext(); ) {
+ ta [ k++ ] = ((Integer) it.next()).intValue();
+ }
+ return ta;
+ } else {
+ throw new IllegalArgumentException("excessive number of test array entries, expected no more than " + levels.length + ", but got " + nc + " entries");
+ }
+ }
+
+ /**
+ * Dump data arrays to output and resource files.
+ * @param out - bidi test data java class file print writer
+ * @param outFileName - (full path) name of bidi test data java class file
+ */
+ private static void dumpData(PrintWriter out, String outFileName) throws IOException {
+ File f = new File(outFileName);
+ File p = f.getParentFile();
+ if (td != null) {
+ String pfxTD = "TD";
+ dumpResourcesDescriptor(out, pfxTD, td.length);
+ dumpResourcesData(p, f.getName(), pfxTD, td);
+ }
+ if (ld != null) {
+ String pfxTD = "LD";
+ dumpResourcesDescriptor(out, pfxTD, ld.length);
+ dumpResourcesData(p, f.getName(), pfxTD, ld);
+ }
+ }
+
+ private static void dumpResourcesDescriptor(PrintWriter out, String prefix, int numResources) {
+ out.println(" public static final String " + prefix + "_PFX = \"" + prefix + "\";");
+ out.println(" public static final int " + prefix + "_CNT = " + numResources + ";");
+ out.println("");
+ }
+
+ private static void dumpResourcesData(File btcDir, String btcName, String prefix, int[][] data) throws IOException {
+ String btdName = extractDataFileName(btcName);
+ for (int i = 0, n = data.length; i < n; i++) {
+ File f = new File(btcDir, btdName + "$" + prefix + i + ".ser");
+ ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(f));
+ os.writeObject(data[i]);
+ os.close();
+ }
+ }
+
+ private static final String JAVA_EXT = ".java";
+
+ private static String extractDataFileName(String btcName) {
+ if (btcName.endsWith(JAVA_EXT)) {
+ return btcName.substring(0, btcName.length() - JAVA_EXT.length());
+ } else {
+ return btcName;
+ }
+ }
+
+ /**
+ * Main entry point for generator.
+ * @param args array of command line arguments
+ */
+ public static void main(String[] args) {
+ String bidiFileName = "http://www.unicode.org/Public/UNIDATA/BidiTest.txt";
+ String ucdFileName = "http://www.unicode.org/Public/UNIDATA/BidiTest.txt";
+ String outFileName = "BidiTestData.java";
+ boolean ok = true;
+ for (int i = 0; ok && (i < args.length); i++) {
+ String opt = args[i];
+ if ("-b".equals(opt)) {
+ if ((i + 1) <= args.length) {
+ bidiFileName = args[++i];
+ } else {
+ ok = false;
+ }
+ } else if ("-d".equals(opt)) {
+ if ((i + 1) <= args.length) {
+ ucdFileName = args[++i];
+ } else {
+ ok = false;
+ }
+ } else if ("-i".equals(opt)) {
+ ignoreDeprecatedTypeData = true;
+ } else if ("-o".equals(opt)) {
+ if ((i + 1) <= args.length) {
+ outFileName = args[++i];
+ } else {
+ ok = false;
+ }
+ } else if ("-v".equals(opt)) {
+ verbose = true;
+ } else {
+ ok = false;
+ }
+ }
+ if (!ok) {
+ System.out.println("Usage: GenerateBidiTestData [-v] [-i] [-d <ucdFile>] [-b <bidiFile>] [-o <outputFile>]");
+ System.out.println(" defaults:");
+ if (ignoreDeprecatedTypeData) {
+ System.out.println(" <ucdFile> : " + ucdFileName);
+ }
+ System.out.println(" <bidiFile> : " + bidiFileName);
+ System.out.println(" <outputFile> : " + outFileName);
+ } else {
+ try {
+ convertBidiTestData(ucdFileName, bidiFileName, outFileName);
+ System.out.println("Generated " + outFileName + " from");
+ if (ignoreDeprecatedTypeData) {
+ System.out.println(" <ucdFile> : " + ucdFileName);
+ }
+ System.out.println(" <bidiFile> : " + bidiFileName);
+ } catch (Exception e) {
+ System.out.println("An unexpected error occured at line: " + lineNumber);
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/fop-core/src/main/codegen/unicode/java/org/apache/fop/hyphenation/UnicodeClasses.java b/fop-core/src/main/codegen/unicode/java/org/apache/fop/hyphenation/UnicodeClasses.java
new file mode 100644
index 000000000..df25831ea
--- /dev/null
+++ b/fop-core/src/main/codegen/unicode/java/org/apache/fop/hyphenation/UnicodeClasses.java
@@ -0,0 +1,410 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.hyphenation;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.fop.util.License;
+
+/**
+ * Create the default classes file classes.xml,
+ * for use in building hyphenation patterns
+ * from pattern files which do not contain their own classes.
+ * The class contains three methods to do that.
+ * The method fromJava gets its infirmation from Java's compiled-in Unicode Character Database,
+ * the method fromUCD gets its information from the UCD files,
+ * the method fromTeX gets its information from the file unicode-letters-XeTeX.tex,
+ * which is the basis of XeTeX's unicode support.
+ * In the build file only the method from UCD is used;
+ * the other two methods are there for demonstration.
+ * The methods fromJava and fromTeX are commented out because they are not Java 1.4 compliant.
+ */
+public final class UnicodeClasses {
+
+ /** directory containing unicode properties files */
+ public static final String UNICODE_DIR = "http://www.unicode.org/Public/UNIDATA/";
+
+ /**
+ * Disallow constructor for this utility class
+ */
+ private UnicodeClasses() { }
+
+ /**
+ * Write a comment that this is a generated file,
+ * and instructions on how to generate it
+ * @param w the writer which writes the comment
+ * @throws IOException if the write operation fails
+ */
+ public static void writeGenerated(Writer w) throws IOException {
+ w.write("<!-- !!! THIS IS A GENERATED FILE !!! -->\n");
+ w.write("<!-- If updates are needed, then: -->\n");
+ w.write("<!-- * run 'ant codegen-hyphenation-classes', -->\n");
+ w.write("<!-- which will generate a new file classes.xml -->\n");
+ w.write("<!-- in 'src/java/org/apache/fop/hyphenation' -->\n");
+ w.write("<!-- * commit the changed file -->\n");
+ }
+
+ /**
+ * Generate classes.xml from Java's compiled-in Unicode Character Database
+ * @param hexcode whether to prefix each class with the hexcode (only for debugging purposes)
+ * @param outfilePath output file
+ * @throws IOException if an I/O exception occurs
+ */
+ public static void fromJava(boolean hexcode, String outfilePath) throws IOException {
+ File f = new File(outfilePath);
+ if (f.exists()) {
+ f.delete();
+ }
+ f.createNewFile();
+ FileOutputStream fw = new FileOutputStream(f);
+ OutputStreamWriter ow = new OutputStreamWriter(fw, "utf-8");
+ int maxChar;
+ maxChar = Character.MAX_VALUE;
+
+ ow.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+ License.writeXMLLicenseId(ow);
+ ow.write("\n");
+ writeGenerated(ow);
+ ow.write("\n");
+ ow.write("<classes>\n");
+ // loop over the first Unicode plane
+ for (int code = Character.MIN_VALUE; code <= maxChar; ++code) {
+
+ // skip surrogate area
+ if (code == Character.MIN_SURROGATE) {
+ code = Character.MAX_SURROGATE;
+ continue;
+ }
+
+ // we are only interested in LC, UC and TC letters which are their own LC,
+ // and in 'other letters'
+ if (!(((Character.isLowerCase(code) || Character.isUpperCase(code)
+ || Character.isTitleCase(code))
+ && code == Character.toLowerCase(code))
+ || Character.getType(code) == Character.OTHER_LETTER)) {
+ continue;
+ }
+
+ // skip a number of blocks
+ Character.UnicodeBlock ubi = Character.UnicodeBlock.of(code);
+ if (ubi.equals(Character.UnicodeBlock.SUPERSCRIPTS_AND_SUBSCRIPTS)
+ || ubi.equals(Character.UnicodeBlock.LETTERLIKE_SYMBOLS)
+ || ubi.equals(Character.UnicodeBlock.ALPHABETIC_PRESENTATION_FORMS)
+ || ubi.equals(Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS)
+ || ubi.equals(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)
+ || ubi.equals(Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A)
+ || ubi.equals(Character.UnicodeBlock.HANGUL_SYLLABLES)) {
+ continue;
+ }
+
+ int uppercode = Character.toUpperCase(code);
+ int titlecode = Character.toTitleCase(code);
+ StringBuilder s = new StringBuilder();
+ if (hexcode) {
+ s.append("0x" + Integer.toHexString(code) + " ");
+ }
+ s.append(Character.toChars(code));
+ if (uppercode != code) {
+ s.append(Character.toChars(uppercode));
+ }
+ if (titlecode != code && titlecode != uppercode) {
+ s.append(Character.toChars(titlecode));
+ }
+ ow.write(s.toString() + "\n");
+ }
+ ow.write("</classes>\n");
+ ow.flush();
+ ow.close();
+ }
+
+
+ /** The 1st column in the UCD file. */
+ public static final int UNICODE = 0;
+ /** The 3rd column in the UCD file. */
+ public static final int GENERAL_CATEGORY = 2;
+ /** The 13th column in the UCD file. */
+ public static final int SIMPLE_UPPERCASE_MAPPING = 12;
+ /** The 14th column in the UCD file. */
+ public static final int SIMPLE_LOWERCASE_MAPPING = 13;
+ /** The 15th column in the UCD file. */
+ public static final int SIMPLE_TITLECASE_MAPPING = 14;
+ /** The number of columns in the UCD file. */
+ public static final int NUM_FIELDS = 15;
+
+ /**
+ * Generate classes.xml from Unicode Character Database files
+ * @param hexcode whether to prefix each class with the hexcode (only for debugging purposes)
+ * @param unidataPath path to the directory with UCD files
+ * @param outfilePath output file
+ * @throws IOException if the input files are not found
+ * @throws URISyntaxException if {@code unidataPath} cannot be converted to a URI
+ */
+ public static void fromUCD(boolean hexcode, String unidataPath, String outfilePath)
+ throws IOException, URISyntaxException {
+ URI unidata;
+ if (unidataPath.endsWith("/")) {
+ unidata = new URI(unidataPath);
+ } else {
+ unidata = new URI(unidataPath + "/");
+ }
+ String scheme = unidata.getScheme();
+ if (scheme == null || !(scheme.equals("file") || scheme.equals("http"))) {
+ throw new FileNotFoundException(
+ "URI with file or http scheme required for UNIDATA input directory");
+ }
+
+ File f = new File(outfilePath);
+ if (f.exists()) {
+ f.delete();
+ }
+ f.createNewFile();
+ FileOutputStream fw = new FileOutputStream(f);
+ OutputStreamWriter ow = new OutputStreamWriter(fw, "utf-8");
+
+ URI inuri = unidata.resolve("Blocks.txt");
+ InputStream inis = null;
+ if (scheme.equals("file")) {
+ File in = new File(inuri);
+ inis = new FileInputStream(in);
+ } else if (scheme.equals("http")) {
+ inis = inuri.toURL().openStream();
+ }
+ InputStreamReader insr = new InputStreamReader(inis, "utf-8");
+ BufferedReader inbr = new BufferedReader(insr);
+ Map blocks = new HashMap();
+ for (String line = inbr.readLine(); line != null; line = inbr.readLine()) {
+ if (line.startsWith("#") || line.matches("^\\s*$")) {
+ continue;
+ }
+ String[] parts = line.split(";");
+ String block = parts[1].trim();
+ String[] indices = parts[0].split("\\.\\.");
+ int[] ind = {Integer.parseInt(indices[0], 16), Integer.parseInt(indices[1], 16)};
+ blocks.put(block, ind);
+ }
+ inbr.close();
+
+ inuri = unidata.resolve("UnicodeData.txt");
+ if (scheme.equals("file")) {
+ File in = new File(inuri);
+ inis = new FileInputStream(in);
+ } else if (scheme.equals("http")) {
+ inis = inuri.toURL().openStream();
+ }
+ insr = new InputStreamReader(inis, "utf-8");
+ inbr = new BufferedReader(insr);
+ int maxChar;
+ maxChar = Character.MAX_VALUE;
+
+ ow.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+ License.writeXMLLicenseId(ow);
+ ow.write("\n");
+ writeGenerated(ow);
+ ow.write("\n");
+ ow.write("<classes>\n");
+ for (String line = inbr.readLine(); line != null; line = inbr.readLine()) {
+ String[] fields = line.split(";", NUM_FIELDS);
+ int code = Integer.parseInt(fields[UNICODE], 16);
+ if (code > maxChar) {
+ break;
+ }
+ if (((fields[GENERAL_CATEGORY].equals("Ll") || fields[GENERAL_CATEGORY].equals("Lu")
+ || fields[GENERAL_CATEGORY].equals("Lt"))
+ && ("".equals(fields[SIMPLE_LOWERCASE_MAPPING])
+ || fields[UNICODE].equals(fields[SIMPLE_LOWERCASE_MAPPING])))
+ || fields[GENERAL_CATEGORY].equals("Lo")) {
+ String[] blockNames = {"Superscripts and Subscripts",
+ "Letterlike Symbols",
+ "Alphabetic Presentation Forms",
+ "Halfwidth and Fullwidth Forms",
+ "CJK Unified Ideographs",
+ "CJK Unified Ideographs Extension A",
+ "Hangul Syllables"};
+ int j;
+ for (j = 0; j < blockNames.length; ++j) {
+ int[] ind = (int[]) blocks.get(blockNames[j]);
+ if (code >= ind[0] && code <= ind[1]) {
+ break;
+ }
+ }
+ if (j < blockNames.length) {
+ continue;
+ }
+
+ int uppercode = -1;
+ int titlecode = -1;
+ if (!"".equals(fields[SIMPLE_UPPERCASE_MAPPING])) {
+ uppercode = Integer.parseInt(fields[SIMPLE_UPPERCASE_MAPPING], 16);
+ }
+ if (!"".equals(fields[SIMPLE_TITLECASE_MAPPING])) {
+ titlecode = Integer.parseInt(fields[SIMPLE_TITLECASE_MAPPING], 16);
+ }
+ StringBuilder s = new StringBuilder();
+ if (hexcode) {
+ s.append("0x" + fields[UNICODE].replaceFirst("^0+", "").toLowerCase() + " ");
+ }
+ s.append(Character.toChars(code));
+ if (uppercode != -1 && uppercode != code) {
+ s.append(Character.toChars(uppercode));
+ }
+ if (titlecode != -1 && titlecode != code && titlecode != uppercode) {
+ s.append(Character.toChars(titlecode));
+ }
+ ow.write(s.toString() + "\n");
+ }
+ }
+ ow.write("</classes>\n");
+ ow.flush();
+ ow.close();
+ inbr.close();
+ }
+
+ /**
+ * Generate classes.xml from XeTeX's Unicode letters file
+ * @param hexcode whether to prefix each class with the hexcode (only for debugging purposes)
+ * @param lettersPath path to XeTeX's Unicode letters file unicode-letters-XeTeX.tex
+ * @param outfilePath output file
+ * @throws IOException in case of an I/O exception
+ */
+ public static void fromTeX(boolean hexcode, String lettersPath, String outfilePath)
+ throws IOException {
+ File in = new File(lettersPath);
+
+ File f = new File(outfilePath);
+ if (f.exists()) {
+ f.delete();
+ }
+ f.createNewFile();
+ FileOutputStream fw = new FileOutputStream(f);
+ OutputStreamWriter ow = new OutputStreamWriter(fw, "utf-8");
+
+ FileInputStream inis = new FileInputStream(in);
+ InputStreamReader insr = new InputStreamReader(inis, "utf-8");
+ BufferedReader inbr = new BufferedReader(insr);
+
+ ow.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+ License.writeXMLLicenseId(ow);
+ ow.write("\n");
+ writeGenerated(ow);
+ ow.write("\n");
+ ow.write("<classes>\n");
+ for (String line = inbr.readLine(); line != null; line = inbr.readLine()) {
+ String[] codes = line.split("\\s+");
+ if (!(codes[0].equals("\\L") || codes[0].equals("\\l"))) {
+ continue;
+ }
+ if (codes.length == 3) {
+ ow.write("\"" + line + "\" has two codes");
+ continue;
+ }
+ if (codes[0].equals("\\l") && codes.length != 2) {
+ ow.write("\"" + line + "\" should have one code");
+ continue;
+ } else if (codes[0].equals("\\L") && codes.length != 4) {
+ ow.write("\"" + line + "\" should have three codes");
+ continue;
+ }
+ if (codes[0].equals("\\l") || (codes[0].equals("\\L") && codes[1].equals(codes[3]))) {
+ StringBuilder s = new StringBuilder();
+ if (hexcode) {
+ s.append("0x" + codes[1].replaceFirst("^0+", "").toLowerCase() + " ");
+ }
+ s.append(Character.toChars(Integer.parseInt(codes[1], 16)));
+ if (codes[0].equals("\\L")) {
+ s.append(Character.toChars(Integer.parseInt(codes[2], 16)));
+ }
+ ow.write(s.toString() + "\n");
+ }
+ }
+ ow.write("</classes>\n");
+ ow.flush();
+ ow.close();
+ inbr.close();
+ }
+
+
+ /**
+ * @param args [--hexcode] [--java|--ucd|--tex] outfile [infile]
+ * @throws IOException if the input file cannot be found
+ * @throws URISyntaxException if the input URI is incorrect
+ */
+ public static void main(String[] args) throws IOException, URISyntaxException {
+ String type = "ucd";
+ String prefix = "--";
+ String infile = null;
+ String outfile = null;
+ boolean hexcode = false;
+ int i;
+ for (i = 0; i < args.length && args[i].startsWith(prefix); ++i) {
+ String option = args[i].substring(prefix.length());
+ if (option.equals("java") || option.equals("ucd") || option.equals("tex")) {
+ type = option;
+ } else if (option.equals("hexcode")) {
+ hexcode = true;
+ } else {
+ System.err.println("Unknown option: " + option);
+ System.exit(1);
+ }
+ }
+ if (i < args.length) {
+ outfile = args[i];
+ } else {
+ System.err.println("Output file is required; aborting");
+ System.exit(1);
+ }
+ if (++i < args.length) {
+ infile = args[i];
+ }
+
+ if (type.equals("java") && infile != null) {
+ System.err.println("Type java does not allow an infile");
+ System.exit(1);
+ } else if (type.equals("ucd") && infile == null) {
+ infile = UNICODE_DIR;
+ } else if (type.equals("tex") && infile == null) {
+ System.err.println("Type tex requires an input file");
+ System.exit(1);
+ }
+ if (type.equals("java")) {
+ fromJava(hexcode, outfile);
+ } else if (type.equals("ucd")) {
+ fromUCD(hexcode, infile, outfile);
+ } else if (type.equals("tex")) {
+ fromTeX(hexcode, infile, outfile);
+ } else {
+ System.err.println("Unknown type: " + type + ", nothing done");
+ System.exit(1);
+ }
+ }
+
+}
diff --git a/fop-core/src/main/codegen/unicode/java/org/apache/fop/text/linebreak/GenerateLineBreakUtils.java b/fop-core/src/main/codegen/unicode/java/org/apache/fop/text/linebreak/GenerateLineBreakUtils.java
new file mode 100644
index 000000000..a73a7f387
--- /dev/null
+++ b/fop-core/src/main/codegen/unicode/java/org/apache/fop/text/linebreak/GenerateLineBreakUtils.java
@@ -0,0 +1,704 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.text.linebreak;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.fop.util.License;
+
+// CSOFF: LineLengthCheck
+
+/**
+ * <p>Utility for generating a Java class representing line break properties
+ * from the Unicode property files.</p>
+ * <p>Customizations:
+ * <ul>
+ * <li>The pair table file is a cut+paste of the sample table from the TR14
+ * HTML file into a text file.</li>
+ * <li>Because the sample table does not cover all line break classes, check the
+ * 'not in pair table' list of property value short names.</li>
+ * <li>Check MAX_LINE_LENGTH.</li>
+ * </ul>
+ *
+ */
+public final class GenerateLineBreakUtils {
+
+ private GenerateLineBreakUtils() {
+ }
+
+ private static final int MAX_LINE_LENGTH = 110;
+
+ private static final byte DIRECT_BREAK = 0; // _ in table
+ private static final byte INDIRECT_BREAK = 1; // % in table
+ private static final byte COMBINING_INDIRECT_BREAK = 2; // # in table
+ private static final byte COMBINING_PROHIBITED_BREAK = 3; // @ in table
+ private static final byte PROHIBITED_BREAK = 4; // ^ in table
+ private static final byte EXPLICIT_BREAK = 5; // ! in rules
+ private static final String BREAK_CLASS_TOKENS = "_%#@^!";
+ private static final String[] NOT_IN_PAIR_TABLE = {
+ "AI", "BK", "CB", "CR", "LF", "NL", "SA", "SG", "SP", "XX"
+ };
+
+ private static byte[] lineBreakProperties = new byte[0x10000];
+ private static Map lineBreakPropertyValues = new HashMap();
+ private static List lineBreakPropertyShortNames = new ArrayList();
+ private static List lineBreakPropertyLongNames = new ArrayList();
+
+ /**
+ * Generate a class managing line break properties for Unicode characters and a sample
+ * table for the table driven line breaking algorithm described in
+ * <a href="http://unicode.org/reports/tr14/#PairBasedImplementation">UTR #14</a>.
+ * TODO: Code points above the base plane are simply ignored.
+ *
+ * @param lineBreakFileName Name of line break property file (part of Unicode files).
+ * @param propertyValueFileName Name of property values alias file (part of Unicode files).
+ * @param breakPairFileName Name of pair table file (<i>not</i> part of the unicode files).
+ * @param outFileName Name of the output file.
+ * @throws Exception in case anything goes wrong.
+ */
+ private static void convertLineBreakProperties(
+ String lineBreakFileName,
+ String propertyValueFileName,
+ String breakPairFileName,
+ String outFileName)
+ throws Exception {
+
+ readLineBreakProperties(lineBreakFileName, propertyValueFileName);
+ // read break pair table
+ int lineBreakPropertyValueCount = lineBreakPropertyValues.size();
+ int tableSize = lineBreakPropertyValueCount - NOT_IN_PAIR_TABLE.length;
+ Map notInPairTableMap = new HashMap(NOT_IN_PAIR_TABLE.length);
+ for (int i = 0; i < NOT_IN_PAIR_TABLE.length; i++) {
+ Object v = lineBreakPropertyValues.get(NOT_IN_PAIR_TABLE[i]);
+ if (v == null) {
+ throw new Exception("'not in pair table' property not found: " + NOT_IN_PAIR_TABLE[i]);
+ }
+ notInPairTableMap.put(NOT_IN_PAIR_TABLE[i], v);
+ }
+ byte[][] pairTable = new byte[tableSize][];
+ byte[] columnHeader = new byte[tableSize];
+ byte[] rowHeader = new byte[tableSize];
+ byte[] columnMap = new byte[lineBreakPropertyValueCount + 1];
+ Arrays.fill(columnMap, (byte)255);
+ byte[] rowMap = new byte[lineBreakPropertyValueCount + 1];
+ Arrays.fill(rowMap, (byte)255);
+ BufferedReader b = new BufferedReader(new FileReader(breakPairFileName));
+ String line = b.readLine();
+ int lineNumber = 1;
+ String[] lineTokens;
+ String name;
+ // read header
+ if (line != null) {
+ lineTokens = line.split("\\s+");
+ byte columnNumber = 0;
+
+ for (int i = 0; i < lineTokens.length; ++i) {
+ name = lineTokens[i];
+ if (name.length() > 0) {
+ if (columnNumber >= columnHeader.length) {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": unexpected column header " + name);
+ }
+ if (notInPairTableMap.get(name) != null) {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": invalid column header " + name);
+ }
+ Byte v = (Byte)lineBreakPropertyValues.get(name);
+ if (v != null) {
+ byte vv = v.byteValue();
+ columnHeader[columnNumber] = vv;
+ columnMap[vv] = columnNumber;
+ } else {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": unknown column header " + name);
+ }
+ columnNumber++;
+ }
+ }
+ if (columnNumber < columnHeader.length) {
+ StringBuffer missing = new StringBuffer();
+ for (int j = 0; j < lineBreakPropertyShortNames.size(); j++) {
+ boolean found = false;
+ for (int k = 0; k < columnNumber; k++) {
+ if (columnHeader[k] == j + 1) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ if (missing.length() > 0) {
+ missing.append(", ");
+ }
+ missing.append((String)lineBreakPropertyShortNames.get(j));
+ }
+ }
+ throw new Exception(
+ breakPairFileName + ':' + lineNumber + ": missing column for properties: " + missing.toString());
+ }
+ } else {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": can't read table header");
+ }
+ line = b.readLine().trim();
+ lineNumber++;
+ byte rowNumber = 0;
+ while (line != null && line.length() > 0) {
+ if (rowNumber >= rowHeader.length) {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": unexpected row " + line);
+ }
+ pairTable[rowNumber] = new byte[tableSize];
+ lineTokens = line.split("\\s+");
+ if (lineTokens.length > 0) {
+ name = lineTokens[0];
+ if (notInPairTableMap.get(name) != null) {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": invalid row header " + name);
+ }
+ Byte v = (Byte)lineBreakPropertyValues.get(name);
+ if (v != null) {
+ byte vv = v.byteValue();
+ rowHeader[rowNumber] = vv;
+ rowMap[vv] = rowNumber;
+ } else {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": unknown row header " + name);
+ }
+ } else {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": can't read row header");
+ }
+ int columnNumber = 0;
+ String token;
+ for (int i = 1; i < lineTokens.length; ++i) {
+ token = lineTokens[i];
+ if (token.length() == 1) {
+ byte tokenBreakClass = (byte)BREAK_CLASS_TOKENS.indexOf(token.charAt(0));
+ if (tokenBreakClass >= 0) {
+ pairTable[rowNumber][columnNumber] = tokenBreakClass;
+ } else {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": unexpected token: " + token);
+ }
+ } else {
+ throw new Exception(breakPairFileName + ':' + lineNumber + ": token too long: " + token);
+ }
+ columnNumber++;
+ }
+ line = b.readLine().trim();
+ lineNumber++;
+ rowNumber++;
+ }
+ if (rowNumber < rowHeader.length) {
+ StringBuffer missing = new StringBuffer();
+ for (int j = 0; j < lineBreakPropertyShortNames.size(); j++) {
+ boolean found = false;
+ for (int k = 0; k < rowNumber; k++) {
+ if (rowHeader[k] == j + 1) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ if (missing.length() > 0) {
+ missing.append(", ");
+ }
+ missing.append((String)lineBreakPropertyShortNames.get(j));
+ }
+ }
+ throw new Exception(
+ breakPairFileName + ':' + lineNumber + ": missing row for properties: " + missing.toString());
+ }
+
+ // generate class
+ int rowsize = 512;
+ int blocksize = lineBreakProperties.length / rowsize;
+ byte[][] row = new byte[rowsize][];
+ int idx = 0;
+ StringBuffer doStaticLinkCode = new StringBuffer();
+ PrintWriter out = new PrintWriter(new FileWriter(outFileName));
+ License.writeJavaLicenseId(out);
+ out.println();
+ out.println("package org.apache.fop.text.linebreak;");
+ out.println();
+ out.println("/*");
+ out.println(" * !!! THIS IS A GENERATED FILE !!!");
+ out.println(" * If updates to the source are needed, then:");
+ out.println(" * - apply the necessary modifications to");
+ out.println(" * 'src/codegen/unicode/java/org/apache/fop/text/linebreak/GenerateLineBreakUtils.java'");
+ out.println(" * - run 'ant codegen-unicode', which will generate a new LineBreakUtils.java");
+ out.println(" * in 'src/java/org/apache/fop/text/linebreak'");
+ out.println(" * - commit BOTH changed files");
+ out.println(" */");
+ out.println();
+ out.println("// CSOFF: WhitespaceAfterCheck");
+ out.println("// CSOFF: LineLengthCheck");
+ out.println();
+ out.println("/** Line breaking utilities. */");
+ out.println("public final class LineBreakUtils {");
+ out.println();
+ out.println(" private LineBreakUtils() {");
+ out.println(" }");
+ out.println();
+ out.println(" /** Break class constant */");
+ out.println(" public static final byte DIRECT_BREAK = " + DIRECT_BREAK + ';');
+ out.println(" /** Break class constant */");
+ out.println(" public static final byte INDIRECT_BREAK = " + INDIRECT_BREAK + ';');
+ out.println(" /** Break class constant */");
+ out.println(" public static final byte COMBINING_INDIRECT_BREAK = " + COMBINING_INDIRECT_BREAK + ';');
+ out.println(" /** Break class constant */");
+ out.println(" public static final byte COMBINING_PROHIBITED_BREAK = " + COMBINING_PROHIBITED_BREAK + ';');
+ out.println(" /** Break class constant */");
+ out.println(" public static final byte PROHIBITED_BREAK = " + PROHIBITED_BREAK + ';');
+ out.println(" /** Break class constant */");
+ out.println(" public static final byte EXPLICIT_BREAK = " + EXPLICIT_BREAK + ';');
+ out.println();
+ out.println(" private static final byte[][] PAIR_TABLE = {");
+ boolean printComma = false;
+ for (int i = 1; i <= lineBreakPropertyValueCount; i++) {
+ if (printComma) {
+ out.println(",");
+ } else {
+ printComma = true;
+ }
+ out.print(" {");
+ boolean localPrintComma = false;
+ for (int j = 1; j <= lineBreakPropertyValueCount; j++) {
+ if (localPrintComma) {
+ out.print(", ");
+ } else {
+ localPrintComma = true;
+ }
+ if (columnMap[j] != -1 && rowMap[i] != -1) {
+ out.print(pairTable[rowMap[i]][columnMap[j]]);
+ } else {
+ out.print('0');
+ }
+ }
+ out.print('}');
+ }
+ out.println("};");
+ out.println();
+ out.println(" private static byte[][] lineBreakProperties = new byte[" + rowsize + "][];");
+ out.println();
+ out.println(" private static void init0() {");
+ int rowsPrinted = 0;
+ int initSections = 0;
+ for (int i = 0; i < rowsize; i++) {
+ boolean found = false;
+ for (int j = 0; j < i; j++) {
+ if (row[j] != null) {
+ boolean matched = true;
+ for (int k = 0; k < blocksize; k++) {
+ if (row[j][k] != lineBreakProperties[idx + k]) {
+ matched = false;
+ break;
+ }
+ }
+ if (matched) {
+ found = true;
+ doStaticLinkCode.append(" lineBreakProperties[");
+ doStaticLinkCode.append(i);
+ doStaticLinkCode.append("] = lineBreakProperties[");
+ doStaticLinkCode.append(j);
+ doStaticLinkCode.append("];\n");
+ break;
+ }
+ }
+ }
+ if (!found) {
+ if (rowsPrinted >= 64) {
+ out.println(" }");
+ out.println();
+ initSections++;
+ out.println(" private static void init" + initSections + "() {");
+ rowsPrinted = 0;
+ }
+ row[i] = new byte[blocksize];
+ boolean printLocalComma = false;
+ out.print(" lineBreakProperties[" + i + "] = new byte[] { ");
+ for (int k = 0; k < blocksize; k++) {
+ row[i][k] = lineBreakProperties[idx + k];
+ if (printLocalComma) {
+ out.print(", ");
+ } else {
+ printLocalComma = true;
+ }
+ out.print(row[i][k]);
+ }
+ out.println("};");
+ rowsPrinted++;
+ }
+ idx += blocksize;
+ }
+ out.println(" }");
+ out.println();
+ out.println(" static {");
+ for (int i = 0; i <= initSections; i++) {
+ out.println(" init" + i + "();");
+ }
+ out.print(doStaticLinkCode);
+ out.println(" }");
+ out.println();
+ for (int i = 0; i < lineBreakPropertyShortNames.size(); i++) {
+ String shortName = (String)lineBreakPropertyShortNames.get(i);
+ out.println(" /** Linebreak property constant */");
+ out.print(" public static final byte LINE_BREAK_PROPERTY_");
+ out.print(shortName);
+ out.print(" = ");
+ out.print(i + 1);
+ out.println(';');
+ }
+ out.println();
+ final String shortNamePrefix = " private static String[] lineBreakPropertyShortNames = {";
+ out.print(shortNamePrefix);
+ int lineLength = shortNamePrefix.length();
+ printComma = false;
+ for (int i = 0; i < lineBreakPropertyShortNames.size(); i++) {
+ name = (String)lineBreakPropertyShortNames.get(i);
+ if (printComma) {
+ if (lineLength <= MAX_LINE_LENGTH - 2) {
+ out.print(", ");
+ } else {
+ out.print(",");
+ }
+ // count the space anyway to force a linebreak if the comma causes lineLength == MAX_LINE_LENGTH
+ lineLength += 2;
+ } else {
+ printComma = true;
+ }
+ if (lineLength > MAX_LINE_LENGTH) {
+ out.println();
+ out.print(" ");
+ lineLength = 8;
+ }
+ out.print('"');
+ out.print(name);
+ out.print('"');
+ lineLength += (2 + name.length());
+ }
+ out.println("};");
+ out.println();
+ final String longNamePrefix = " private static String[] lineBreakPropertyLongNames = {";
+ out.print(longNamePrefix);
+ lineLength = longNamePrefix.length();
+ printComma = false;
+ for (int i = 0; i < lineBreakPropertyLongNames.size(); i++) {
+ name = (String)lineBreakPropertyLongNames.get(i);
+ if (printComma) {
+ out.print(',');
+ lineLength++;
+ } else {
+ printComma = true;
+ }
+ if (lineLength > MAX_LINE_LENGTH) {
+ out.println();
+ out.print(" ");
+ lineLength = 8;
+ }
+ out.print('"');
+ out.print(name);
+ out.print('"');
+ lineLength += (2 + name.length());
+ }
+ out.println("};");
+ out.println();
+ out.println(" /**");
+ out.println(" * Return the short name for the linebreak property corresponding");
+ out.println(" * to the given symbolic constant.");
+ out.println(" *");
+ out.println(" * @param i the numeric value of the linebreak property");
+ out.println(" * @return the short name of the linebreak property");
+ out.println(" */");
+ out.println(" public static String getLineBreakPropertyShortName(byte i) {");
+ out.println(" if (i > 0 && i <= lineBreakPropertyShortNames.length) {");
+ out.println(" return lineBreakPropertyShortNames[i - 1];");
+ out.println(" } else {");
+ out.println(" return null;");
+ out.println(" }");
+ out.println(" }");
+ out.println();
+ out.println(" /**");
+ out.println(" * Return the long name for the linebreak property corresponding");
+ out.println(" * to the given symbolic constant.");
+ out.println(" *");
+ out.println(" * @param i the numeric value of the linebreak property");
+ out.println(" * @return the long name of the linebreak property");
+ out.println(" */");
+ out.println(" public static String getLineBreakPropertyLongName(byte i) {");
+ out.println(" if (i > 0 && i <= lineBreakPropertyLongNames.length) {");
+ out.println(" return lineBreakPropertyLongNames[i - 1];");
+ out.println(" } else {");
+ out.println(" return null;");
+ out.println(" }");
+ out.println(" }");
+ out.println();
+ out.println(" /**");
+ out.println(" * Return the linebreak property constant for the given <code>char</code>");
+ out.println(" *");
+ out.println(" * @param c the <code>char</code> whose linebreak property to return");
+ out.println(" * @return the constant representing the linebreak property");
+ out.println(" */");
+ out.println(" public static byte getLineBreakProperty(char c) {");
+ out.println(" return lineBreakProperties[c / " + blocksize + "][c % " + blocksize + "];");
+ out.println(" }");
+ out.println();
+ out.println(" /**");
+ out.println(" * Return the break class constant for the given pair of linebreak");
+ out.println(" * property constants.");
+ out.println(" *");
+ out.println(" * @param lineBreakPropertyBefore the linebreak property for the first character");
+ out.println(" * in a two-character sequence");
+ out.println(" * @param lineBreakPropertyAfter the linebreak property for the second character");
+ out.println(" * in a two-character sequence");
+ out.println(" * @return the constant representing the break class");
+ out.println(" */");
+ out.println(
+ " public static byte getLineBreakPairProperty(int lineBreakPropertyBefore, int lineBreakPropertyAfter) {");
+ out.println(" return PAIR_TABLE[lineBreakPropertyBefore - 1][lineBreakPropertyAfter - 1];");
+ out.println(" }");
+ out.println();
+ out.println("}");
+ out.flush();
+ out.close();
+ }
+
+ /**
+ * Read line break property value names and the actual properties for the Unicode
+ * characters from the respective Unicode files.
+ * TODO: Code points above the base plane are simply ignored.
+ *
+ * @param lineBreakFileName Name of line break property file.
+ * @param propertyValueFileName Name of property values alias file.
+ * @throws Exception in case anything goes wrong.
+ */
+ private static void readLineBreakProperties(String lineBreakFileName, String propertyValueFileName)
+ throws Exception {
+ // read property names
+ BufferedReader b = new BufferedReader(new InputStreamReader(new URL(propertyValueFileName).openStream()));
+ String line = b.readLine();
+ int lineNumber = 1;
+ byte propertyIndex = 1;
+ byte indexForUnknown = 0;
+ while (line != null) {
+ if (line.startsWith("lb")) {
+ String shortName;
+ String longName = null;
+ int semi = line.indexOf(';');
+ if (semi < 0) {
+ throw new Exception(
+ propertyValueFileName + ':' + lineNumber + ": missing property short name in " + line);
+ }
+ line = line.substring(semi + 1);
+ semi = line.indexOf(';');
+ if (semi > 0) {
+ shortName = line.substring(0, semi).trim();
+ longName = line.substring(semi + 1).trim();
+ semi = longName.indexOf(';');
+ if (semi > 0) {
+ longName = longName.substring(0, semi).trim();
+ }
+ } else {
+ shortName = line.trim();
+ }
+ if (shortName.equals("XX")) {
+ indexForUnknown = propertyIndex;
+ }
+ lineBreakPropertyValues.put(shortName, new Byte((byte)propertyIndex));
+ lineBreakPropertyShortNames.add(shortName);
+ lineBreakPropertyLongNames.add(longName);
+ propertyIndex++;
+ if (propertyIndex <= 0) {
+ throw new Exception(propertyValueFileName + ':' + lineNumber + ": property rolled over in " + line);
+ }
+ }
+ line = b.readLine();
+ lineNumber++;
+ }
+ if (indexForUnknown == 0) {
+ throw new Exception("index for XX (unknown) line break property value not found");
+ }
+
+ // read property values
+ Arrays.fill(lineBreakProperties, (byte)0);
+ b = new BufferedReader(new InputStreamReader(new URL(lineBreakFileName).openStream()));
+ line = b.readLine();
+ lineNumber = 1;
+ while (line != null) {
+ int idx = line.indexOf('#');
+ if (idx >= 0) {
+ line = line.substring(0, idx);
+ }
+ line = line.trim();
+ if (line.length() > 0) {
+ idx = line.indexOf(';');
+ if (idx <= 0) {
+ throw new Exception(lineBreakFileName + ':' + lineNumber + ": No field delimiter in " + line);
+ }
+ Byte v = (Byte)lineBreakPropertyValues.get(line.substring(idx + 1).trim());
+ if (v == null) {
+ throw new Exception(lineBreakFileName + ':' + lineNumber + ": Unknown property value in " + line);
+ }
+ String codepoint = line.substring(0, idx);
+ int low;
+ int high;
+ idx = codepoint.indexOf("..");
+ try {
+ if (idx >= 0) {
+ low = Integer.parseInt(codepoint.substring(0, idx), 16);
+ high = Integer.parseInt(codepoint.substring(idx + 2), 16);
+ } else {
+ low = Integer.parseInt(codepoint, 16);
+ high = low;
+ }
+ } catch (NumberFormatException e) {
+ throw new Exception(lineBreakFileName + ':' + lineNumber + ": Invalid codepoint number in " + line);
+ }
+ if (high > 0xFFFF) {
+ // ignore non-baseplane characters for now
+
+ } else {
+ if (low < 0 || high < 0) {
+ throw new Exception(
+ lineBreakFileName + ':' + lineNumber + ": Negative codepoint(s) in " + line);
+ }
+ byte vv = v.byteValue();
+ for (int i = low; i <= high; i++) {
+ if (lineBreakProperties[i] != 0) {
+ throw new Exception(
+ lineBreakFileName
+ + ':'
+ + lineNumber
+ + ": Property already set for "
+ + ((char)i)
+ + " in "
+ + line);
+ }
+ lineBreakProperties[i] = vv;
+ }
+ }
+ }
+ line = b.readLine();
+ lineNumber++;
+ }
+ }
+
+ /**
+ * Determine a good block size for the two stage optimized storage of the
+ * line breaking properties. Note: the memory utilization calculation is a rule of thumb,
+ * don't take it too serious.
+ *
+ * @param lineBreakFileName Name of line break property file.
+ * @param propertyValueFileName Name of property values alias file.
+ * @throws Exception in case anything goes wrong.
+ */
+ private static void optimizeBlocks(String lineBreakFileName, String propertyValueFileName) throws Exception {
+ readLineBreakProperties(lineBreakFileName, propertyValueFileName);
+ for (int i = 0; i < 16; i++) {
+ int rowsize = 1 << i;
+ int blocksize = lineBreakProperties.length / (rowsize);
+ byte[][] row = new byte[rowsize][];
+ int idx = 0;
+ int nrOfDistinctBlocks = 0;
+ for (int j = 0; j < rowsize; j++) {
+ byte[] block = new byte[blocksize];
+ for (int k = 0; k < blocksize; k++) {
+ block[k] = lineBreakProperties[idx];
+ idx++;
+ }
+ boolean found = false;
+ for (int k = 0; k < j; k++) {
+ if (row[k] != null) {
+ boolean matched = true;
+ for (int l = 0; l < blocksize; l++) {
+ if (row[k][l] != block[l]) {
+ matched = false;
+ break;
+ }
+ }
+ if (matched) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ row[j] = block;
+ nrOfDistinctBlocks++;
+ } else {
+ row[j] = null;
+ }
+ }
+ int size = rowsize * 4 + nrOfDistinctBlocks * blocksize;
+ System.out.println(
+ "i=" + i + " blocksize=" + blocksize + " blocks=" + nrOfDistinctBlocks + " size=" + size);
+ }
+ }
+
+ /**
+ * Main entry point for running GenerateLineBreakUtils
+ * @param args array of command line arg
+ */
+ public static void main(String[] args) {
+ String lineBreakFileName = "http://www.unicode.org/Public/UNIDATA/LineBreak.txt";
+ String propertyValueFileName = "http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt";
+ String breakPairFileName = "src/codegen/unicode/data/LineBreakPairTable.txt";
+ String outFileName = "LineBreakUtils.java";
+ boolean ok = true;
+ for (int i = 0; i < args.length; i = i + 2) {
+ if (i + 1 == args.length) {
+ ok = false;
+ } else {
+ String opt = args[i];
+ if ("-l".equals(opt)) {
+ lineBreakFileName = args[i + 1];
+ } else if ("-p".equals(opt)) {
+ propertyValueFileName = args[i + 1];
+ } else if ("-b".equals(opt)) {
+ breakPairFileName = args[i + 1];
+ } else if ("-o".equals(opt)) {
+ outFileName = args[i + 1];
+ } else {
+ ok = false;
+ }
+ }
+ }
+ if (!ok) {
+ System.out.println("Usage: GenerateLineBreakUtils [-l <lineBreakFile>] [-p <propertyValueFile>] [-b <breakPairFile>] [-o <outputFile>]");
+ System.out.println(" defaults:");
+ System.out.println(" <lineBreakFile>: " + lineBreakFileName);
+ System.out.println(" <propertyValueFile>: " + propertyValueFileName);
+ System.out.println(" <breakPairFile>: " + breakPairFileName);
+ System.out.println(" <outputFile>: " + outFileName);
+ } else {
+ try {
+ convertLineBreakProperties(lineBreakFileName, propertyValueFileName, breakPairFileName, outFileName);
+ System.out.println("Generated " + outFileName + " from");
+ System.out.println(" <lineBreakFile>: " + lineBreakFileName);
+ System.out.println(" <propertyValueFile>: " + propertyValueFileName);
+ System.out.println(" <breakPairFile>: " + breakPairFileName);
+ } catch (Exception e) {
+ System.out.println("An unexpected error occured");
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/fop-core/src/main/codegen/unicode/java/org/apache/fop/util/License.java b/fop-core/src/main/codegen/unicode/java/org/apache/fop/util/License.java
new file mode 100644
index 000000000..0a9b6d339
--- /dev/null
+++ b/fop-core/src/main/codegen/unicode/java/org/apache/fop/util/License.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.util;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
+
+/**
+ * Write the Apache license text in various forms
+ */
+public final class License {
+
+ private License() {
+ }
+
+ /**
+ * The Apache license text as a string array
+ */
+ public static final String[] LICENSE
+ = {"Licensed to the Apache Software Foundation (ASF) under one or more",
+ "contributor license agreements. See the NOTICE file distributed with",
+ "this work for additional information regarding copyright ownership.",
+ "The ASF licenses this file to You under the Apache License, Version 2.0",
+ "(the \"License\"); you may not use this file except in compliance with",
+ "the License. You may obtain a copy of the License at",
+ "",
+ " http://www.apache.org/licenses/LICENSE-2.0",
+ "",
+ "Unless required by applicable law or agreed to in writing, software",
+ "distributed under the License is distributed on an \"AS IS\" BASIS,",
+ "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
+ "See the License for the specific language governing permissions and",
+ "limitations under the License."
+ };
+
+ /**
+ * The subversion Id keyword line
+ */
+ public static final String ID = "$Id$";
+
+ /**
+ * Calculate the maximum line length in the Apache license text
+ * for use in formatting
+ */
+ private static int maxLength;
+ static {
+ int j = 0;
+ for (int i = 0; i < LICENSE.length; ++i) {
+ if (j < LICENSE[i].length()) {
+ j = LICENSE[i].length();
+ }
+ }
+ maxLength = j;
+ }
+
+ /**
+ * Write the Apache license text as commented lines for a Java file
+ * @param w the writer which writes the comment
+ * @throws IOException if the write operation fails
+ */
+ public static void writeJavaLicenseId(Writer w) throws IOException {
+ w.write("/*\n");
+ for (int i = 0; i < LICENSE.length; ++i) {
+ if (LICENSE[i].equals("")) {
+ w.write(" *\n");
+ } else {
+ w.write(" * " + LICENSE[i] + "\n");
+ }
+ }
+ w.write(" */\n");
+ w.write("\n");
+ w.write("/* " + ID + " */\n");
+ }
+
+ /**
+ * Write the Apache license text as commented lines for an XML file
+ * @param w the writer which writes the comment
+ * @throws IOException if the write operation fails
+ */
+ public static void writeXMLLicenseId(Writer w) throws IOException {
+ for (int i = 0; i < LICENSE.length; ++i) {
+ w.write(String.format("<!-- %-" + maxLength + "s -->\n", new Object[] {LICENSE[i]}));
+ }
+ w.write("\n");
+ w.write("<!-- " + ID + " -->\n");
+ }
+
+ /**
+ * For testing purposes
+ * @param args optional, --java or --xml
+ * @throws IOException if the write operation fails
+ */
+ public static void main(String[] args) throws IOException {
+ StringWriter w = new StringWriter();
+ if (args.length == 0 || args[0].equals("--java")) {
+ writeJavaLicenseId(w);
+ } else if (args[0].equals("--xml")) {
+ writeXMLLicenseId(w);
+ }
+ System.out.println(w.toString());
+ }
+
+}