diff options
Diffstat (limited to 'fop-core/src/main/codegen')
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 << 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="' << 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 & Constants.COMPOUND_MASK) == 0) + || ((id & Constants.PROPERTY_MASK) == 0)) { + return (String) s_htPropIds.get(new Integer(id)); + } else { + return (String) s_htPropIds.get(new Integer( + id & Constants.PROPERTY_MASK)) + "." + s_htPropIds.get( + new Integer(id & 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 < 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 < elements.length; i++) { + dirty = dirty || elements[i].merge(); + } + } + // Calculate the sparse indices for each element. + for (int i = 1; i < 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 < 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 < 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 < children.size(); i++) { + Element child = (Element) children.get(i); + BitSet childValid = child.valid; + int n = childValid.length(); + for (int j = 0; j < n; j++) { + if (childValid.get(j) && !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>
 /*</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 < 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) < $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) > 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) > 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) > 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) > 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 && 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 && 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 > 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 < 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 < 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 && 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 && 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 > 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 < 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 < 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()); + } + +} |