aboutsummaryrefslogtreecommitdiffstats
path: root/src/codegen/fo-property-mapping.xsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/fo-property-mapping.xsl')
-rw-r--r--src/codegen/fo-property-mapping.xsl272
1 files changed, 272 insertions, 0 deletions
diff --git a/src/codegen/fo-property-mapping.xsl b/src/codegen/fo-property-mapping.xsl
new file mode 100644
index 000000000..a6a888898
--- /dev/null
+++ b/src/codegen/fo-property-mapping.xsl
@@ -0,0 +1,272 @@
+<!--
+$Id$
+============================================================================
+ The Apache Software License, Version 1.1
+============================================================================
+
+Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modifica-
+tion, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+4. The names "FOP" and "Apache Software Foundation" must not be used to
+ endorse or promote products derived from this software without prior
+ written permission. For written permission, please contact
+ apache@apache.org.
+
+5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+============================================================================
+
+This software consists of voluntary contributions made by many individuals
+on behalf of the Apache Software Foundation and was originally created by
+James Tauber <jtauber@jtauber.com>. For more information on the Apache
+Software Foundation, please see <http://www.apache.org/>.
+-->
+<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> </xsl:text><xsl:value-of select="$htname"/>String.put("<xsl:value-of select="$prop/name"/>", <xsl:value-of select="$makerclass"/>.maker("<xsl:value-of select="$prop/name"/>"));
+<xsl:text> </xsl:text><xsl:value-of select="$htname"/>[PR_<xsl:value-of select="$enum"/>] =<xsl:value-of select="$makerclass"/>.maker("<xsl:value-of select="$prop/name"/>");
+<xsl:text> addPropertyName("</xsl:text><xsl:value-of select="$prop/name"/>", 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.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];
+ private static HashMap s_htGenericString = new HashMap(); // temporary
+ private static HashMap s_htElementStringLists = new HashMap(); // temporary
+ 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 HashMap getGenericStringMappings() {
+ return s_htGenericString;
+ }
+
+ public static Set getElementStringMappings() {
+ return s_htElementStringLists.keySet();
+ }
+
+ public static HashMap getElementStringMapping(String elemName) {
+ return (HashMap)s_htElementStringLists.get(elemName);
+ }
+
+ 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) {
+ Integer i = (Integer) s_htPropNames.get(name);
+ if (i == null)
+ return -1;
+ return i.intValue();
+ }
+
+ public static int getSubPropertyId(String name) {
+ Integer i = (Integer) s_htSubPropNames.get(name);
+ if (i == null)
+ return -1;
+ return i.intValue();
+ }
+
+ public static String getPropertyName(int id) {
+ return (String) s_htPropIds.get(new Integer(id));
+ }
+
+ 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>
+
+