orig/trans automatic selection patch for news/{newsflash,press}.html

Martin Heinen martin at sumuk.de
Thu Nov 25 00:57:18 UTC 2004


On Tue, Nov 23, 2004 at 04:35:53AM +0900, Hiroki Sato wrote:

>  Translators, could you please try them?  I know there are
>  several known problems such as www/<lang>/index.xsl support and
>  so on, they should work and you can understand what I want to do.

For each single day the patch generates n^2 entries
for n events (this doesn't matter if n equals 1 :)
For example, September 15 has two events and the
resulting list has four events.

To fix this, I introduced the variable index, which
tracks the current event position and selects this
position from the result set (a patch for
includes.misc.xsl is attached):

|          <xsl:for-each select="day">
|            <xsl:param name="index" select="position()" />
|            <xsl:param name="day" select="name" />
|            <!-- search localized items per day basis -->
|            <xsl:param name="localizeditems"
|              select="document($news.project.xml)
|                      //descendant::year[name = $year]
|                      /month[name = $month]
|                      /day[name = $day]
|                      [position() = $index]" />

This requires that translated entries are ordered
exactly like the original entries.

>  I would appreciate your comments.  Especially, I would like to
>  know if the l10n knobs are sufficient for your language.  Thanks.

Other than that, the patches apply cleanly and are working
for the German tree, nice idea!

-- 
Marxpitn
-------------- next part --------------
Index: includes.misc.xsl
===================================================================
RCS file: /u/cvs/www/share/sgml/includes.misc.xsl,v
retrieving revision 1.13
diff -u -r1.13 includes.misc.xsl
--- includes.misc.xsl	27 Jun 2004 19:18:00 -0000	1.13
+++ includes.misc.xsl	25 Nov 2004 00:19:45 -0000
@@ -25,6 +25,13 @@
   <!--
      template name                               used in
 
+     html-news-list-newsflash                    news/newsflash.xsl
+     html-news-list-press                        news/press.xsl
+     html-news-list-datelabel                    news/newsflash.xsl (for l10n)
+     html-news-generate-anchor                   news/newsflash.xsl
+     html-news-make-olditems-list                news/newsflash.xsl (for l10n)
+     html-news-month-headings                    news/newsflash.xsl (for l10n)
+
      html-list-advisories                        security/mkindex.xsl
      html-list-advisories-putitems               security/mkindex.xsl
      html-list-advisories-release-label          security/mkindex.xsl (for l10n)
@@ -40,6 +47,251 @@
      html-index-news-press-items-lastmodified    index.xsl (for i10n)
      html-index-mirrors-options-list             index.xsl
   -->
+
+  <!-- template: "html-news-make-olditems-list" -->
+  <xsl:template name="html-news-make-olditems-list">
+    <p>Old announcement:
+      <a href="2002/index.html">2002</a>,
+      <a href="2001/index.html">2001</a>,
+      <a href="2000/index.html">2000</a>,
+      <a href="1999/index.html">1999</a>,
+      <a href="1998/index.html">1998</a>,
+      <a href="1997/index.html">1997</a>,
+      <a href="1996/index.html">1996</a></p>
+  </xsl:template>
+
+  <!-- template: "html-news-list-newsflash" -->
+  <xsl:template name="html-news-list-newsflash">
+    <xsl:param name="news.project.xml-master" select="'none'" />
+    <xsl:param name="news.project.xml" select="'none'" />
+
+    <xsl:for-each select="document($news.project.xml-master)//descendant::year">
+      <xsl:param name="year" select="name" />
+
+      <xsl:for-each select="month">
+	<xsl:param name="month" select="name" />
+
+	<h1>
+	  <!-- generate month headings -->
+	  <xsl:call-template name="html-news-month-headings">
+	    <xsl:with-param name="year" select="$year" />
+	    <xsl:with-param name="month">
+	      <xsl:call-template name="transtable-lookup">
+		<xsl:with-param name="word-group" select="'number-month'" />
+		<xsl:with-param name="word" select="$month" />
+	      </xsl:call-template>
+	    </xsl:with-param>
+	  </xsl:call-template>
+	</h1>
+
+	<ul>
+	  <xsl:for-each select="day">
+	    <xsl:param name="index" select="position()" />
+	    <xsl:param name="day" select="name" />
+	    <!-- search localized items per day basis -->
+	    <xsl:param name="localizeditems"
+	      select="document($news.project.xml)
+	              //descendant::year[name = $year]
+	              /month[name = $month]
+	              /day[name = $day]
+		      [position() = $index]" />
+
+	    <xsl:choose>
+	      <xsl:when test="$localizeditems">
+		<!-- when localized item exists -->
+		<xsl:for-each select="$localizeditems/event">
+		  <xsl:param name="anchor-position" select="position()" />
+
+		  <li><p class="localized">
+		      <a><xsl:attribute name="name">
+			  <xsl:call-template name="html-news-generate-anchor">
+			    <xsl:with-param name="label" select="local-name()" />
+			    <xsl:with-param name="year" select="$year" />
+			    <xsl:with-param name="month" select="$month" />
+			    <xsl:with-param name="day" select="$day" />
+			    <xsl:with-param name="pos" select="$anchor-position" />
+			  </xsl:call-template>
+			</xsl:attribute></a>
+		      <b><xsl:call-template name="html-news-datelabel">
+			  <xsl:with-param name="year" select="$year" />
+			  <xsl:with-param name="month">
+			    <xsl:call-template name="transtable-lookup">
+			      <xsl:with-param name="word-group" select="'number-month'" />
+			      <xsl:with-param name="word" select="$month" />
+			    </xsl:call-template>
+			  </xsl:with-param>
+			  <xsl:with-param name="day" select="$day" />
+			</xsl:call-template></b>
+		      <xsl:text> </xsl:text>
+
+		      <!-- put localized text -->
+		      <xsl:apply-templates select="p" />
+
+		    </p>
+		  </li>
+		</xsl:for-each>
+	      </xsl:when>
+
+	      <xsl:otherwise>
+		<!-- when localized item does not exist -->
+		<xsl:for-each select="event">
+		  <xsl:param name="anchor-position" select="position()" />
+
+		  <li><p class="original">
+		      <a><xsl:attribute name="name">
+			  <xsl:call-template name="html-news-generate-anchor">
+			    <xsl:with-param name="label" select="local-name()" />
+			    <xsl:with-param name="year" select="$year" />
+			    <xsl:with-param name="month" select="$month" />
+			    <xsl:with-param name="day" select="$day" />
+			    <xsl:with-param name="pos" select="$anchor-position" />
+			  </xsl:call-template>
+			</xsl:attribute></a>
+		      <b><xsl:call-template name="html-news-datelabel">
+			  <xsl:with-param name="year" select="$year" />
+			  <xsl:with-param name="month">
+			    <xsl:call-template name="transtable-lookup">
+			      <xsl:with-param name="word-group" select="'number-month'" />
+			      <xsl:with-param name="word" select="$month" />
+			    </xsl:call-template>
+			  </xsl:with-param>
+			  <xsl:with-param name="day" select="$day" />
+			</xsl:call-template></b>
+
+		      <!-- put English text -->
+		      <xsl:text> </xsl:text>
+		      <xsl:apply-templates select="p" />
+		    </p>
+		  </li>
+		</xsl:for-each>
+	      </xsl:otherwise>
+	    </xsl:choose>
+	  </xsl:for-each>
+	</ul>
+      </xsl:for-each>
+    </xsl:for-each>
+  </xsl:template>
+
+  <!-- template: "html-news-list-press" -->
+  <xsl:template name="html-news-list-press">
+    <xsl:param name="news.press.xml-master" select="'none'" />
+    <xsl:param name="news.press.xml" select="'none'" />
+
+    <xsl:for-each select="document($news.press.xml-master)//descendant::year">
+      <xsl:param name="year" select="name" />
+
+      <xsl:for-each select="month">
+	<xsl:param name="month" select="name" />
+
+	<h1>
+	  <!-- generate month headings -->
+	  <xsl:call-template name="html-news-month-headings">
+	    <xsl:with-param name="year" select="$year" />
+	    <xsl:with-param name="month">
+	      <xsl:call-template name="transtable-lookup">
+		<xsl:with-param name="word-group" select="'number-month'" />
+		<xsl:with-param name="word" select="$month" />
+	      </xsl:call-template>
+	    </xsl:with-param>
+	  </xsl:call-template>
+	</h1>
+
+	<ul>
+	  <xsl:for-each select="story">
+	    <xsl:variable name="url"><xsl:value-of select="url"/></xsl:variable>
+	    <xsl:variable name="site-url"><xsl:value-of select="site-url"/></xsl:variable>
+
+	    <!-- search localized items per story(URL) basis -->
+	    <xsl:param name="localizeditems"
+	      select="document($news.press.xml)
+	              //descendant::year[name = $year]
+	              /month[name = $month]
+	              /story[url = $url]" />
+
+	    <xsl:param name="anchor-position" select="position()" />
+
+	    <xsl:choose>
+	      <xsl:when test="$localizeditems">
+		<xsl:for-each select="$localizeditems">
+		  <li><p>
+		      <a><xsl:attribute name="name">
+			  <xsl:call-template name="html-news-generate-anchor">
+			    <xsl:with-param name="label" select="local-name()" />
+			    <xsl:with-param name="year" select="$year" />
+			    <xsl:with-param name="month" select="$month" />
+			    <xsl:with-param name="pos" select="$anchor-position" />
+			  </xsl:call-template>
+			</xsl:attribute></a>
+		      <a href="{$url}"><b><xsl:value-of select="name"/></b></a><br/>
+		      <a href="{$site-url}"><xsl:value-of select="site-name"/></a>,
+		      <xsl:value-of select="author"/><br/>
+		      <xsl:copy-of select="p/child::node()"/>
+		    </p>
+		  </li>
+		</xsl:for-each>
+	      </xsl:when>
+
+	      <xsl:otherwise>
+		<xsl:for-each select=".">
+		  <li><p>
+		      <a><xsl:attribute name="name">
+			  <xsl:call-template name="html-news-generate-anchor">
+			    <xsl:with-param name="label" select="local-name()" />
+			    <xsl:with-param name="year" select="$year" />
+			    <xsl:with-param name="month" select="$month" />
+			    <xsl:with-param name="pos" select="$anchor-position" />
+			  </xsl:call-template>
+			</xsl:attribute></a>
+
+		      <a href="{$url}"><b><xsl:value-of select="name"/></b></a><br/>
+		      <a href="{$site-url}"><xsl:value-of select="site-name"/></a>,
+		      <xsl:value-of select="author"/><br/>
+		      <xsl:copy-of select="p/child::node()"/>
+		    </p>
+		  </li>
+		</xsl:for-each>
+	      </xsl:otherwise>
+	    </xsl:choose>
+	  </xsl:for-each>
+	</ul>
+      </xsl:for-each>
+    </xsl:for-each>
+  </xsl:template>
+
+  <!-- template: "html-news-datelabel" (for l10n) -->
+  <xsl:template name="html-news-datelabel">
+    <xsl:param name="year" />
+    <xsl:param name="month" />
+    <xsl:param name="day" />
+
+    <xsl:value-of select="concat($day, ' ', $month, ', ', $year, ':')" />
+  </xsl:template>
+
+  <!-- template: "html-news-generate-anchor" (for l10n) -->
+  <xsl:template name="html-news-generate-anchor">
+    <xsl:param name="label" />
+    <xsl:param name="year" />
+    <xsl:param name="month" />
+    <xsl:param name="day" />
+    <xsl:param name="pos" />
+
+    <xsl:value-of select="concat(
+      $label,
+      format-number($year, '0000'),
+      format-number($month, '00'))" />
+    <xsl:if test="$label = 'event'" >
+      <xsl:value-of select="format-number($day, '00')" />
+    </xsl:if>
+    <xsl:value-of select="format-number($pos, ':00')" />
+  </xsl:template>
+
+  <!-- template: "html-news-month-headings" (for l10n) -->
+  <xsl:template name="html-news-month-headings">
+    <xsl:param name="year" />
+    <xsl:param name="month" />
+
+    <xsl:value-of select="concat($month, ' ', $year)" />
+  </xsl:template>
 
   <!-- template: "html-list-advisories"
        generate a list of all security advisories -->


More information about the freebsd-doc mailing list