diff options
| author | Felix Hanley <felix@userspace.com.au> | 2016-01-25 11:39:32 +0000 |
|---|---|---|
| committer | Felix Hanley <felix@userspace.com.au> | 2016-01-25 11:39:32 +0000 |
| commit | 5942545be690a4d4e04032fe24f70d79362824f4 (patch) | |
| tree | 4956d60b9a74db43d569e62639047b1e51b08f82 /xsl/inc | |
| download | lahu-dictionary-5942545be690a4d4e04032fe24f70d79362824f4.tar.gz lahu-dictionary-5942545be690a4d4e04032fe24f70d79362824f4.tar.bz2 | |
Initial Lahu word list in TEI format
Includes some of the Freedict and TEI XSL tools.
Diffstat (limited to 'xsl/inc')
| -rw-r--r-- | xsl/inc/indent.xsl | 133 | ||||
| -rw-r--r-- | xsl/inc/teientry2txt.xsl | 444 | ||||
| -rw-r--r-- | xsl/inc/teiheader2txt.xsl | 279 |
3 files changed, 856 insertions, 0 deletions
diff --git a/xsl/inc/indent.xsl b/xsl/inc/indent.xsl new file mode 100644 index 0000000..d917a31 --- /dev/null +++ b/xsl/inc/indent.xsl @@ -0,0 +1,133 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + + <!-- Helper functions to manage indentation --> + + <!-- You need at least Version 1.0 of Sablotron from August 8, 2003 + (ChangeLog says "fixed a bug of default NS in imported/included templates") + if you get error messages like: + + Error [code:52] [URI:file:tools/xsl/inc/teiheader2txt.xsl] [line:10] + [node:element '<xsl:call-template>'] called nonexistent rule 'format' + + This bug appears at least in sabcmd 0.98 (April 7, 2003). + --> + + <!-- This is the template intended to be called from outside --> + <xsl:template name="format"> + <!-- The text to be formatted nicely --> + <xsl:param name="txt"/> + <!-- A number giving the column width in which txt is to be formatted + indented by $start spaces --> + <xsl:param name="width" select="78"/> + <!-- A number giving the columns the txt is to be indented --> + <xsl:param name="start" select="0"/> + + <xsl:choose> + <!-- Last Line --> + <xsl:when test="string-length($txt) < $width -$start"> + <xsl:value-of select="$txt"/> + <xsl:text> </xsl:text> + </xsl:when> + + <!-- substring() of a NULL string would be bad --> + <xsl:when test="$txt"> + <!-- Find the word boundary of the last word that completely fits on the current line --> + <xsl:variable name="real-width"> + <xsl:call-template name="space-backward"> + <xsl:with-param select="$txt" name="txt"/> + <xsl:with-param select="$width - $start" name="width"/> + <xsl:with-param select="$start" name="start"/> + <xsl:with-param name="def"> + <xsl:call-template name="space-forward"> + <xsl:with-param select="$txt" name="txt"/> + <xsl:with-param select="$width - $start" name="width"/> + <xsl:with-param select="$start" name="start"/> + </xsl:call-template> + </xsl:with-param> + </xsl:call-template> + </xsl:variable> + <!-- Output current line --> + <xsl:value-of select="substring($txt, 1, $real-width)"/> + <xsl:text> </xsl:text> + <!-- Indent the next line --> + <xsl:value-of select="substring(' ', 1, $start)"/> + <!-- Recursively call myself --> + <xsl:call-template name="format"> + <xsl:with-param select="substring($txt, $real-width + 1)" name="txt"/> + <xsl:with-param select="$width" name="width"/> + <xsl:with-param select="$start" name="start"/> + </xsl:call-template> + </xsl:when> + </xsl:choose> + </xsl:template> + + <!-- This template returns a number, (0 <= return value <= $width) or $def. + It seems to look for the column of the last space in $txt, smaller than $width. + If no space found, $def is returned. --> + <xsl:template name="space-backward"> + <xsl:param name="txt"/> + <xsl:param name="width"/> + <xsl:param name="def"/> + <xsl:param name="start"/> + <xsl:choose> + <xsl:when test="$width = 0"> + <xsl:value-of select="$def"/> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="substring($txt, $width, 1) = ' '"> + <xsl:value-of select="$width"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="space-backward"> + <xsl:with-param select="$txt" name="txt"/> + <xsl:with-param select="$width - 1" name="width"/> + <xsl:with-param select="$def" name="def"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- This template returns a number ($width <= return value <= string-length($txt)). + It seems to look for the column of the next space in $txt after $width. If no + space found, string-length($txt) is returned. It does primitive recursion over $width. --> + <xsl:template name="space-forward"> + <xsl:param name="txt"/> + <xsl:param name="width"/> + <xsl:choose> + <xsl:when test="$width >= string-length($txt)"> + <xsl:value-of select="string-length($txt)"/> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="substring($txt, $width, 1) = ' '"> + <xsl:value-of select="$width"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="space-forward"> + <xsl:with-param select="$txt" name="txt"/> + <xsl:with-param select="$width + 1" name="width"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- Use the 'format' template per default for outputting text nodes - + <xsl:template match="text()"> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="."/> + <xsl:with-param name="width" select="70"/> + <xsl:with-param name="start" select="0"/> + </xsl:call-template> + </xsl:template> + --> + +</xsl:stylesheet> + diff --git a/xsl/inc/teientry2txt.xsl b/xsl/inc/teientry2txt.xsl new file mode 100644 index 0000000..cbff6d2 --- /dev/null +++ b/xsl/inc/teientry2txt.xsl @@ -0,0 +1,444 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:xd="http://www.pnp-software.com/XSLTdoc" + version="1.0"> + + <xsl:include href="indent.xsl"/> + + <xsl:strip-space elements="*"/> + + <xsl:variable name="stylesheet-entry_svnid">$Id$</xsl:variable> + + <!-- I am fully aware of introducing some project-specific features into the P5 mode, + but let this stuff reside here for a while until we come up with a clean way to + import project-dependent overrides from the individual project directories... -PB 13-apr-09--> + + <!-- TEI entry specific templates --> + <xsl:template match="tei:entry"> + <xsl:apply-templates select="tei:form"/> + <!-- force form before gramGrp --> + <xsl:apply-templates select="tei:gramGrp"/> + <xsl:text>
</xsl:text> + <xsl:apply-templates select="tei:sense | tei:note"/> + </xsl:template> +<!--Headword description FORM and GRAMGRP --> + <xsl:template match="tei:form"> + <xsl:variable name="paren" + select="count(child::tei:orth) and (count(parent::tei:form) = 1 or @type='infl')"/> + <!-- parenthesized if nested or (ad hoc) if @type="infl" --> + <!-- further adhockishness (I'm duly ashamed): you'd better check if the <orth> is really there, because you may be + looking at nested <form>s; a rewrite is needed here --> + <xsl:if test="$paren"> + <xsl:text> (</xsl:text> + </xsl:if> + <!-- mandatory entry > form > orth --> + <xsl:apply-templates select="tei:usg | tei:lbl"/> + <xsl:if test="position() != last()"> + <xsl:text> </xsl:text> + </xsl:if> + <!-- added to handle usg info in nested <form>s --> + <xsl:for-each select="tei:orth"> + <xsl:choose> + <!-- values from the TEI Guidelines --> + <xsl:when test="count(@extent)=0 or @extent='full'"> + <xsl:value-of select="."/> + </xsl:when> + <xsl:when test="@extent='pref'"> + <xsl:value-of select="concat(.,'-')"/> + </xsl:when> + <xsl:when test="@extent='suff'"> + <xsl:value-of select="concat('-',.)"/> + </xsl:when> + <xsl:when test="@extent='part'"> + <xsl:value-of select="concat('-',.,'-')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="."/> + </xsl:otherwise> + </xsl:choose> + <xsl:if test="position() != last()"> + <xsl:text>, </xsl:text> + </xsl:if> + </xsl:for-each> + <xsl:apply-templates select="tei:pron"/> + <xsl:if test="position() != last()"> + <xsl:text> </xsl:text> + </xsl:if> + <!-- then, if nested, gramGrp or gram infos... --> + <xsl:apply-templates select=" tei:gramGrp"/> + <xsl:if test="position() != last()"> + <xsl:text> </xsl:text> + </xsl:if> + <xsl:apply-templates select="tei:form"/> + <xsl:if test="following-sibling::tei:form and following-sibling::tei:form[1][not(@type='infl')]"> + <xsl:text>, </xsl:text> + <!-- cosmetics: no comma before parens --> + </xsl:if> + <xsl:if test="$paren"> + <xsl:text>)</xsl:text> + </xsl:if> + </xsl:template> + + <!-- can't see when this template may be active; see above for enhancement (pref, suff), if necessary --> + <xsl:template match="tei:orth"> + <xsl:value-of select="."/> + <xsl:if test="position() != last()"> + <xsl:text>, </xsl:text> + </xsl:if> + </xsl:template> + + <xsl:template match="tei:pron"> + <xsl:value-of select="concat(' /',.,'/')"/> + <!--<xsl:text> /</xsl:text><xsl:apply-templates/><xsl:text>/</xsl:text>--> + </xsl:template> + + <!-- allow for empty <pos/>; make it a condition for the presence of angled brackets, too + the weird "(self::gramGrp or count(tei:pos/text())" + means "you're either P4 or <pos> in P5 is non-empty" +--> + <xsl:template match="tei:gramGrp"> + <xsl:variable name="bracket" + select="count(ancestor::tei:gramGrp)=0 and (count(tei:pos/text()) or count(tei:*[local-name() != 'pos']))" + /> + <xsl:if test="$bracket"> + <xsl:text> <</xsl:text> + </xsl:if> + <xsl:for-each + select="tei:pos[text()] | tei:subc | tei:num | tei:number | tei:gen | tei:gramGrp | tei:iType | tei:gram | tei:case"> + <xsl:apply-templates select="."/> + <xsl:if test="position()!=last()"> + <xsl:text>, </xsl:text> + </xsl:if> + </xsl:for-each> + <xsl:if test="$bracket"> + <xsl:text>></xsl:text> + </xsl:if> + + <!-- <xr> elements are not allowed inside <form> or <gramGrp>, so reach out and grab them... --> + <xsl:if + test="count(preceding-sibling::tei:xr[@type='plural-form' or @type='imp-form' or + @type='past-form' or @type='infl-form'])"> + <xsl:text> </xsl:text> + <xsl:apply-templates + select="preceding-sibling::tei:xr[@type='plural-form' or @type='imp-form' or + @type='past-form' or @type='infl-form']" + /> + </xsl:if> + <!-- horribly project-specific, will be overridden by project-specific imports later on; + OTOH, we might make this a project feature, too, if there is a need --> + <xsl:if test="preceding-sibling::tei:form/@type='N'"> + <xsl:text> [sg=pl]</xsl:text> + </xsl:if> + </xsl:template> + + <xsl:template match="tei:gram[@type='cl-agr']"> + <xsl:value-of select="concat('agr: ',.)"/> + </xsl:template> + +<!-- senses --> + <xsl:template match="tei:sense"> + <xsl:variable name="prec_senses"> + <xsl:choose> + <xsl:when test="not(preceding-sibling::tei:sense)">0</xsl:when> + <xsl:otherwise> + <xsl:value-of select="count(preceding-sibling::tei:sense)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="pref"> + <xsl:choose> + <xsl:when test="@n"> + <xsl:value-of select="concat(@n,'. ')"/> + </xsl:when> + <xsl:when test="number($prec_senses) > 0 or following-sibling::tei:sense"> + <xsl:value-of select="concat(position(),'. ')"/> + </xsl:when> + </xsl:choose> + </xsl:variable> + <xsl:if test="number($prec_senses) > 0"> + <xsl:text>
</xsl:text> + </xsl:if> + <xsl:value-of select="concat(' ',$pref)"/> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="tei:cit"><!--cit can be @trans, @example, (@colloc) and simple cit (for idiomatic expression)--> + <xsl:choose> + <xsl:when test="@type ='trans'"> +<!-- <xsl:if test="preceding-sibling::tei:cit[@type='trans']"><xsl:text> ◊ </xsl:text></xsl:if> --> + <xsl:if test="not(preceding-sibling::tei:cit[@type='trans']) and parent::tei:cit"><xsl:text> - </xsl:text></xsl:if> + <xsl:if test="preceding-sibling::tei:cit[@type='trans']"><xsl:text>, </xsl:text></xsl:if> + <xsl:apply-templates/> + </xsl:when> + <xsl:when test="@type ='example'"> + <xsl:text>
 </xsl:text> + <xsl:apply-templates/> + </xsl:when> + <xsl:when test="@type ='colloc'"> + <xsl:text> (</xsl:text> + <xsl:apply-templates/> + <xsl:text>) </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates/> + <xsl:text> </xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="tei:quote"> + <xsl:choose> + <xsl:when test="parent::tei:cit[@type='example']"> + <xsl:value-of select="concat('"',.,'" ')"/> + </xsl:when><!-- + <xsl:when test="parent::tei:cit[@type='trans'][parent::tei:cit]"> + + <xsl:value-of select="concat(' - ',.,' ')"/> + </xsl:when>--> + <xsl:when test="preceding-sibling::tei:quote"> <!-- parent::tei:cit[@type='trans'] and --> + <xsl:value-of select="', '"/> + <xsl:apply-templates/> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates/> + </xsl:otherwise> + </xsl:choose> + </xsl:template><!----> + + <xsl:template match="tei:usg"> + <xsl:text> [</xsl:text> + <xsl:value-of select="."/> + <xsl:text>] </xsl:text> + </xsl:template> + + <xsl:template match="tei:def"> + <xsl:variable name="stuff"> + <xsl:apply-templates select="*|text()"/> + </xsl:variable> + <!-- first question: am I abused? Do I hold a translation equivalent + within a <sense>, or am I a real definition within a <cit>? --> + <xsl:choose> + <xsl:when test="parent::tei:sense"> + <xsl:variable name="separator"> + <xsl:choose> + <xsl:when test="preceding-sibling::tei:def"> + <xsl:value-of select="'; '"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="''"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:value-of select="concat($separator,$stuff)"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="normalize-space($stuff)"/> + <xsl:with-param name="width" select="75"/> + <xsl:with-param name="start" select="4"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="tei:xr"> + <xsl:choose> + <xsl:when test="count(@rend) and @rend='as-is'"> + <xsl:apply-templates/> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="not(@type) or @type='cf'"> + <xsl:text>
 See also: </xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>
</xsl:text> + </xsl:when> + <xsl:when test="@type='syn'"> + <xsl:text>
 </xsl:text> + <xsl:choose> + <xsl:when test="count(tei:ref) > 1"> + <xsl:text>Synonyms: </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>Synonym: </xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>
</xsl:text> + </xsl:when> + <xsl:when test="@type='ant'"> + <xsl:text>
 </xsl:text> + <xsl:choose> + <xsl:when test="count(tei:ref) > 1"> + <xsl:text>Antonyms: </xsl:text> + </xsl:when> + <xsl:otherwise> + <xsl:text>Antonym: </xsl:text> + </xsl:otherwise> + </xsl:choose> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>
</xsl:text> + </xsl:when> + <xsl:when test="@type='infl-base'"> + <!-- inflectional base --> + <xsl:text>
 Inflection of: </xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>
</xsl:text> + </xsl:when> + <xsl:when test="@type='deriv-base'"> + <!-- derivational/compound base --> + <xsl:text>
 Derived from: </xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>
</xsl:text> + </xsl:when> + <!-- the <xr>s below are positioned inline --> + <xsl:when test="@type='imp-form'"> + <!-- imperative --> + <xsl:text>(imp: </xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>)</xsl:text> + </xsl:when> + <xsl:when test="@type='plural-form'"> + <!-- plural --> + <xsl:text>(pl: </xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>)</xsl:text> + </xsl:when> + <xsl:when test="@type='past-form'"> + <!-- past --> + <xsl:text>(past: </xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>)</xsl:text> + </xsl:when> + <xsl:when test="@type='infl-form'"> + <!-- general inflections, e.g. past/pprt/fut --> + <xsl:text>(</xsl:text> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>)</xsl:text> + </xsl:when> + <xsl:otherwise> + <!-- unknown type: print the value and set it on a separate line --> + <xsl:text>
 </xsl:text> + <xsl:value-of select="concat(@type,': ')"/> + <xsl:apply-templates select="tei:ref"/> + <xsl:text>
</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="tei:ref"> + <xsl:if test="preceding-sibling::*[1][self::tei:ref]"> + <xsl:text>, </xsl:text> + </xsl:if> + <xsl:choose> + <xsl:when test="ancestor::tei:teiHeader or ancestor::tei:front"> + <xsl:value-of select="concat(.,' [',@target,']')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat('{',.,'}')"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="tei:entry//tei:p"> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="tei:note[@type='editor']" priority="1"/> + + <xsl:template match="tei:entry//tei:note"> + <xsl:variable name="stuff"> + <xsl:apply-templates/> + </xsl:variable> + <xsl:variable name="spc"> + <xsl:choose> + <xsl:when test="(count(preceding-sibling::node())=0) or @rend='noindent'"> + <xsl:value-of select="''"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="' '"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="count(@*)=0"> + <xsl:value-of select="concat('
 Note: ',$stuff)"/> + </xsl:when> + <xsl:when test="@resp='translator'"> + <xsl:text>
 Entry edited by: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>
</xsl:text> + </xsl:when> + <!-- a subset of values from the TEI Guidelines --> + <xsl:when + test="@type='lbl' or @type='dom' or @type='obj' or @type='subj' or @type='hint' or @type='num' or @type='geo' or @type='syn' or @type='colloc'"> + <xsl:value-of select="concat($spc,'(',.,')')"/> + </xsl:when> + <xsl:when test="@type='gram'"> + <xsl:text>
</xsl:text> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="concat(' (',normalize-space($stuff),')')"/> + <!-- select="concat(' Note (gram.): ',normalize-space($stuff))"--> + <xsl:with-param name="width" select="75"/> + <xsl:with-param name="start" select="1"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@type='usage'"> + <xsl:text>
</xsl:text> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="concat(' (',normalize-space($stuff),')')"/> + <!-- select="concat(' Usage: ',normalize-space($stuff))"--> + <xsl:with-param name="width" select="75"/> + <xsl:with-param name="start" select="1"/> + </xsl:call-template> + </xsl:when> + <xsl:when test="@type='def'"> + <xsl:text>
</xsl:text> + <xsl:call-template name="format"> + <!--<xsl:with-param name="txt" select="concat(' Def.: ',normalize-space())"/>--> + <xsl:with-param name="txt" select="concat(' ',normalize-space($stuff))"/> + <xsl:with-param name="width" select="75"/> + <xsl:with-param name="start" select="1"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat($spc,'(',$stuff,')')"/> + <xsl:text>
</xsl:text> + </xsl:otherwise> + <!--<xsl:when test="text()"> + <xsl:text>
 Note: </xsl:text> + <xsl:value-of select="text()"/> + </xsl:when>--> + </xsl:choose> + </xsl:template> + + <xsl:template match="tei:q"> + <xsl:value-of select="concat('"',.,'"')"/> + </xsl:template> + + <xsl:template match="tei:lbl"> + <xsl:text> (</xsl:text> + <xsl:value-of select="."/> + <xsl:text>) </xsl:text> +</xsl:template> + + <xsl:template match="tei:author"> + <xsl:value-of select="concat(.,' ')"/> +</xsl:template> + +<xsl:template match=" tei:pos | tei:subc | tei:num | tei:number | tei:gen | tei:iType | tei:gram | tei:case"> + <xsl:choose> + <xsl:when test="not(parent::tei:gramGrp)"> + <xsl:value-of select="concat(' ',.)"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="."/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +</xsl:stylesheet> + diff --git a/xsl/inc/teiheader2txt.xsl b/xsl/inc/teiheader2txt.xsl new file mode 100644 index 0000000..a3a17a0 --- /dev/null +++ b/xsl/inc/teiheader2txt.xsl @@ -0,0 +1,279 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:xd="http://www.pnp-software.com/XSLTdoc"> + + <xsl:import href="indent.xsl"/> + + <!-- Width of display, so indendation can be done nicely --> + <xsl:param name="width" select="75"/> + <!-- Has to come from the shell, as XSLT/XPath 1.0 provide no + function to get current time/date --> + <xsl:param name="current-date"/> + <xsl:variable name="stylesheet-header_svnid">$Id: teiheader2txt.xsl 1095 2011-01-06 14:57:17Z bansp$</xsl:variable> + + <!-- Using this stylesheet with Sablotron requires a version >=0.95, + because xsl:strip-space was implemented from that version on --> + <!--<xsl:strip-space elements="teiHeader fileDesc titleStmt respStmt editionStmt publicationStmt seriesStmt notesStmt revisionDesc TEI.2 TEI p sourceDesc availability encodingDesc"/>--> + <xsl:strip-space elements="*"/> + + <!-- the addition of P5 stuff relies on the absolute complementarity between + null-spaced elements (P4) and elements in the TEI namespace (P5) --> + + <!-- For transforming the teiHeader --> + + <xsl:template match="tei:titleStmt"> + <xsl:value-of select="tei:title"/> + <xsl:text>

</xsl:text> + <xsl:for-each select="tei:respStmt"> + <xsl:value-of select="tei:resp"/>: <xsl:value-of select="tei:name"/> + <xsl:text>
</xsl:text> + </xsl:for-each> + <xsl:text>
</xsl:text> + </xsl:template> + + <!-- editionStmt consists of <edition/> followed by (respStmt)* --> + <xsl:template match="tei:editionStmt"> + <xsl:text>Edition: </xsl:text> + <xsl:apply-templates select="tei:edition"/> + <xsl:text>
</xsl:text> + + <xsl:if test="tei:respStmt"> + <xsl:for-each select="tei:respStmt"> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="normalize-space(concat(tei:name, ': ', tei:resp))"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="string-length(tei:name) + 3"/> + </xsl:call-template> + </xsl:for-each> + <xsl:text>
</xsl:text> + </xsl:if> + </xsl:template> + + <xsl:template match="tei:extent"> + <xsl:text>Size: </xsl:text> + <xsl:value-of select="."/> + <xsl:text>

</xsl:text> + </xsl:template> + + <xd:doc>I understand this is needed for cases where we merely redistribute stuff.</xd:doc> + <xsl:template match="tei:publisher"> + <xsl:value-of select="concat('Publisher: ',.,'.
')"/> + </xsl:template> + + <xd:doc>For upstream publishers, I guess.</xd:doc> + <xsl:template match="tei:publicationStmt/tei:date"> + <xsl:value-of select="concat('Publication date: ',.,'.
')"/> + </xsl:template> + + <xd:doc>Shouldn't this always be the FreeDict URL?</xd:doc> + <xsl:template match="tei:pubPlace"> + <xsl:value-of select="concat('Published at: ',tei:ref,'
')"/> + </xsl:template> + + <xd:doc>Id #, currently we only use the SVN Id.</xd:doc> + <xsl:template match="tei:idno"> + <xsl:value-of select="concat('ID# (',@type,'): ',.,'
')"/> + </xsl:template> + + + <xsl:template match="tei:availability"> + <xsl:variable name="spaced_ps"> + <xsl:for-each select="tei:p"> + <xsl:value-of select="concat(.,' ')"/> + </xsl:for-each> + </xsl:variable> + <xsl:text>

Availability:

 </xsl:text> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="normalize-space($spaced_ps)"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="2"/> + </xsl:call-template> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template match="tei:publicationStmt"> + <xsl:apply-templates/> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template match="tei:seriesStmt"> + <xsl:text>Series: </xsl:text> + <xsl:value-of select="tei:title"/> + <xsl:text>

</xsl:text> + </xsl:template> + + <xsl:template match="tei:notesStmt"> + <xsl:text>Notes:

</xsl:text> + <xsl:apply-templates/> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template match="tei:teiHeader//tei:note"> + <xsl:text> * </xsl:text> + <xsl:if test="@type and (@type = 'status')"> + <xsl:text>Database Status: </xsl:text> + </xsl:if> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="normalize-space()"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="3"/> + </xsl:call-template> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template match="tei:sourceDesc"> + <xsl:text>Source(s):

 </xsl:text> + <xsl:variable name="sdtext"> + <xsl:apply-templates/> + </xsl:variable> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="normalize-space($sdtext)"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="2"/> + </xsl:call-template> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template match="tei:p"> + <xsl:text> </xsl:text> + <xsl:apply-templates/> + <xsl:text>

</xsl:text> + </xsl:template> + + <xsl:template match="tei:ptr"> + <xsl:value-of select="@target"/> + </xsl:template> + + <xsl:template match="tei:projectDesc"> + <xsl:text>The Project:

 </xsl:text> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="normalize-space()"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="2"/> + </xsl:call-template> + <xsl:text>
</xsl:text> + </xsl:template> + + <xsl:template match="tei:revisionDesc"> + <xsl:text>Changelog:

</xsl:text> + <xsl:if test="string-length($current-date)>0"> + <!-- Add conversion timestamp --> + <xsl:text> * </xsl:text> + <xsl:value-of select="$current-date"/> + <xsl:text>: Conversion of the TEI source file into c5 format.</xsl:text> + <xsl:text>
 Stylesheet ID: </xsl:text> + <xsl:value-of select="$stylesheet-header_svnid"/> + <xsl:text>
</xsl:text> + </xsl:if> + <xsl:apply-templates/> + </xsl:template> + + <xsl:template match="tei:change"> + <xsl:variable name="when"> + <xsl:choose> + <xsl:when test="tei:date"> + <xsl:value-of select="tei:date"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="@when"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="who"> + <xsl:choose> + <xsl:when test="tei:name"> + <xsl:value-of select="tei:name[1]"/> + </xsl:when> + <xsl:when test="@who"> + <xsl:variable name="who-attr" select="@who"/> + <xsl:variable name="name-elem" + select="/tei:TEI/tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:respStmt/tei:name[@xml:id = substring-after($who-attr,'#')]"/> + <xsl:choose> + <xsl:when test="$name-elem"> + <xsl:value-of select="$name-elem"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$who-attr"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> + </xsl:variable> + <xsl:value-of select="concat(' * ',$when,' ',$who)"/> + + <!-- this is for the version information --> + <xsl:if test="@n"> + <xsl:text> </xsl:text> + <xsl:value-of select="concat('ver. ',@n)"/> + </xsl:if> + <xsl:text>:
</xsl:text> + <xsl:apply-templates mode="changelog"/> + + </xsl:template> + + <!-- we pull these in separately --> + <xsl:template mode="changelog" match="tei:*[1][local-name() = 'date']"/> + <xsl:template mode="changelog" match="tei:name[1]"/> + + <xsl:template mode="changelog" match="text()[string-length(normalize-space()) > 0]"> + <xsl:variable name="stuff"> + <xsl:choose> + <xsl:when test="substring(.,1,2)=': '"> + <xsl:value-of select="substring-after(.,': ')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="."/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="concat(' ',normalize-space($stuff))"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="3"/> + </xsl:call-template> + </xsl:template> + + <!-- this is a horribly unreadable template that should definitely be rewritten --> +<!-- if the <change> element has all three attrs: @n, @who and @when set, do not process <head> --> + <xsl:template match="tei:list" mode="changelog"> + <xsl:variable name="indent" select="count(ancestor-or-self::tei:list)*3"/> + <xsl:if test="tei:head and not(string-length(ancestor::tei:change[1]/@n) > 0 and + string-length(ancestor::tei:change[1]/@who) > 0 and + string-length(ancestor::tei:change[1]/@when) > 0)"> + <xsl:call-template name="format"> + <xsl:with-param name="txt" select="concat(' ',normalize-space(tei:head))"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="$indent"/> + </xsl:call-template> + <!--<xsl:text>
</xsl:text>--> + </xsl:if> + <xsl:for-each select="tei:item"> + <xsl:variable name="item-content"> + <xsl:choose> + <xsl:when test="tei:list"> + <xsl:apply-templates select="tei:list/preceding-sibling::tei:*|text()"/> + <!-- this is obviously a kludge: I assume that a nested <list/> is always the last element in an <item/> --> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="tei:*|text()"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:call-template name="format"> + <xsl:with-param name="txt" + select="concat(substring(' ', 1, $indent),'* ',normalize-space($item-content))"/> + <xsl:with-param name="width" select="$width"/> + <xsl:with-param name="start" select="$indent+2"/> + </xsl:call-template> + <!--<xsl:text>
</xsl:text>--> + <xsl:if test="tei:list"> + <xsl:apply-templates select="tei:list"/> + </xsl:if> + </xsl:for-each> + </xsl:template> + <!-- added by Denis on 2015 0708 --> + <xsl:template match="tei:tagsDecl"/> + <xsl:template match="tei:langUsage"/> + +</xsl:stylesheet> |
