|
<xsl:stylesheet xmlns:bib="http://purl.org/NET/xbiblio/citeproc" xmlns="http://purl.org/NET/xbiblio/citeproc" xmlns:cs="http://purl.org/NET/xbiblio/csl" xmlns:db="http://docbook.org/ns/docbook" xmlns:mods="http://www.loc.gov/mods/v3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdoc="http://www.pnp-software.com/XSLTdoc" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" exclude-result-prefixes="xhtml mods xdoc db bib xs cs">
<xsl:preserve-space elements="cs:prefix cs:suffix" /> <!-- === licensed under CC-GNU GPL; see http://creativecommons.org/licenses/GPL/2.0 === -->
<xdoc:doc type="stylesheet"> <xdoc:short>Process CSL files to configure formatting.</xdoc:short> <xdoc:author>Bruce D’Arcus</xdoc:author> <xdoc:copyright>2004, Bruce D’Arcus</xdoc:copyright> </xdoc:doc> <xsl:variable name="refclass-partInSerial" select="('article-newspaper','legal case','bill','article','conference paper')" /> <xsl:variable name="refclass-partInMonograph" select="('song','chapter')" /> <xsl:variable name="refclass-monograph" select="('report','personal communication','book')" /> <xsl:variable name="genres" select="('thesis', 'newsletter', 'dissertation')" /> <xsl:template match="cs:citation"> <xsl:param name="cite-ref" as="node()" tunnel="yes" /> <xsl:param name="last-in-author-group" as="xs:boolean?" tunnel="yes" /> <xsl:param name="bib:source" as="element(mods:mods)?" tunnel="yes" /> <bib:a class="citation" href="#{@ID}"> <xsl:choose> <xsl:when test="cs:first"> <xsl:choose> <xsl:when test="bib:first-reference($cite-ref)"> <xsl:apply-templates select="cs:first"> <xsl:with-param name="use_reftype" select="$bib:source/@bib:use-reftype" tunnel="yes" /> </xsl:apply-templates> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="cs:subsequent"> <xsl:with-param name="use_reftype" select="$bib:source/@bib:use-reftype" tunnel="yes" /> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="* except (cs:prefix|cs:suffix)"> <xsl:with-param name="use_reftype" select="$bib:source/@bib:use-reftype" tunnel="yes" /> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </bib:a> <xsl:if test="not($last-in-author-group) and not($citeclass='number' or $citeclass='citekey')">, </xsl:if> </xsl:template> <!-- FIX ME: move below code to CSL templates <xsl:value-of select="bib:year-suffix"/> --> <xsl:template match="cs:point"> <xsl:param name="cite-ref" as="node()" tunnel="yes" /> <xsl:if test="$cite-ref/@begin"> <xsl:apply-templates select="cs:prefix" /> <xsl:value-of select="$cite-ref/@begin" /> <xsl:if test="$cite-ref/@end"> <xsl:text>–</xsl:text> <xsl:value-of select="bib:number-condense($cite-ref/@begin, $cite-ref/@end)" /> </xsl:if> </xsl:if> </xsl:template> <xsl:template match="cs:first"> <xsl:apply-templates select="cs:layout"> <xsl:with-param name="multi-authors" select="cs:multiple-authors" as="element(cs:multiple-authors)?" tunnel="yes" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:layout"> <xsl:param name="use_reftype" tunnel="yes" /> <xsl:apply-templates select="if (cs:reftype) then (cs:reftype[@name=$use_reftype]) else *" /> </xsl:template> <xsl:template match="cs:subsequent"> <xsl:apply-templates select="if (cs:layout) then (cs:layout) else (preceding-sibling::cs:first/cs:layout)"> <xsl:with-param name="multi-authors" select="if (cs:multiple-authors) then (cs:multiple-authors) else (preceding-sibling::cs:first/cs:multiple-authors)" as="element(cs:multiple-authors)?" tunnel="yes" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:all"> <xsl:apply-templates select="cs:layout"> <xsl:with-param name="multi-authors" select="cs:multiple-authors" as="element(cs:multiple-authors)?" tunnel="yes" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:number"> <xsl:param name="cite-ref" as="node()" tunnel="yes" /> <span class="mark"> <xsl:value-of select="$bib:formatted-biblist/bib:item[@id=$cite-ref/@linkend]/@bib:biblist-number" /> </span> </xsl:template> <xsl:template match="cs:citekey"> <xsl:param name="cite-ref" as="node()" tunnel="yes" /> <span class="mark"> <xsl:value-of select="$cite-ref/@linkend" /> </span> </xsl:template> <!-- change citeproc to apply-templates here with use-reftype parameter --> <xsl:template match="cs:bibliography"> <xsl:param name="bib:source" as="element(mods:mods)" tunnel="yes" /> <xsl:param name="use_reftype" as="xs:string" tunnel="yes" /> <xsl:apply-templates select="cs:layout/cs:reftype[@name=$use_reftype]"> <xsl:with-param name="multi-authors" select="cs:multiple-authors" as="element(cs:multiple-authors)?" tunnel="yes" /> <xsl:with-param name="em-dash-author" select="self::cs:bibliography and $bib:source/@bib:shorten-author='true'" as="xs:boolean?" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:reftype"> <!-- needed to change the below to optional; may need to check this again later --> <xsl:param name="bib:number" as="xs:string?" tunnel="yes" /> <xsl:param name="bib:source" as="element(mods:mods)" tunnel="yes" /> <item class="bibref" id="{$bib:source/@ID}" bib:biblist-number="{$bib:number}"> <xsl:if test="$citeclass='number'"> <span class="mark"> <xsl:value-of select="$bib:number" /> </span> <xsl:text>. </xsl:text> </xsl:if> <xsl:if test="$citeclass='citekey'"> <xsl:text>[</xsl:text> <xsl:value-of select="$bib:source/@ID" /> <xsl:text>] </xsl:text> </xsl:if> <xsl:apply-templates /> <xsl:value-of select="$bibref-after" /> </item> </xsl:template> <xsl:template match="cs:creator"> <xsl:param name="first-in-author-group" as="xs:boolean?" tunnel="yes" /> <xsl:param name="local-cite-style" as="node()?" tunnel="yes" /> <xsl:choose> <xsl:when test="ancestor::cs:citation"> <xsl:if test="$first-in-author-group and not($local-cite-style='year')"> <xsl:apply-templates select="cs:prefix" /> <xsl:apply-templates select="cs:names | cs:names-short | cs:role" /> <xsl:apply-templates select="cs:suffix" /> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="cs:prefix" /> <xsl:apply-templates select="cs:names | cs:names-short | cs:role" /> <xsl:apply-templates select="cs:suffix" /> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="cs:creator/cs:names"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:param name="em-dash-author" as="xs:boolean?" tunnel="yes" /> <xsl:choose> <xsl:when test="$em-dash-author"> <!-- fix to config in CSL --> <xsl:text>—— </xsl:text> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="$bib:source/bib:noname-substitute" /> <xsl:apply-templates select="$bib:source/mods:name[mods:role/mods:roleTerm=$primary-contributors]" mode="full"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> <xsl:with-param name="sort-order" select="$style-biblio/@author-as-sort-order" /> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="cs:creator/cs:names-short"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:param name="em-dash-author" as="xs:boolean?" tunnel="yes" /> <xsl:choose> <xsl:when test="$em-dash-author"> <!-- fix to config in CSL --> <xsl:text>—— </xsl:text> </xsl:when> <xsl:otherwise> <xsl:apply-templates select="$bib:source/bib:noname-substitute" /> <xsl:apply-templates select="$bib:source/mods:name[mods:role/mods:roleTerm=$primary-contributors]" mode="short"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> <xsl:with-param name="sort-order" select="$style-biblio/@author-as-sort-order" /> </xsl:apply-templates> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="cs:role"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:name/mods:role"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:title"> <xsl:param name="bib:source" as="element()?" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:titleInfo[not(@type)]" mode="full"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> <xsl:with-param name="font-style" select="@font-style" /> <xsl:with-param name="font-weight" select="@font-weight" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:conference"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:name[@type='conference']/mods:namePart"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> <xsl:with-param name="font-style" select="@font-style" /> <xsl:with-param name="font-weight" select="@font-weight" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:origin"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:if test="$bib:source/mods:originInfo/mods:publisher or $bib:source/mods:originInfo/mods:place"> <span class="origin"> <xsl:apply-templates /> </span> </xsl:if> </xsl:template> <xsl:template match="cs:container"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <span class="container"> <xsl:apply-templates> <xsl:with-param name="bib:source" select="$bib:source/mods:relatedItem[@type='host']" as="element()" tunnel="yes" /> </xsl:apply-templates> </span> </xsl:template> <xsl:template match="cs:series"> <xsl:param name="bib:source" as="element()?" tunnel="yes" /> <xsl:apply-templates> <xsl:with-param name="bib:source" select="$bib:source/mods:relatedItem[@type='series']" as="element()?" tunnel="yes" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:part-details"> <xsl:apply-templates /> </xsl:template> <xsl:template match="cs:prefix | cs:suffix"> <xsl:value-of select="." /> </xsl:template> <xsl:template match="cs:issue"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:part/mods:detail[@type='issue']"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:file"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:part/mods:detail[@type='file']"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:volume"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:part/mods:detail[@type='volume']"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:genre"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:genre[text()=$genres]"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:medium"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:physicalDescription"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:pages"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:part/mods:extent[@unit='page']"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:place"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:originInfo/mods:place"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:publisher"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:originInfo/mods:publisher"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:date"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <!-- the below conditional seems a bit of a hack; need to reconsider later --> <xsl:variable name="date" select="(../$bib:source/mods:originInfo/mods:dateIssued, $bib:source/mods:originInfo/mods:dateIssued, $bib:source/mods:part/mods:date)[1]" /> <xsl:if test="cs:month and not($date castable as xs:gYear) or cs:year"> <span class="date"> <xsl:apply-templates /> </span> </xsl:if> </xsl:template> <xsl:template match="cs:year"> <!-- I'm not sure why requiring the bib:source parameter fails in some cases --> <xsl:param name="bib:source" as="element()?" tunnel="yes" /> <xsl:param name="prefix" /> <xsl:param name="suffix" /> <xsl:apply-templates select="$bib:source/bib:year"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:month"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:param name="prefix" /> <xsl:param name="suffix" /> <!-- select statement is a problem; problem need to move this into a function --> <xsl:apply-templates select="$bib:source/mods:originInfo/mods:dateIssued|$bib:source/mods:part/mods:date" mode="month"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:day"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:param name="prefix" /> <xsl:param name="suffix" /> <xsl:apply-templates select="$bib:source/mods:originInfo/mods:dateIssued|$bib:source/mods:part/mods:date" mode="day"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <!-- end dates --> <xsl:template match="cs:availability"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:param name="prefix" /> <xsl:param name="suffix" /> <xsl:apply-templates select="$bib:source/mods:location"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> <xsl:template match="cs:month-day"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:param name="prefix" /> <xsl:param name="suffix" /> <xsl:apply-templates select="$prefix" /> <span class="month-day"> <xsl:apply-templates select="$bib:source/mods:relatedItem/mods:part/mods:date|$bib:source/mods:relatedItem/mods:originInfo/mods:dateIssued" mode="date"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </span> <xsl:apply-templates select="$suffix" /> </xsl:template> <xsl:template match="cs:note"> <xsl:param name="bib:source" as="element()" tunnel="yes" /> <xsl:apply-templates select="$bib:source/mods:note[@type='citation']"> <xsl:with-param name="prefix" select="cs:prefix" /> <xsl:with-param name="suffix" select="cs:suffix" /> </xsl:apply-templates> </xsl:template> </xsl:stylesheet> v |


