Преглед на файлове

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
tags/Root_Temp_KnuthStylePageBreaking
Glen Mazza преди 20 години
родител
ревизия
a93ddf92d9
променени са 4 файла, в които са добавени 150 реда и са изтрити 25 реда
  1. 1
    2
      build.xml
  2. 114
    6
      src/codegen/fo-property-mapping.xsl
  3. 23
    12
      src/java/org/apache/fop/fo/FObj.java
  4. 12
    5
      src/java/org/apache/fop/fo/PropertyList.java

+ 1
- 2
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}"/>

src/codegen/propmap.xsl → 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"/>

+ 23
- 12
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 **/

+ 12
- 5
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;
}

Loading…
Отказ
Запис