diff options
author | Shaun McCance <shaunm@gnome.org> | 2008-12-10 15:59:35 -0600 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2009-04-19 11:13:32 -0500 |
commit | 47685079e3619b7a733ab7fd2f33ce5b4db264d7 (patch) | |
tree | 3236a5d535913a436baab0862765c01805119969 /xslt | |
parent | 79acdec047d7569f98214433f901a4c530af76b8 (diff) | |
download | yelp-tools-47685079e3619b7a733ab7fd2f33ce5b4db264d7.tar.gz |
Changing how IDs are handled in the cache
We now set section IDs to pageid#sectionid in the cache. This is easy
and fast to do in the cache creation, and considerably simplifies all
the linking code by removing boilerplate linkid constructions for the
cache key.
Diffstat (limited to 'xslt')
-rw-r--r-- | xslt/mallard/common/mal-link.xsl | 31 | ||||
-rw-r--r-- | xslt/mallard/html/mal2html-page.xsl | 122 | ||||
-rw-r--r-- | xslt/mallard/html/mal2html.xsl | 4 | ||||
-rw-r--r-- | xslt/mallard/utils/mal2cache.xsl | 2 |
4 files changed, 42 insertions, 117 deletions
diff --git a/xslt/mallard/common/mal-link.xsl b/xslt/mallard/common/mal-link.xsl index 63b228c..850ef2f 100644 --- a/xslt/mallard/common/mal-link.xsl +++ b/xslt/mallard/common/mal-link.xsl @@ -25,6 +25,15 @@ Mallard Links --> +<!--@@========================================================================== +mal.cache.file +The location of the cache file +--> +<xsl:param name="mal.cache.file"/> +<xsl:variable name="mal.cache" select="document($mal.cache.file)"/> +<xsl:key name="mal.cache.key" match="mal:page | mal:section" use="@id"/> + + <!--**========================================================================== mal.link.content Generates the content for a #{link} element @@ -40,7 +49,7 @@ $href: The #{href} attribute of ${link} <xsl:when test="contains($xref, '/')"> <!-- This is a link to another document, which we don't handle in these - stylesheets. Extensions such like library or yelp should override + stylesheets. Extensions such as library or yelp should override this template to provide this functionality. --> <xsl:choose> @@ -53,19 +62,11 @@ $href: The #{href} attribute of ${link} </xsl:choose> </xsl:when> <xsl:otherwise> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains($xref, '#')"> - <xsl:value-of select="$xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat($xref, '#', $xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:apply-templates mode="mal.link.content.mode" - select="key('cache_key', $linkid) - /mal:info/mal:title[@type = 'link']/node()"/> + <xsl:for-each select="$mal.cache"> + <xsl:apply-templates mode="mal.link.content.mode" + select="key('mal.cache.key', $xref) + /mal:info/mal:title[@type = 'link']/node()"/> + </xsl:for-each> </xsl:otherwise> </xsl:choose> </xsl:template> @@ -102,7 +103,7 @@ $href: The #{href} attribute of ${link} <xsl:when test="contains($xref, '/')"> <!-- This is a link to another document, which we don't handle in these - stylesheets. Extensions such like library or yelp should override + stylesheets. Extensions such as library or yelp should override this template to provide this functionality. --> <xsl:value-of select="$href"/> diff --git a/xslt/mallard/html/mal2html-page.xsl b/xslt/mallard/html/mal2html-page.xsl index f4908ac..3d2a73b 100644 --- a/xslt/mallard/html/mal2html-page.xsl +++ b/xslt/mallard/html/mal2html-page.xsl @@ -70,9 +70,8 @@ REMARK: Describe this template <xsl:variable name="pagelinks" select="$node/mal:info/mal:link[@type = 'topic']"/> <!-- FIXME: // selectors are slow --> - <!-- FIXME: exclude $pagelinks from $guidelinks --> <xsl:variable name="guidelinks" - select="$cache//*[mal:info/mal:link[@type = 'guide'][@xref = $id]][not(@id = $pagelinks/@xref)]"/> + select="$mal.cache//*[mal:info/mal:link[@type = 'guide'][@xref = $id]][not(@id = $pagelinks/@xref)]"/> <xsl:if test="$pagelinks or $guidelinks"> <div class="pagelinks"> <xsl:choose> @@ -81,20 +80,11 @@ REMARK: Describe this template <table class="twocolumn"><tr> <td class="twocolumnleft"> <xsl:for-each select="$pagelinks[position() <= $coltot]"> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains(@xref, '#')"> - <xsl:value-of select="@xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat(@xref, '#', @xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:for-each select="$cache"> + <xsl:variable name="xref" select="@xref"/> + <xsl:for-each select="$mal.cache"> <xsl:call-template name="mal2html.page.pagelink"> <xsl:with-param name="source" select="$node"/> - <xsl:with-param name="target" select="key('cache_key', $linkid)"/> + <xsl:with-param name="target" select="key('mal.cache.key', $xref)"/> </xsl:call-template> </xsl:for-each> </xsl:for-each> @@ -114,20 +104,11 @@ REMARK: Describe this template </td> <td class="twocolumnright"> <xsl:for-each select="$pagelinks[position() > $coltot]"> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains(@xref, '#')"> - <xsl:value-of select="@xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat(@xref, '#', @xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:for-each select="$cache"> + <xsl:variable name="xref" select="@xref"/> + <xsl:for-each select="$mal.cache"> <xsl:call-template name="mal2html.page.pagelink"> <xsl:with-param name="source" select="$node"/> - <xsl:with-param name="target" select="key('cache_key', $linkid)"/> + <xsl:with-param name="target" select="key('mal.cache.key', $xref)"/> </xsl:call-template> </xsl:for-each> </xsl:for-each> @@ -149,20 +130,11 @@ REMARK: Describe this template </xsl:when> <xsl:otherwise> <xsl:for-each select="$pagelinks"> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains(@xref, '#')"> - <xsl:value-of select="@xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat(@xref, '#', @xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:for-each select="$cache"> + <xsl:variable name="xref" select="@xref"/> + <xsl:for-each select="$mal.cache"> <xsl:call-template name="mal2html.page.pagelink"> <xsl:with-param name="source" select="$node"/> - <xsl:with-param name="target" select="key('cache_key', $linkid)"/> + <xsl:with-param name="target" select="key('mal.cache.key', $xref)"/> </xsl:call-template> </xsl:for-each> </xsl:for-each> @@ -195,40 +167,18 @@ REMARK: Describe this template <xsl:template name="mal2html.page.pagelink"> <xsl:param name="source" select="."/> <xsl:param name="target"/> - <xsl:variable name="xref"> - <xsl:choose> - <xsl:when test="$target/self::mal:section"> - <xsl:value-of select="$target/ancestor::mal:page[1]/@id"/> - <xsl:text>#</xsl:text> - <xsl:value-of select="$target/@id"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$target/@id"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains($xref, '#')"> - <xsl:value-of select="$xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat($xref, '#', $xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> <a> <xsl:attribute name="href"> <xsl:call-template name="mal.link.target"> <xsl:with-param name="link" select="$source"/> - <xsl:with-param name="xref" select="$xref"/> + <xsl:with-param name="xref" select="$target/@id"/> </xsl:call-template> </xsl:attribute> <div class="pagelink"> <div class="title"> <xsl:call-template name="mal.link.content"> <xsl:with-param name="link" select="$source"/> - <xsl:with-param name="xref" select="$xref"/> + <xsl:with-param name="xref" select="$target/@id"/> </xsl:call-template> <xsl:if test="true()"> @@ -271,10 +221,10 @@ REMARK: Describe this template </xsl:if> </xsl:if> </div> - <xsl:variable name="desc" select="key('cache_key', $linkid)/mal:info/mal:desc[1]"/> - <xsl:if test="$desc"> + <xsl:if test="$target/mal:info/mal:desc"> <div class="desc"> - <xsl:apply-templates mode="mal2html.inline.mode" select="$desc/node()"/> + <xsl:apply-templates mode="mal2html.inline.mode" + select="$target/mal:info/mal:desc[1]/node()"/> </div> </xsl:if> </div> @@ -305,11 +255,11 @@ REMARK: Describe this template </xsl:variable> <!-- FIXME: // is slow --> <xsl:variable name="inlinks" - select="$cache//*[mal:info/mal:link[@type = 'seealso'][@xref = $id]]"/> + select="$mal.cache//*[mal:info/mal:link[@type = 'seealso'][@xref = $id]]"/> <xsl:variable name="outlinks" select="$node/mal:info/mal:link[@type = 'seealso']"/> <xsl:variable name="pagelinks" - select="$cache//*[mal:info/mal:link[@type = 'topic'][@xref = $id]]"/> + select="$mal.cache//*[mal:info/mal:link[@type = 'topic'][@xref = $id]]"/> <xsl:variable name="guidelinks" select="$node/mal:info/mal:link[@type = 'guide']"/> <xsl:if test="$inlinks or $outlinks or $pagelinks or $guidelinks"> @@ -332,22 +282,10 @@ REMARK: Describe this template </xsl:for-each> <!-- FIXME: exclude pagelinks --> <xsl:for-each select="$guidelinks"> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains(@xref, '#')"> - <xsl:value-of select="@xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat(@xref, '#', @xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:for-each select="$cache"> - <xsl:call-template name="mal2html.page.pagelink"> - <xsl:with-param name="source" select="$node"/> - <xsl:with-param name="target" select="key('cache_key', $linkid)"/> - </xsl:call-template> - </xsl:for-each> + <xsl:call-template name="mal2html.page.pagelink"> + <xsl:with-param name="source" select="$node"/> + <xsl:with-param name="target" select="."/> + </xsl:call-template> </xsl:for-each> <xsl:if test="($pagelinks or $guidelinks) and ($inlinks or $outlinks)"> @@ -361,28 +299,16 @@ REMARK: Describe this template </xsl:call-template> </xsl:for-each> <xsl:for-each select="$outlinks"> - <xsl:variable name="linkid"> - <xsl:choose> - <xsl:when test="contains(@xref, '#')"> - <xsl:value-of select="@xref"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="concat(@xref, '#', @xref)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:for-each select="$cache"> + <xsl:variable name="xref" select="@xref"/> + <xsl:for-each select="$mal.cache"> <xsl:call-template name="mal2html.page.pagelink"> <xsl:with-param name="source" select="$node"/> - <xsl:with-param name="target" select="key('cache_key', $linkid)"/> + <xsl:with-param name="target" select="key('mal.cache.key', $xref)"/> </xsl:call-template> </xsl:for-each> </xsl:for-each> </div> </div> - - </xsl:if> - <xsl:if test="$inlinks or $outlinks"> </xsl:if> </xsl:template> diff --git a/xslt/mallard/html/mal2html.xsl b/xslt/mallard/html/mal2html.xsl index 71685a1..9b62be9 100644 --- a/xslt/mallard/html/mal2html.xsl +++ b/xslt/mallard/html/mal2html.xsl @@ -41,10 +41,6 @@ REMARK: Describe this module <xsl:include href="util.xsl"/> <xsl:param name="mal.extension" select="'.xhtml'"/> -<xsl:param name="mal.cache_file"/> -<xsl:variable name="cache" select="document($mal.cache_file)"/> -<xsl:key name="cache_key" match="*[@id]" - use="concat(ancestor-or-self::mal:page[1]/@id, '#', @id)"/> <!-- FIXME --> <xsl:template match="*"> diff --git a/xslt/mallard/utils/mal2cache.xsl b/xslt/mallard/utils/mal2cache.xsl index 0d69a78..86ba254 100644 --- a/xslt/mallard/utils/mal2cache.xsl +++ b/xslt/mallard/utils/mal2cache.xsl @@ -61,6 +61,8 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA <section> <xsl:if test="@id"> <xsl:attribute name="id"> + <xsl:value-of select="ancestor::mal:page[1]/@id"/> + <xsl:text>#</xsl:text> <xsl:value-of select="@id"/> </xsl:attribute> </xsl:if> |