]> granicus.if.org Git - docbook-dsssl/commitdiff
More attempts to deal with UPA
authorNorman Walsh <ndw@nwalsh.com>
Wed, 26 Oct 2005 12:29:10 +0000 (12:29 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Wed, 26 Oct 2005 12:29:10 +0000 (12:29 +0000)
docbook/relaxng/tools/doc2dtd.xsl

index 2835d168c23cf96f221fd2677429fc8d6a4d51c2..58d41e52a21e9b356a3f113c906a3cb5770ca7cb 100644 (file)
 <xsl:output method="xml" indent="yes"/>
 <xsl:strip-space elements="*"/>
 
+<xsl:param name="debug" select="0"/>
+
 <xsl:template match="/">
   <xsl:variable name="trimmed">
     <xsl:apply-templates mode="trim"/>
   </xsl:variable>
 
-  <dtd:dtd>
-    <xsl:apply-templates select="exsl:node-set($trimmed)/*"/>
-  </dtd:dtd>
+  <xsl:choose>
+    <xsl:when test="$debug != 0">
+      <xsl:copy-of select="$trimmed"/>
+    </xsl:when>
+    <xsl:otherwise>
+      <dtd:dtd>
+       <xsl:apply-templates select="exsl:node-set($trimmed)/*"/>
+      </dtd:dtd>
+    </xsl:otherwise>
+  </xsl:choose>
 </xsl:template>
 
 <xsl:template match="rng:element">
   <xsl:apply-templates mode="trim"/>
 </xsl:template>
 
+<xsl:template match="rng:optional" mode="trim">
+  <!-- optional with multiple children needs a group? -->
+  <xsl:copy>
+    <xsl:copy-of select="@*"/>
+
+    <xsl:choose>
+      <xsl:when test="count(*) &gt; 1">
+       <rng:group>
+         <xsl:apply-templates mode="trim"/>
+       </rng:group>
+      </xsl:when>
+      <xsl:otherwise>
+       <xsl:apply-templates mode="trim"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:copy>
+</xsl:template>
+
 <xsl:template match="rng:choice[rng:ref[@name='db.titlereq.info']
         and rng:group[rng:optional[rng:ref[@name='db.titleforbidden.info']]]]"
              mode="trim">
 
 <!-- xxx -->
 
+<!-- fix step content model for UPA -->
+<!--
+<xsl:template match="doc:content-model[ancestor::rng:define[@name='db.step']]"
+             mode="trim">
+  <xsl:copy>
+    <rng:group>
+      <xsl:apply-templates select="rng:group[1]/rng:choice[1]" mode="trim"/>
+      <rng:zeroOrMore>
+       <xsl:copy-of select="rng:group[1]/rng:zeroOrMore[1]/node()"/>
+       <rng:ref name="db.substeps"/>
+       <rng:ref name="db.stepalternatives"/>
+      </rng:zeroOrMore>
+    </rng:group>
+  </xsl:copy>
+</xsl:template>
+-->
+
+<xsl:template match="rng:ref[@name='db.segmentedlist'
+                             and parent::rng:zeroOrMore
+                            and ancestor::rng:define[starts-with(@name,'db.index')]]"
+             mode="trim">
+  <!-- remove it to avoid UPA -->
+</xsl:template>
+
 <xsl:template
     match="rng:choice[rng:group[rng:interleave[rng:ref[@name='db.title']]]
                  and rng:group[rng:optional[rng:ref[contains(@name,'.info')]]]
   <xsl:apply-templates select="rng:group" mode="trim"/>
 </xsl:template>
 
-<!--
-    <xsl:message>trimming: <xsl:value-of select="ancestor::rng:define[1]/@name"/></xsl:message>
-            <choice>
-              <group>
-                <interleave>
-                  <optional>
-                    <ref name="db.title"/>
-                  </optional>
-                  <optional>
-                    <ref name="db.titleabbrev"/>
-                  </optional>
-                </interleave>
-                <optional>
-                  <ref name="db.titleforbidden.info"/>
-                </optional>
-              </group>
-              <ref name="db.titleonly.info"/>
-            </choice>
-
--->
-
 <xsl:template
     match="rng:choice[rng:group[rng:ref[@name='db.title']]
                  and rng:group[rng:optional[rng:ref[contains(@name,'.info')]]]