<
xsl:
stylesheet xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
xmlns:xdoc="
http://www.pnp-software.com/XSLTdoc"
xmlns:xs="
http://www.w3.org/2001/XMLSchema"
xmlns:db="
http://docbook.org/ns/docbook"
xmlns:xhtml="
http://www.w3.org/1999/xhtml"
xmlns:mods="
http://www.loc.gov/mods/v3"
xmlns="
http://purl.org/NET/xbiblio/citeproc"
xmlns:cs="
http://purl.org/NET/xbiblio/csl"
xmlns:bib="
http://purl.org/NET/xbiblio/citeproc"
version="
2.0"
exclude-result-prefixes="
xhtml mods xdoc db bib xs cs">
<
xsl:
preserve-space elements="
cs:prefix cs:suffix" />
<!---->
<
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>
<!---->
<
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>
<!---->
<
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">
<!---->
<
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">
<!---->
<
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">
<!---->
<
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" />
<!---->
<
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">
<!---->
<
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" />
<!---->
<
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>
<!---->
<
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