aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.xml3
-rw-r--r--src/codegen/fo-property-mapping.xsl (renamed from src/codegen/propmap.xsl)120
-rw-r--r--src/java/org/apache/fop/fo/FObj.java35
-rw-r--r--src/java/org/apache/fop/fo/PropertyList.java17
4 files changed, 150 insertions, 25 deletions
diff --git a/build.xml b/build.xml
index dfd5c4242..be7a67677 100644
--- a/build.xml
+++ b/build.xml
@@ -209,7 +209,6 @@ list of possible build targets.
<property name="colorkw.xml" value="${build.codegen}/colorkw.xml"/>
<property name="properties.xsl" value="${build.codegen}/properties.xsl"/>
- <property name="propmap.xsl" value="${build.codegen}/propmap.xsl"/>
<property name="enumgen.xsl" value="${build.codegen}/enumgen.xsl"/>
<property name="propinc.xsl" value="${build.codegen}/propinc.xsl"/>
<property name="src.charlist.xsl" value="${src.codegen}/code-point-mapping.xsl"/>
@@ -354,7 +353,7 @@ list of possible build targets.
<style in="${foproperties.xml}" style="${properties.xsl}"
out="${build.gensrc}/${replacestring}/fo/properties/fo_${ignore_this}"/>
- <style in="${foproperties.xml}" style="${propmap.xsl}"
+ <style in="${foproperties.xml}" style="${build.codegen}/fo-property-mapping.xsl"
out="${build.gensrc}/${replacestring}/fo/properties/FOPropertyMapping.java"/>
<style in="${foproperties.xml}" style="${enumgen.xsl}"
out="${build.gensrc}/${replacestring}/fo/properties/foenums_${ignore_this}"/>
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"/>
diff --git a/src/java/org/apache/fop/fo/FObj.java b/src/java/org/apache/fop/fo/FObj.java
index 7693fef74..9e65217bc 100644
--- a/src/java/org/apache/fop/fo/FObj.java
+++ b/src/java/org/apache/fop/fo/FObj.java
@@ -59,6 +59,7 @@ import java.util.Set;
import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.flow.Marker;
+import org.apache.fop.fo.properties.Constants;
import org.apache.fop.fo.properties.FOPropertyMapping;
import org.xml.sax.Attributes;
@@ -68,9 +69,11 @@ import org.xml.sax.Attributes;
public class FObj extends FONode {
private static final String FO_URI = "http://www.w3.org/1999/XSL/Format";
- public static HashMap propertyListTable = null;
- public static HashMap elementTable = null;
+ public static HashMap propertyListStringTable = null; // temporary
+ public static HashMap elementStringTable = null; // temporary
+ public static Property.Maker[] propertyListTable = null;
+
/**
* Formatting properties for this fo element.
*/
@@ -104,22 +107,30 @@ public class FObj extends FONode {
*/
public FObj(FONode parent) {
super(parent);
-
- if (propertyListTable == null) {
- propertyListTable = new HashMap();
- propertyListTable.putAll(FOPropertyMapping.getGenericMappings());
+/* temporary, during conversions to int constants only
+ if (propertyListStringTable == null) {
+ propertyListStringTable = new HashMap();
+ propertyListStringTable.putAll(FOPropertyMapping.getGenericStringMappings());
}
-
- if (elementTable == null) {
- elementTable = new HashMap();
+*/
+ if (elementStringTable == null) {
+ elementStringTable = new HashMap();
for (Iterator iter =
- FOPropertyMapping.getElementMappings().iterator();
+ FOPropertyMapping.getElementStringMappings().iterator();
iter.hasNext();) {
String elem = (String) iter.next();
- elementTable.put(elem, FOPropertyMapping.getElementMapping(elem));
+ elementStringTable.put(elem, FOPropertyMapping.getElementStringMapping(elem));
}
}
-
+
+ if (propertyListTable == null) {
+ propertyListTable = new Property.Maker[Constants.PROPERTY_COUNT+1];
+ Property.Maker[] list = FOPropertyMapping.getGenericMappings();
+ for (int i = 1; i < list.length; i++) {
+ if (list[i] != null)
+ propertyListTable[i] = list[i];
+ }
+ }
}
/** Marks input file containing this object **/
diff --git a/src/java/org/apache/fop/fo/PropertyList.java b/src/java/org/apache/fop/fo/PropertyList.java
index ca2d3775b..fc302897c 100644
--- a/src/java/org/apache/fop/fo/PropertyList.java
+++ b/src/java/org/apache/fop/fo/PropertyList.java
@@ -52,12 +52,12 @@ package org.apache.fop.fo;
// Java
import java.util.HashMap;
-import java.util.Iterator;
import org.xml.sax.Attributes;
// FOP
import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.Property.Maker;
+import org.apache.fop.fo.properties.FOPropertyMapping;
import org.apache.fop.fo.properties.WritingMode;
@@ -486,7 +486,7 @@ public class PropertyList extends HashMap {
FObj parentFO = fobj.findNearestAncestorFObj();
HashMap validProperties;
- validProperties = (HashMap) fobj.elementTable.get(element);
+ validProperties = (HashMap) FObj.elementStringTable.get(element);
/* Handle "compound" properties, ex. space-before.minimum */
String basePropertyName = findBasePropertyName(attributeName);
@@ -667,7 +667,7 @@ public class PropertyList extends HashMap {
*/
protected Property.Maker findMaker(String space, String elementName,
String propertyName) {
- return findMaker((HashMap) fobj.elementTable.get(elementName),
+ return findMaker((HashMap) FObj.elementStringTable.get(elementName),
propertyName);
}
@@ -686,8 +686,15 @@ public class PropertyList extends HashMap {
propertyMaker = (Property.Maker) elemTable.get(propertyName);
}
if (propertyMaker == null) {
- propertyMaker =
- (Property.Maker) fobj.propertyListTable.get(propertyName);
+ int propId = FOPropertyMapping.getPropertyId(propertyName);
+ if (propId != -1) { // -1 w/namespaces (xmlns:fo, xmlns:svg, etc.)
+ propertyMaker = FObj.propertyListTable[propId];
+ }
+ // old string method (retained temporarily for troubleshooting)
+ // propertyMaker =
+ // (Property.Maker) FObj.propertyListStringTable.get(propertyName);
+ // System.out.println(propertyName + "= " + propId + " propMaker = "
+ // + ((propertyMaker != null) ? (propertyMaker.toString()) : "(is null)"));
}
return propertyMaker;
}