Revision 2398 tmp/org.txm.oriflamms.rcp/res/oriflamms-tokenize-chars-1-tag.xsl

oriflamms-tokenize-chars-1-tag.xsl (revision 2398)
1 1
<?xml version="1.0"?>
2
<xsl:stylesheet xmlns:edate="http://exslt.org/dates-and-times"
3
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0"
4
  xmlns:xd="http://www.pnp-software.com/XSLTdoc"
5
  xmlns:txm="http://textometrie.org/1.0"
6
  exclude-result-prefixes="tei edate xd txm" version="2.0">
2
<xsl:stylesheet
3
	xmlns:edate="http://exslt.org/dates-and-times"
4
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5
	xmlns:tei="http://www.tei-c.org/ns/1.0"
6
	xmlns:xd="http://www.pnp-software.com/XSLTdoc"
7
	xmlns:txm="http://textometrie.org/1.0"
8
	exclude-result-prefixes="tei edate xd txm" version="2.0">
7 9

  
8
  <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no" indent="no"/>
9
  
10
  <xd:doc type="stylesheet">
11
    <xd:short>
12
      Cette feuille permet de tokéniser un document TEI-Oriflamms au
13
      niveau de caractère.
14
    </xd:short>
15
    <xd:detail>
16
      This stylesheet is free software; you can redistribute it and/or
17
      modify it under the terms of the GNU Lesser General Public
18
      License as published by the Free Software Foundation; either
19
      version 3 of the License, or (at your option) any later version.
20
      
21
      This stylesheet is distributed in the hope that it will be useful,
22
      but WITHOUT ANY WARRANTY; without even the implied warranty of
23
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24
      Lesser General Public License for more details.
25
      
26
      You should have received a copy of GNU Lesser Public License with
27
      this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
28
    </xd:detail>
29
    <xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
30
    <xd:copyright>2015, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
31
  </xd:doc>
32
  
33
  <!--<xsl:param name="spacing-am">&#xA76F;|&#x204A;|&#xF158;|&#x223B;|&#x035B;|&#xF1C8;|&#x1DD1;|&#xF153;|&#xA770;</xsl:param>-->
34
  <!-- on utilise la classe unicode 'combibning mark' \p{M} pour repérer les diacritiques -->
35
  
36
  
37
<!--  <xsl:variable name="filename">
38
    <xsl:analyze-string select="document-uri(.)" regex="^(.*)/([^/]+)\.[^/]+$">
39
      <xsl:matching-substring>
40
        <xsl:value-of select="regex-group(2)"/>
41
      </xsl:matching-substring>
42
    </xsl:analyze-string>
43
  </xsl:variable>
44
  
45
  <xsl:variable name="filedir">
46
    <xsl:analyze-string select="document-uri(.)" regex="^(.*)/([^/]+)\.[^/]+$">
47
      <xsl:matching-substring>
48
        <xsl:value-of select="regex-group(1)"/>
49
      </xsl:matching-substring>
50
    </xsl:analyze-string>
51
  </xsl:variable>
52
  
53
  <xsl:variable name="filenameresult">
54
    <xsl:value-of select="replace($filename,'(-ori)?-w$','')"/>
55
  </xsl:variable>
56
  
57
  
58
  <xsl:variable name="path">
59
    <xsl:value-of select="concat($filedir,'/',$filenameresult,'-w/?select=*.xml;recurse=yes;on-error=warning')"/>
60
  </xsl:variable>
61
  
62
  <xsl:variable name="files" select="collection($path)"/>
63
  -->
64
  
65
<!--  <xsl:template match="/">
66
    <root>Processing files from <xsl:value-of select="$filedir/$filenameresult"/>-w directory. Result files saved in <xsl:value-of select="$filedir/$filenameresult"/>-c-temp directory.</root>
67
    <xsl:for-each select="$files">
68
      <xsl:variable name="filename2">
69
        <xsl:analyze-string select="document-uri(.)" regex="^(.*)/([^/]+)$">
70
          <xsl:matching-substring>
71
            <xsl:value-of select="regex-group(2)"></xsl:value-of>
72
          </xsl:matching-substring>
73
        </xsl:analyze-string></xsl:variable>
74
      <xsl:result-document href="{$filedir}/{$filenameresult}-c-temp/{$filename2}">
75
        <xsl:apply-templates/>
76
      </xsl:result-document>
77
    </xsl:for-each>
78
  </xsl:template>
79
-->  
10
	<xsl:output method="xml" encoding="utf-8"
11
		omit-xml-declaration="no" indent="no" />
80 12

  
81
<xsl:param name="exclude-no-alignable">no</xsl:param>
13
	<xd:doc type="stylesheet">
14
		<xd:short>
15
			Cette feuille permet de tokéniser un document TEI-Oriflamms au
16
			niveau de caractère.
17
		</xd:short>
18
		<xd:detail>
19
			This stylesheet is free software; you can redistribute it and/or
20
			modify it under the terms of the GNU Lesser General Public
21
			License as published by the Free Software Foundation; either
22
			version 3 of the License, or (at your option) any later version.
82 23

  
24
			This stylesheet is distributed in the hope that it will be useful,
25
			but WITHOUT ANY WARRANTY; without even the implied warranty of
26
			MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
27
			Lesser General Public License for more details.
83 28

  
84
  <xsl:template match="*">
85
        <xsl:copy>
86
          <xsl:apply-templates select="@*"/>
87
          <xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
88
        </xsl:copy>
89
  </xsl:template>
29
			You should have received a copy of GNU Lesser Public License with
30
			this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
31
		</xd:detail>
32
		<xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
33
		<xd:copyright>2015, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
34
	</xd:doc>
90 35

  
91
  <xsl:template match="@*|comment()|processing-instruction()|text()">
92
    <xsl:copy/>
93
  </xsl:template>
94
  
95
  <xsl:param name="editorialDeclPatch" as="element()">
96
    <p xmlns="http://www.tei-c.org/ns/1.0">Fichier tokénisé au niveau des caractères dans le cadre du projet ANR Oriflamms (http://oriflamms.hypotheses.org) par le logiciel TXM (http://textometrie.ens-lyon.fr)</p>
97
  </xsl:param>
98
  
99
  <!-- Ob ajoute les infos sur le traitement du fichier dans teiHeader -->
100
  
101
  <xsl:template match="/*/tei:teiHeader">
102
    <xsl:copy>
103
      <xsl:apply-templates select="@*"/>
104
      <xsl:choose>
105
        <xsl:when test="child::tei:encodingDesc">
106
          <xsl:apply-templates/>
107
        </xsl:when>
108
        <xsl:otherwise>
109
          <xsl:apply-templates select="tei:fileDesc|tei:profileDesc"/>
110
          <encodingDesc xmlns="http://www.tei-c.org/ns/1.0">
111
            <editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
112
              <xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
113
            </editorialDecl>
114
          </encodingDesc>
115
          <xsl:choose>
116
            <xsl:when test="not(tei:revisionDesc)">
117
              <revisionDesc xmlns="http://www.tei-c.org/ns/1.0">
118
                <xsl:call-template name="change-txm"></xsl:call-template>
119
              </revisionDesc>
120
            </xsl:when>
121
            <xsl:otherwise>
122
              <xsl:apply-templates select="tei:revisionDesc"/>
123
            </xsl:otherwise>
124
          </xsl:choose>
125
        </xsl:otherwise>
126
      </xsl:choose>
127
    </xsl:copy>
128
  </xsl:template>
129
  
130
  <xsl:template match="/*/tei:teiHeader/tei:fileDesc/tei:titleStmt">
131
    <xsl:copy>
132
      <xsl:apply-templates select="@*|node()"/>
133
      <xsl:if test="not(tei:respStmt/tei:name[@xml:id='TXM'])">
134
        <respStmt xmlns="http://www.tei-c.org/ns/1.0">
135
          <resp xmlns="http://www.tei-c.org/ns/1.0">Tokénisation des mots et/ou des caractères</resp>
136
          <name xmlns="http://www.tei-c.org/ns/1.0" xml:id="TXM">Logiciel TXM (http://textometrie.ens-lyon.fr)</name>
137
        </respStmt>
138
      </xsl:if>
139
    </xsl:copy>
140
  </xsl:template>
141
  
142
  <xsl:template match="/*/tei:teiHeader/tei:encodingDesc">
143
    <xsl:copy>
144
      <xsl:apply-templates select="@*"/>
145
      <xsl:choose>
146
        <xsl:when test="child::tei:editorialDecl">
147
          <xsl:apply-templates/>
148
        </xsl:when>
149
        <xsl:otherwise>
150
          <xsl:apply-templates/>
151
            <editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
152
              <xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
153
            </editorialDecl>
154
        </xsl:otherwise>
155
      </xsl:choose>
156
    </xsl:copy>
157
  </xsl:template>
158
  
159
  <xsl:template match="tei:editorialDecl">
160
    <xsl:copy>
161
      <xsl:apply-templates select="@*"/>
162
      <xsl:apply-templates/>
163
      <xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
164
    </xsl:copy>
165
  </xsl:template>
166
  
167
  <xsl:template match="/*/tei:teiHeader//tei:revisionDesc">
168
    <xsl:copy>
169
      <xsl:apply-templates select="@*|node()"/>
170
      <xsl:call-template name="change-txm"/>
171
    </xsl:copy>
172
  </xsl:template>
173
  
174
  <xsl:template name="change-txm">
175
    <change when="{format-date(current-date(),'[Y]-[M01]-[D01]')}" who="#TXM" xmlns="http://www.tei-c.org/ns/1.0">Tokenisation des caractères</change>
176
  </xsl:template>
177
  
178
  
179
  
180
  <xsl:template match="tei:supplied">
181
    <gap reason="supplied" xmlns="http://www.tei-c.org/ns/1.0"><xsl:comment><xsl:copy-of select="."></xsl:copy-of></xsl:comment></gap>
182
  </xsl:template>
36
	<!--<xsl:param name="spacing-am">&#xA76F;|&#x204A;|&#xF158;|&#x223B;|&#x035B;|&#xF1C8;|&#x1DD1;|&#xF153;|&#xA770;</xsl:param> -->
37
	<!-- on utilise la classe unicode 'combibning mark' \p{M} pour repérer les 
38
		diacritiques -->
183 39

  
184
<xsl:template match="tei:w|tei:pc|tei:seg[@type='wp']|tei:seg[@type='deleted']">
185
  <xsl:copy>
186
    <xsl:apply-templates select="@*"/>
187
    <xsl:for-each select="child::node()">
188
      <xsl:choose>
189
        <xsl:when test="self::tei:choice and $exclude-no-alignable='yes'">
190
          <xsl:apply-templates select="tei:abbr|tei:orig|tei:sic"/>
191
        </xsl:when>
192
        <xsl:when test="self::text()">
193
          <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
194
        </xsl:when>
195
        <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
196
      </xsl:choose>
197
    </xsl:for-each>
198
  </xsl:copy>
199
</xsl:template>
200 40

  
201
  <xsl:template match="tei:orig|tei:sic">
202
    <xsl:copy>
203
      <xsl:apply-templates select="@*"/>
204
      <xsl:choose>
205
        <xsl:when test="ancestor::tei:w|ancestor::tei:pc">
206
          <xsl:for-each select="child::node()">
207
            <xsl:choose>
208
              <xsl:when test="self::text() and not(ancestor::*[@ana='ori:align-no'])">
209
                <xsl:if test="matches(.,'\S')"><xsl:call-template name="tokenise-chars"/></xsl:if>
210
              </xsl:when>
211
              <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
212
            </xsl:choose>
213
          </xsl:for-each>
214
        </xsl:when>
215
        <xsl:otherwise><xsl:apply-templates/></xsl:otherwise>
216
      </xsl:choose>
217
    </xsl:copy>
218
  </xsl:template>
219
  
41
	<!-- <xsl:variable name="filename"> <xsl:analyze-string select="document-uri(.)" 
42
		regex="^(.*)/([^/]+)\.[^/]+$"> <xsl:matching-substring> <xsl:value-of select="regex-group(2)"/> 
43
		</xsl:matching-substring> </xsl:analyze-string> </xsl:variable> <xsl:variable 
44
		name="filedir"> <xsl:analyze-string select="document-uri(.)" regex="^(.*)/([^/]+)\.[^/]+$"> 
45
		<xsl:matching-substring> <xsl:value-of select="regex-group(1)"/> </xsl:matching-substring> 
46
		</xsl:analyze-string> </xsl:variable> <xsl:variable name="filenameresult"> 
47
		<xsl:value-of select="replace($filename,'(-ori)?-w$','')"/> </xsl:variable> 
48
		<xsl:variable name="path"> <xsl:value-of select="concat($filedir,'/',$filenameresult,'-w/?select=*.xml;recurse=yes;on-error=warning')"/> 
49
		</xsl:variable> <xsl:variable name="files" select="collection($path)"/> -->
220 50

  
221
  <xsl:template match="tei:abbr">
222
    <xsl:choose>
223
      <xsl:when test="matches(.,'\P{M}')">
224
        <xsl:copy>
225
          <xsl:apply-templates select="@*"/>
226
          <xsl:choose>
227
            <xsl:when test="ancestor::tei:w">
228
              <xsl:for-each select="child::node()">
229
                <xsl:choose>
230
                  <xsl:when test="self::text()">
231
                    <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
232
                  </xsl:when>
233
                  <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
234
                </xsl:choose>
235
              </xsl:for-each>
236
            </xsl:when>
237
            <xsl:otherwise><xsl:apply-templates/></xsl:otherwise>
238
          </xsl:choose>
239
        </xsl:copy>        
240
      </xsl:when>
241
      <xsl:otherwise><!-- on supprime les abréviations consistant uniquement de caractères modifieurs --></xsl:otherwise>
242
    </xsl:choose>
243
  </xsl:template>
244
  
245
  
246
  <xsl:template match="tei:g">
247
    <xsl:choose>
248
      <xsl:when test="ancestor::*[@ana='ori:align-no']">
249
        <xsl:copy-of select="."/>
250
      </xsl:when>
251
      <xsl:otherwise>
252
        <c xmlns="http://www.tei-c.org/ns/1.0">
253
          <xsl:if test="matches(@type,'initiale?|lettrine')">
254
            <xsl:attribute name="type">initiale</xsl:attribute>
255
          </xsl:if>
256
          <xsl:copy-of select="."/>
257
        </c>
258
      </xsl:otherwise>
259
    </xsl:choose>
260
  </xsl:template>
261
  
262
  <xsl:template match="tei:c">
263
    <xsl:choose>
264
      <xsl:when test="ancestor::*[@ana='ori:align-no'] or ancestor::tei:expan[parent::tei:choice]">
265
        <xsl:copy-of select="child::node()"/>
266
      </xsl:when>
267
      <xsl:otherwise>
268
        <xsl:copy-of select="."></xsl:copy-of>
269
      </xsl:otherwise>
270
    </xsl:choose>
271
  </xsl:template>
272
  
273
  <xsl:template match="tei:am">
274
    <xsl:choose>
275
      <xsl:when test="matches(.,'\P{M}')">
276
        <!-- \p{M} est la classe unicode de caractères combinants => \P{M} = tout sauf combinant -->
277
        <c xmlns="http://www.tei-c.org/ns/1.0" type="am">
278
          <xsl:apply-templates select="@*"/>
279
          <xsl:apply-templates/>
280
        </c>        
281
      </xsl:when>
282
    </xsl:choose>
283
  </xsl:template>
284
  
285
  
286
  <xsl:template match="*[@ana='ori:align-no']">
287
    <xsl:choose>
288
      <xsl:when test="$exclude-no-alignable='yes'">
289
        <xsl:comment><xsl:value-of select="."/></xsl:comment>
290
      </xsl:when>
291
      <xsl:otherwise>
292
        <!--<xsl:copy-of select="."/>-->
293
        <xsl:copy>
294
          <xsl:apply-templates select="@*|node()"/>
295
        </xsl:copy>
296
      </xsl:otherwise>
297
    </xsl:choose>
298
  </xsl:template>
299
  
300
  <xsl:template match="tei:ex[not(ancestor-or-self::*[@ana='ori:align-no']) and not(parent::tei:expan/parent::tei:choice/tei:abbr)]">
301
    <xsl:choose>
302
      <xsl:when test="$exclude-no-alignable='yes'">
303
        <xsl:choose>
304
          <xsl:when test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
305
            <c xmlns="http://www.tei-c.org/ns/1.0"><g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:call-template name="abbreviate"/></g></c>
306
          </xsl:when>
307
          <xsl:otherwise><xsl:comment><xsl:copy-of select="."/></xsl:comment></xsl:otherwise>
308
        </xsl:choose>
309
      </xsl:when>
310
      <xsl:otherwise>
311
        <choice xmlns="http://www.tei-c.org/ns/1.0">
312
          <abbr xmlns="http://www.tei-c.org/ns/1.0">
313
            <xsl:choose>
314
              <xsl:when test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
315
                <c xmlns="http://www.tei-c.org/ns/1.0"><g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:call-template name="abbreviate"/></g></c>
316
              </xsl:when>
317
              <xsl:otherwise/>
318
            </xsl:choose>
319
          </abbr>
320
          <expan  xmlns="http://www.tei-c.org/ns/1.0">
321
            <xsl:copy-of select="."/>
322
          </expan>
323
        </choice>
324
      </xsl:otherwise>
325
    </xsl:choose>
326
  </xsl:template>
51
	<!-- <xsl:template match="/"> <root>Processing files from <xsl:value-of 
52
		select="$filedir/$filenameresult"/>-w directory. Result files saved in <xsl:value-of 
53
		select="$filedir/$filenameresult"/>-c-temp directory.</root> <xsl:for-each 
54
		select="$files"> <xsl:variable name="filename2"> <xsl:analyze-string select="document-uri(.)" 
55
		regex="^(.*)/([^/]+)$"> <xsl:matching-substring> <xsl:value-of select="regex-group(2)"></xsl:value-of> 
56
		</xsl:matching-substring> </xsl:analyze-string></xsl:variable> <xsl:result-document 
57
		href="{$filedir}/{$filenameresult}-c-temp/{$filename2}"> <xsl:apply-templates/> 
58
		</xsl:result-document> </xsl:for-each> </xsl:template> -->
327 59

  
328
<xsl:template name="abbreviate">
329
  <xsl:choose>
330
    <xsl:when test="matches(.,'^(cum|com|con)$','i')">&#xA76F;</xsl:when>
331
    <xsl:when test="matches(.,'^et$','i')">&#x204A;</xsl:when>
332
    <xsl:when test="matches(.,'^est$','i')">&#x223B;</xsl:when>
333
    <xsl:when test="matches(.,'^us$','i')">&#xA770;</xsl:when>
334
    <xsl:otherwise>¤</xsl:otherwise>
335
  </xsl:choose>
336
</xsl:template>
60
	<xsl:param name="exclude-no-alignable">
61
		no
62
	</xsl:param>
337 63

  
338
  <!--<xsl:template match="tei:ex[parent::tei:expan/parent::tei:choice/tei:abbr and not(ancestor-or-self::*[@ana='ori:align-no'])]">
339
    <xsl:copy-of select="."/>
340
  </xsl:template>-->
341
  
342
  <xsl:template match="tei:expan[parent::tei:choice/tei:abbr and not(ancestor-or-self::*[@ana='ori:align-no'])]">
343
    <xsl:copy-of select="."/>
344
  </xsl:template>
345 64

  
65
	<xsl:template match="*">
66
		<xsl:copy>
67
			<xsl:apply-templates select="@*" />
68
			<xsl:apply-templates
69
				select="*|processing-instruction()|comment()|text()" />
70
		</xsl:copy>
71
	</xsl:template>
346 72

  
347
  <xsl:template match="tei:w//tei:hi[matches(@rend,'suscrit|enclavé')]">
348
    <!-- les lettres suscrites et enclavées sont regroupées avec le caractère précédent -->
349
  </xsl:template>
350
  
351
  <xsl:template match="tei:w//tei:hi[matches(@rend,'ligature|fusionnées')]">
352
    <xsl:choose>
353
      <xsl:when test="descendant::*">
354
        <xsl:copy>
355
          <xsl:apply-templates select="@*"/>
356
          <xsl:for-each select="child::node()">
357
            <xsl:choose>
358
              <xsl:when test="self::text()">
359
                <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
360
              </xsl:when>
361
              <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
362
            </xsl:choose>
363
          </xsl:for-each>
364
        </xsl:copy>
365
      </xsl:when>
366
      <xsl:otherwise><c xmlns="http://www.tei-c.org/ns/1.0"><g xmlns="http://www.tei-c.org/ns/1.0" type="{@rend}"><xsl:apply-templates/></g></c></xsl:otherwise>
367
    </xsl:choose>    
368
  </xsl:template>
369
  
370
  <xsl:template match="tei:w//tei:hi[matches(@rend,'lettre majuscule')]">
371
    <c xmlns="http://www.tei-c.org/ns/1.0"><g xmlns="http://www.tei-c.org/ns/1.0" type="{replace(@rend,' ','_')}"><xsl:apply-templates/></g></c>
372
  </xsl:template>
373
  
374
  <xsl:template match="tei:w//tei:hi[matches(@rend,'initiale?|lettrine')]">
375
    <xsl:choose>
376
      <xsl:when test="tei:choice/tei:abbr and tei:choice/tei:expan">
377
        <choice xmlns="http://www.tei-c.org/ns/1.0">
378
          <abbr xmlns="http://www.tei-c.org/ns/1.0">
379
            <c type="initiale" xmlns="http://www.tei-c.org/ns/1.0"><g xmlns="http://www.tei-c.org/ns/1.0" type="initiale"><xsl:value-of select="tei:choice/tei:abbr"/></g></c>
380
          </abbr>
381
          <xsl:copy-of select="descendant::tei:expan"/>
382
        </choice>
383
      </xsl:when>
384
      <xsl:otherwise>
385
        <c type="initiale" xmlns="http://www.tei-c.org/ns/1.0"><g xmlns="http://www.tei-c.org/ns/1.0" type="initiale"><xsl:apply-templates/></g></c>
386
      </xsl:otherwise>
387
    </xsl:choose>
388
  </xsl:template>
389
  
390
  <xsl:template match="tei:w//tei:hi[matches(@rend,'lettres allongées|red|sup|highlight')]">
391
    <xsl:copy>
392
      <xsl:apply-templates select="@*"/>
393
      <xsl:attribute name="rend"><xsl:value-of select="replace(@rend,' ','_')"/></xsl:attribute>
394
      <xsl:for-each select="child::node()">
395
        <xsl:choose>
396
          <xsl:when test="self::text()">
397
            <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
398
          </xsl:when>
399
          <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
400
        </xsl:choose>
401
      </xsl:for-each>
402
    </xsl:copy>
403
  </xsl:template>
404
  
405
  <xsl:template match="*[ancestor::tei:w and not(ancestor-or-self::*[@ana='ori:align-no'])]" priority="-0.1">
406
    <xsl:copy>
407
      <xsl:apply-templates select="@*"/>
408
      <xsl:for-each select="child::node()">
409
        <xsl:choose>
410
          <xsl:when test="self::tei:choice and $exclude-no-alignable='yes'">
411
            <xsl:apply-templates select="tei:abbr|tei:orig|tei:sic"/>
412
          </xsl:when>          
413
          <xsl:when test="self::text()">
414
            <xsl:if test="matches(.,'\S')"><xsl:call-template name="tokenise-chars"/></xsl:if>
415
          </xsl:when>
416
          <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
417
        </xsl:choose>
418
      </xsl:for-each>
419
    </xsl:copy>
420
  </xsl:template>
421
  
422
  <xsl:template match="tei:choice[ancestor::tei:w and matches(tei:abbr,'^\p{M}+$')]" priority="1">
423
    <xsl:comment>abréviation déplacée : <xsl:copy-of select="."/></xsl:comment>
424
  </xsl:template>
425
  
426
  <xsl:template name="tokenise-chars">
427
    
428
    <xsl:variable name="following-am">
429
      <xsl:if test="following-sibling::node()[1][self::tei:abbr] and not(matches(following-sibling::node()[1][self::tei:abbr],'\P{M}'))">
430
        <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="following-sibling::tei:abbr[1]"/></g>
431
      </xsl:if>
432
      <xsl:if test="following-sibling::node()[1][self::tei:choice[tei:abbr]] and not(matches(following-sibling::node()[1][self::tei:choice]/tei:abbr[1],'\P{M}'))">
433
        <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="following::tei:abbr[1]"/></g>
434
      </xsl:if>
435
      <xsl:if test="following-sibling::node()[1][self::tei:am] and not(matches(following-sibling::node()[1][self::tei:am],'\P{M}'))">
436
        <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="following-sibling::tei:am[1]"/></g>
437
      </xsl:if>
438
      <xsl:if test="following-sibling::node()[1][self::tei:hi[@rend='suscrit']]">
439
        <g xmlns="http://www.tei-c.org/ns/1.0" type="suscrit"><xsl:value-of select="following-sibling::tei:hi[1]"/></g>
440
      </xsl:if>
441
      <xsl:if test="following-sibling::node()[1][self::tei:hi[@rend='enclavé']]">
442
        <g xmlns="http://www.tei-c.org/ns/1.0" type="enclavé"><xsl:value-of select="following-sibling::tei:hi[1]"/></g>
443
      </xsl:if>
444
    </xsl:variable>
445
    
446
    <xsl:variable name="following-expan">
447
      <xsl:if test="following-sibling::node()[1][self::tei:choice[tei:expan]] and not(matches(following-sibling::node()[1][self::tei:choice]/tei:abbr[1],'\P{M}')) and not($exclude-no-alignable='yes')">
448
        <expan xmlns="http://www.tei-c.org/ns/1.0">
449
          <xsl:value-of select="substring(.,string-length(.))"/>
450
          <xsl:apply-templates select="following-sibling::tei:choice[1]/tei:expan[1]/node()"/>
451
        </expan>
452
      </xsl:if>
453
    </xsl:variable>
454
    
455
    <xsl:choose>
456
      <xsl:when test="ancestor::*[@ana='ori:align-no'] 
73
	<xsl:template
74
		match="@*|comment()|processing-instruction()|text()">
75
		<xsl:copy />
76
	</xsl:template>
77

  
78
	<xsl:param name="editorialDeclPatch" as="element()">
79
		<p xmlns="http://www.tei-c.org/ns/1.0">Fichier tokénisé au niveau des caractères dans le cadre du
80
			projet ANR Oriflamms (http://oriflamms.hypotheses.org) par le
81
			logiciel TXM (http://textometrie.ens-lyon.fr)</p>
82
	</xsl:param>
83

  
84
	<!-- Ob ajoute les infos sur le traitement du fichier dans teiHeader -->
85

  
86
	<xsl:template match="/*/tei:teiHeader">
87
		<xsl:copy>
88
			<xsl:apply-templates select="@*" />
89
			<xsl:choose>
90
				<xsl:when test="child::tei:encodingDesc">
91
					<xsl:apply-templates />
92
				</xsl:when>
93
				<xsl:otherwise>
94
					<xsl:apply-templates
95
						select="tei:fileDesc|tei:profileDesc" />
96
					<encodingDesc xmlns="http://www.tei-c.org/ns/1.0">
97
						<editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
98
							<xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
99
						</editorialDecl>
100
					</encodingDesc>
101
					<xsl:choose>
102
						<xsl:when test="not(tei:revisionDesc)">
103
							<revisionDesc xmlns="http://www.tei-c.org/ns/1.0">
104
								<xsl:call-template name="change-txm"></xsl:call-template>
105
							</revisionDesc>
106
						</xsl:when>
107
						<xsl:otherwise>
108
							<xsl:apply-templates
109
								select="tei:revisionDesc" />
110
						</xsl:otherwise>
111
					</xsl:choose>
112
				</xsl:otherwise>
113
			</xsl:choose>
114
		</xsl:copy>
115
	</xsl:template>
116

  
117
	<xsl:template
118
		match="/*/tei:teiHeader/tei:fileDesc/tei:titleStmt">
119
		<xsl:copy>
120
			<xsl:apply-templates select="@*|node()" />
121
			<xsl:if test="not(tei:respStmt/tei:name[@xml:id='TXM'])">
122
				<respStmt xmlns="http://www.tei-c.org/ns/1.0">
123
					<resp xmlns="http://www.tei-c.org/ns/1.0">Tokénisation des mots et/ou des caractères</resp>
124
					<name xmlns="http://www.tei-c.org/ns/1.0" xml:id="TXM">Logiciel TXM
125
						(http://textometrie.ens-lyon.fr)</name>
126
				</respStmt>
127
			</xsl:if>
128
		</xsl:copy>
129
	</xsl:template>
130

  
131
	<xsl:template match="/*/tei:teiHeader/tei:encodingDesc">
132
		<xsl:copy>
133
			<xsl:apply-templates select="@*" />
134
			<xsl:choose>
135
				<xsl:when test="child::tei:editorialDecl">
136
					<xsl:apply-templates />
137
				</xsl:when>
138
				<xsl:otherwise>
139
					<xsl:apply-templates />
140
					<editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
141
						<xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
142
					</editorialDecl>
143
				</xsl:otherwise>
144
			</xsl:choose>
145
		</xsl:copy>
146
	</xsl:template>
147

  
148
	<xsl:template match="tei:editorialDecl">
149
		<xsl:copy>
150
			<xsl:apply-templates select="@*" />
151
			<xsl:apply-templates />
152
			<xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
153
		</xsl:copy>
154
	</xsl:template>
155

  
156
	<xsl:template match="/*/tei:teiHeader//tei:revisionDesc">
157
		<xsl:copy>
158
			<xsl:apply-templates select="@*|node()" />
159
			<xsl:call-template name="change-txm" />
160
		</xsl:copy>
161
	</xsl:template>
162

  
163
	<xsl:template name="change-txm">
164
		<change when="{format-date(current-date(),'[Y]-[M01]-[D01]')}"
165
			who="#TXM" xmlns="http://www.tei-c.org/ns/1.0">Tokenisation des caractères</change>
166
	</xsl:template>
167

  
168

  
169

  
170
	<xsl:template match="tei:supplied">
171
		<gap reason="supplied" xmlns="http://www.tei-c.org/ns/1.0">
172
			<xsl:comment>
173
				<xsl:copy-of select="."></xsl:copy-of>
174
			</xsl:comment>
175
		</gap>
176
	</xsl:template>
177

  
178
	<xsl:template
179
		match="tei:w|tei:pc|tei:seg[@type='wp']|tei:seg[@type='deleted']">
180
		<xsl:copy>
181
			<xsl:apply-templates select="@*" />
182
			<xsl:for-each select="child::node()">
183
				<xsl:choose>
184
					<xsl:when
185
						test="self::tei:choice and $exclude-no-alignable='yes'">
186
						<xsl:apply-templates
187
							select="tei:abbr|tei:orig|tei:sic" />
188
					</xsl:when>
189
					<xsl:when test="self::text()">
190
						<xsl:if
191
							test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
192
							<xsl:call-template name="tokenise-chars" />
193
						</xsl:if>
194
					</xsl:when>
195
					<xsl:otherwise>
196
						<xsl:apply-templates select="." />
197
					</xsl:otherwise>
198
				</xsl:choose>
199
			</xsl:for-each>
200
		</xsl:copy>
201
	</xsl:template>
202

  
203
	<xsl:template match="tei:orig|tei:sic">
204
		<xsl:copy>
205
			<xsl:apply-templates select="@*" />
206
			<xsl:choose>
207
				<xsl:when test="ancestor::tei:w|ancestor::tei:pc">
208
					<xsl:for-each select="child::node()">
209
						<xsl:choose>
210
							<xsl:when
211
								test="self::text() and not(ancestor::*[@ana='ori:align-no'])">
212
								<xsl:if test="matches(.,'\S')">
213
									<xsl:call-template name="tokenise-chars" />
214
								</xsl:if>
215
							</xsl:when>
216
							<xsl:otherwise>
217
								<xsl:apply-templates select="." />
218
							</xsl:otherwise>
219
						</xsl:choose>
220
					</xsl:for-each>
221
				</xsl:when>
222
				<xsl:otherwise>
223
					<xsl:apply-templates />
224
				</xsl:otherwise>
225
			</xsl:choose>
226
		</xsl:copy>
227
	</xsl:template>
228

  
229

  
230
	<xsl:template match="tei:abbr">
231
		<xsl:choose>
232
			<xsl:when test="matches(.,'\P{M}')">
233
				<xsl:copy>
234
					<xsl:apply-templates select="@*" />
235
					<xsl:choose>
236
						<xsl:when test="ancestor::tei:w">
237
							<xsl:for-each select="child::node()">
238
								<xsl:choose>
239
									<xsl:when test="self::text()">
240
										<xsl:if
241
											test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
242
											<xsl:call-template name="tokenise-chars" />
243
										</xsl:if>
244
									</xsl:when>
245
									<xsl:otherwise>
246
										<xsl:apply-templates select="." />
247
									</xsl:otherwise>
248
								</xsl:choose>
249
							</xsl:for-each>
250
						</xsl:when>
251
						<xsl:otherwise>
252
							<xsl:apply-templates />
253
						</xsl:otherwise>
254
					</xsl:choose>
255
				</xsl:copy>
256
			</xsl:when>
257
			<xsl:otherwise><!-- on supprime les abréviations consistant uniquement 
258
					de caractères modifieurs -->
259
			</xsl:otherwise>
260
		</xsl:choose>
261
	</xsl:template>
262

  
263

  
264
	<xsl:template match="tei:g">
265
		<xsl:choose>
266
			<xsl:when test="ancestor::*[@ana='ori:align-no']">
267
				<xsl:copy-of select="." />
268
			</xsl:when>
269
			<xsl:otherwise>
270
				<c xmlns="http://www.tei-c.org/ns/1.0">
271
					<xsl:if test="matches(@type,'initiale?|lettrine')">
272
						<xsl:attribute name="type">initiale</xsl:attribute>
273
					</xsl:if>
274
					<xsl:copy-of select="." />
275
				</c>
276
			</xsl:otherwise>
277
		</xsl:choose>
278
	</xsl:template>
279

  
280
	<xsl:template match="tei:c">
281
		<xsl:choose>
282
			<xsl:when
283
				test="ancestor::*[@ana='ori:align-no'] or ancestor::tei:expan[parent::tei:choice]">
284
				<xsl:copy-of select="child::node()" />
285
			</xsl:when>
286
			<xsl:otherwise>
287
				<xsl:copy-of select="."></xsl:copy-of>
288
			</xsl:otherwise>
289
		</xsl:choose>
290
	</xsl:template>
291

  
292
	<xsl:template match="tei:am">
293
		<xsl:choose>
294
			<xsl:when test="matches(.,'\P{M}')">
295
				<!-- \p{M} est la classe unicode de caractères combinants => \P{M} = 
296
					tout sauf combinant -->
297
				<c xmlns="http://www.tei-c.org/ns/1.0" type="am">
298
					<xsl:apply-templates select="@*" />
299
					<xsl:apply-templates />
300
				</c>
301
			</xsl:when>
302
		</xsl:choose>
303
	</xsl:template>
304

  
305

  
306
	<xsl:template match="*[@ana='ori:align-no']">
307
		<xsl:choose>
308
			<xsl:when test="$exclude-no-alignable='yes'">
309
				<xsl:comment>
310
					<xsl:value-of select="." />
311
				</xsl:comment>
312
			</xsl:when>
313
			<xsl:otherwise>
314
				<!--<xsl:copy-of select="."/> -->
315
				<xsl:copy>
316
					<xsl:apply-templates select="@*|node()" />
317
				</xsl:copy>
318
			</xsl:otherwise>
319
		</xsl:choose>
320
	</xsl:template>
321

  
322
	<xsl:template
323
		match="tei:ex[not(ancestor-or-self::*[@ana='ori:align-no']) and not(parent::tei:expan/parent::tei:choice/tei:abbr)]">
324
		<xsl:choose>
325
			<xsl:when test="$exclude-no-alignable='yes'">
326
				<xsl:choose>
327
					<xsl:when
328
						test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
329
						<c xmlns="http://www.tei-c.org/ns/1.0">
330
							<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
331
								<xsl:call-template name="abbreviate" />
332
							</g>
333
						</c>
334
					</xsl:when>
335
					<xsl:otherwise>
336
						<xsl:comment>
337
							<xsl:copy-of select="." />
338
						</xsl:comment>
339
					</xsl:otherwise>
340
				</xsl:choose>
341
			</xsl:when>
342
			<xsl:otherwise>
343
				<choice xmlns="http://www.tei-c.org/ns/1.0">
344
					<abbr xmlns="http://www.tei-c.org/ns/1.0">
345
						<xsl:choose>
346
							<xsl:when
347
								test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
348
								<c xmlns="http://www.tei-c.org/ns/1.0">
349
									<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
350
										<xsl:call-template name="abbreviate" />
351
									</g>
352
								</c>
353
							</xsl:when>
354
							<xsl:otherwise />
355
						</xsl:choose>
356
					</abbr>
357
					<expan xmlns="http://www.tei-c.org/ns/1.0">
358
						<xsl:copy-of select="." />
359
					</expan>
360
				</choice>
361
			</xsl:otherwise>
362
		</xsl:choose>
363
	</xsl:template>
364

  
365
	<xsl:template name="abbreviate">
366
		<xsl:choose>
367
			<xsl:when test="matches(.,'^(cum|com|con)$','i')">
368
				&#xA76F;
369
			</xsl:when>
370
			<xsl:when test="matches(.,'^et$','i')">
371
				&#x204A;
372
			</xsl:when>
373
			<xsl:when test="matches(.,'^est$','i')">
374
				&#x223B;
375
			</xsl:when>
376
			<xsl:when test="matches(.,'^us$','i')">
377
				&#xA770;
378
			</xsl:when>
379
			<xsl:otherwise>
380
				¤
381
			</xsl:otherwise>
382
		</xsl:choose>
383
	</xsl:template>
384

  
385
	<!--<xsl:template match="tei:ex[parent::tei:expan/parent::tei:choice/tei:abbr 
386
		and not(ancestor-or-self::*[@ana='ori:align-no'])]"> <xsl:copy-of select="."/> 
387
		</xsl:template> -->
388

  
389
	<xsl:template
390
		match="tei:expan[parent::tei:choice/tei:abbr and not(ancestor-or-self::*[@ana='ori:align-no'])]">
391
		<xsl:copy-of select="." />
392
	</xsl:template>
393

  
394

  
395
	<xsl:template
396
		match="tei:w//tei:hi[matches(@rend,'suscrit|enclavé')]">
397
		<!-- les lettres suscrites et enclavées sont regroupées avec le caractère 
398
			précédent -->
399
	</xsl:template>
400

  
401
	<xsl:template
402
		match="tei:w//tei:hi[matches(@rend,'ligature|fusionnées')]">
403
		<xsl:choose>
404
			<xsl:when test="descendant::*">
405
				<xsl:copy>
406
					<xsl:apply-templates select="@*" />
407
					<xsl:for-each select="child::node()">
408
						<xsl:choose>
409
							<xsl:when test="self::text()">
410
								<xsl:if
411
									test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
412
									<xsl:call-template name="tokenise-chars" />
413
								</xsl:if>
414
							</xsl:when>
415
							<xsl:otherwise>
416
								<xsl:apply-templates select="." />
417
							</xsl:otherwise>
418
						</xsl:choose>
419
					</xsl:for-each>
420
				</xsl:copy>
421
			</xsl:when>
422
			<xsl:otherwise>
423
				<c xmlns="http://www.tei-c.org/ns/1.0">
424
					<g xmlns="http://www.tei-c.org/ns/1.0" type="{@rend}">
425
						<xsl:apply-templates />
426
					</g>
427
				</c>
428
			</xsl:otherwise>
429
		</xsl:choose>
430
	</xsl:template>
431

  
432
	<xsl:template
433
		match="tei:w//tei:hi[matches(@rend,'lettre majuscule')]">
434
		<c xmlns="http://www.tei-c.org/ns/1.0">
435
			<g xmlns="http://www.tei-c.org/ns/1.0"
436
				type="{replace(@rend,' ','_')}">
437
				<xsl:apply-templates />
438
			</g>
439
		</c>
440
	</xsl:template>
441

  
442
	<xsl:template
443
		match="tei:w//tei:hi[matches(@rend,'initiale?|lettrine')]">
444
		<xsl:choose>
445
			<xsl:when
446
				test="tei:choice/tei:abbr and tei:choice/tei:expan">
447
				<choice xmlns="http://www.tei-c.org/ns/1.0">
448
					<abbr xmlns="http://www.tei-c.org/ns/1.0">
449
						<c type="initiale" xmlns="http://www.tei-c.org/ns/1.0">
450
							<g xmlns="http://www.tei-c.org/ns/1.0" type="initiale">
451
								<xsl:value-of select="tei:choice/tei:abbr" />
452
							</g>
453
						</c>
454
					</abbr>
455
					<xsl:copy-of select="descendant::tei:expan" />
456
				</choice>
457
			</xsl:when>
458
			<xsl:otherwise>
459
				<c type="initiale" xmlns="http://www.tei-c.org/ns/1.0">
460
					<g xmlns="http://www.tei-c.org/ns/1.0" type="initiale">
461
						<xsl:apply-templates />
462
					</g>
463
				</c>
464
			</xsl:otherwise>
465
		</xsl:choose>
466
	</xsl:template>
467

  
468
	<xsl:template
469
		match="tei:w//tei:hi[matches(@rend,'lettres allongées|red|sup|highlight')]">
470
		<xsl:copy>
471
			<xsl:apply-templates select="@*" />
472
			<xsl:attribute name="rend"><xsl:value-of
473
				select="replace(@rend,' ','_')" /></xsl:attribute>
474
			<xsl:for-each select="child::node()">
475
				<xsl:choose>
476
					<xsl:when test="self::text()">
477
						<xsl:if
478
							test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
479
							<xsl:call-template name="tokenise-chars" />
480
						</xsl:if>
481
					</xsl:when>
482
					<xsl:otherwise>
483
						<xsl:apply-templates select="." />
484
					</xsl:otherwise>
485
				</xsl:choose>
486
			</xsl:for-each>
487
		</xsl:copy>
488
	</xsl:template>
489

  
490
	<xsl:template
491
		match="*[ancestor::tei:w and not(ancestor-or-self::*[@ana='ori:align-no'])]"
492
		priority="-0.1">
493
		<xsl:copy>
494
			<xsl:apply-templates select="@*" />
495
			<xsl:for-each select="child::node()">
496
				<xsl:choose>
497
					<xsl:when
498
						test="self::tei:choice and $exclude-no-alignable='yes'">
499
						<xsl:apply-templates
500
							select="tei:abbr|tei:orig|tei:sic" />
501
					</xsl:when>
502
					<xsl:when test="self::text()">
503
						<xsl:if test="matches(.,'\S')">
504
							<xsl:call-template name="tokenise-chars" />
505
						</xsl:if>
506
					</xsl:when>
507
					<xsl:otherwise>
508
						<xsl:apply-templates select="." />
509
					</xsl:otherwise>
510
				</xsl:choose>
511
			</xsl:for-each>
512
		</xsl:copy>
513
	</xsl:template>
514

  
515
	<xsl:template
516
		match="tei:choice[ancestor::tei:w and matches(tei:abbr,'^\p{M}+$')]"
517
		priority="1">
518
		<xsl:comment>
519
			abréviation déplacée :
520
			<xsl:copy-of select="." />
521
		</xsl:comment>
522
	</xsl:template>
523

  
524
	<xsl:template name="tokenise-chars">
525

  
526
		<xsl:variable name="following-am">
527
			<xsl:if
528
				test="following-sibling::node()[1][self::tei:abbr] and not(matches(following-sibling::node()[1][self::tei:abbr],'\P{M}'))">
529
				<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
530
					<xsl:value-of select="following-sibling::tei:abbr[1]" />
531
				</g>
532
			</xsl:if>
533
			<xsl:if
534
				test="following-sibling::node()[1][self::tei:choice[tei:abbr]] and not(matches(following-sibling::node()[1][self::tei:choice]/tei:abbr[1],'\P{M}'))">
535
				<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
536
					<xsl:value-of select="following::tei:abbr[1]" />
537
				</g>
538
			</xsl:if>
539
			<xsl:if
540
				test="following-sibling::node()[1][self::tei:am] and not(matches(following-sibling::node()[1][self::tei:am],'\P{M}'))">
541
				<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
542
					<xsl:value-of select="following-sibling::tei:am[1]" />
543
				</g>
544
			</xsl:if>
545
			<xsl:if
546
				test="following-sibling::node()[1][self::tei:hi[@rend='suscrit']]">
547
				<g xmlns="http://www.tei-c.org/ns/1.0" type="suscrit">
548
					<xsl:value-of select="following-sibling::tei:hi[1]" />
549
				</g>
550
			</xsl:if>
551
			<xsl:if
552
				test="following-sibling::node()[1][self::tei:hi[@rend='enclavé']]">
553
				<g xmlns="http://www.tei-c.org/ns/1.0" type="enclavé">
554
					<xsl:value-of select="following-sibling::tei:hi[1]" />
555
				</g>
556
			</xsl:if>
557
		</xsl:variable>
558

  
559
		<xsl:variable name="following-expan">
560
			<xsl:if
561
				test="following-sibling::node()[1][self::tei:choice[tei:expan]] and not(matches(following-sibling::node()[1][self::tei:choice]/tei:abbr[1],'\P{M}')) and not($exclude-no-alignable='yes')">
562
				<expan xmlns="http://www.tei-c.org/ns/1.0">
563
					<xsl:value-of select="substring(.,string-length(.))" />
564
					<xsl:apply-templates
565
						select="following-sibling::tei:choice[1]/tei:expan[1]/node()" />
566
				</expan>
567
			</xsl:if>
568
		</xsl:variable>
569

  
570
		<xsl:choose>
571
			<xsl:when
572
				test="ancestor::*[@ana='ori:align-no'] 
457 573
        or ancestor::tei:expan[parent::tei:choice]
458 574
        or ancestor::tei:corr[parent::tei:choice]
459 575
        or ancestor::tei:reg[parent::tei:choice]">
460
        <xsl:copy-of select="."/>
461
      </xsl:when>
462
      <xsl:otherwise>
463
        <xsl:analyze-string select="." regex="^(.*)(\P{{M}})(\p{{M}}*)">
464
          <xsl:matching-substring>
465
            <xsl:variable name="chars"><xsl:value-of select="replace(regex-group(1),'[''’]','')"/></xsl:variable>
466
            <xsl:variable name="last-char"><xsl:value-of select="replace(regex-group(2),'[''’]','')"/></xsl:variable>
467
            <xsl:variable name="last-comb-mark"><xsl:value-of select="regex-group(3)"/></xsl:variable>
468
            <xsl:analyze-string select="$chars" regex="(\P{{M}})(\p{{M}}*)">
469
              <xsl:matching-substring>
470
                <c xmlns="http://www.tei-c.org/ns/1.0">
471
                  <xsl:value-of select="regex-group(1)"/>
472
                  <xsl:if test="matches(regex-group(2),'.+')">
473
                    <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="regex-group(2)"/></g>
474
                  </xsl:if>
475
                </c>
476
              </xsl:matching-substring>
477
            </xsl:analyze-string>
478
            <xsl:if test="matches($last-char,'.+')">
479
              <xsl:choose>
480
                <xsl:when test="matches($following-expan,'.+')">
481
                  <choice xmlns="http://www.tei-c.org/ns/1.0">
482
                    <abbr xmlns="http://www.tei-c.org/ns/1.0">
483
                      <c xmlns="http://www.tei-c.org/ns/1.0">
484
                        <xsl:value-of select="$last-char"/>
485
                        <xsl:if test="matches($last-comb-mark,'.+')">
486
                          <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="$last-comb-mark"/></g>
487
                        </xsl:if>
488
                        <xsl:copy-of select="$following-am"/>
489
                      </c>
490
                    </abbr>
491
                    <xsl:copy-of select="$following-expan"/>
492
                  </choice>
493
                </xsl:when>
494
                <xsl:otherwise>
495
                  <c xmlns="http://www.tei-c.org/ns/1.0">
496
                    <xsl:value-of select="$last-char"/>
497
                    <xsl:if test="matches($last-comb-mark,'.+')">
498
                      <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="$last-comb-mark"/></g>
499
                    </xsl:if>
500
                    <xsl:copy-of select="$following-am"/>
501
                  </c>
502
                </xsl:otherwise>
503
              </xsl:choose>
504
            </xsl:if>
505
          </xsl:matching-substring>
506
        </xsl:analyze-string>
507
      </xsl:otherwise>
508
    </xsl:choose>
509
    
510
  </xsl:template>
576
				<xsl:copy-of select="." />
577
			</xsl:when>
578
			<xsl:otherwise>
579
				<xsl:analyze-string select="."
580
					regex="^(.*)(\P{{M}})(\p{{M}}*)">
581
					<xsl:matching-substring>
582
						<xsl:variable name="chars">
583
							<xsl:value-of
584
								select="replace(regex-group(1),'[''’]','')" />
585
						</xsl:variable>
586
						<xsl:variable name="last-char">
587
							<xsl:value-of
588
								select="replace(regex-group(2),'[''’]','')" />
589
						</xsl:variable>
590
						<xsl:variable name="last-comb-mark">
591
							<xsl:value-of select="regex-group(3)" />
592
						</xsl:variable>
593
						<xsl:analyze-string select="$chars"
594
							regex="(\P{{M}})(\p{{M}}*)">
595
							<xsl:matching-substring>
596
								<c xmlns="http://www.tei-c.org/ns/1.0">
597
									<xsl:value-of select="regex-group(1)" />
598
									<xsl:if test="matches(regex-group(2),'.+')">
599
										<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
600
											<xsl:value-of select="regex-group(2)" />
601
										</g>
602
									</xsl:if>
603
								</c>
604
							</xsl:matching-substring>
605
						</xsl:analyze-string>
606
						<xsl:if test="matches($last-char,'.+')">
607
							<xsl:choose>
608
								<xsl:when test="matches($following-expan,'.+')">
609
									<choice xmlns="http://www.tei-c.org/ns/1.0">
610
										<abbr xmlns="http://www.tei-c.org/ns/1.0">
611
											<c xmlns="http://www.tei-c.org/ns/1.0">
612
												<xsl:value-of select="$last-char" />
613
												<xsl:if test="matches($last-comb-mark,'.+')">
614
													<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
615
														<xsl:value-of select="$last-comb-mark" />
616
													</g>
617
												</xsl:if>
618
												<xsl:copy-of select="$following-am" />
619
											</c>
620
										</abbr>
621
										<xsl:copy-of select="$following-expan" />
622
									</choice>
623
								</xsl:when>
624
								<xsl:otherwise>
625
									<c xmlns="http://www.tei-c.org/ns/1.0">
626
										<xsl:value-of select="$last-char" />
627
										<xsl:if test="matches($last-comb-mark,'.+')">
628
											<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
629
												<xsl:value-of select="$last-comb-mark" />
630
											</g>
631
										</xsl:if>
632
										<xsl:copy-of select="$following-am" />
633
									</c>
634
								</xsl:otherwise>
635
							</xsl:choose>
636
						</xsl:if>
637
					</xsl:matching-substring>
638
				</xsl:analyze-string>
639
			</xsl:otherwise>
640
		</xsl:choose>
511 641

  
642
	</xsl:template>
512 643

  
644

  
513 645
</xsl:stylesheet>

Also available in: Unified diff