]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Add support for border and padding shorthand properties, color keywords in foproperti...
authorKaren Lease <klease@apache.org>
Sun, 4 Mar 2001 21:23:35 +0000 (21:23 +0000)
committerKaren Lease <klease@apache.org>
Sun, 4 Mar 2001 21:23:35 +0000 (21:23 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194121 13f79535-47bb-0310-9956-ffa450edef68

src/codegen/colorkw.xml [new file with mode: 0644]
src/codegen/enumgen.xsl
src/codegen/foproperties.xml
src/codegen/properties.xsl
src/codegen/propinc.xsl

diff --git a/src/codegen/colorkw.xml b/src/codegen/colorkw.xml
new file mode 100644 (file)
index 0000000..2fc7be6
--- /dev/null
@@ -0,0 +1,149 @@
+<toto>
+<keyword-equiv match="aliceblue">#f0f8ff</keyword-equiv>
+<keyword-equiv match="antiquewhite">#faebd7</keyword-equiv>
+<keyword-equiv match="aqua">#00ffff</keyword-equiv>
+<keyword-equiv match="aquamarine">#7fffd4</keyword-equiv>
+<keyword-equiv match="azure">#f0ffff</keyword-equiv>
+<keyword-equiv match="beige">#f5f5dc</keyword-equiv>
+<keyword-equiv match="bisque">#ffe4c4</keyword-equiv>
+<keyword-equiv match="black">#000000</keyword-equiv>
+<keyword-equiv match="blanchedalmond">#ffebcd</keyword-equiv>
+<keyword-equiv match="blue">#0000ff</keyword-equiv>
+<keyword-equiv match="blueviolet">#8a2be2</keyword-equiv>
+<keyword-equiv match="brown">#a52a2a</keyword-equiv>
+<keyword-equiv match="burlywood">#deb887</keyword-equiv>
+<keyword-equiv match="cadetblue">#5f9ea0</keyword-equiv>
+<keyword-equiv match="chartreuse">#7fff00</keyword-equiv>
+<keyword-equiv match="chocolate">#d2691e</keyword-equiv>
+<keyword-equiv match="coral">#ff7f50</keyword-equiv>
+<keyword-equiv match="cornflowerblue">#6495ed</keyword-equiv>
+<keyword-equiv match="cornsilk">#fff8dc</keyword-equiv>
+<keyword-equiv match="crimson">#dc143c</keyword-equiv>
+<keyword-equiv match="cyan">#00ffff</keyword-equiv>
+<keyword-equiv match="darkblue">#00008b</keyword-equiv>
+<keyword-equiv match="darkcyan">#008b8b</keyword-equiv>
+<keyword-equiv match="darkgoldenrod">#b8860b</keyword-equiv>
+<keyword-equiv match="darkgray">#a9a9a9</keyword-equiv>
+<keyword-equiv match="darkgreen">#006400</keyword-equiv>
+<keyword-equiv match="darkgrey">#a9a9a9</keyword-equiv>
+<keyword-equiv match="darkkhaki">#bdb76b</keyword-equiv>
+<keyword-equiv match="darkmagenta">#8b008b</keyword-equiv>
+<keyword-equiv match="darkolivegreen">#556b2f</keyword-equiv>
+<keyword-equiv match="darkorange">#ff8c00</keyword-equiv>
+<keyword-equiv match="darkorchid">#9932cc</keyword-equiv>
+<keyword-equiv match="darkred">#8b0000</keyword-equiv>
+<keyword-equiv match="darksalmon">#e9967a</keyword-equiv>
+<keyword-equiv match="darkseagreen">#8fbc8f</keyword-equiv>
+<keyword-equiv match="darkslateblue">#483d8b</keyword-equiv>
+<keyword-equiv match="darkslategray">#2f4f4f</keyword-equiv>
+<keyword-equiv match="darkslategrey">#2f4f4f</keyword-equiv>
+<keyword-equiv match="darkturquoise">#00ced1</keyword-equiv>
+<keyword-equiv match="darkviolet">#9400d3</keyword-equiv>
+<keyword-equiv match="deeppink">#ff1493</keyword-equiv>
+<keyword-equiv match="deepskyblue">#00bfff</keyword-equiv>
+<keyword-equiv match="dimgray">#696969</keyword-equiv>
+<keyword-equiv match="dimgrey">#696969</keyword-equiv>
+<keyword-equiv match="dodgerblue">#1e90ff</keyword-equiv>
+<keyword-equiv match="firebrick">#b22222</keyword-equiv>
+<keyword-equiv match="floralwhite">#fffaf0</keyword-equiv>
+<keyword-equiv match="forestgreen">#228b22</keyword-equiv>
+<keyword-equiv match="fuchsia">#ff00ff</keyword-equiv>
+<keyword-equiv match="gainsboro">#dcdcdc</keyword-equiv>
+<keyword-equiv match="lightpink">#ffb6c1</keyword-equiv>
+<keyword-equiv match="lightsalmon">#ffa07a</keyword-equiv>
+<keyword-equiv match="lightseagreen">#20b2aa</keyword-equiv>
+<keyword-equiv match="lightskyblue">#87cefa</keyword-equiv>
+<keyword-equiv match="lightslategray">#778899</keyword-equiv>
+<keyword-equiv match="lightslategrey">#778899</keyword-equiv>
+<keyword-equiv match="lightsteelblue">#b0c4de</keyword-equiv>
+<keyword-equiv match="lightyellow">#ffffe0</keyword-equiv>
+<keyword-equiv match="lime">#00ff00</keyword-equiv>
+<keyword-equiv match="limegreen">#32cd32</keyword-equiv>
+<keyword-equiv match="linen">#faf0e6</keyword-equiv>
+<keyword-equiv match="magenta">#ff00ff</keyword-equiv>
+<keyword-equiv match="maroon">#800000</keyword-equiv>
+<keyword-equiv match="mediumaquamarine">#66cdaa</keyword-equiv>
+<keyword-equiv match="mediumblue">#0000cd</keyword-equiv>
+<keyword-equiv match="mediumorchid">#ba55d3</keyword-equiv>
+<keyword-equiv match="mediumpurple">#9370db</keyword-equiv>
+<keyword-equiv match="mediumseagreen">#3cb371</keyword-equiv>
+<keyword-equiv match="mediumslateblue">#7b68ee</keyword-equiv>
+<keyword-equiv match="mediumspringgreen">#00fa9a</keyword-equiv>
+<keyword-equiv match="mediumturquoise">#48d1cc</keyword-equiv>
+<keyword-equiv match="mediumvioletred">#c71585</keyword-equiv>
+<keyword-equiv match="midnightblue">#191970</keyword-equiv>
+<keyword-equiv match="mintcream">#f5fffa</keyword-equiv>
+<keyword-equiv match="mistyrose">#ffe4e1</keyword-equiv>
+<keyword-equiv match="moccasin">#ffe4b5</keyword-equiv>
+<keyword-equiv match="navajowhite">#ffdead</keyword-equiv>
+<keyword-equiv match="navy">#000080</keyword-equiv>
+<keyword-equiv match="oldlace">#fdf5e6</keyword-equiv>
+<keyword-equiv match="olive">#808000</keyword-equiv>
+<keyword-equiv match="olivedrab">#6b8e23</keyword-equiv>
+<keyword-equiv match="orange">#ffa500</keyword-equiv>
+<keyword-equiv match="orangered">#ff4500</keyword-equiv>
+<keyword-equiv match="orchid">#da70d6</keyword-equiv>
+<keyword-equiv match="palegoldenrod">#eee8aa</keyword-equiv>
+<keyword-equiv match="palegreen">#98fb98</keyword-equiv>
+<keyword-equiv match="paleturquoise">#afeeee</keyword-equiv>
+<keyword-equiv match="palevioletred">#db7093</keyword-equiv>
+<keyword-equiv match="papayawhip">#ffefd5</keyword-equiv>
+<keyword-equiv match="peachpuff">#ffdab9</keyword-equiv>
+<keyword-equiv match="peru">#cd853f</keyword-equiv>
+<keyword-equiv match="pink">#ffc0cb</keyword-equiv>
+<keyword-equiv match="plum">#dda0dd</keyword-equiv>
+<keyword-equiv match="powderblue">#b0e0e6</keyword-equiv>
+<keyword-equiv match="purple">#800080</keyword-equiv>
+<keyword-equiv match="red">#ff0000</keyword-equiv>
+<keyword-equiv match="rosybrown">#bc8f8f</keyword-equiv>
+<keyword-equiv match="royalblue">#4169e1</keyword-equiv>
+<keyword-equiv match="saddlebrown">#8b4513</keyword-equiv>
+<keyword-equiv match="salmon">#fa8072</keyword-equiv>
+<keyword-equiv match="ghostwhite">#f8f8ff</keyword-equiv>
+<keyword-equiv match="gold">#ffd700</keyword-equiv>
+<keyword-equiv match="goldenrod">#daa520</keyword-equiv>
+<keyword-equiv match="gray">#808080</keyword-equiv>
+<keyword-equiv match="grey">#808080</keyword-equiv>
+<keyword-equiv match="green">#008000</keyword-equiv>
+<keyword-equiv match="greenyellow">#adff2f</keyword-equiv>
+<keyword-equiv match="honeydew">#f0fff0</keyword-equiv>
+<keyword-equiv match="hotpink">#ff69b4</keyword-equiv>
+<keyword-equiv match="indianred">#cd5c5c</keyword-equiv>
+<keyword-equiv match="indigo">#4b0082</keyword-equiv>
+<keyword-equiv match="ivory">#fffff0</keyword-equiv>
+<keyword-equiv match="khaki">#f0e68c</keyword-equiv>
+<keyword-equiv match="lavender">#e6e6fa</keyword-equiv>
+<keyword-equiv match="lavenderblush">#fff0f5</keyword-equiv>
+<keyword-equiv match="lawngreen">#7cfc00</keyword-equiv>
+<keyword-equiv match="lemonchiffon">#fffacd</keyword-equiv>
+<keyword-equiv match="lightblue">#add8e6</keyword-equiv>
+<keyword-equiv match="lightcoral">#f08080</keyword-equiv>
+<keyword-equiv match="lightcyan">#e0ffff</keyword-equiv>
+<keyword-equiv match="lightgoldenrodyellow">#fafad2</keyword-equiv>
+<keyword-equiv match="lightgray">#d3d3d3</keyword-equiv>
+<keyword-equiv match="lightgreen">#90ee90</keyword-equiv>
+<keyword-equiv match="lightgrey">#d3d3d3</keyword-equiv>
+<keyword-equiv match="sandybrown">#f4a460</keyword-equiv>
+<keyword-equiv match="seagreen">#2e8b57</keyword-equiv>
+<keyword-equiv match="seashell">#fff5ee</keyword-equiv>
+<keyword-equiv match="sienna">#a0522d</keyword-equiv>
+<keyword-equiv match="silver">#c0c0c0</keyword-equiv>
+<keyword-equiv match="skyblue">#87ceeb</keyword-equiv>
+<keyword-equiv match="slateblue">#6a5acd</keyword-equiv>
+<keyword-equiv match="slategray">#708090</keyword-equiv>
+<keyword-equiv match="slategrey">#708090</keyword-equiv>
+<keyword-equiv match="snow">#fffafa</keyword-equiv>
+<keyword-equiv match="springgreen">#00ff7f</keyword-equiv>
+<keyword-equiv match="steelblue">#4682b4</keyword-equiv>
+<keyword-equiv match="tan">#d2b48c</keyword-equiv>
+<keyword-equiv match="teal">#008080</keyword-equiv>
+<keyword-equiv match="thistle">#d8bfd8</keyword-equiv>
+<keyword-equiv match="tomato">#ff6347</keyword-equiv>
+<keyword-equiv match="turquoise">#40e0d0</keyword-equiv>
+<keyword-equiv match="violet">#ee82ee</keyword-equiv>
+<keyword-equiv match="wheat">#f5deb3</keyword-equiv>
+<keyword-equiv match="white">#ffffff</keyword-equiv>
+<keyword-equiv match="whitesmoke">#f5f5f5</keyword-equiv>
+<keyword-equiv match="yellow">#ffff00</keyword-equiv>
+<keyword-equiv match="yellowgreen">#9acd32</keyword-equiv>
+</toto>
index e86a5fc27d7a552d9bb200185b82fa0227ea8a43..80c8db4fdaa6c70b6804c6b7487f66ead7bc7ba8 100644 (file)
@@ -41,7 +41,7 @@ package org.apache.fop.fo.properties;
        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"/> = <xsl:number/>;
+     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"/>
@@ -58,7 +58,7 @@ package org.apache.fop.fo.properties;
       <xsl:for-each select="compound/subproperty[enumeration]">
       public interface <xsl:value-of select="name"/> {
         <xsl:for-each select="enumeration/value">
-        public final static int <xsl:value-of select="@const"/> = <xsl:number/>;
+        public final static int <xsl:value-of select="@const"/> =  Constants.<xsl:value-of select="@const"/>;
         </xsl:for-each>
       }
       </xsl:for-each>
index ad03a94771f682cc7ee5e46fbc53d80bd1087386..ae190d94c95d20f3ce95eb41213bdc4c0edc5b8e 100644 (file)
@@ -1,12 +1,15 @@
-<?xml version="1.0" ?>
+<?xml version="1.0" standalone="yes" ?>
 <property-list family="FO">
  <generic-property-list>
        <property type="generic">
                <name>generic-color</name>
                <class-name>GenericColor</class-name>
                <datatype>ColorType</datatype>
+               <extfile href="colorkw.xml"/>
+<!--
                <datatype-conversion from-type="String" varname="strval">
                         new ColorType(strval)</datatype-conversion>
+-->
        </property>
        <property type="generic">
                <name>generic-boolean</name>
@@ -83,6 +86,7 @@
                <datatype>Length</datatype>
                <inherited>false</inherited>
                <default>0pt</default>
+                <shorthand>padding</shorthand>
        </property>
 
 <!-- Before, After, Start, End border width props -->
        <property type="generic">
                <name>border-cond-width-template</name>
                <class-name>GenericCondBorderWidth</class-name>
-               <keyword-equiv match="thin" eval="true">0.5pt</keyword-equiv>
-               <keyword-equiv match="medium" eval="true">1pt</keyword-equiv>
-               <keyword-equiv match="thick" eval="true">2pt</keyword-equiv>
+               <keyword-equiv match="thin">0.5pt</keyword-equiv>
+               <keyword-equiv match="medium">1pt</keyword-equiv>
+               <keyword-equiv match="thick">2pt</keyword-equiv>
                <inherited>false</inherited>
                <datatype>CondLength</datatype>
                <compound>
                        <subproperty set-by-shorthand="true">
                                <name>length</name>
                                <datatype>Length</datatype>
-                               <keyword-equiv match="thin" eval="true">0.5pt</keyword-equiv>
-                               <keyword-equiv match="medium" eval="true">1pt</keyword-equiv>
-                               <keyword-equiv match="thick" eval="true">2pt</keyword-equiv>
+                               <keyword-equiv match="thin">0.5pt</keyword-equiv>
+                               <keyword-equiv match="medium">1pt</keyword-equiv>
+                               <keyword-equiv match="thick">2pt</keyword-equiv>
                                <default>medium</default>
                        </subproperty>
                        <subproperty>
                <name>border-width-template</name>
                <class-name>GenericBorderWidth</class-name>
                <datatype>Length</datatype>
-               <keyword-equiv match="thin" eval="true">0.5pt</keyword-equiv>
-               <keyword-equiv match="medium" eval="true">1pt</keyword-equiv>
-               <keyword-equiv match="thick" eval="true">2pt</keyword-equiv>
+               <keyword-equiv match="thin">0.5pt</keyword-equiv>
+               <keyword-equiv match="medium">1pt</keyword-equiv>
+               <keyword-equiv match="thick">2pt</keyword-equiv>
                <inherited>false</inherited>
                <default>0pt</default>
+               <shorthand>border-width</shorthand>
        </property>
        <property type="generic">
                <name>border-style-template</name>
                                <value const="OUTSET">outset</value>
                        </enumeration>
                <default>none</default>
+               <shorthand>border-style</shorthand>
        </property>
        <property type="generic">
                <name>break-template</name>
                <inherited type="specified">true</inherited>
                <datatype>Length</datatype>
                <default contextdep="true">normal</default>
-               <keyword-equiv match="normal" eval="true">1.2em</keyword-equiv>
+               <keyword-equiv match="normal">1.2em</keyword-equiv>
                <datatype-conversion from-type="Number" varname="numval">
                new PercentLength(numval.doubleValue(),
                                 getPercentBase(fo,propertyList))</datatype-conversion>
                <inherited>false</inherited>
                <use-generic>GenericColor</use-generic>
                <default>transparent</default>
+               <!-- Handle transparent -->
+               <datatype-conversion from-type="NCname" vartype="String" varname="nameval">
+                        new ColorType(nameval)</datatype-conversion>
        </property>
 <!-- shorthand class for all padding.... -->
        <property>
                <name>padding</name>
                <inherited>false</inherited>
-               <datatype>Length</datatype>
-               <default>0pt</default>
+               <datatype>List</datatype>
+               <datatype-parser>BoxPropShorthandParser</datatype-parser>
        </property>
        <property>
                <name>padding-before</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="TOP"/>-color</propval>
                </corresponding>
+                <shorthand>border-top</shorthand>
+                <shorthand>border-color</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-top-style</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="TOP"/>-style</propval>
                </corresponding>
+                <shorthand>border-top</shorthand>
+                <shorthand>border-style</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-top-width</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="TOP"/>-width</propval>
                </corresponding>
+                <shorthand>border-top</shorthand>
+                <shorthand>border-width</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-bottom-color</name>
                        <propval>border-<wmabs2rel dir="BOTTOM"/>-color</propval>
                </corresponding>
                <default>black</default>
+                <shorthand>border-bottom</shorthand>
+                <shorthand>border-color</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-bottom-style</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="BOTTOM"/>-style</propval>
                </corresponding>
+                <shorthand>border-bottom</shorthand>
+                <shorthand>border-style</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-bottom-width</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="BOTTOM"/>-width</propval>
                </corresponding>
+                <shorthand>border-bottom</shorthand>
+                <shorthand>border-width</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-left-color</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="LEFT"/>-color</propval>
                </corresponding>
+                <shorthand>border-left</shorthand>
+                <shorthand>border-color</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-left-style</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="LEFT"/>-style</propval>
                </corresponding>
+                <shorthand>border-left</shorthand>
+                <shorthand>border-style</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-left-width</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="LEFT"/>-width</propval>
                </corresponding>
+                <shorthand>border-left</shorthand>
+                <shorthand>border-width</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-right-color</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="RIGHT"/>-color</propval>
                </corresponding>
+                <shorthand>border-right</shorthand>
+                <shorthand>border-color</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-right-style</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="RIGHT"/>-style</propval>
                </corresponding>
+                <shorthand>border-right</shorthand>
+                <shorthand>border-style</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-right-width</name>
                <corresponding>
                        <propval>border-<wmabs2rel dir="RIGHT"/>-width</propval>
                </corresponding>
+                <shorthand>border-right</shorthand>
+                <shorthand>border-width</shorthand>
+                <shorthand>border</shorthand>
        </property>
        <property>
                <name>border-color</name>
                <inherited>false</inherited>
-               <use-generic>GenericColor</use-generic>
-               <default>black</default>
+               <datatype>List</datatype>
+               <datatype-parser>BoxPropShorthandParser</datatype-parser>
        </property>
        <property>
                <name>border-style</name>
-               <use-generic>GenericBorderStyle</use-generic>
+               <inherited>false</inherited>
+               <datatype>List</datatype>
+               <datatype-parser>BoxPropShorthandParser</datatype-parser>
        </property>
        <property>
                <name>border-width</name>
                <inherited>false</inherited>
-               <datatype>Length</datatype>
-               <default>0pt</default>
+               <datatype>List</datatype>
+               <datatype-parser>BoxPropShorthandParser</datatype-parser>
        </property>
        <property>
                <name>border-top</name>
                <inherited>false</inherited>
-               <datatype>String</datatype>
-               <default>normal</default>
+               <datatype>List</datatype>
+               <datatype-parser>GenericShorthandParser</datatype-parser>
        </property>
        <property>
                <name>border-bottom</name>
                <inherited>false</inherited>
-               <datatype>String</datatype>
-               <default>normal</default>
+               <datatype>List</datatype>
+               <datatype-parser>GenericShorthandParser</datatype-parser>
        </property>
        <property>
                <name>border-left</name>
                <inherited>false</inherited>
-               <datatype>String</datatype>
-               <default>normal</default>
+               <datatype>List</datatype>
+               <datatype-parser>GenericShorthandParser</datatype-parser>
        </property>
        <property>
                <name>border-right</name>
                <inherited>false</inherited>
-               <datatype>String</datatype>
-               <default>normal</default>
+               <datatype>List</datatype>
+               <datatype-parser>GenericShorthandParser</datatype-parser>
+       </property>
+       <property>
+               <name>border</name>
+               <inherited>false</inherited>
+               <datatype>List</datatype>
+               <datatype-parser>GenericShorthandParser</datatype-parser>
        </property>
        <property>
                <name>position</name>
                <inherited>true</inherited>
                <datatype>Length</datatype>
                <default contextdep="true">use-font-metrics</default>
-               <keyword-equiv match="use-font-metrics" eval="true">0pt</keyword-equiv>
+               <keyword-equiv match="use-font-metrics">0pt</keyword-equiv>
                <percent-ok base="CONTAINING_BOX"/>
 
         </property>
index aae85444d24c1029a591b5ca72f6ace2a7bed08b..95893abd62c64eb5523a1ebc5b0395351abf9986 100644 (file)
@@ -8,6 +8,10 @@
 
 <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">
 
 <!-- Look for keyword equivalents. Value is the new expression  -->
 <xsl:template match="keyword-equiv[1]">
-    protected String checkValueKeywords(String value) {
+    // Initialize hashtable of keywords
+    static Hashtable s_htKeywords;
+    static {
+       s_htKeywords = new Hashtable(<xsl:value-of select="count(../keyword-equiv)"/>);
   <xsl:for-each select="../keyword-equiv">
+       s_htKeywords.put("<xsl:value-of select="@match"/>", "<xsl:value-of select="."/>");
+  </xsl:for-each>
+    }
+    protected String checkValueKeywords(String keyword) {
+<!--  <xsl:for-each select="../keyword-equiv">
       if (value.equals("<xsl:value-of select="@match"/>")) {
        return new String("<xsl:value-of select="."/>");
       }
   </xsl:for-each>
-      return super.checkValueKeywords(value);
+-->
+      String value = (String)s_htKeywords.get(keyword);
+      if (value == null) {
+       return super.checkValueKeywords(keyword);
+      }
+      else return value;
     }
 </xsl:template>
 
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
-       <xsl:value-of select="$dtc"/><xsl:text> </xsl:text> <xsl:value-of select="@varname"/> = 
+       <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"/>(
 <redirect:write select="concat('@org/apache/fop@/fo/properties/', $classname, '.java')">
 package org.apache.fop.fo.properties;
 
+import java.util.Hashtable;
 import org.apache.fop.datatypes.*;
 import org.apache.fop.fo.*;
 import org.apache.fop.apps.FOPException;
@@ -206,7 +224,7 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
 <xsl:if test=".//enumeration and @type='generic'">
   public interface Enums {
 <xsl:for-each select="enumeration/value">
-    int <xsl:value-of select="@const"/> = <xsl:number/>;
+    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">
@@ -216,7 +234,7 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
       </xsl:variable>
   public interface <xsl:value-of select="$spname"/> {
 <xsl:for-each select="enumeration/value">
-    int <xsl:value-of select="@const"/> = <xsl:number/>;
+    int <xsl:value-of select="@const"/> =  Constants.<xsl:value-of select="@const"/>;
 </xsl:for-each>
   }
 </xsl:for-each>
@@ -231,7 +249,7 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
 
 
 <!-- Look for compound properties -->
-<xsl:if test="compound"> 
+<xsl:if test="compound">
       <xsl:variable name="enumclass">
       <xsl:choose>
         <xsl:when test="@type='generic'">Enums</xsl:when>
@@ -257,7 +275,7 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
 
       <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 
+    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) {
@@ -330,8 +348,8 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
       <xsl:value-of select="datatype"/> val = baseProp.get<xsl:value-of select="datatype"/>();
       return val.getComponent(subpropName);
     }
-<xsl:choose>  
-<!-- some subproperty default is context dependent; don't cache default! -->  
+<xsl:choose>
+<!-- some subproperty default is context dependent; don't cache default! -->
 <xsl:when test='.//default[@contextdep="true"]'>
     public Property make(PropertyList propertyList) throws FOPException {
         return makeCompound(propertyList, propertyList.getParentFObj());
@@ -462,11 +480,11 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
       sbExpr.setLength(0);
       <xsl:apply-templates select="."/>
       if (propertyList.getExplicit(sbExpr.toString()) != null) return true;
-      </xsl:for-each> 
+      </xsl:for-each>
       return false;
     }
     </xsl:if>
-    
+
     public Property compute(PropertyList propertyList) throws FOPException {
       FObj parentFO = propertyList.getParentFObj();
       StringBuffer sbExpr=new StringBuffer();
@@ -474,20 +492,20 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
       <xsl:choose><xsl:when test="corresponding/propexpr">
       <xsl:apply-templates select="corresponding/propval"/>
        // Make sure the property is set before calculating it!
-      if (propertyList.getExplicit(sbExpr.toString()) == null) return p;
+      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.getExplicit(sbExpr.toString());
+      p= propertyList.getExplicitOrShorthand(sbExpr.toString());
       </xsl:otherwise></xsl:choose>
       if (p != null) {
           p = convertProperty(p, propertyList, parentFO );
       }
       <xsl:if test="compound">
       else p= makeCompound(propertyList, parentFO);
-      
+
       Property subprop;
       <xsl:for-each select="compound/subproperty/corresponding">
       sbExpr.setLength(0);
@@ -497,7 +515,7 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
                make(propertyList, sbExpr.toString(), parentFO);
       </xsl:when><xsl:otherwise>
       <xsl:apply-templates select="propval"/>
-      subprop= propertyList.getExplicit(sbExpr.toString());
+      subprop= propertyList.getExplicitOrShorthand(sbExpr.toString());
       </xsl:otherwise></xsl:choose>
       setSubprop(p, "<xsl:value-of select='../name'/>", subprop);
       </xsl:for-each>
@@ -506,7 +524,29 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
     }
 </xsl:if>
 
-<xsl:apply-templates select="percent-ok|auto-ok|default|keyword-equiv|datatype-conversion|enumeration"/>
+<!-- If can be specified by any shorthand property -->
+<xsl:if test="shorthand">
+    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="//property[name=$shprop]/datatype-parser"/>(listprop);
+-->
+           ShorthandParser shparser = new <xsl:value-of select="key('shorthandref', $shprop)/datatype-parser"/>(listprop);
+             p = shparser.getValueForProperty(getPropName(), this, propertyList);
+         }
+      }
+      </xsl:for-each>
+      return p;
+    }
+</xsl:if>
+
+<xsl:apply-templates select="percent-ok|auto-ok|default|keyword-equiv|datatype-conversion|enumeration|extfile"/>
 }
 </redirect:write>
 </xsl:if> <!-- need to create a class -->
@@ -536,7 +576,7 @@ public class <xsl:value-of select="$classname"/> extends  <xsl:value-of select="
 <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 
+     Print a message if any member of dtlist is different
      from the first member. Return the first member.
  -->
 <xsl:template name="check-subprop-datatype">
index 87f62e60a467aa63c24922461dd630814077b4e7..f83945b3d4d54737c41d345e2bf053870df7a810 100644 (file)
@@ -2,6 +2,7 @@
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
 
 <xsl:key name="genericref" match="property[@type='generic']" use="class-name"/>
+<xsl:key name="shorthandref" match="property" use="name"/>
 
 <xsl:template name="capfirst">
   <xsl:param name="str"/>