Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package suse-xsl-stylesheets for
openSUSE:Factory checked in at 2023-05-21 19:08:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/suse-xsl-stylesheets (Old)
and /work/SRC/openSUSE:Factory/.suse-xsl-stylesheets.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "suse-xsl-stylesheets"
Sun May 21 19:08:12 2023 rev:66 rq:1087910 version:2.91.2
Changes:
--------
---
/work/SRC/openSUSE:Factory/suse-xsl-stylesheets/suse-xsl-stylesheets.changes
2023-04-20 15:13:56.817811949 +0200
+++
/work/SRC/openSUSE:Factory/.suse-xsl-stylesheets.new.1533/suse-xsl-stylesheets.changes
2023-05-21 19:08:25.258336661 +0200
@@ -1,0 +2,23 @@
+Fri May 12 08:07:51 UTC 2023 - Thomas Schraitle <[email protected]> -
2.91.2
+
+- Update 2.91.2
+ Docteam 920 metadata part3 by @tomschr in #546:
+ - Correct copy-and-paste error for twitter:*
+ - Use <meta name="..."> instead of <meta property="...">
+
+-------------------------------------------------------------------
+Tue May 9 11:47:05 UTC 2023 - Thomas Schraitle <[email protected]> -
2.91.1
+
+- Update 2.91.1
+ - Improve social media (Twitter OpenGraph) (#544)
+
+-------------------------------------------------------------------
+Mon May 8 13:35:16 UTC 2023 - Thomas Schraitle <[email protected]> -
2.91.0
+
+- Update 2.91.0
+ - DOCTEAM-633: Preparing SUSE header changes by @tomschr in #531
+ - Metadata for HTML output by @tomschr in #542
+ - Include XML files into GitHub statistics
+
+
+-------------------------------------------------------------------
Old:
----
suse-xsl-2.90.0.tar.bz2
New:
----
suse-xsl-2.91.2.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ suse-xsl-stylesheets.spec ++++++
--- /var/tmp/diff_new_pack.zEz1JF/_old 2023-05-21 19:08:25.746339447 +0200
+++ /var/tmp/diff_new_pack.zEz1JF/_new 2023-05-21 19:08:25.750339470 +0200
@@ -22,7 +22,7 @@
%define suse_styles_dir %{db_xml_dir}/stylesheet
#
Name: suse-xsl-stylesheets
-Version: 2.90.0
+Version: 2.91.2
Release: 0
Summary: SUSE-Branded Stylesheets for DocBook
License: GPL-2.0-only OR GPL-3.0-only
++++++ suse-xsl-2.90.0.tar.bz2 -> suse-xsl-2.91.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/ChangeLog
new/suse-xsl-2.91.2/ChangeLog
--- old/suse-xsl-2.90.0/ChangeLog 2023-04-18 11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/ChangeLog 2023-05-12 08:57:18.000000000 +0200
@@ -1,4 +1,26 @@
-------------------------------------------------------------------
+Fri May 12 08:56:00 UTC 2022 - [email protected]
+
+- Update 2.92.2
+ - Use search.description.length and search.title.length
+ - Correct copy-and-paste error for "twitter:*":
+ Use <meta name="..."> instead of <meta property="...">
+
+-------------------------------------------------------------------
+Mon May 09 13:25:00 UTC 2022 - [email protected]
+
+- Update 2.91.1
+ - Improve social media (Twitter OpenGraph) #544
+
+-------------------------------------------------------------------
+Mon May 08 15:25:00 UTC 2022 - [email protected]
+
+- Update 2.91.0
+ - DOCTEAM-633: Preparing SUSE header changes (#531)
+ - Include XML files into GitHub statistics
+ - Metadata for HTML (#542)
+
+-------------------------------------------------------------------
Tue Apr 18 11:02:00 UTC 2022 - [email protected]
- Update 2.90.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/Makefile new/suse-xsl-2.91.2/Makefile
--- old/suse-xsl-2.90.0/Makefile 2023-04-18 11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/Makefile 2023-05-12 08:57:18.000000000 +0200
@@ -11,7 +11,7 @@
SHELL := /bin/bash
PACKAGE := suse-xsl-stylesheets
-VERSION := 2.90.0
+VERSION := 2.91.2
CDIR := $(shell pwd)
SUSE_XML_PATH := $(PREFIX)/xml/suse
DB_XML_PATH := $(PREFIX)/xml/docbook
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/suse2022-ns/common/utility.xsl
new/suse-xsl-2.91.2/suse2022-ns/common/utility.xsl
--- old/suse-xsl-2.90.0/suse2022-ns/common/utility.xsl 2023-04-18
11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/suse2022-ns/common/utility.xsl 2023-05-12
08:57:18.000000000 +0200
@@ -173,4 +173,42 @@
</xsl:otherwise>
</xsl:choose>
</xsl:template>
+
+
+ <!-- -->
+ <xsl:template name="get-lang-for-ssi">
+ <xsl:param name="node" select="."/>
+ <xsl:variable name="lang-scope"
select="$node/ancestor-or-self::*[@xml:lang][1]"/>
+
+ <xsl:variable name="lang-attr">
+ <xsl:variable name="lang-tmp" select="($lang-scope/@xml:lang)[1]"/>
+ <xsl:choose>
+ <xsl:when test="$lang-tmp">
+ <xsl:choose>
+ <!-- Rewrite language from simple two-character language code into
LANG-COUNTRY-->
+ <xsl:when test="$lang-tmp = 'en'">en-us</xsl:when>
+ <xsl:when test="$lang-tmp = 'cs'">cs-cz</xsl:when>
+ <xsl:when test="$lang-tmp = 'de'">de-de</xsl:when>
+ <xsl:when test="$lang-tmp = 'es'">es-es</xsl:when>
+ <xsl:when test="$lang-tmp = 'fr'">fr-fr</xsl:when>
+ <xsl:when test="$lang-tmp = 'ko'">ko-kr</xsl:when>
+ <xsl:when test="$lang-tmp = 'ja'">ja-jp</xsl:when>
+ <xsl:when test="$lang-tmp = 'pt'">pt-br</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$lang-tmp"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <!-- If we haven't found a language, fall back to English: -->
+ <xsl:otherwise>en-us</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <!--<xsl:message>get-lang-for-ssi
+ lang-scope=<xsl:value-of select="count($lang-scope)"/>
+ lang=<xsl:value-of select="($lang-scope/@xml:lang)[1]"/>
+ lang-attr=<xsl:value-of select="$lang-attr"/>
+ </xsl:message>-->
+
+ <xsl:value-of select="$lang-attr"/>
+ </xsl:template>
</xsl:stylesheet>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/suse2022-ns/xhtml/chunk-common.xsl
new/suse-xsl-2.91.2/suse2022-ns/xhtml/chunk-common.xsl
--- old/suse-xsl-2.90.0/suse2022-ns/xhtml/chunk-common.xsl 2023-04-18
11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/suse2022-ns/xhtml/chunk-common.xsl 2023-05-12
08:57:18.000000000 +0200
@@ -226,37 +226,64 @@
<xsl:param name="nav.context"/>
<xsl:param name="content"/>
- <xsl:variable name="lang">
- <xsl:apply-templates select="(ancestor-or-self::*/@xml:lang)[last()]"
mode="html.lang.attribute"/>
+ <xsl:variable name="lang-scope"
select="ancestor-or-self::*[@xml:lang][1]"/>
+ <xsl:variable name="lang-attr">
+ <xsl:call-template name="get-lang-for-ssi" />
</xsl:variable>
<xsl:call-template name="user.preroot"/>
- <html lang="{$lang}">
- <xsl:call-template name="root.attributes"/>
+ <html>
+ <xsl:attribute name="lang">
+ <xsl:choose>
+ <xsl:when test="$rootid">
+ <xsl:call-template name="l10n.language">
+ <xsl:with-param name="target" select="key('id', $rootid)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="l10n.language">
+ <xsl:with-param name="target" select="/*[1]"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:call-template name="root.attributes" />
<xsl:call-template name="html.head">
- <xsl:with-param name="prev" select="$prev"/>
- <xsl:with-param name="next" select="$next"/>
+ <xsl:with-param name="prev" select="$prev" />
+ <xsl:with-param name="next" select="$next" />
</xsl:call-template>
<body>
- <xsl:call-template name="body.attributes"/>
- <xsl:call-template name="outerelement.class.attribute"/>
+ <xsl:call-template name="body.attributes" />
+ <xsl:call-template name="outerelement.class.attribute" />
+ <xsl:if test="$include.suse.header">
+ <xsl:variable name="candidate.suse.header.body">
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$include.ssi.body" />
+ <xsl:with-param name="target" select="$placeholder.ssi.language"
/>
+ <xsl:with-param name="replacement" select="$lang-attr" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text> </xsl:text>
+ <xsl:comment>#include virtual="<xsl:value-of
select="$candidate.suse.header.body" />"</xsl:comment>
+ <xsl:text> </xsl:text>
+ </xsl:if>
<xsl:call-template name="bypass">
- <xsl:with-param name="format" select="'chunk'"/>
+ <xsl:with-param name="format" select="'chunk'" />
</xsl:call-template>
- <xsl:call-template name="user.header.content"/>
+ <xsl:call-template name="user.header.content" />
- <xsl:call-template name="breadcrumbs.navigation"/>
+ <xsl:call-template name="breadcrumbs.navigation" />
<main id="_content">
- <xsl:call-template name="side.toc.overall"/>
+ <xsl:call-template name="side.toc.overall" />
<button id="_open-side-toc-overall">
<xsl:attribute name="title">
<xsl:call-template name="gentext">
- <xsl:with-param name="key" select="'TableofContents'"/>
+ <xsl:with-param name="key" select="'TableofContents'" />
</xsl:call-template>
</xsl:attribute>
<xsl:text> </xsl:text>
@@ -266,24 +293,24 @@
<button id="_unfold-side-toc-page">
<xsl:call-template name="gentext">
- <xsl:with-param name="key" select="'onthispage'"/>
+ <xsl:with-param name="key" select="'onthispage'" />
</xsl:call-template>
</button>
- <xsl:copy-of select="$content"/>
+ <xsl:copy-of select="$content" />
<xsl:call-template name="bottom.navigation">
- <xsl:with-param name="prev" select="$prev"/>
- <xsl:with-param name="next" select="$next"/>
- <xsl:with-param name="nav.context" select="$nav.context"/>
+ <xsl:with-param name="prev" select="$prev" />
+ <xsl:with-param name="next" select="$next" />
+ <xsl:with-param name="nav.context" select="$nav.context" />
</xsl:call-template>
</article>
- <xsl:call-template name="side.toc.page"/>
+ <xsl:call-template name="side.toc.page" />
</main>
- <xsl:call-template name="user.footer.content"/>
+ <xsl:call-template name="user.footer.content" />
</body>
</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/suse2022-ns/xhtml/docbook.xsl
new/suse-xsl-2.91.2/suse2022-ns/xhtml/docbook.xsl
--- old/suse-xsl-2.90.0/suse2022-ns/xhtml/docbook.xsl 2023-04-18
11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/suse2022-ns/xhtml/docbook.xsl 2023-05-12
08:57:18.000000000 +0200
@@ -72,6 +72,7 @@
<xsl:include href="titlepage.templates.xsl"/>
<xsl:include href="tracker.meta.xsl"/>
+ <xsl:include href="meta.xsl"/>
<!-- Actual templates start here -->
@@ -178,6 +179,9 @@
<xsl:variable name="meta.description.base">
<xsl:choose>
+ <xsl:when test="d:info/d:meta[@name='description']">
+ <xsl:value-of
select="normalize-space(d:info/d:meta[@name='description'][1])"/>
+ </xsl:when>
<xsl:when test="d:info/d:abstract or d:info/d:highlights">
<xsl:for-each
select="(d:info[1]/d:abstract[1]|d:info[1]/d:highlights[1])[1]/*">
<xsl:value-of select="normalize-space(.)"/>
@@ -248,38 +252,36 @@
<xsl:with-param name="ellipsize.after"
select="$socialmedia.title.length"/>
</xsl:call-template>
</xsl:variable>
+ <xsl:variable name="metanodes"
select="$node/ancestor-or-self::*/d:info/d:meta"/>
- <xsl:variable name="socialmedia.preview">
- <xsl:choose>
- <!-- We ignore:
- * inlinemediaobjects, because they are likely very small
- * SVGs, because they don't work (according to the Contentking) -->
- <!-- We reimplement ends-with()
https://stackoverflow.com/questions/40934644 -->
- <xsl:when
- test="(descendant::d:figure/descendant::d:imagedata/@fileref
-
|descendant::d:informalfigure/descendant::d:imagedata/@fileref)[not(
- substring(translate(., 'SVG', 'svg'), string-length(.) - 5) =
'.svg')][1]">
- <xsl:value-of
- select="concat($canonical-url-base, '/', $img.src.path,
- (descendant::d:figure/descendant::d:imagedata/@fileref
-
|descendant::d:informalfigure/descendant::d:imagedata/@fileref)[not(
- substring(translate(., 'SVG', 'svg'), string-length(.) -
5) = '.svg')][1])"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat($canonical-url-base, '/',
$socialmedia.preview.default)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <meta charset="UTF-8"/>
+ <title><xsl:value-of select="$title"/></title>
- <meta name="viewport"
+ <xsl:choose>
+ <xsl:when test="$include.suse.header">
+ <xsl:variable name="candidate.suse.header.head">
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$include.ssi.header" />
+ <xsl:with-param name="target" select="$placeholder.ssi.language" />
+ <xsl:with-param name="replacement">
+ <xsl:call-template name="get-lang-for-ssi" />
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text> </xsl:text>
+ <xsl:comment>#include virtual="<xsl:value-of
select="$candidate.suse.header.head" />"</xsl:comment>
+ <xsl:text> </xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <meta charset="UTF-8"/>
+ <meta name="viewport"
content="width=device-width, initial-scale=1.0, user-scalable=yes"/>
-
- <title><xsl:value-of select="$title"/></title>
+ </xsl:otherwise>
+ </xsl:choose>
<xsl:if test="$html.base != ''">
- <base href="{$html.base}"/>
+ <xsl:call-template name="head.content.base">
+ <xsl:with-param name="node" select="$node"/>
+ </xsl:call-template>
</xsl:if>
<!-- Insert links to CSS files or insert literal style elements -->
@@ -292,6 +294,13 @@
<xsl:text> </xsl:text>
</xsl:if>
+ <xsl:if test="$include.html.dublincore">
+ <!-- For Dublin Core metadata -->
+ <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
+ <link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />
+ <xsl:text> </xsl:text>
+ </xsl:if>
+
<xsl:if test="$html.script != ''">
<xsl:call-template name="output.html.scripts">
<xsl:with-param name="scripts" select="normalize-space($html.script)"/>
@@ -328,58 +337,21 @@
<xsl:call-template name="create.bugtracker.information"/>
<xsl:apply-templates select="." mode="head.keywords.content"/>
+ <meta name="publisher" content="SUSE"/>
- <xsl:if test="$canonical-url-base != ''">
- <xsl:variable name="ischunk">
- <xsl:call-template name="chunk"/>
- </xsl:variable>
- <xsl:variable name="filename">
- <xsl:choose>
- <xsl:when test="$ischunk = 1">
- <xsl:apply-templates mode="chunk-filename" select="."/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat($root.filename,$html.ext)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="canonical.url">
- <xsl:value-of select="concat($canonical-url-base,'/',$filename)"/>
- </xsl:variable>
-
- <link rel="canonical" href="{$canonical.url}"/>
- <xsl:text> </xsl:text>
- <!-- These Open Graph and Twitter Cards properties need a canonical URL -->
- <meta property="og:url" content="{$canonical.url}"/>
- <xsl:text> </xsl:text>
- <meta property="og:image"
content="{concat($canonical-url-base,'/',$socialmedia.preview)}"/>
- <xsl:text> </xsl:text>
- <meta name="twitter:image"
content="{concat($canonical-url-base,'/',$socialmedia.preview)}"/>
- <xsl:text> </xsl:text>
-
- <xsl:call-template name="meta-generator"/>
- </xsl:if>
-
- <!-- The following properties "work" without a canonical URL being defined
- (but both the Open Graph and Twitter Cards implementations are incomplete
- without the above tags, better than nothing though). -->
- <meta property="og:title" content="{$socialmedia.title}"/>
- <xsl:text> </xsl:text>
- <meta property="og:description" content="{$socialmedia.description}"/>
- <xsl:text> </xsl:text>
- <meta property="og:type" content="{$opengraph.type}"/>
- <xsl:text> </xsl:text>
-
- <meta name="twitter:card" content="{$twittercards.type}"/>
- <xsl:text> </xsl:text>
- <meta name="twitter:title" content="{$socialmedia.title}"/>
- <xsl:text> </xsl:text>
- <meta name="twitter:description" content="{$socialmedia.description}"/>
- <xsl:text> </xsl:text>
- <xsl:if test="string-length($twittercards.twitter.account) > 0">
- <meta name="twitter:site" content="{$twittercards.twitter.account}"/>
- <xsl:text> </xsl:text>
- </xsl:if>
+ <xsl:apply-templates select="($metanodes[@name='category'])[last()]"
mode="meta"/>
+ <xsl:apply-templates select="($metanodes[@name='updated'])[last()]"
mode="meta"/>
+ <xsl:apply-templates select="($metanodes[@name='maintainer'])[last()]"
mode="meta"/>
+
+ <xsl:call-template name="social-media-opengraph">
+ <xsl:with-param name="socialmedia.title" select="$socialmedia.title"/>
+ <xsl:with-param name="socialmedia.description"
select="$socialmedia.description"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="social-media-twitter">
+ <xsl:with-param name="socialmedia.title" select="$socialmedia.title"/>
+ <xsl:with-param name="socialmedia.description"
select="$socialmedia.description"/>
+ </xsl:call-template>
</xsl:template>
@@ -563,11 +535,13 @@
<xsl:template name="give.feedback">
<xsl:if test="$generate.give.feedback = 1 or $force.generate.give.feedback
= 1">
+ <xsl:variable name="meta-bugtracker"
select="ancestor-or-self::*/d:info/d:meta[@name='bugtracker']/d:phrase[@role='editurl']"/>
<xsl:variable name="editurl"
select="ancestor-or-self::*/d:info/dm:docmanager/dm:editurl[1]"/>
<xsl:variable name="xmlbase"
select="ancestor-or-self::*[@xml:base][1]/@xml:base"/>
+ <xsl:variable name="url-candidate" select="($meta-bugtracker |
$editurl)[last()]"/>
<xsl:variable name="valid-for-editurl">
- <xsl:if test="($draft.mode = 'yes' or $show.edit.link = 1) and
$editurl != '' and $xmlbase != ''">1</xsl:if>
+ <xsl:if test="($draft.mode = 'yes' or $show.edit.link = 1) and
$url-candidate != '' and $xmlbase != ''">1</xsl:if>
</xsl:variable>
<xsl:if test="$valid-for-editurl = 1 or $force.generate.give.feedback =
1">
@@ -586,7 +560,7 @@
<!-- add here a "global" report bug -->
<xsl:if test="$valid-for-editurl = 1">
<li>
- <a id="_feedback-editurl" href="{$editurl}{$xmlbase}"
rel="nofollow" target="_blank">
+ <a id="_feedback-editurl" href="{$url-candidate}{$xmlbase}"
rel="nofollow" target="_blank">
<xsl:call-template name="gentext">
<xsl:with-param name="key" select="'editsource'"/>
</xsl:call-template>
@@ -601,11 +575,13 @@
<xsl:template name="generate.sourcelink">
<xsl:param name="node" select="."/>
+ <xsl:variable name="meta-bugtracker"
select="$node/ancestor-or-self::*/d:info/d:meta[@name='bugtracker']/d:phrase[@role='editurl']"/>
<xsl:variable name="editurl"
select="$node/ancestor-or-self::*/d:info/dm:docmanager/dm:editurl[1]"/>
<xsl:variable name="xmlbase"
select="$node/ancestor-or-self::*[@xml:base][1]/@xml:base"/>
+ <xsl:variable name="url-candidate" select="($meta-bugtracker |
$editurl)[last()]"/>
- <xsl:if test="($draft.mode = 'yes' or $show.edit.link = 1) and $editurl !=
'' and $xmlbase != ''">
- <xsl:value-of select="concat($editurl, $xmlbase)"/>
+ <xsl:if test="($draft.mode = 'yes' or $show.edit.link = 1) and
$url-candidate != '' and $xmlbase != ''">
+ <xsl:value-of select="concat($url-candidate, $xmlbase)"/>
</xsl:if>
</xsl:template>
@@ -711,19 +687,41 @@
<xsl:apply-imports/>
</xsl:param>
<xsl:variable name="doc" select="self::*"/>
- <xsl:variable name="lang">
- <xsl:apply-templates select="(ancestor-or-self::*/@xml:lang)[last()]"
mode="html.lang.attribute"/>
+ <xsl:variable name="lang-attr">
+ <xsl:call-template name="get-lang-for-ssi"/>
+ </xsl:variable>
+ <xsl:variable name="candidate.suse.header.body">
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$include.ssi.body"/>
+ <xsl:with-param name="target" select="$placeholder.ssi.language"/>
+ <xsl:with-param name="replacement">
+ <xsl:call-template name="get-lang-for-ssi"/>
+ </xsl:with-param>
+ </xsl:call-template>
</xsl:variable>
<xsl:call-template name="user.preroot"/>
<xsl:call-template name="root.messages"/>
- <html lang="{$lang}">
+ <html>
+ <xsl:choose>
+ <xsl:when test="$rootid">
+ <xsl:call-template name="l10n.language">
+ <xsl:with-param name="target" select="key('id', $rootid)"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="l10n.language">
+ <xsl:with-param name="target" select="/*[1]"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
<xsl:call-template name="root.attributes"/>
<head>
<xsl:call-template name="system.head.content">
<xsl:with-param name="node" select="$doc"/>
</xsl:call-template>
+
<xsl:call-template name="head.content">
<xsl:with-param name="node" select="$doc"/>
</xsl:call-template>
@@ -734,6 +732,12 @@
<body>
<xsl:call-template name="body.attributes"/>
<xsl:call-template name="outerelement.class.attribute"/>
+
+ <xsl:if test="$include.suse.header">
+ <xsl:text> </xsl:text>
+ <xsl:comment>#include virtual="<xsl:value-of
select="$candidate.suse.header.body"/>"</xsl:comment>
+ <xsl:text> </xsl:text>
+ </xsl:if>
<xsl:call-template name="bypass"/>
<xsl:call-template name="user.header.content"/>
@@ -771,8 +775,6 @@
<xsl:template name="user.head.content">
<xsl:param name="node" select="."/>
- <xsl:text> </xsl:text>
-
<xsl:if test="$build.for.web = 1">
<script type="text/javascript">
<xsl:text disable-output-escaping="yes">
@@ -880,29 +882,44 @@
<xsl:template name="user.header.content">
- <xsl:choose>
- <xsl:when test="$include.ssi.header != ''">
- <!-- There must _not_ be a space between comment start ('<!-\-') and
hash ('#') here! -->
- <xsl:comment>#include virtual="<xsl:value-of
select="$include.ssi.header"/>" </xsl:comment>
- </xsl:when>
- <xsl:when test="$generate.header != 0">
+ <xsl:variable name="lang-attr">
+ <xsl:call-template name="get-lang-for-ssi"/>
+ </xsl:variable>
+ <xsl:variable name="candidate.suse.header.body">
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$include.ssi.body"/>
+ <xsl:with-param name="target" select="$placeholder.ssi.language"/>
+ <xsl:with-param name="replacement" select="$lang-attr"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:if test="$include.suse.header = 0">
<header id="_mainnav">
<div class="growth-inhibitor">
<xsl:call-template name="create.header.logo"/>
</div>
</header>
- </xsl:when>
- <xsl:otherwise/>
- </xsl:choose>
+ </xsl:if>
</xsl:template>
<xsl:template name="user.footer.content">
+ <xsl:variable name="candidate.suse.header.footer">
+ <xsl:call-template name="string.subst">
+ <xsl:with-param name="string" select="$include.ssi.footer"/>
+ <xsl:with-param name="target" select="$placeholder.ssi.language"/>
+ <xsl:with-param name="replacement">
+ <xsl:call-template name="get-lang-for-ssi"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
<xsl:choose>
- <xsl:when test="$include.ssi.footer != ''">
- <!-- There must _not_ be a space between comment start ('<!-\-') and
hash ('#') here! -->
- <xsl:comment>#include virtual="<xsl:value-of
select="$include.ssi.footer"/>"</xsl:comment>
+ <xsl:when test="$include.suse.header">
+ <xsl:text> </xsl:text>
+ <xsl:comment>#include virtual="<xsl:value-of
select="$candidate.suse.header.footer"/>"</xsl:comment>
+ <xsl:text> </xsl:text>
</xsl:when>
- <xsl:when test="$generate.footer = 1">
+ <xsl:otherwise>
<footer id="_footer">
<div class="growth-inhibitor">
<div class="copy">
@@ -915,8 +932,7 @@
</div>
</div>
</footer>
- </xsl:when>
- <xsl:otherwise/>
+ </xsl:otherwise>
</xsl:choose>
</xsl:template>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/suse2022-ns/xhtml/meta.xsl
new/suse-xsl-2.91.2/suse2022-ns/xhtml/meta.xsl
--- old/suse-xsl-2.90.0/suse2022-ns/xhtml/meta.xsl 1970-01-01
01:00:00.000000000 +0100
+++ new/suse-xsl-2.91.2/suse2022-ns/xhtml/meta.xsl 2023-05-12
08:57:18.000000000 +0200
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:d="http://docbook.org/ns/docbook"
+ xmlns:dm="urn:x-suse:ns:docmanager"
+ xmlns:exsl="http://exslt.org/common"
+ xmlns:date="http://exslt.org/dates-and-times"
+ xmlns="http://www.w3.org/1999/xhtml"
+ exclude-result-prefixes="exsl date d dm">
+
+ <xsl:template match="d:meta[@name='productname']" mode="meta">
+ <xsl:variable name="productname"
select="normalize-space(string(d:productname[1]))"/>
+ <xsl:value-of select="$productname"/>
+ </xsl:template>
+
+
+ <xsl:template match="d:meta[@name='productname']/d:productname[1]/@version"
mode="meta">
+ <xsl:value-of select="."/>
+ </xsl:template>
+
+ <xsl:template match="d:meta[@name='maintainer']" mode="meta">
+ <xsl:variable name="content" select="normalize-space(@content)"/>
+
+ <xsl:choose>
+ <xsl:when test="$content">
+ <xsl:if test="$include.html.dublincore">
+ <meta name="DC.creator" content="{$content}" />
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:value-of select="concat('In meta[@name="', @name,
'"]')"/>
+ <xsl:text> the @content attribute is empty!</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+ <xsl:template match="d:meta[@name='updated']" mode="meta">
+ <xsl:variable name="content" select="normalize-space(@content)"/>
+
+ <xsl:choose>
+ <xsl:when test="$content">
+ <xsl:if test="$include.html.dublincore">
+ <meta name="DCTERMS.modified" content="{$content}" />
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>In meta[@name='updated'], the @content attribute is
empty!</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="d:meta[@name='category']" mode="meta">
+ <xsl:variable name="content" select="normalize-space(@content)"/>
+
+ <xsl:choose>
+ <xsl:when test="$content">
+ <meta name="category" content="{$content}"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>In meta[@name='category'], the @content attribute is
empty!</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+ <xsl:template name="social-media-opengraph">
+ <xsl:param name="node" select="."/>
+ <xsl:param name="socialmedia.title"/>
+ <xsl:param name="socialmedia.description"/>
+ <xsl:variable name="socialmedia.preview"
select="concat($canonical-url-base, '/', $socialmedia.preview.default)"/>
+ <xsl:variable name="ischunk">
+ <xsl:call-template name="chunk"/>
+ </xsl:variable>
+ <xsl:variable name="filename">
+ <xsl:choose>
+ <xsl:when test="$ischunk = 1">
+ <xsl:apply-templates mode="chunk-filename" select="."/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="concat($root.filename,$html.ext)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="canonical.url"
select="concat($canonical-url-base,'/',$filename)"/>
+ <xsl:variable name="meta.nodes"
select="$node/d:info/d:meta|$node/ancestor::*/d:info/d:meta"/>
+ <xsl:variable name="description">
+ <xsl:choose>
+ <xsl:when test="$meta.nodes[@name='social-descr']">
+ <xsl:choose>
+ <xsl:when test="string-length($meta.nodes[@name='social-descr'])
< $socialmedia.description.length">
+ <xsl:value-of select="$meta.nodes[@name='social-descr']"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>The meta[@name='social-descr'] contains more than
</xsl:text>
+ <xsl:value-of
select="concat($socialmedia.description.length, ' characters!')"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:value-of
select="substring(normalize-space($meta.nodes[@name = 'social-descr']), 1,
$socialmedia.description.length)" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$socialmedia.description">
+ <xsl:choose>
+ <xsl:when test="string-length($socialmedia.description) >
$socialmedia.description.length">
+ <xsl:call-template name="ellipsize.text">
+ <xsl:with-param name="input"
select="$socialmedia.description"/>
+ <xsl:with-param name="ellipsize.after"
select="$socialmedia.description.length"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$socialmedia.description"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>No meta[@name='social-descr'] found!</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="title">
+ <xsl:choose>
+ <xsl:when test="$meta.nodes[@name='title']">
+ <xsl:variable name="tmp"
select="normalize-space($meta.nodes[@name='title'][last()])"/>
+ <xsl:choose>
+ <xsl:when test="$tmp = ''">
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>The meta[@name='title'] is empty! Add some
text.</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="string-length($tmp) < $socialmedia.title.length">
+ <xsl:value-of select="$tmp"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>The meta[@name='title'] contains more than
</xsl:text>
+ <xsl:value-of select="concat($socialmedia.title.length, '
characters!')"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="ellipsize.text">
+ <xsl:with-param name="input" select="$tmp" />
+ <xsl:with-param name="ellipsize.after"
select="$search.title.length" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$socialmedia.title"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+<!-- <xsl:message>social-media-opengraph:
+ canonical-url-base=<xsl:value-of select="$canonical-url-base"/>
+ socialmedia.preview=<xsl:value-of select="$socialmedia.preview"/>
+ description=<xsl:value-of select="$description"/>
+ title=<xsl:value-of select="$title"/>
+ </xsl:message>
+-->
+ <xsl:if test="$canonical-url-base != ''">
+ <!-- These Open Graph and Twitter Cards properties need a canonical URL
-->
+ <link rel="canonical" href="{$canonical.url}"/>
+ <xsl:text> </xsl:text>
+ <!-- These Open Graph and Twitter Cards properties need a canonical URL
-->
+ <meta property="og:url" content="{$canonical.url}"/>
+ <xsl:text> </xsl:text>
+ <meta property="og:image"
content="{concat($canonical-url-base,'/',$socialmedia.preview)}"/>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="meta-generator"/>
+ </xsl:if>
+
+ <meta property="og:title" content="{$title}"/>
+ <xsl:text> </xsl:text>
+
+ <meta property="og:description" content="{$description}"/>
+ <xsl:text> </xsl:text>
+
+ <meta property="og:type" content="{$opengraph.type}"/>
+ <xsl:text> </xsl:text>
+ </xsl:template>
+
+
+ <xsl:template name="social-media-twitter">
+ <xsl:param name="node" select="."/>
+ <xsl:param name="socialmedia.title"/>
+ <xsl:param name="socialmedia.description"/>
+ <xsl:variable name="socialmedia.preview"
select="concat($canonical-url-base, '/', $socialmedia.preview.default)"/>
+ <xsl:variable name="meta.nodes"
select="$node/d:info/d:meta|$node/ancestor::*/d:info/d:meta"/>
+ <xsl:variable name="description">
+ <xsl:choose>
+ <xsl:when test="$meta.nodes[@name='social-descr']">
+ <xsl:choose>
+ <xsl:when test="string-length($meta.nodes[@name='social-descr'])
< $socialmedia.description.length">
+ <xsl:value-of select="$meta.nodes[@name='social-descr']"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>The meta[@name='social-descr'] contains more than
</xsl:text>
+ <xsl:value-of
select="concat($socialmedia.description.length, ' characters!')"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:value-of
select="substring(normalize-space($meta.nodes[@name = 'social-descr']), 1,
$socialmedia.description.length)" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="$socialmedia.description">
+ <xsl:choose>
+ <xsl:when test="string-length($socialmedia.description) >
$socialmedia.description.length">
+ <xsl:call-template name="ellipsize.text">
+ <xsl:with-param name="input"
select="$socialmedia.description"/>
+ <xsl:with-param name="ellipsize.after"
select="$socialmedia.description.length"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$socialmedia.description"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>No meta[@name='social-descr'] found!</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="title">
+ <xsl:choose>
+ <xsl:when test="$meta.nodes[@name='title']">
+ <xsl:variable name="tmp"
select="normalize-space($meta.nodes[@name='title'][last()])"/>
+ <xsl:choose>
+ <xsl:when test="$tmp = ''">
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>The meta[@name='title'] is empty! Add some
text.</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="string-length($tmp) < $search.title.length">
+ <xsl:value-of select="$tmp"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="log.message">
+ <xsl:with-param name="level">warn</xsl:with-param>
+ <xsl:with-param name="context-desc">metadata</xsl:with-param>
+ <xsl:with-param name="message">
+ <xsl:text>The meta[@name='title'] contains more than 65
characters!</xsl:text>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="ellipsize.text">
+ <xsl:with-param name="input" select="$tmp"/>
+ <xsl:with-param name="ellipsize.after"
select="$search.title.length"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$socialmedia.title"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!--<xsl:message>social-media-twitter:
+ canonical-url-base=<xsl:value-of select="$canonical-url-base"/>
+ socialmedia.preview=<xsl:value-of select="$socialmedia.preview"/>
+ description=<xsl:value-of select="$description"/>
+ title=<xsl:value-of select="$title"/>
+ </xsl:message>-->
+
+ <meta name="twitter:card" content="{$twittercards.type}"/>
+ <xsl:text> </xsl:text>
+
+ <xsl:if test="$canonical-url-base != ''">
+ <meta name="twitter:image" content="{$socialmedia.preview}"/>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+
+ <meta name="twitter:title" content="{$title}"/>
+ <xsl:text> </xsl:text>
+
+ <meta name="twitter:description" content="{$description}"/>
+ <xsl:text> </xsl:text>
+
+ <xsl:if test="string-length($twittercards.twitter.account) > 0">
+ <meta name="twitter:site" content="{$twittercards.twitter.account}"/>
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/suse-xsl-2.90.0/suse2022-ns/xhtml/param.xsl
new/suse-xsl-2.91.2/suse2022-ns/xhtml/param.xsl
--- old/suse-xsl-2.90.0/suse2022-ns/xhtml/param.xsl 2023-04-18
11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/suse2022-ns/xhtml/param.xsl 2023-05-12
08:57:18.000000000 +0200
@@ -339,10 +339,6 @@
</xsl:param>
- <!-- Include header/footer via Server-Side Includes (SSI)? -->
- <xsl:param name="include.ssi.header" select="''"/>
- <xsl:param name="include.ssi.footer" select="''"/>
-
<!-- Generate a footer with SUSE-specific content? -->
<xsl:param name="generate.footer" select="$suse.content"/>
@@ -419,8 +415,8 @@
<xsl:param name="onpage.teaser.length" select="300"/>
<!-- <meta> description tags used for search results pages, roughly as
recommended by the Contentking -->
- <xsl:param name="search.title.length" select="55"/>
- <xsl:param name="search.description.length" select="150"/>
+ <xsl:param name="search.title.length" select="60"/>
+ <xsl:param name="search.description.length" select="55"/>
<!-- Open Graph (og:)/Twitter Cards tags used for social-media preview -->
<xsl:param name="socialmedia.title.length" select="55"/>
<xsl:param name="socialmedia.description.length" select="150"/>
@@ -435,12 +431,32 @@
stylesheets, having all result documents created with them associated
with SUSE is suboptimal. -->
<xsl:param name="twittercards.twitter.account" select="''"/>
- <!-- Default social media preview image, if no other image is available on
the page -->
- <xsl:param
name="socialmedia.preview.default">static/images/social-media-preview-default.png</xsl:param>
+ <!-- Default social media preview image, if no other image is available on
the page
+ static/images/social-media-preview-default.png
+ -->
+ <xsl:param name="socialmedia.preview.default">document.jpg</xsl:param>
<!-- The path for the report bug link and edit source icons -->
<xsl:param name="title.icons.path">static/images/</xsl:param>
<!-- Should the report bug link and edit source icons be included? 0=no,
1=yes-->
<xsl:param name="title.icons" select="1"/>
+
+
+ <!-- Include HTML Dublin Core metadata? -->
+ <xsl:param name="include.html.dublincore" select="1"/>
+
+ <!-- Include header/footer via Server-Side Includes (SSI)? 0=no, 1=yes
+ -->
+ <xsl:param name="include.suse.header" select="0"/>
+
+ <!-- When include.suse.header is set to 1, these are the paths for the SSIs
+ to be added inside <head>, <body>, and <footer>.
+ Use "{{#language#}}" to insert the language
+ -->
+ <xsl:param
name="include.ssi.header">/docserv/fragments/{{#language#}}/suse-head.fragment.html</xsl:param>
+ <xsl:param
name="include.ssi.body">/docserv/fragments/{{#language#}}/suse-body.fragment.html</xsl:param>
+ <xsl:param
name="include.ssi.footer">/docserv/fragments/{{#language#}}/suse-footer.fragment.html</xsl:param>
+
+ <xsl:variable name="placeholder.ssi.language">{{#language#}}</xsl:variable>
</xsl:stylesheet>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/suse-xsl-2.90.0/suse2022-ns/xhtml/titlepage.templates.xsl
new/suse-xsl-2.91.2/suse2022-ns/xhtml/titlepage.templates.xsl
--- old/suse-xsl-2.90.0/suse2022-ns/xhtml/titlepage.templates.xsl
2023-04-18 11:03:11.000000000 +0200
+++ new/suse-xsl-2.91.2/suse2022-ns/xhtml/titlepage.templates.xsl
2023-05-12 08:57:18.000000000 +0200
@@ -26,12 +26,16 @@
In general, we want the long/official version, though. Dito for the
productnumber below. -->
<xsl:param name="prefer-abbreviation" select="0"/>
+ <xsl:variable name="meta.nodes"
select="d:info/d:meta|ancestor::*/d:info/d:meta"/>
<!--
First we search for all productname[@role='abbrev'], starting in the
nearest node followed
by its ancestors.
-->
<xsl:choose>
+ <xsl:when
test="$meta.nodes[@name='bugtracker']/d:phrase[@name='productname'] and
$prefer-abbreviation = 0">/
+ <xsl:apply-templates
select="$meta.nodes[@name='bugtracker']/d:phrase[@name='productname'][last()]"
mode="meta"/>
+ </xsl:when>
<xsl:when test="*/d:productname[@role='abbrev'] and $prefer-abbreviation
= 1">
<xsl:apply-templates
select="(*/d:productname[@role='abbrev'])[last()]"/>
</xsl:when>
@@ -53,10 +57,14 @@
<xsl:template name="product.number">
<!-- See comment in product.name... -->
<xsl:param name="prefer-abbreviation" select="0"/>
+ <xsl:variable name="meta.nodes"
select="d:info/d:meta|ancestor::*/d:info/d:meta"/>
<!-- FIXME: This choose mechanism is a little wonky around inheritance and
abbreviation preference. May need a bit more think. -->
<xsl:choose>
+ <xsl:when
test="$meta.nodes[@name='bugtracker']/d:phrase[@name='productnumber'] and
$prefer-abbreviation = 0">
+ <xsl:apply-templates
select="$meta.nodes[@name='bugtracker']/d:phrase[@name='productnumber'][last()]"
mode="meta"/>
+ </xsl:when>
<xsl:when test="*/d:productnumber[@role='abbrev'] and
$prefer-abbreviation = 1">
<xsl:apply-templates
select="(*/d:productnumber[@role='abbrev'])[last()]"/>
</xsl:when>