Language:

The Free and Open Productivity Suite
Apache OpenOffice 4.1.5 released
<xsl:stylesheet xmlns:bib="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:exist="http://exist.sourceforge.net/NS/exist" 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" xmlns:course="http://purl.org/NET/xbiblio/course" version="2.0" exclude-result-prefixes="xdoc mods xs bib exist course db cs">
<!--===licensedunderCC-GNUGPL;seehttp://creativecommons.org/licenses/GPL/2.0===-->
<xdoc:doc type="stylesheet">
<xdoc:short>Handlessorting.</xdoc:short>
<xdoc:author>BruceD’Arcus</xdoc:author>
<xdoc:copyright>2004,BruceD’Arcus</xdoc:copyright>
</xdoc:doc>

<!--===================================================================-->
<!--|beginbibliographytemplates|-->
<!--===================================================================-->
<xdoc:doc>Grouping,sortingandparametersettingtoproperlyhandlethe
author-yearclassbibliographies.
</xdoc:doc>

<xsl:template match="mods:modsCollection" mode="sort_author-year">
<xsl:variable name="bibref" select="mods:mods" />
<xsl:for-each-group select="$bibref" group-by="mods:grouping-key(.)">
<xsl:sort select="current-grouping-key()" />
<xsl:variable name="bibrefs-for-author-sorted-by-year" as="element(mods:mods)*">
<xsl:perform-sort select="current-group()">
<xsl:sort select="mods:year(.)" />
<!--addthird-levelsortonmonth-day-->
</xsl:perform-sort>
</xsl:variable>
<xsl:variable name="first-bibref-for-author" as="element(mods:mods)" select="$bibrefs-for-author-sorted-by-year[1]" />
<xsl:variable name="sort-on" select="current-grouping-key()" />
<xsl:for-each-group select="$bibrefs-for-author-sorted-by-year" group-adjacent="mods:year(.)">
<xsl:for-each select="current-group()">
<xsl:variable name="year-suffix">
<xsl:if test="last() &gt; 1">
<xsl:number value="position()" format="a" />
</xsl:if>
</xsl:variable>
<xsl:variable name="shorten-author" as="xs:boolean" select="$style-biblio/@author-shorten='yes' and not(. is $first-bibref-for-author)" />
<xsl:apply-templates select="." mode="enhance">
<xsl:with-param name="year" select="current-grouping-key()" />
<xsl:with-param name="year-suffix" select="$year-suffix" />
<xsl:with-param name="shorten-author" select="$shorten-author" as="xs:boolean" />
<xsl:with-param name="sort-on" select="$sort-on" />
</xsl:apply-templates>
</xsl:for-each>
</xsl:for-each-group>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="mods:modsCollection" mode="sort_cited">
<xsl:variable name="sort-on" select="$cite-position/bib:refs/bib:unique/bib:ref[@key='{@ID}']/@position" />
<xsl:for-each select="mods:mods">
<xsl:sort select="$sort-on" />
<xsl:apply-templates select="." mode="enhance">
<xsl:with-param name="year" select="mods:year(.)" />
<xsl:with-param name="sort-on" select="$sort-on" />
</xsl:apply-templates>
</xsl:for-each>
</xsl:template>
<xsl:template match="mods:modsCollection" mode="sort_citekey">
<xsl:for-each select="mods:mods">
<xsl:sort select="@ID" />
<xsl:apply-templates select="." mode="enhance">
<xsl:with-param name="year" select="mods:year(.)" />
<xsl:with-param name="sort-on" select="@ID" />
</xsl:apply-templates>
</xsl:for-each>
</xsl:template>
<xdoc:doc>Addsdatanecessaryforfurtherprocessingtothein-memory
bibliographiclist,soitneednotbecalcuatedsubsequently.
</xdoc:doc>

<xsl:template match="mods:mods" mode="enhance">
<xsl:param name="shorten-author" />
<xsl:param name="year" />
<xsl:param name="year-suffix" />
<xsl:param name="sort-on" />
<mods:mods ID="{@ID}" bib:shorten-author="{$shorten-author}" bib:refclass="{mods:refclass(.)}" bib:reftype="{mods:reftype(.)}" bib:use-reftype="{mods:use_csl-reftype(.)}" bib:sort-on="{$sort-on}" bib:biblist-position="{position()}">
<bib:year>
<xsl:value-of select="$year" />
</bib:year>
<xsl:if test="$year-suffix">
<bib:year-suffix>
<xsl:value-of select="$year-suffix" />
</bib:year-suffix>
</xsl:if>
<xsl:if test="not(mods:name[mods:role/mods:roleTerm=$primary-contributors])">
<bib:noname-substitute>
<xsl:value-of select="mods:grouping-key(.)" />
</bib:noname-substitute>
</xsl:if>
<xsl:copy-of select="*" />
</mods:mods>
</xsl:template>
<!--===================================================================-->
<!--|begincitationtemplates|-->
<!--===================================================================-->
<xdoc:doc>Grouping/sortingauthor-yearclasscitations.</xdoc:doc>

<xsl:template match="db:citation" mode="sort_citation_author-year">
<!--storecitationforfutureuse-->
<xsl:variable name="citation" select="." as="element()" />
<xsl:variable name="local-cite-style" select="db:biblioref/@xrefstyle" as="node()?" />
<xsl:variable name="idref" select="db:biblioref/@linkend, course:reading/@refid" />
<xsl:variable name="bibref" select="$enhanced-biblist/mods:modsCollection/mods:mods[@ID=$idref]" />
<xsl:for-each-group select="$bibref" group-by="@bib:sort-on">
<xsl:sort select="current-grouping-key()" />
<xsl:variable name="refs-for-author-sorted-by-year" as="element(mods:mods)*">
<xsl:perform-sort select="current-group()">
<xsl:sort select="bib:year" />
</xsl:perform-sort>
</xsl:variable>
<xsl:variable name="first-ref-for-author" as="element(mods:mods)" select="$refs-for-author-sorted-by-year[1]" />
<xsl:variable name="last-ref-for-author" as="element(mods:mods)" select="$refs-for-author-sorted-by-year[position() = last()]" />
<xsl:for-each-group select="$refs-for-author-sorted-by-year" group-adjacent="bib:year">
<xsl:for-each select="current-group()">
<xsl:variable name="first-in-author-group" select=". is $first-ref-for-author" as="xs:boolean" />
<xsl:variable name="last-in-author-group" select=". is $last-ref-for-author" as="xs:boolean" />
<xsl:variable name="id" select="@ID" />
<!--earlierthecite-refvariablewasdefinedasjustelement(),but
forsomereasonthisyieldedanempty-sequenceerrorinonecase
-->
<xsl:variable name="cite-ref" as="node()">
<xsl:sequence select="$citation/db:biblioref[@linkend=$id]" />
</xsl:variable>
<xsl:apply-templates select="$style-citation">
<xsl:with-param name="first-in-author-group" select="$first-in-author-group" as="xs:boolean" tunnel="yes" />
<xsl:with-param name="last-in-author-group" select="$last-in-author-group" as="xs:boolean" tunnel="yes" />
<xsl:with-param name="local-cite-style" select="$local-cite-style" as="node()?" tunnel="yes" />
<xsl:with-param name="cite-ref" select="$cite-ref" as="node()" tunnel="yes" />
<xsl:with-param name="bib:source" select="." as="element()" tunnel="yes" />
</xsl:apply-templates>
</xsl:for-each>
</xsl:for-each-group>
<!--FIXME:configinCSL-->
<xsl:if test="position() != last()">;</xsl:if>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="db:citation" mode="sort_cited">
XXXX
</xsl:template>
</xsl:stylesheet>






































v

Apache Software Foundation

Copyright & License | Privacy | Contact Us | Donate | Thanks

Apache and the Apache feather logo are trademarks of The Apache Software Foundation. OpenOffice, OpenOffice.org and the seagull logo are registered trademarks of The Apache Software Foundation. Other names appearing on the site may be trademarks of their respective owners.