Hi all,

I am currently upgrading from 1.75.2 to latest release, 1.78.0, and the 
gentext.template template broke for me. The reason is, I use custom context to 
provide localization for some non-standard context, for example "Run-in text 
for admonitions" as follows:

 <xsl:param name="local.l10n.xml" select="document('')"/>
 <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0";>
  <l:l10n language="en">
   ...
   <l:context name="admon-run-in">
    <l:template name="note" text="Note:&#160;"/>
    <l:template name="caution" text="Caution!&#160;"/>
    ...
   </l:context>
  </l:l10n>
 </l:i18n>

This context is used in customization templates:

     <xsl:call-template name="gentext.template">
      <xsl:with-param name="context">admon-run-in</xsl:with-param>
      <xsl:with-param name="name" select="local-name(.)"/>
     </xsl:call-template>


This works fine with 1.75.2. However, starting with 1.76.0, the 
gentext.template template was modified as follows:

 <xsl:variable name="local.template.node" .../>
 <xsl:for-each select="$context.node">
   ...
   <xsl:choose>
     <xsl:when test="$local.template.node/@text">
       <xsl:value-of select="$local.template.node/@text"/>
     </xsl:when>

This change broke such "custom" contexts for l10n, as in such custom context 
$context.node is an empty nodeset (that is, there is no "default" string for 
this template). Therefore, the xsl:for-each loop is not executed at all and 
the local value is not returned by template even though it is defined.

The attached patch restores pre-1.76.0 behavior: first check if text from 
$local.template.node is available and perform xsl:for-each only if no local 
template is available. Is it possible to integrate this patch?

Thanks & Happy New Year,
Alexey.
Index: docbook-xsl-1.78.0/common/l10n.xsl
===================================================================
--- docbook-xsl-1.78.0/common/l10n.xsl	(working copy)
+++ docbook-xsl-1.78.0/common/l10n.xsl	(working copy)
@@ -507,51 +507,54 @@
 								and @style=$xrefstyle]
 				|$local.context.node/l:template[@name=$name
 								and not(@style)])[1]"/>
+	  <xsl:choose>
+	    <xsl:when test="$local.template.node/@text">
+	      <xsl:value-of select="$local.template.node/@text"/>
+	    </xsl:when>
+	    <xsl:otherwise>
+	      <xsl:for-each select="$context.node">
+		<xsl:variable name="template.node"
+			      select="(key('l10n-template-style', concat($context, '#', $name, '#', $xrefstyle))
+				       |key('l10n-template', concat($context, '#', $name)))[1]"/>
 
-	  <xsl:for-each select="$context.node">
-	    <xsl:variable name="template.node"
-			  select="(key('l10n-template-style', concat($context, '#', $name, '#', $xrefstyle))
-				   |key('l10n-template', concat($context, '#', $name)))[1]"/>
-
-	    <xsl:choose>
-	      <xsl:when test="$local.template.node/@text">
-		<xsl:value-of select="$local.template.node/@text"/>
-	      </xsl:when>
-	      <xsl:when test="$template.node/@text">
-		<xsl:value-of select="$template.node/@text"/>
-	      </xsl:when>
-	      <xsl:otherwise>
 		<xsl:choose>
-		  <xsl:when test="contains($name, '/')">
-		    <xsl:call-template name="gentext.template">
-		      <xsl:with-param name="context" select="$context"/>
-		      <xsl:with-param name="name" select="substring-after($name, '/')"/>
-		      <xsl:with-param name="origname" select="$origname"/>
-		      <xsl:with-param name="purpose" select="$purpose"/>
-		      <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
-		      <xsl:with-param name="referrer" select="$referrer"/>
-		      <xsl:with-param name="lang" select="$lang"/>
-		      <xsl:with-param name="verbose" select="$verbose"/>
-		    </xsl:call-template>
+		  <xsl:when test="$template.node/@text">
+		    <xsl:value-of select="$template.node/@text"/>
 		  </xsl:when>
-		  <xsl:when test="$verbose = 0">
-		    <!-- silence -->
-		  </xsl:when>
 		  <xsl:otherwise>
-		    <xsl:message>
-		      <xsl:text>No template for "</xsl:text>
-		      <xsl:value-of select="$origname"/>
-		      <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
-		      <xsl:value-of select="$context"/>
-		      <xsl:text>" in the "</xsl:text>
-		      <xsl:value-of select="$lang"/>
-		      <xsl:text>" localization.</xsl:text>
-		    </xsl:message>
+		    <xsl:choose>
+		      <xsl:when test="contains($name, '/')">
+			<xsl:call-template name="gentext.template">
+			  <xsl:with-param name="context" select="$context"/>
+			  <xsl:with-param name="name" select="substring-after($name, '/')"/>
+			  <xsl:with-param name="origname" select="$origname"/>
+			  <xsl:with-param name="purpose" select="$purpose"/>
+			  <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
+			  <xsl:with-param name="referrer" select="$referrer"/>
+			  <xsl:with-param name="lang" select="$lang"/>
+			  <xsl:with-param name="verbose" select="$verbose"/>
+			</xsl:call-template>
+		      </xsl:when>
+		      <xsl:when test="$verbose = 0">
+			<!-- silence -->
+		      </xsl:when>
+		      <xsl:otherwise>
+			<xsl:message>
+			  <xsl:text>No template for "</xsl:text>
+			  <xsl:value-of select="$origname"/>
+			  <xsl:text>" (or any of its leaves) exists in the context named "</xsl:text>
+			  <xsl:value-of select="$context"/>
+			  <xsl:text>" in the "</xsl:text>
+			  <xsl:value-of select="$lang"/>
+			  <xsl:text>" localization.</xsl:text>
+			</xsl:message>
+		      </xsl:otherwise>
+		    </xsl:choose>
 		  </xsl:otherwise>
 		</xsl:choose>
-	      </xsl:otherwise>
-	    </xsl:choose>
-	  </xsl:for-each>
+	      </xsl:for-each>
+	    </xsl:otherwise>
+	  </xsl:choose>
 	</xsl:for-each>
       </xsl:for-each>
     </xsl:otherwise>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to