pbwest      2003/06/25 10:11:05

  Modified:    src/codegen enumgen.xsl properties.xsl genconst.xsl
  Log:
  Cleaned up code generation to reduce Eclipse warnings.
  
  Revision  Changes    Path
  1.8       +116 -79   xml-fop/src/codegen/enumgen.xsl
  
  Index: enumgen.xsl
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/codegen/enumgen.xsl,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- enumgen.xsl       7 Mar 2003 10:54:17 -0000       1.7
  +++ enumgen.xsl       25 Jun 2003 17:11:05 -0000      1.8
  @@ -62,43 +62,54 @@
   <xsl:template match="text()"/>
   
   <xsl:template match="property[not(@type='generic')]">
  - <xsl:variable name="classname">
  -  <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 name="classname">
  +    <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="bEnum">
  +    <xsl:call-template name="hasEnum"/>
  +  </xsl:variable>
  +  <xsl:variable name="bSubpropEnum">
  +    <xsl:call-template name="hasSubpropEnum"/>
     </xsl:variable>
  -   <xsl:variable name="bEnum">
  -  <xsl:call-template name="hasEnum"/>
  -   </xsl:variable>
  -   <xsl:variable name="bSubpropEnum">
  -  <xsl:call-template name="hasSubpropEnum"/>
  -   </xsl:variable>
  -
  -   <xsl:if test="$bEnum='true' or contains($bSubpropEnum, 'true')">
  -<redirect:write select="concat($classname, '.java')">
  -package org.apache.fop.fo.properties;
   
  -<!-- Handle enumeration values -->
  -    public interface <xsl:value-of select="$classname"/>
  -    <xsl:if test="use-generic and $bEnum='true'">
  -  extends  <xsl:value-of select="use-generic"/>.Enums
  -    </xsl:if>{
  -   <xsl:for-each select="enumeration/value">
  -     public final static int <xsl:value-of select="@const"/> = 
Constants.<xsl:value-of select="@const"/>;
  -</xsl:for-each>
  -<xsl:if test="contains($bSubpropEnum, 'true')">
  -    <xsl:call-template name="genSubpropEnum"/>
  -</xsl:if>
  -    }
  -</redirect:write>
  -   </xsl:if>
  +  <xsl:if test="$bEnum='true' or contains($bSubpropEnum, 'true')">
  +    <redirect:write select="concat($classname, '.java')">
  +      <xsl:text>package org.apache.fop.fo.properties;
  +</xsl:text>
  +      <!-- Handle enumeration values -->
  +      <xsl:text>
  +    public interface </xsl:text>
  +      <xsl:value-of select="$classname"/>
  +      <xsl:if test="use-generic and $bEnum='true'">
  +        <xsl:text> extends </xsl:text>
  +        <xsl:value-of select="use-generic"/>
  +        <xsl:text>.Enums</xsl:text>
  +      </xsl:if>
  +      <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:if test="contains($bSubpropEnum, 'true')">
  +        <xsl:call-template name="genSubpropEnum"/>
  +      </xsl:if>
  +      <xsl:text> }
  +</xsl:text>
  +    </redirect:write>
  +  </xsl:if>
   </xsl:template>
   
   <xsl:template name="genSubpropEnum">
  @@ -106,66 +117,92 @@
     <xsl:choose>
       <xsl:when test="$prop/compound/subproperty/enumeration">
         <xsl:for-each select="compound/subproperty[enumeration]">
  -      public interface <xsl:value-of select="name"/> {
  +        <xsl:text>
  +    public interface </xsl:text>
  +        <xsl:value-of select="name"/>
  +        <xsl:text> {
  +</xsl:text>
           <xsl:for-each select="enumeration/value">
  -        public final static int <xsl:value-of select="@const"/> =  
Constants.<xsl:value-of select="@const"/>;
  +          <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:when>
       <xsl:when test="$prop/use-generic">
         <xsl:call-template name="inhspenums">
  -         <xsl:with-param name="prop" select="key('genericref', $prop/use-generic)"/>
  +        <xsl:with-param name="prop" select="key('genericref', $prop/use-generic)"/>
         </xsl:call-template>
       </xsl:when>
       <xsl:when test="$prop/compound/subproperty/use-generic">
  -  <!-- generate "interface <subprop> extends <gensubprop>.Enums" -->
  -  <xsl:for-each select="$prop/compound/subproperty[use-generic]">
  -    <xsl:variable name="bSpEnum">
  -      <xsl:call-template name="hasEnum">
  -        <xsl:with-param name="prop"
  -       select="key('genericref', use-generic)"/>
  -            </xsl:call-template>
  -    </xsl:variable>
  -    <xsl:if test="$bSpEnum='true'">
  -    public interface  <xsl:value-of select="name"/> extends  <xsl:value-of 
select="use-generic"/>.Enums { }
  -    </xsl:if>
  -  </xsl:for-each>
  +      <!-- generate "interface <subprop> extends <gensubprop>.Enums" -->
  +      <xsl:for-each select="$prop/compound/subproperty[use-generic]">
  +        <xsl:variable name="bSpEnum">
  +          <xsl:call-template name="hasEnum">
  +            <xsl:with-param name="prop"
  +              select="key('genericref', use-generic)"/>
  +          </xsl:call-template>
  +        </xsl:variable>
  +        <xsl:if test="$bSpEnum='true'">
  +          <xsl:text>
  +    public interface </xsl:text>
  +          <xsl:value-of select="name"/>
  +          <xsl:text> extends </xsl:text>
  +          <xsl:value-of select="use-generic"/>
  +          <xsl:text>.Enums { }
  +</xsl:text>
  +        </xsl:if>
  +      </xsl:for-each>
       </xsl:when>
  -    <xsl:otherwise>false</xsl:otherwise>
  +    <xsl:otherwise>
  +      <xsl:text>
  +        false</xsl:text>
  +    </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
   
   <xsl:template name="inhspenums">
     <xsl:param name="prop"/>
  -      <xsl:variable name="generic_name">
  -  <xsl:choose>
  -    <xsl:when test="$prop/class-name">
  -      <xsl:value-of select="$prop/class-name"/>
  -    </xsl:when>
  -    <xsl:otherwise>
  -      <xsl:call-template name="makeClassName">
  -        <xsl:with-param name="propstr" select="$prop/name"/>
  -      </xsl:call-template>
  -    </xsl:otherwise>
  -  </xsl:choose>
  -      </xsl:variable>
  -  <!-- generate "interface <subprop> extends <genprop>.<subprop>" -->
  -      <xsl:for-each select="$prop/compound/subproperty[enumeration]">
  -      <xsl:variable name="spname">
  +  <xsl:variable name="generic_name">
  +    <xsl:choose>
  +      <xsl:when test="$prop/class-name">
  +        <xsl:value-of select="$prop/class-name"/>
  +      </xsl:when>
  +      <xsl:otherwise>
           <xsl:call-template name="makeClassName">
  -          <xsl:with-param name="propstr" select="name"/>
  +          <xsl:with-param name="propstr" select="$prop/name"/>
           </xsl:call-template>
  -      </xsl:variable>
  -      public interface <xsl:value-of select="$spname"/> extends <xsl:value-of 
select="$generic_name"/>.Enums.<xsl:value-of select="$spname"/> {
  -      }
  -      </xsl:for-each>
  -
  -    <xsl:if test="$prop/use-generic">
  -      <xsl:call-template name="inhspenums">
  -         <xsl:with-param name="prop" select="key('genericref', $prop/use-generic)"/>
  +      </xsl:otherwise>
  +    </xsl:choose>
  +  </xsl:variable>
  +  <!-- generate "interface <subprop> extends <genprop>.<subprop>" -->
  +  <xsl:for-each select="$prop/compound/subproperty[enumeration]">
  +    <xsl:variable name="spname">
  +      <xsl:call-template name="makeClassName">
  +        <xsl:with-param name="propstr" select="name"/>
         </xsl:call-template>
  -    </xsl:if>
  +    </xsl:variable>
  +    <xsl:text>
  +        public interface </xsl:text>
  +    <xsl:value-of select="$spname"/>
  +    <xsl:text> extends </xsl:text>
  +    <xsl:value-of select="$generic_name"/>
  +    <xsl:text>.Enums.</xsl:text>
  +    <xsl:value-of select="$spname"/>
  +    <xsl:text> { }</xsl:text>
  +  </xsl:for-each>
  +
  +  <xsl:if test="$prop/use-generic">
  +    <xsl:call-template name="inhspenums">
  +      <xsl:with-param name="prop" select="key('genericref', $prop/use-generic)"/>
  +    </xsl:call-template>
  +  </xsl:if>
   </xsl:template>
   
   </xsl:stylesheet>
  
  
  
  1.20      +709 -404  xml-fop/src/codegen/properties.xsl
  
  Index: properties.xsl
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/codegen/properties.xsl,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- properties.xsl    7 Mar 2003 10:54:17 -0000       1.19
  +++ properties.xsl    25 Jun 2003 17:11:05 -0000      1.20
  @@ -65,61 +65,85 @@
   
   <!-- 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:choose>
  -       <xsl:when test="@base">
  -  return new LengthBase(fo, propertyList, LengthBase.<xsl:value-of 
select="@base"/>);
  -       </xsl:when>
  -       <xsl:otherwise>
  -  return (new LengthBase(fo, propertyList, LengthBase.CUSTOM_BASE ) {
  +    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:value-of select="."/>);
  +      return (</xsl:text>
  +         <xsl:value-of select="."/>
  +         <xsl:text>);
             }
  -  });
  -      </xsl:otherwise>
  -    </xsl:choose>
  -    }
  +  });</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;
  -    }
  +        return true;
  +    }</xsl:text>
   </xsl:template>
   
   <xsl:template match="enumeration">
  -    public Property checkEnumValues(String value) {
  +  <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:with-param name="specvals" select="concat(.,' ')"/>
         </xsl:call-template>
       </xsl:for-each>
  -  return super.checkEnumValues(value);
  -    }
  +    <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:value-of select="count(../keyword-equiv)"/>);
  +        s_htKeywords = new HashMap(</xsl:text>
  +    <xsl:value-of select="count(../keyword-equiv)"/>
  +    <xsl:text>);</xsl:text>
     <xsl:for-each select="../keyword-equiv">
  -        s_htKeywords.put("<xsl:value-of select="@match"/>", "<xsl:value-of 
select="."/>");
  -  </xsl:for-each>
  +    <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;
  -    }
  +        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]"/>
  @@ -131,70 +155,98 @@
         <xsl:when test="../compound">
           <xsl:call-template name="propclass">
             <xsl:with-param name="prop"
  -    select="../compound/[EMAIL PROTECTED]"/>
  +            select="../compound/[EMAIL PROTECTED]"/>
           </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: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:for-each select="../datatype-conversion">
  -      {
  -        <xsl:variable name="dtc">
  -          <xsl:choose>
  -      <xsl:when test="@vartype">
  -         <xsl:value-of select="@vartype"/>
  -      </xsl:when><xsl:otherwise>
  +    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:value-of select="$dtc"/><xsl:text> </xsl:text> <xsl:value-of 
select="@varname"/> =
  -    p.get<xsl:value-of select="@from-type"/>();
  -  if (<xsl:value-of select="@varname"/> != null) {
  -      return new <xsl:value-of select="$propclass"/>(
  -        <xsl:value-of select='.'/>);
  -        }
  -      }
  +  <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>
  -      return super.convertPropertyDatatype(p, propertyList, fo);
  -    }
  +      <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="[EMAIL PROTECTED]" priority="2">
  -      <xsl:variable name="spname">
  -  <xsl:call-template name="makeClassName">
  -    <xsl:with-param name="propstr" select="@subproperty"/>
  -  </xsl:call-template>
  -      </xsl:variable>
  -    protected String getDefaultFor<xsl:value-of  select='$spname'/>() {
  -  return "<xsl:value-of  select='.'/>";
  -    }
  +  <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")'>
  -    private Property m_defaultProp=null;
  +    <xsl:text>
  +    private Property m_defaultProp=null;</xsl:text>
     </xsl:if>
  -    public Property make(PropertyList propertyList) throws FOPException {
  -      <xsl:choose><xsl:when test='@contextdep="true"'>
  -        return make(propertyList, "<xsl:value-of select='.'/>", 
propertyList.getParentFObj());
  -  </xsl:when><xsl:otherwise>
  +  <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:value-of select='.'/>", 
propertyList.getParentFObj());
  -  }
  -        return m_defaultProp;
  -  </xsl:otherwise></xsl:choose>
  -    }
  +            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()"/>
  @@ -205,410 +257,654 @@
   <!-- 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')">Maker</xsl:if>
  -</xsl:variable>
  +  <!-- 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>
   
  -<!-- The class of the Property object to be created -->
  -<xsl:variable name="propclass">
  -  <xsl:call-template name="propclass"/>
  -</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 superclass for this PropertyMaker -->
  -<xsl:variable name="superclass">
  -  <xsl:choose>
  -  <xsl:when test="[EMAIL PROTECTED]'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>
  +    <!-- The class of the Property object to be created -->
  +    <xsl:variable name="propclass">
  +      <xsl:call-template name="propclass"/>
  +    </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 </xsl:text><xsl:value-of select="$eclassname"/></xsl:if>
  -</xsl:variable>
  +    <!-- The superclass for this PropertyMaker -->
  +    <xsl:variable name="superclass">
  +      <xsl:choose>
  +        <xsl:when test="[EMAIL PROTECTED]'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>
   
  -<redirect:write select="concat($classname, '.java')">
  -package org.apache.fop.fo.properties;
  +    <!-- 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 </xsl:text><xsl:value-of 
select="$eclassname"/></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:text>
   
  -import java.util.HashMap;
  -import org.apache.fop.datatypes.*;
  -import org.apache.fop.fo.*;
  -import org.apache.fop.apps.FOPException;
  -
  -public class <xsl:value-of select="$classname"/> extends  <xsl:value-of 
select="$superclass"/><xsl:value-of select="$enumconst"/> {
  -
  -<!-- If has enumerated values and is a generic class, create a nested
  -  interface defining the enumeration constants -->
  -<xsl:if test=".//enumeration and @type='generic'">
  -  public interface Enums {
  -<xsl:for-each select="enumeration/value">
  -    int <xsl:value-of select="@const"/> =  Constants.<xsl:value-of 
select="@const"/>;
  -</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>
  -  public interface <xsl:value-of select="$spname"/> {
  -<xsl:for-each select="enumeration/value">
  -    int <xsl:value-of select="@const"/> =  Constants.<xsl:value-of 
select="@const"/>;
  -</xsl:for-each>
  -  }
  -</xsl:for-each>
  -  }
  -</xsl:if>
  +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">
  -  protected final static EnumProperty s_prop<xsl:value-of select="@const"/> = new 
EnumProperty(<xsl:if test="../../@type='generic'">Enums.</xsl:if><xsl:value-of 
select="@const"/>);
  -</xsl:for-each>
  +      <!-- 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'">Enums</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>
  +      <!-- 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(String 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:value-of select='../../name'/>
  +              <xsl:text>.</xsl:text>
  +              <xsl:value-of select='name'/>
  +              <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:value-of select='../../name'/>
  +              <xsl:text>.</xsl:text>
  +              <xsl:value-of select='name'/>
  +              <xsl:text>");</xsl:text>
  +            </xsl:otherwise>
  +          </xsl:choose>
  +        </xsl:for-each>
  +      </xsl:if>
   
  -      <xsl:choose>
  -        <xsl:when test='*[local-name(.)!="name" and local-name(.)!="datatype" and 
local-name(.)!="use-generic" and local-name(.)!="default"]'>
  -    static private class SP_<xsl:value-of select="$spname"/>Maker
  -  extends <xsl:value-of select="$sp_superclass"/>
  -<xsl:if test="enumeration"> implements <xsl:value-of 
select="$enumclass"/>.<xsl:value-of select="$spname"/></xsl:if> {
  -  SP_<xsl:value-of select="$spname"/>Maker(String sPropName) {
  -       super(sPropName);
  -        }
  -<xsl:for-each select="enumeration/value">
  -       protected final static EnumProperty s_prop<xsl:value-of select="@const"/> = 
new EnumProperty(<xsl:value-of select="@const"/>);
  -</xsl:for-each>
  -
  -  <xsl:apply-templates 
select="percent-ok|auto-ok|keyword-equiv|datatype-conversion|enumeration"/>
  -    }
  -    final private static Property.Maker s_<xsl:value-of select="$spname"/>Maker =
  -  new SP_<xsl:value-of select="$spname"/>Maker(
  -       "<xsl:value-of select='../../name'/>.<xsl:value-of select='name'/>");
  -        </xsl:when>
  -        <xsl:otherwise>
  -    final private static Property.Maker s_<xsl:value-of select="$spname"/>Maker =
  -  new <xsl:value-of select="$sp_superclass"/>(
  -       "<xsl:value-of select='../../name'/>.<xsl:value-of select='name'/>");
  -  </xsl:otherwise>
  -      </xsl:choose>
  -    </xsl:for-each>
  -</xsl:if>
  +      <xsl:text>
   
       static public Property.Maker maker(String propName) {
  -  return new <xsl:value-of select="$classname"/>(propName);
  +        return new </xsl:text>
  +      <xsl:value-of select="$classname"/>
  +      <xsl:text>(propName);
       }
   
  -    protected <xsl:value-of select="$classname"/>(String name) {
  -  super(name);
  -<xsl:if test="compound">
  -        m_shorthandMaker= getSubpropMaker("<xsl:value-of select='compound/[EMAIL 
PROTECTED]"true"]/name'/>");
  -</xsl:if>
  +    protected </xsl:text>
  +      <xsl:value-of select="$classname"/>
  +      <xsl:text>(String name) {
  +        super(name);</xsl:text>
  +      <xsl:if test="compound">
  +        <xsl:text>
  +        m_shorthandMaker= getSubpropMaker("</xsl:text>
  +        <xsl:value-of select=
  +            'compound/[EMAIL PROTECTED]"true"]/name'/>
  +        <xsl:text>");</xsl:text>
  +      </xsl:if>
  +      <xsl:text>
       }
  +</xsl:text>
   
  -<xsl:if test="compound">
  +      <xsl:if test="compound">
  +        <xsl:text>
       Property.Maker m_shorthandMaker;
   
       public Property checkEnumValues(String value) {
  -  return m_shorthandMaker.checkEnumValues(value);
  +        return m_shorthandMaker.checkEnumValues(value);
       }
   
       protected boolean isCompoundMaker() {
  -      return true;
  +        return true;
       }
   
  -    protected Property.Maker getSubpropMaker(String subprop) {
  -    <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>
  -  if (subprop.equals("<xsl:value-of select='name'/>"))
  -    return s_<xsl:value-of select="$spname"/>Maker;
  -    </xsl:for-each>
  -  return super.getSubpropMaker(subprop);
  +    protected Property.Maker getSubpropMaker(String subprop) {</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 (subprop.equals("</xsl:text>
  +          <xsl:value-of select='name'/>
  +          <xsl:text>"))
  +            return s_</xsl:text>
  +          <xsl:value-of select="$spname"/>
  +          <xsl:text>Maker;</xsl:text>
  +        </xsl:for-each>
  +        <xsl:text>
  +        return super.getSubpropMaker(subprop);
       }
   
       protected Property setSubprop(Property baseProp, String subpropName,
  -  Property subProp) {
  -        <xsl:value-of select="datatype"/> val = baseProp.get<xsl:value-of 
select="datatype"/>();
  -  // Do some type checking???
  -  // Check if one of our subproperties???
  -  val.setComponent(subpropName, subProp, false);
  -  return baseProp;
  +                                  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(subpropName, subProp, false);
  +        return baseProp;
       }
   
       public Property getSubpropValue(Property baseProp, String subpropName) {
  -      <xsl:value-of select="datatype"/> val = baseProp.get<xsl:value-of 
select="datatype"/>();
  -      return val.getComponent(subpropName);
  +        </xsl:text>
  +        <xsl:value-of select="datatype"/>
  +        <xsl:text> val = baseProp.get</xsl:text>
  +        <xsl:value-of select="datatype"/>
  +        <xsl:text>();
  +        return val.getComponent(subpropName);
       }
  -<xsl:choose>
  -<!-- some subproperty default is context dependent; don't cache default! -->
  -<xsl:when test='.//[EMAIL PROTECTED]"true"]'>
  +</xsl:text>
  +      <xsl:choose>
  +        <!-- some subproperty default is context dependent;
  +             don't cache default! -->
  +        <xsl:when test='.//[EMAIL PROTECTED]"true"]'>
  +          <xsl:text>
       public Property make(PropertyList propertyList) throws FOPException {
           return makeCompound(propertyList, propertyList.getParentFObj());
  -    }
  -</xsl:when>
  -<xsl:otherwise>
  +    }</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());
  -  }
  +            m_defaultProp=makeCompound(
  +                            propertyList, propertyList.getParentFObj());
  +        }
           return m_defaultProp;
  -    }
  -</xsl:otherwise>
  -</xsl:choose>
  -
  -    protected Property makeCompound(PropertyList pList, FObj fo) throws 
FOPException {
  -  <xsl:value-of select="datatype"/> p = new <xsl:value-of select="datatype"/>();
  -  Property subProp;
  -    <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>
  -   // set default for subprop <xsl:value-of select="."/>
  -   subProp = getSubpropMaker("<xsl:value-of select='.'/>").make(pList,
  -    getDefaultFor<xsl:value-of select='$spname'/>(), fo);
  -    p.setComponent("<xsl:value-of select='.'/>", subProp, true);
  -    </xsl:for-each>
  -  return new <xsl:value-of select="$propclass"/>(p);
  -    }
  -
  -    <!-- 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>
  -    protected String getDefaultFor<xsl:value-of  select='$spname'/>() {
  -      <xsl:choose><xsl:when test="default">
  -  return "<xsl:value-of  select='default'/>";
  -        </xsl:when><xsl:when test="use-generic and key('genericref', 
use-generic)/default">
  -  return "<xsl:value-of select='key(&apos;genericref&apos;, 
use-generic)/default'/>";
  -        </xsl:when><xsl:otherwise>
  -  return "";
  -  </xsl:otherwise>
  +    }</xsl:text>
  +        </xsl:otherwise>
         </xsl:choose>
  -    }
  -    </xsl:for-each>
  +      <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("</xsl:text>
  +        <xsl:value-of select='.'/>
  +        <xsl:text>").make(pList, getDefaultFor</xsl:text>
  +        <xsl:value-of select='$spname'/>
  +        <xsl:text>(), fo);
  +          p.setComponent("</xsl:text>
  +        <xsl:value-of select='.'/>
  +        <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:value-of select="$propclass"/>) return p;
  -  if (! (p instanceof EnumProperty)) {
  -    // delegate to the subprop maker to do conversions
  -    p = m_shorthandMaker.convertProperty(p,pList,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:value-of select="datatype"/> pval = prop.get<xsl:value-of 
select="datatype"/>();
  -<xsl:for-each select="compound/[EMAIL PROTECTED]'true']">
  -    pval.setComponent("<xsl:value-of select='name'/>", p, false);
  -</xsl:for-each>
  -          return prop;
  -        }
  -  else return null;
  -<!--
  -        else {
  -    // throw some kind of exception!
  -    throw new FOPException("Can't convert value to <xsl:value-of select='$spdt'/> 
type");
  +        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/[EMAIL PROTECTED]'true']">
  +        <xsl:text>
  +            pval.setComponent("</xsl:text>
  +        <xsl:value-of select='name'/>
  +        <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>
   
  -</xsl:if> <!-- property/compound -->
  -
  -<xsl:if test="inherited">
  -   public boolean isInherited() { return <xsl:value-of select="inherited"/>; }
  -</xsl:if>
  -
  -<!-- the default implementation returns false -->
  -<xsl:if test='inherited/@type="specified"'>
  -   public boolean inheritsSpecified() {
  -   return true;
  -   }
  -</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">
  +      <!-- Currently only works for Enum values -->
  +      <xsl:if test="derive">
  +        <xsl:text>
       public Property compute(PropertyList propertyList) {
  -      Property computedProperty = null;
  -      Property correspondingProperty = propertyList.get("<xsl:value-of 
select="derive/@from"/>");
  -      if (correspondingProperty != null) {
  -        int correspondingValue = correspondingProperty.getEnum();
  +        Property computedProperty = null;
  +        Property correspondingProperty = propertyList.get("</xsl:text>
  +        <xsl:value-of select="derive/@from"/>
  +        <xsl:text>");
  +        if (correspondingProperty != null) {
  +            int correspondingValue = correspondingProperty.getEnum();</xsl:text>
           <xsl:for-each select="derive/if">
  -        if (correspondingValue == <xsl:value-of select="@match"/>)
  -          computedProperty = new EnumProperty(<xsl:value-of select="."/>);
  -        else</xsl:for-each>
  -        ;
  -      }
  -      return computedProperty;
  +          <xsl:text>
  +            if (correspondingValue == </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:if>
  +</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'">
  +      <!-- 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();
  -      StringBuffer sbExpr=new StringBuffer();
  -      <xsl:for-each select=".//corresponding/propval">
  -      sbExpr.setLength(0);
  -      <xsl:apply-templates select="."/>
  -      if (propertyList.getExplicit(sbExpr.toString()) != null) return true;
  -      </xsl:for-each>
  -      return false;
  +        FObj parentFO = propertyList.getParentFObj();
  +        StringBuffer sbExpr=new StringBuffer();</xsl:text>
  +          <xsl:for-each select=".//corresponding/propval">
  +            <xsl:text>
  +        sbExpr.setLength(0);</xsl:text>
  +            <xsl:apply-templates select="."/>
  +            <xsl:text>
  +        if (propertyList.getExplicit(sbExpr.toString()) != null)
  +            return true;</xsl:text>
  +          </xsl:for-each>
  +          <xsl:text>
  +        return false;
       }
  -    </xsl:if>
  +</xsl:text>
  +      </xsl:if>
  +      <xsl:text>
   
       public Property compute(PropertyList propertyList) throws FOPException {
  -      FObj parentFO = propertyList.getParentFObj();
  -      StringBuffer sbExpr=new StringBuffer();
  -      Property p=null;
  -      <xsl:choose><xsl:when test="corresponding/propexpr">
  -      <xsl:apply-templates select="corresponding/propval"/>
  -  // Make sure the property is set before calculating it!
  -      if (propertyList.getExplicitOrShorthand(sbExpr.toString()) == null) return p;
  -      sbExpr.setLength(0);
  -      <xsl:apply-templates select="corresponding/propexpr"/>
  -      p= make(propertyList, sbExpr.toString(), propertyList.getParentFObj());
  -      </xsl:when><xsl:otherwise>
  -      <xsl:apply-templates select="corresponding/propval"/>
  -      p= propertyList.getExplicitOrShorthand(sbExpr.toString());
  -      </xsl:otherwise></xsl:choose>
  -      if (p != null) {
  -          p = convertProperty(p, propertyList, parentFO );
  -      }
  +        FObj parentFO = propertyList.getParentFObj();
  +        StringBuffer sbExpr=new StringBuffer();
  +        Property p=null;</xsl:text>
  +      <xsl:choose>
  +        <xsl:when test="corresponding/propexpr">
  +          <xsl:apply-templates select="corresponding/propval"/>
  +          <xsl:text>
  +        // Make sure the property is set before calculating it!
  +        if (propertyList.getExplicitOrShorthand(sbExpr.toString()) == null)
  +            return p;
  +        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:apply-templates select="corresponding/propval"/>
  +          <xsl:text>
  +        p= propertyList.getExplicitOrShorthand(sbExpr.toString());</xsl:text>
  +        </xsl:otherwise>
  +      </xsl:choose>
  +      <xsl:text>
  +        if (p != null) {
  +            p = convertProperty(p, propertyList, parentFO );
  +        }</xsl:text>
         <xsl:if test="compound">
  -      else p= makeCompound(propertyList, parentFO);
  +        <xsl:text>
  +        else p = makeCompound(propertyList, parentFO);
   
  -      Property subprop;
  -      <xsl:for-each select="compound/subproperty/corresponding">
  -      sbExpr.setLength(0);
  -      <xsl:choose><xsl:when test="propexpr">
  -      <xsl:apply-templates select="propexpr"/>
  -      subprop= getSubpropMaker("<xsl:value-of select='../name'/>").
  -          make(propertyList, sbExpr.toString(), parentFO);
  -      </xsl:when><xsl:otherwise>
  -      <xsl:apply-templates select="propval"/>
  -      subprop= propertyList.getExplicitOrShorthand(sbExpr.toString());
  -      </xsl:otherwise></xsl:choose>
  -      if (subprop != null) {
  -        setSubprop(p, "<xsl:value-of select='../name'/>", subprop);
  -      }
  +        Property subprop;</xsl:text>
  +        <xsl:for-each select="compound/subproperty/corresponding">
  +          <xsl:text>
  +        sbExpr.setLength(0);</xsl:text>
  +          <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:apply-templates select="propval"/>
  +            <xsl:text>
  +        subprop = propertyList.getExplicitOrShorthand(sbExpr.toString());</xsl:text>
  +          </xsl:otherwise>
  +        </xsl:choose>
  +        <xsl:text>
  +        if (subprop != null) {
  +            setSubprop(p, "</xsl:text>
  +        <xsl:value-of select='../name'/>
  +        <xsl:text>", subprop);
  +        }</xsl:text>
         </xsl:for-each>
  -      </xsl:if>
  -      return p;
  +    </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:for-each select="shorthand">
  -  <xsl:variable name="shprop" select="."/>
  -      if (p == null) {
  -         listprop = (ListProperty)propertyList.getExplicit("<xsl:value-of 
select='$shprop'/>");
  -         if (listprop != null) {
  -           // Get a parser for the shorthand to set the individual properties
  -           ShorthandParser shparser = new <xsl:value-of select="key('shorthandref', 
$shprop)/datatype-parser"/>(listprop);
  -             p = shparser.getValueForProperty(getPropName(), this, propertyList);
  -         }
  -      }
  -      </xsl:for-each>
  -      return p;
  +        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("</xsl:text>
  +    <xsl:value-of select='$shprop'/>
  +    <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(
  +                                        getPropName(), 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: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">
  -   sbExpr.append("_fop-property-value("); <!-- Note: interpreted by property parser 
-->
  -   <xsl:apply-templates/>
  -   sbExpr.append(")");
  +  <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="corresponding//text()">
  -   <xsl:variable name="tval" select='normalize-space(.)'/>
  -   <xsl:if test="$tval != ''">sbExpr.append("<xsl:value-of 
select='$tval'/>");</xsl:if>
  +  <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 match="propval/wmrel2abs">
  -   sbExpr.append(propertyList.wmRelToAbs(PropertyList.<xsl:value-of 
select="@dir"/>));
  +  <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">
  -   sbExpr.append(parentFO.properties.wmRelToAbs(PropertyList.<xsl:value-of 
select="@dir"/>));
  +  <xsl:text>
  +        sbExpr.append(parentFO.properties.wmRelToAbs(PropertyList.</xsl:text>
  +  <xsl:value-of select="@dir"/>
  +  <xsl:text>));</xsl:text>
   </xsl:template>
   
   <xsl:template match="propval/wmabs2rel">
  -   sbExpr.append(propertyList.wmAbsToRel(PropertyList.<xsl:value-of 
select="@dir"/>));
  +  <xsl:text>
  +        sbExpr.append(propertyList.wmAbsToRel(PropertyList.</xsl:text>
  +  <xsl:value-of select="@dir"/>
  +  <xsl:text>));</xsl:text>
   </xsl:template>
   
   <!-- avoid unwanted output to placeholder file -->
  @@ -619,31 +915,40 @@
        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: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: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: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, ' ')"/>
  -      if (value.equals("<xsl:value-of select="$oneval"/>")) { return 
s_prop<xsl:value-of select="@const"/>; }
  +  <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:with-param name="specvals" select="substring-after($specvals, ' ')"/>
       </xsl:call-template>
  -    </xsl:if>
  +  </xsl:if>
   </xsl:template>
   
   </xsl:stylesheet>
  
  
  
  1.3       +30 -22    xml-fop/src/codegen/genconst.xsl
  
  Index: genconst.xsl
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/codegen/genconst.xsl,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- genconst.xsl      7 Mar 2003 10:54:17 -0000       1.2
  +++ genconst.xsl      25 Jun 2003 17:11:05 -0000      1.3
  @@ -56,17 +56,20 @@
   
   <xsl:template match="allprops">
   <xsl:variable name="constlist">
  -    <xsl:for-each select="document(propfile)//enumeration/value">
  +  <xsl:for-each select="document(propfile)//enumeration/value">
       <xsl:sort select="@const"/>
  -    <xsl:value-of select="@const"/>:</xsl:for-each>
  +  <xsl:value-of select="@const"/>:</xsl:for-each>
   </xsl:variable>
  +<xsl:text>
   package org.apache.fop.fo.properties;
   
  -public interface Constants {
  -  <xsl:call-template name="sortconsts">
  -     <xsl:with-param name="consts" select="$constlist"/>
  -  </xsl:call-template>
  +public interface Constants {</xsl:text>
  +<xsl:call-template name="sortconsts">
  +  <xsl:with-param name="consts" select="$constlist"/>
  +</xsl:call-template>
  +<xsl:text>
   }
  +</xsl:text>
   </xsl:template>
   
   <xsl:template name="sortconsts">
  @@ -75,21 +78,26 @@
   <xsl:param name="num" select="1"/>
   <xsl:variable name="cval" select="substring-before($consts,':')"/>
   <xsl:choose>
  - <xsl:when test="$consts = ''"/>
  - <xsl:when test="$cval = $prevconst">
  -  <xsl:call-template name="sortconsts">
  -     <xsl:with-param name="consts" select="substring-after($consts,concat($cval, 
':'))"/>
  -     <xsl:with-param name="num" select="$num"/>
  -     <xsl:with-param name="prevconst" select="$cval"/>
  -  </xsl:call-template>
  - </xsl:when>
  - <xsl:otherwise>
  -        public final static int <xsl:value-of select="$cval"/> = <xsl:value-of 
select="$num"/>;
  -  <xsl:call-template name="sortconsts">
  -     <xsl:with-param name="consts" select="substring-after($consts,concat($cval, 
':'))"/>
  -     <xsl:with-param name="num" select="$num + 1"/>
  -     <xsl:with-param name="prevconst" select="$cval"/>
  -  </xsl:call-template>
  +  <xsl:when test="$consts = ''"/>
  +  <xsl:when test="$cval = $prevconst">
  +    <xsl:call-template name="sortconsts">
  +      <xsl:with-param name="consts" select="substring-after($consts,concat($cval, 
':'))"/>
  +      <xsl:with-param name="num" select="$num"/>
  +      <xsl:with-param name="prevconst" select="$cval"/>
  +    </xsl:call-template>
  +  </xsl:when>
  +  <xsl:otherwise>
  +    <xsl:text>
  +      int </xsl:text>
  +    <xsl:value-of select="$cval"/>
  +    <xsl:text> = </xsl:text>
  +    <xsl:value-of select="$num"/>
  +    <xsl:text>;</xsl:text>
  +    <xsl:call-template name="sortconsts">
  +      <xsl:with-param name="consts" select="substring-after($consts,concat($cval, 
':'))"/>
  +      <xsl:with-param name="num" select="$num + 1"/>
  +      <xsl:with-param name="prevconst" select="$cval"/>
  +    </xsl:call-template>
     </xsl:otherwise>
   </xsl:choose>
   </xsl:template>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to