aboutsummaryrefslogtreecommitdiffstats
path: root/src/codegen
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2004-03-21 12:38:56 +0000
committerGlen Mazza <gmazza@apache.org>2004-03-21 12:38:56 +0000
commit2e9f66f684d857e38a8d2ea5dd987936b79ba454 (patch)
tree0359467f64b80b06d9f6dd466eb405a589ef7e62 /src/codegen
parente99b480d3fd6b6f608e749c9e002c3bac7ae63a6 (diff)
downloadxmlgraphics-fop-2e9f66f684d857e38a8d2ea5dd987936b79ba454.tar.gz
xmlgraphics-fop-2e9f66f684d857e38a8d2ea5dd987936b79ba454.zip
1.) Removed xsl file for property generation (no longer used, due to
Finn's work.) Removed build.xml entry. 2.) Disconnected the FOUserAgent from the SVGUserAgent. This will make the SVGUserAgent more portable although at the cost of a more complex constructor. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197467 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/properties.xsl1084
1 files changed, 0 insertions, 1084 deletions
diff --git a/src/codegen/properties.xsl b/src/codegen/properties.xsl
deleted file mode 100644
index e3e19beb3..000000000
--- a/src/codegen/properties.xsl
+++ /dev/null
@@ -1,1084 +0,0 @@
-<!--
- Copyright 1999-2004 The Apache Software Foundation
-
- Licensed 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:include href="./propinc.xsl"/>
-
-<xsl:output method="text" />
-
-<xsl:template match="extfile">
-<!--<xsl:message>Do <xsl:value-of select="@href"/></xsl:message>-->
- <xsl:apply-templates select="document(@href)/*"/>
-</xsl:template>
-
-<!-- Content of element is code to calculate the base length -->
-<xsl:template match="percent-ok">
- <xsl:text>
- /** Return object used to calculate base Length
- * for percent specifications.
- */
- public PercentBase getPercentBase(final FObj fo, final PropertyList propertyList) {</xsl:text>
- <xsl:choose>
- <xsl:when test="@base">
- <xsl:text>
- return new LengthBase(fo, propertyList, LengthBase.</xsl:text>
- <xsl:value-of select="@base"/><xsl:text>);
-</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <!-- I have no idea what's happening here. Is this supposed to be
- an anonymous class returning the actual base length?
- -->
- <xsl:text>
- return new LengthBase(fo, propertyList, LengthBase.CUSTOM_BASE) {
- public int getBaseLength() {
- return (</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>);
- }
- });</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>
- }</xsl:text>
-</xsl:template>
-
-<!-- Look for "auto" length keyword -->
-<xsl:template match="auto-ok">
- <xsl:text>
- protected boolean isAutoLengthAllowed() {
- return true;
- }</xsl:text>
-</xsl:template>
-
-<xsl:template match="enumeration">
- <xsl:text>
- public Property checkEnumValues(String value) {</xsl:text>
- <xsl:for-each select="value">
- <xsl:call-template name="enumvals">
- <xsl:with-param name="specvals" select="concat(.,' ')"/>
- </xsl:call-template>
- </xsl:for-each>
- <xsl:text>
- return super.checkEnumValues(value);
- }</xsl:text>
-</xsl:template>
-
-
-<!-- Look for keyword equivalents. Value is the new expression -->
-<xsl:template match="keyword-equiv[1]">
- <xsl:text>
- // Initialize hashtable of keywords
- static HashMap s_htKeywords;
- static {
- s_htKeywords = new HashMap(</xsl:text>
- <xsl:value-of select="count(../keyword-equiv)"/>
- <xsl:text>);</xsl:text>
- <xsl:for-each select="../keyword-equiv">
- <xsl:text>
- s_htKeywords.put("</xsl:text>
- <xsl:value-of select="@match"/>
- <xsl:text>", "</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>");</xsl:text>
- </xsl:for-each>
- <xsl:text>
- }
-
- protected String checkValueKeywords(String keyword) {
- String value = (String)s_htKeywords.get(keyword);
- if (value == null) {
- return super.checkValueKeywords(keyword);
- }
- else return value;
- }</xsl:text>
-</xsl:template>
-
-<xsl:template match="keyword-equiv[position()>1]"/>
-
-<!-- Generate code to convert from other datatypes to property datatype -->
-<xsl:template match='datatype-conversion[1]'>
- <xsl:variable name="propclass">
- <xsl:choose>
- <xsl:when test="../compound">
- <xsl:call-template name="propclass">
- <xsl:with-param name="prop"
- select="../compound/subproperty[@set-by-shorthand]"/>
- </xsl:call-template>
- </xsl:when><xsl:otherwise>
- <xsl:call-template name="propclass">
- <xsl:with-param name="prop" select=".."/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-<xsl:text>
-
- // See if other value types are acceptable
- protected Property convertPropertyDatatype(
- Property p, PropertyList propertyList, FObj fo) {</xsl:text>
- <xsl:for-each select="../datatype-conversion">
- <xsl:variable name="dtc">
- <xsl:choose>
- <xsl:when test="@vartype">
- <xsl:value-of select="@vartype"/>
- </xsl:when><xsl:otherwise>
- <xsl:value-of select="@from-type"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:text>
- </xsl:text>
- <xsl:value-of select="$dtc"/>
- <xsl:text> </xsl:text>
- <xsl:value-of select="@varname"/>
- <xsl:text> = p.get</xsl:text>
- <xsl:value-of select="@from-type"/>
- <xsl:text>();
- if (</xsl:text>
- <xsl:value-of select="@varname"/>
- <xsl:text> != null) {
- return new </xsl:text>
- <xsl:value-of select="$propclass"/><xsl:text>(
- </xsl:text>
- <xsl:value-of select='normalize-space(.)'/><xsl:text>);
- }</xsl:text>
- </xsl:for-each>
- <xsl:text>
- return super.convertPropertyDatatype(p, propertyList, fo);
- }</xsl:text>
-</xsl:template>
-
-<xsl:template match="datatype-conversion[position()>1]"/>
-
-<!-- generate getDefaultForXXX for property components -->
-<xsl:template match="default[@subproperty]" priority="2">
- <xsl:variable name="spname">
- <xsl:call-template name="makeClassName">
- <xsl:with-param name="propstr" select="@subproperty"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:text>
- protected String getDefaultFor</xsl:text>
- <xsl:value-of select='$spname'/>
- <xsl:text>() {
- return "</xsl:text>
- <xsl:value-of select='.'/>
- <xsl:text>";
- }</xsl:text>
-</xsl:template>
-
-<!-- generate default "make" method for non-compound properties -->
-<xsl:template match="default[not(../compound)]" priority="1">
- <xsl:if test='not(@contextdep = "true")'>
- <xsl:text>
- private Property m_defaultProp=null;</xsl:text>
- </xsl:if>
- <xsl:text>
- public Property make(PropertyList propertyList) throws FOPException {</xsl:text>
- <xsl:choose>
- <xsl:when test='@contextdep="true"'>
- <xsl:text>
- return make(propertyList, "</xsl:text>
- <xsl:value-of select='.'/>
- <xsl:text>", propertyList.getParentFObj());</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>
- if (m_defaultProp == null) {
- m_defaultProp=make(propertyList, "</xsl:text>
- <xsl:value-of select='.'/>
- <xsl:text>", propertyList.getParentFObj());
- }
- return m_defaultProp;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>
- }</xsl:text>
-</xsl:template>
-
-<xsl:template match="text()"/>
-
-<!-- Ignore properties which reference others. Only for mapping! -->
-<xsl:template match="property[@type='ref']"/>
-
-<!-- Only if more explicit rules not matched (ref) -->
-<xsl:template match="property">
-
- <!-- Only create a specific class for those properties not based on
- template (generic) property definitions or which extends a
- generic definition.
- -->
- <xsl:if test='not(use-generic) or count(*)>2'>
-
- <xsl:variable name="eclassname">
- <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="classname">
- <xsl:value-of select="$eclassname"/>
- <xsl:if test="not(@type='generic')">
- <xsl:text>Maker</xsl:text>
- </xsl:if>
- </xsl:variable>
-
- <!-- The class of the Property object to be created -->
- <xsl:variable name="propclass">
- <xsl:call-template name="propclass"/>
- </xsl:variable>
-
- <!-- The superclass for this PropertyMaker -->
- <xsl:variable name="superclass">
- <xsl:choose>
- <xsl:when test="use-generic[@ispropclass='true']">
- <xsl:value-of select="use-generic"/><xsl:text>.Maker</xsl:text>
- </xsl:when>
- <xsl:when test="use-generic">
- <xsl:value-of select="use-generic"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="datatype"/><xsl:text>Property.Maker</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <!-- Is this property an Enum or derived from a generic Enum -->
- <xsl:variable name="enumconst">
- <xsl:if test="enumeration/value and not(@type='generic')">
- <xsl:text> implements Constants</xsl:text></xsl:if>
- </xsl:variable>
-
- <redirect:write select="concat($classname, '.java')">
- <xsl:text>package org.apache.fop.fo.properties;
-
-</xsl:text>
- <xsl:if test=".//keyword-equiv or ./name[.='generic-color']">
- <xsl:text>
-import java.util.HashMap;</xsl:text>
- </xsl:if>
- <xsl:if test=
- "((./datatype and
- (not (./datatype[.='String' or .='Enum' or .='List'
- or .='Length' or .='Character' or .='Number'])
- or (./datatype[.='Length'] and ./percent-ok)
- ) )
- or .//datatype-conversion)
- and ./name[. !='generic-color']">
- <xsl:text>
-import org.apache.fop.datatypes.*;</xsl:text>
- </xsl:if>
- <xsl:text>
-import org.apache.fop.fo.*;</xsl:text>
- <xsl:if test="not(
- (./datatype and ./datatype[. ='List'])
- or ./class-name[.='GenericCondPadding']
- or ./name[.='generic-boolean'
- or .='generic-color'])">
- <xsl:text>
-import org.apache.fop.apps.FOPException;</xsl:text>
- </xsl:if>
- <xsl:if test=".//enumeration and @type='generic'">
- <xsl:text>
-import org.apache.fop.fo.Constants;</xsl:text>
-</xsl:if>
- <xsl:text>
-
-public class </xsl:text>
- <xsl:value-of select="$classname"/>
- <xsl:text> extends </xsl:text>
- <xsl:value-of select="$superclass"/><xsl:value-of select="$enumconst"/>
- <xsl:text> {</xsl:text>
-
- <!-- If has enumerated values and is a generic class, create a nested
- interface defining the enumeration constants -->
- <xsl:if test=".//enumeration and @type='generic'">
- <xsl:text>
- public interface Enums {</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:for-each select="compound/subproperty[enumeration]">
- <xsl:variable name="spname">
- <xsl:call-template name="makeClassName">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:text>
- public interface </xsl:text>
- <xsl:value-of select="$spname"/>
- <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:for-each>
- <xsl:text>
- }</xsl:text>
- </xsl:if>
-
-
- <!-- Handle enumeration values -->
- <xsl:for-each select="enumeration/value">
- <xsl:text>
- protected final static EnumProperty s_prop</xsl:text>
- <xsl:value-of select="@const"/>
- <xsl:text> = new EnumProperty(</xsl:text>
- <xsl:if test="../../@type='generic'">
- <xsl:text>Enums.</xsl:text>
- </xsl:if>
- <xsl:value-of select="@const"/>
- <xsl:text>);</xsl:text>
- </xsl:for-each>
-
-
- <!-- Look for compound properties -->
- <xsl:if test="compound">
- <xsl:variable name="enumclass">
- <xsl:choose>
- <xsl:when test="@type='generic'">
- <xsl:text>Enums</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$eclassname"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:for-each select="compound/subproperty">
- <xsl:variable name="spname">
- <xsl:call-template name="makeClassName">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="sp_superclass">
- <xsl:choose>
- <xsl:when test="use-generic">
- <xsl:value-of select="use-generic"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="datatype"/>
- <xsl:text>Property.Maker</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test='*[local-name(.)!="name" and local-name(.)!="datatype" and local-name(.)!="use-generic" and local-name(.)!="default"]'>
- <xsl:text>
- static private class SP_</xsl:text>
- <xsl:value-of select="$spname"/>
- <xsl:text>Maker extends </xsl:text>
- <xsl:value-of select="$sp_superclass"/>
- <xsl:if test="enumeration">
- <xsl:text> implements </xsl:text>
- <xsl:value-of select="$enumclass"/>
- <xsl:text>.</xsl:text>
- <xsl:value-of select="$spname"/>
- </xsl:if>
- <xsl:text> {
- SP_</xsl:text>
- <xsl:value-of select="$spname"/>
- <xsl:text>Maker(int sPropName) {
- super(sPropName);
- }</xsl:text>
- <xsl:for-each select="enumeration/value">
- <xsl:text>
- protected final static EnumProperty s_prop</xsl:text>
- <xsl:value-of select="@const"/>
- <xsl:text> = new EnumProperty(</xsl:text>
- <xsl:value-of select="@const"/>
- <xsl:text>);</xsl:text>
- </xsl:for-each>
-
- <xsl:apply-templates
- select="percent-ok|auto-ok|keyword-equiv|
- datatype-conversion|enumeration"/>
- <xsl:text>
- }
-
- final private static Property.Maker s_</xsl:text>
- <xsl:value-of select="$spname"/>
- <xsl:text>Maker =
- new SP_</xsl:text><xsl:value-of select="$spname"/>
- <xsl:text>Maker(</xsl:text>
- <xsl:if test="not(../../@type = 'generic')">
- <xsl:text>Constants.PR_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="../../name"/>
- </xsl:call-template>
- <xsl:text> | </xsl:text>
- </xsl:if>
- <xsl:text>Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- <xsl:text>);</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>
- final private static Property.Maker s_</xsl:text>
- <xsl:value-of select="$spname"/>
- <xsl:text>Maker =
- new </xsl:text><xsl:value-of select="$sp_superclass"/>
- <xsl:text>(</xsl:text>
- <xsl:if test="not(../../@type = 'generic')">
- <xsl:text>Constants.PR_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="../../name"/>
- </xsl:call-template>
- <xsl:text> | </xsl:text>
- </xsl:if>
- <xsl:text>Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- <xsl:text>);</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- </xsl:if>
-
- <xsl:text>
-
- static public Property.Maker maker(int propertyId) {
- return new </xsl:text>
- <xsl:value-of select="$classname"/>
- <xsl:text>(propertyId);
- }
-
- protected </xsl:text>
- <xsl:value-of select="$classname"/>
- <xsl:text>(int propId) {
- super(propId);</xsl:text>
- <xsl:if test="compound">
- <xsl:text>
- m_shorthandMaker= getSubpropMaker(Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select=
- 'compound/subproperty[@set-by-shorthand="true"]/name'/>
- </xsl:call-template>
- <xsl:text>);</xsl:text>
- </xsl:if>
- <xsl:text>
- }
-</xsl:text>
-
- <xsl:if test="compound">
- <xsl:text>
- Property.Maker m_shorthandMaker;
-
- public Property checkEnumValues(String value) {
- return m_shorthandMaker.checkEnumValues(value);
- }
-
- protected boolean isCompoundMaker() {
- return true;
- }
-
- protected Property.Maker getSubpropMaker(int subpropId) {</xsl:text>
- <xsl:for-each select="compound/subproperty">
- <xsl:variable name="spname">
- <xsl:call-template name="makeClassName">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:text>
- if (subpropId == Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- <xsl:text>)
- return s_</xsl:text>
- <xsl:value-of select="$spname"/>
- <xsl:text>Maker;</xsl:text>
- </xsl:for-each>
- <xsl:text>
- return super.getSubpropMaker(subpropId);
- }
-
- protected Property setSubprop(Property baseProp, int subpropId,
- Property subProp) {
- </xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text> val = baseProp.get</xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text>();
- // Do some type checking???
- // Check if one of our subproperties???
- val.setComponent(subpropId, subProp, false);
- return baseProp;
- }
-
- public Property getSubpropValue(Property baseProp, int subpropId) {
- </xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text> val = baseProp.get</xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text>();
- return val.getComponent(subpropId);
- }
-</xsl:text>
- <xsl:choose>
- <!-- some subproperty default is context dependent;
- don't cache default! -->
- <xsl:when test='.//default[@contextdep="true"]'>
- <xsl:text>
- public Property make(PropertyList propertyList) throws FOPException {
- return makeCompound(propertyList, propertyList.getParentFObj());
- }</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>
- private Property m_defaultProp=null;
- public Property make(PropertyList propertyList) throws FOPException {
- if (m_defaultProp == null) {
- m_defaultProp=makeCompound(
- propertyList, propertyList.getParentFObj());
- }
- return m_defaultProp;
- }</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>
-
- protected Property makeCompound(PropertyList pList, FObj fo) throws FOPException {</xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text> p = new </xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text>();
- Property subProp;</xsl:text>
- <xsl:for-each select="compound/subproperty/name">
- <xsl:variable name="spname">
- <xsl:call-template name="makeClassName">
- <xsl:with-param name="propstr" select="."/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:text>
- // set default for subprop </xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>
- subProp = getSubpropMaker(Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="."/>
- </xsl:call-template>
- <xsl:text>).make(pList, getDefaultFor</xsl:text>
- <xsl:value-of select='$spname'/>
- <xsl:text>(), fo);
- p.setComponent(Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="."/>
- </xsl:call-template>
- <xsl:text>, subProp, true);</xsl:text>
- </xsl:for-each>
- <xsl:text>
- return new </xsl:text>
- <xsl:value-of select="$propclass"/>
- <xsl:text>(p);
- }
-</xsl:text>
- <!-- generate a "getDefaultForXXX" for each subproperty XXX -->
- <xsl:for-each select="compound/subproperty">
- <xsl:variable name="spname">
- <xsl:call-template name="makeClassName">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:text>
- protected String getDefaultFor</xsl:text>
- <xsl:value-of select='$spname'/>
- <xsl:text>() {</xsl:text>
- <xsl:choose>
- <xsl:when test="default">
- <xsl:text>
- return "</xsl:text>
- <xsl:value-of select='default'/>
- <xsl:text>";</xsl:text>
- </xsl:when>
- <xsl:when test=
- "use-generic and key('genericref', use-generic)/default">
- <xsl:text>
- return "</xsl:text>
- <xsl:value-of select='key(&apos;genericref&apos;,
- use-generic)/default'/>
- <xsl:text>";</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>
- return "";</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>
- }</xsl:text>
- </xsl:for-each>
- <xsl:text>
-
- /** Set the appropriate components when the "base" property is set. */
- public Property convertProperty(Property p, PropertyList pList,FObj fo)
- throws FOPException {
- if (p instanceof </xsl:text>
- <xsl:value-of select="$propclass"/>
- <xsl:text>) return p;
- if (! (p instanceof EnumProperty)) {
- // delegate to the subprop maker to do conversions
- p = m_shorthandMaker.convertProperty(p,pList,fo);
- }
- if (p != null) {
- Property prop = makeCompound(pList, fo);
- </xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text> pval = prop.get</xsl:text>
- <xsl:value-of select="datatype"/>
- <xsl:text>();</xsl:text>
- <xsl:for-each select="compound/subproperty[@set-by-shorthand='true']">
- <xsl:text>
- pval.setComponent(Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="name"/>
- </xsl:call-template>
- <xsl:text>, p, false);</xsl:text>
- </xsl:for-each>
- <xsl:text>
- return prop;
- }
- else return null;</xsl:text>
- <!--
- else {
- // throw some kind of exception!
- throw new FOPException("Can't convert value to <xsl:value-of select='$spdt'/> type");
- }
- -->
- <xsl:text>
- }
-
-</xsl:text>
- </xsl:if> <!-- property/compound -->
-
- <xsl:if test="inherited">
- <xsl:text>
- public boolean isInherited() {
- return </xsl:text>
- <xsl:value-of select="inherited"/>
- <xsl:text>;
- }
-</xsl:text>
- </xsl:if>
-
- <!-- the default implementation returns false -->
- <xsl:if test='inherited/@type="specified"'>
- <xsl:text>
- public boolean inheritsSpecified() {
- return true;
- }
-</xsl:text>
- </xsl:if>
-
-
- <!-- Currently only works for Enum values -->
- <xsl:if test="derive">
- <xsl:text>
- public Property compute(PropertyList propertyList) {
- Property computedProperty = null;
- Property correspondingProperty = propertyList.get(Constants.PR_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="derive/@from"/>
- </xsl:call-template>
- <xsl:text>);
- if (correspondingProperty != null) {
- int correspondingValue = correspondingProperty.getEnum();</xsl:text>
- <xsl:for-each select="derive/if">
- <xsl:text>
- if (correspondingValue == Constants.</xsl:text>
- <xsl:value-of select="@match"/>
- <xsl:text>)
- computedProperty = new EnumProperty(</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>);
- else</xsl:text>
- </xsl:for-each>
- <xsl:text>
- ;
- }
- return computedProperty;
- }
-</xsl:text>
- </xsl:if>
-
- <!-- If any corresponding element at property or subproperty levels -->
- <xsl:if test=".//corresponding">
- <xsl:if test=".//corresponding/@use-if-specified='true'">
- <xsl:text>
- public boolean isCorrespondingForced(PropertyList propertyList) {
- FObj parentFO = propertyList.getParentFObj();</xsl:text>
- <xsl:for-each select=".//corresponding/propval">
- <xsl:text>
- if (propertyList.getExplicit(</xsl:text>
- <xsl:apply-templates select="."/>
- <xsl:text>) != null)
- return true;</xsl:text>
- </xsl:for-each>
- <xsl:text>
- return false;
- }
-</xsl:text>
- </xsl:if>
- <xsl:text>
-
- public Property compute(PropertyList propertyList) throws FOPException {
- FObj parentFO = propertyList.getParentFObj();
- Property p=null;</xsl:text>
- <xsl:choose>
- <xsl:when test="corresponding/propexpr">
- <xsl:text>
- // Make sure the property is set before calculating it!
- if (propertyList.getExplicitOrShorthand(</xsl:text>
- <xsl:apply-templates select="corresponding/propval"/>
- <xsl:text>) == null)
- return p;
- StringBuffer sbExpr=new StringBuffer();
- sbExpr.setLength(0);</xsl:text>
- <xsl:apply-templates select="corresponding/propexpr"/>
- <xsl:text>
- p = make(propertyList, sbExpr.toString(), propertyList.getParentFObj());</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>
- p= propertyList.getExplicitOrShorthand(</xsl:text>
- <xsl:apply-templates select="corresponding/propval"/>
- <xsl:text>);</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>
- if (p != null) {
- p = convertProperty(p, propertyList, parentFO );
- }</xsl:text>
- <xsl:if test="compound">
- <xsl:text>
- else p = makeCompound(propertyList, parentFO);
-
- Property subprop;</xsl:text>
- <xsl:for-each select="compound/subproperty/corresponding">
- <xsl:choose>
- <xsl:when test="propexpr">
- <xsl:apply-templates select="propexpr"/>
- <xsl:text>
- subprop = getSubpropMaker("</xsl:text>
- <xsl:value-of select='../name'/>
- <xsl:text>").
- make(propertyList, sbExpr.toString(), parentFO);</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>
- subprop = propertyList.getExplicitOrShorthand(</xsl:text>
- <xsl:apply-templates select="propval"/>
- <xsl:text>);</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>
- if (subprop != null) {
- setSubprop(p, Constants.CP_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="../name"/>
- </xsl:call-template>
- <xsl:text>, subprop);
- }</xsl:text>
- </xsl:for-each>
- </xsl:if>
- <xsl:text>
- return p;
- }
-</xsl:text>
-</xsl:if>
-
-<!-- If can be specified by any shorthand property -->
-<xsl:if test="shorthand">
- <xsl:text>
- public Property getShorthand(PropertyList propertyList) {
- Property p = null;
- ListProperty listprop;</xsl:text>
- <xsl:for-each select="shorthand">
- <xsl:variable name="shprop" select="."/>
- <xsl:text>
- if (p == null) {
- listprop =
- (ListProperty)propertyList.getExplicit(Constants.PR_</xsl:text>
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="$shprop"/>
- </xsl:call-template>
- <xsl:text>);
- if (listprop != null) {
- // Get a parser for the shorthand to set the individual properties
- ShorthandParser shparser =
- new </xsl:text>
- <xsl:value-of select="key('shorthandref', $shprop)/datatype-parser"/>
- <xsl:text>(listprop);
- p = shparser.getValueForProperty(
- getPropId(), this, propertyList);
- }
- }</xsl:text>
- </xsl:for-each>
- <xsl:text>
- return p;
- }
-</xsl:text>
-</xsl:if>
-
-<xsl:apply-templates select=
- "percent-ok|auto-ok|default|keyword-equiv|datatype-conversion|
- enumeration|extfile"/>
-<xsl:text>
-}
-</xsl:text>
-</redirect:write>
-</xsl:if> <!-- need to create a class -->
-</xsl:template>
-
-<xsl:template match="corresponding/propexpr/propval">
- <xsl:text>
- sbExpr.append("_fop-property-value(");</xsl:text> <!-- Note: interpreted by property parser -->
- <xsl:apply-templates/>
- <xsl:text>
- sbExpr.append(")");</xsl:text>
-</xsl:template>
-
-
-<xsl:template match="propval">
- <xsl:choose>
- <xsl:when test="wmabs2rel[@dir='LEFT']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"START"'/>
- <xsl:with-param name="rltb" select='"END"'/>
- <xsl:with-param name="tbrl" select='"AFTER"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmabs2rel[@dir='RIGHT']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"END"'/>
- <xsl:with-param name="rltb" select='"START"'/>
- <xsl:with-param name="tbrl" select='"BEFORE"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmabs2rel[@dir='TOP']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"BEFORE"'/>
- <xsl:with-param name="rltb" select='"BEFORE"'/>
- <xsl:with-param name="tbrl" select='"START"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmabs2rel[@dir='BOTTOM']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"AFTER"'/>
- <xsl:with-param name="rltb" select='"AFTER"'/>
- <xsl:with-param name="tbrl" select='"END"'/>
- </xsl:call-template>
- </xsl:when>
-
- <xsl:when test="wmrel2abs[@dir='START']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"LEFT"'/>
- <xsl:with-param name="rltb" select='"RIGHT"'/>
- <xsl:with-param name="tbrl" select='"TOP"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmrel2abs[@dir='END']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"RIGHT"'/>
- <xsl:with-param name="rltb" select='"LEFT"'/>
- <xsl:with-param name="tbrl" select='"BOTTOM"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmrel2abs[@dir='BEFORE'] or parwmrel2abs[@dir='BEFORE']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"TOP"'/>
- <xsl:with-param name="rltb" select='"TOP"'/>
- <xsl:with-param name="tbrl" select='"RIGHT"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmrel2abs[@dir='AFTER'] or parwmrel2abs[@dir='AFTER']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"BOTTOM"'/>
- <xsl:with-param name="rltb" select='"BOTTOM"'/>
- <xsl:with-param name="tbrl" select='"LEFT"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmrel2abs[@dir='BLOCKPROGDIM']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"HEIGHT"'/>
- <xsl:with-param name="rltb" select='"HEIGHT"'/>
- <xsl:with-param name="tbrl" select='"WIDTH"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="wmrel2abs[@dir='INLINEPROGDIM']">
- <xsl:call-template name="makeMap">
- <xsl:with-param name="lrtb" select='"WIDTH"'/>
- <xsl:with-param name="rltb" select='"WIDTH"'/>
- <xsl:with-param name="tbrl" select='"HEIGHT"'/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>UNKNOWN <xsl:value-of select="."/></xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="corresponding//text()">
- <xsl:variable name="tval" select='normalize-space(.)'/>
- <xsl:if test="$tval != ''">
- <xsl:text>
- sbExpr.append("</xsl:text>
- <xsl:value-of select='$tval'/>
- <xsl:text>");</xsl:text>
- </xsl:if>
-</xsl:template>
-
-<xsl:template name="makeMap">
- <xsl:param name="lrtb"/>
- <xsl:param name="rltb"/>
- <xsl:param name="tbrl"/>
- <xsl:choose>
- <xsl:when test="parwmrel2abs">
- <xsl:text>parentFO.propertyList</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>propertyList</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>.wmMap(Constants.PR_</xsl:text>
- <xsl:apply-templates mode="x">
- <xsl:with-param name="dir" select='$lrtb'/>
- </xsl:apply-templates>
- <xsl:text>, Constants.PR_</xsl:text>
- <xsl:apply-templates mode="x">
- <xsl:with-param name="dir" select='$rltb'/>
- </xsl:apply-templates>
- <xsl:text>, Constants.PR_</xsl:text>
- <xsl:apply-templates mode="x">
- <xsl:with-param name="dir" select='$tbrl'/>
- </xsl:apply-templates>
- <xsl:text>)</xsl:text>
-</xsl:template>
-
-<xsl:template match="corresponding//text()" mode="x">
- <xsl:variable name="tval" select='normalize-space(.)'/>
- <xsl:if test="$tval != ''">
- <xsl:call-template name="makeEnumConstant">
- <xsl:with-param name="propstr" select="$tval"/>
- </xsl:call-template>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="propval/wmrel2abs">
- <xsl:text>
- sbExpr.append(propertyList.wmRelToAbs(PropertyList.</xsl:text>
- <xsl:value-of select="@dir"/>
- <xsl:text>));</xsl:text>
-</xsl:template>
-
-<xsl:template match="propval/parwmrel2abs">
- <xsl:text>
- sbExpr.append(parentFO.propertyList.wmRelToAbs(PropertyList.</xsl:text>
- <xsl:value-of select="@dir"/>
- <xsl:text>));</xsl:text>
-</xsl:template>
-
-<xsl:template match="propval/wmabs2rel">
- <xsl:text>
- sbExpr.append(propertyList.wmAbsToRel(PropertyList.</xsl:text>
- <xsl:value-of select="@dir"/>
- <xsl:text>));</xsl:text>
-</xsl:template>
-
-<xsl:template match="propval/wmrel2abs" mode="x">
- <xsl:param name="dir"/>
- <xsl:value-of select="$dir"/>
-</xsl:template>
-
-<xsl:template match="propval/parwmrel2abs" mode="x">
- <xsl:param name="dir"/>
- <xsl:value-of select="$dir"/>
-</xsl:template>
-
-<xsl:template match="propval/wmabs2rel" mode="x">
- <xsl:param name="dir"/>
- <xsl:value-of select="$dir"/>
-</xsl:template>
-
-<!-- avoid unwanted output to placeholder file -->
-<xsl:template match="localname"/>
-
-<!-- Check that each member of the nodeset dtlist has the same value.
- Print a message if any member of dtlist is different
- from the first member. Return the first member.
- -->
-<xsl:template name="check-subprop-datatype">
- <xsl:param name="dtlist"/>
- <xsl:variable name="dt">
- <xsl:value-of select='$dtlist[1]'/>
- </xsl:variable>
- <xsl:for-each select="$dtlist">
- <xsl:if test=". != $dt">
- <xsl:message>
- <xsl:text>Conflict between subproperty datatypes: </xsl:text>
- <xsl:value-of select='.'/> != <xsl:value-of select='$dt'/>
- </xsl:message>
- </xsl:if>
- </xsl:for-each>
- <xsl:value-of select='$dt'/>
-</xsl:template>
-
-<!-- If the value of an enumeration constant contains two or more words,
- separated by a blank, map all of these words to the same constant.
--->
-<xsl:template name="enumvals">
- <xsl:param name="specvals"/>
- <xsl:if test='string-length($specvals)>0'>
- <xsl:variable name="oneval" select="substring-before($specvals, ' ')"/>
- <xsl:text>
- if (value.equals("</xsl:text>
- <xsl:value-of select="$oneval"/>
- <xsl:text>")) {
- return s_prop</xsl:text>
- <xsl:value-of select="@const"/>
- <xsl:text>;
- }</xsl:text>
- <xsl:call-template name="enumvals">
- <xsl:with-param name="specvals" select="substring-after($specvals, ' ')"/>
- </xsl:call-template>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>