aboutsummaryrefslogtreecommitdiffstats
path: root/src/codegen
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2003-12-20 17:40:01 +0000
committerGlen Mazza <gmazza@apache.org>2003-12-20 17:40:01 +0000
commita93ddf92d90ee5ef8a4995488dc330b289bcdde8 (patch)
treed3b6a6a33e95a546e8332209612f82eeafaaa4fe /src/codegen
parent0223653f86057291343b9d52d6414ebfd869cb6a (diff)
downloadxmlgraphics-fop-a93ddf92d90ee5ef8a4995488dc330b289bcdde8.tar.gz
xmlgraphics-fop-a93ddf92d90ee5ef8a4995488dc330b289bcdde8.zip
Property Makers now being activated via int constants. (Maker classes themselves, as well as code referencing the properties, still need conversion to int's. Also, HashMaps for String and Integer in FOPropertyMapping and FObj temporarily being retained for troubleshooting purposes.) Contribution mainly from Finn Bock (Bug #25480).
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197043 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/fo-property-mapping.xsl (renamed from src/codegen/propmap.xsl)120
1 files changed, 114 insertions, 6 deletions
diff --git a/src/codegen/propmap.xsl b/src/codegen/fo-property-mapping.xsl
index c300f5e49..a6a888898 100644
--- a/src/codegen/propmap.xsl
+++ b/src/codegen/fo-property-mapping.xsl
@@ -76,29 +76,65 @@ Software Foundation, please see <http://www.apache.org/>.
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
-<xsl:text> </xsl:text><xsl:value-of select="$htname"/>.put("<xsl:value-of select="$prop/name"/>", <xsl:value-of select="$makerclass"/>.maker("<xsl:value-of select="$prop/name"/>"));
+ <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 {
+public class <xsl:value-of select="@family"/>PropertyMapping implements Constants {
- private static HashMap s_htGeneric = new HashMap();
+ 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 getGenericMappings() {
+ 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;
}
@@ -106,13 +142,57 @@ public class <xsl:value-of select="@family"/>PropertyMapping {
return s_htElementLists.keySet();
}
- public static HashMap getElementMapping(String elemName) {
- return (HashMap)s_htElementLists.get(elemName);
+ 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>
@@ -135,6 +215,34 @@ public class <xsl:value-of select="@family"/>PropertyMapping {
}
</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"/>