Revision 2398 tmp/org.txm.oriflamms.rcp/groovy/org/txm/macro/oriflamms/prepare/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</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:apply-templates select="tei:revisionDesc"/>
116
        </xsl:otherwise>
117
      </xsl:choose>
118
    </xsl:copy>
119
  </xsl:template>
120
  
121
  <xsl:template match="tei:encodingDesc">
122
    <xsl:copy>
123
      <xsl:apply-templates select="@*"/>
124
      <xsl:choose>
125
        <xsl:when test="child::tei:editorialDecl">
126
          <xsl:apply-templates/>
127
        </xsl:when>
128
        <xsl:otherwise>
129
          <xsl:apply-templates/>
130
            <editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
131
              <xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
132
            </editorialDecl>
133
        </xsl:otherwise>
134
      </xsl:choose>
135
    </xsl:copy>
136
  </xsl:template>
137
  
138
  <xsl:template match="tei:editorialDecl">
139
    <xsl:copy>
140
      <xsl:apply-templates select="@*"/>
141
      <xsl:apply-templates/>
142
      <xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
143
    </xsl:copy>
144
  </xsl:template>
145
  
146
  <xsl:template match="tei:supplied">
147
    <gap reason="supplied" xmlns="http://www.tei-c.org/ns/1.0"><xsl:comment><xsl:copy-of select="."></xsl:copy-of></xsl:comment></gap>
148
  </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 -->
149 39

  
150
<xsl:template match="tei:w|tei:pc|tei:seg[@type='wp']|tei:seg[@type='deleted']">
151
  <xsl:copy>
152
    <xsl:apply-templates select="@*"/>
153
    <xsl:for-each select="child::node()">
154
      <xsl:choose>
155
        <xsl:when test="self::tei:choice and $exclude-no-alignable='yes'">
156
          <xsl:apply-templates select="tei:abbr|tei:orig|tei:sic"/>
157
        </xsl:when>
158
        <xsl:when test="self::text()">
159
          <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
160
        </xsl:when>
161
        <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
162
      </xsl:choose>
163
    </xsl:for-each>
164
  </xsl:copy>
165
</xsl:template>
166 40

  
167
  <xsl:template match="tei:orig|tei:sic">
168
    <xsl:copy>
169
      <xsl:apply-templates select="@*"/>
170
      <xsl:choose>
171
        <xsl:when test="ancestor::tei:w|ancestor::tei:pc">
172
          <xsl:for-each select="child::node()">
173
            <xsl:choose>
174
              <xsl:when test="self::text() and not(ancestor::*[@ana='ori:align-no'])">
175
                <xsl:if test="matches(.,'\S')"><xsl:call-template name="tokenise-chars"/></xsl:if>
176
              </xsl:when>
177
              <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
178
            </xsl:choose>
179
          </xsl:for-each>
180
        </xsl:when>
181
        <xsl:otherwise><xsl:apply-templates/></xsl:otherwise>
182
      </xsl:choose>
183
    </xsl:copy>
184
  </xsl:template>
185
  
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)"/> -->
186 50

  
187
  <xsl:template match="tei:abbr">
188
    <xsl:choose>
189
      <xsl:when test="matches(.,'\P{M}')">
190
        <xsl:copy>
191
          <xsl:apply-templates select="@*"/>
192
          <xsl:choose>
193
            <xsl:when test="ancestor::tei:w">
194
              <xsl:for-each select="child::node()">
195
                <xsl:choose>
196
                  <xsl:when test="self::text()">
197
                    <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
198
                  </xsl:when>
199
                  <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
200
                </xsl:choose>
201
              </xsl:for-each>
202
            </xsl:when>
203
            <xsl:otherwise><xsl:apply-templates/></xsl:otherwise>
204
          </xsl:choose>
205
        </xsl:copy>        
206
      </xsl:when>
207
      <xsl:otherwise><!-- on supprime les abréviations consistant uniquement de caractères modifieurs --></xsl:otherwise>
208
    </xsl:choose>
209
  </xsl:template>
210
  
211
  
212
  <xsl:template match="tei:g">
213
    <xsl:choose>
214
      <xsl:when test="ancestor::*[@ana='ori:align-no']">
215
        <xsl:copy-of select="."/>
216
      </xsl:when>
217
      <xsl:otherwise>
218
        <c xmlns="http://www.tei-c.org/ns/1.0">
219
          <xsl:if test="matches(@type,'initiale?|lettrine')">
220
            <xsl:attribute name="type">initiale</xsl:attribute>
221
          </xsl:if>
222
          <xsl:copy-of select="."/>
223
        </c>
224
      </xsl:otherwise>
225
    </xsl:choose>
226
  </xsl:template>
227
  
228
  <xsl:template match="tei:c">
229
    <xsl:choose>
230
      <xsl:when test="ancestor::*[@ana='ori:align-no'] or ancestor::tei:expan[parent::tei:choice]">
231
        <xsl:copy-of select="child::node()"/>
232
      </xsl:when>
233
      <xsl:otherwise>
234
        <xsl:copy-of select="."></xsl:copy-of>
235
      </xsl:otherwise>
236
    </xsl:choose>
237
  </xsl:template>
238
  
239
  <xsl:template match="tei:am">
240
    <xsl:choose>
241
      <xsl:when test="matches(.,'\P{M}')">
242
        <!-- \p{M} est la classe unicode de caractères combinants => \P{M} = tout sauf combinant -->
243
        <c xmlns="http://www.tei-c.org/ns/1.0" type="am">
244
          <xsl:apply-templates select="@*"/>
245
          <xsl:apply-templates/>
246
        </c>        
247
      </xsl:when>
248
    </xsl:choose>
249
  </xsl:template>
250
  
251
  
252
  <xsl:template match="*[@ana='ori:align-no']">
253
    <xsl:choose>
254
      <xsl:when test="$exclude-no-alignable='yes'">
255
        <xsl:comment><xsl:value-of select="."/></xsl:comment>
256
      </xsl:when>
257
      <xsl:otherwise>
258
        <!--<xsl:copy-of select="."/>-->
259
        <xsl:copy>
260
          <xsl:apply-templates select="@*|node()"/>
261
        </xsl:copy>
262
      </xsl:otherwise>
263
    </xsl:choose>
264
  </xsl:template>
265
  
266
  <xsl:template match="tei:ex[not(ancestor-or-self::*[@ana='ori:align-no']) and not(parent::tei:expan/parent::tei:choice/tei:abbr)]">
267
    <xsl:choose>
268
      <xsl:when test="$exclude-no-alignable='yes'">
269
        <xsl:choose>
270
          <xsl:when test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
271
            <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>
272
          </xsl:when>
273
          <xsl:otherwise><xsl:comment><xsl:copy-of select="."/></xsl:comment></xsl:otherwise>
274
        </xsl:choose>
275
      </xsl:when>
276
      <xsl:otherwise>
277
        <choice xmlns="http://www.tei-c.org/ns/1.0">
278
          <abbr xmlns="http://www.tei-c.org/ns/1.0">
279
            <xsl:choose>
280
              <xsl:when test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
281
                <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>
282
              </xsl:when>
283
              <xsl:otherwise/>
284
            </xsl:choose>
285
          </abbr>
286
          <expan  xmlns="http://www.tei-c.org/ns/1.0">
287
            <xsl:copy-of select="."/>
288
          </expan>
289
        </choice>
290
      </xsl:otherwise>
291
    </xsl:choose>
292
  </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> -->
293 59

  
294
<xsl:template name="abbreviate">
295
  <xsl:choose>
296
    <xsl:when test="matches(.,'^(cum|com|con)$','i')">&#xA76F;</xsl:when>
297
    <xsl:when test="matches(.,'^et$','i')">&#x204A;</xsl:when>
298
    <xsl:when test="matches(.,'^est$','i')">&#x223B;</xsl:when>
299
    <xsl:when test="matches(.,'^us$','i')">&#xA770;</xsl:when>
300
    <xsl:otherwise>¤</xsl:otherwise>
301
  </xsl:choose>
302
</xsl:template>
60
	<xsl:param name="exclude-no-alignable">
61
		no
62
	</xsl:param>
303 63

  
304
  <!--<xsl:template match="tei:ex[parent::tei:expan/parent::tei:choice/tei:abbr and not(ancestor-or-self::*[@ana='ori:align-no'])]">
305
    <xsl:copy-of select="."/>
306
  </xsl:template>-->
307
  
308
  <xsl:template match="tei:expan[parent::tei:choice/tei:abbr and not(ancestor-or-self::*[@ana='ori:align-no'])]">
309
    <xsl:copy-of select="."/>
310
  </xsl:template>
311 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>
312 72

  
313
  <xsl:template match="tei:w//tei:hi[matches(@rend,'suscrit|enclavé')]">
314
    <!-- les lettres suscrites et enclavées sont regroupées avec le caractère précédent -->
315
  </xsl:template>
316
  
317
  <xsl:template match="tei:w//tei:hi[matches(@rend,'ligature|fusionnées')]">
318
    <xsl:choose>
319
      <xsl:when test="descendant::*">
320
        <xsl:copy>
321
          <xsl:apply-templates select="@*"/>
322
          <xsl:for-each select="child::node()">
323
            <xsl:choose>
324
              <xsl:when test="self::text()">
325
                <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
326
              </xsl:when>
327
              <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
328
            </xsl:choose>
329
          </xsl:for-each>
330
        </xsl:copy>
331
      </xsl:when>
332
      <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>
333
    </xsl:choose>    
334
  </xsl:template>
335
  
336
  <xsl:template match="tei:w//tei:hi[matches(@rend,'lettre majuscule')]">
337
    <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>
338
  </xsl:template>
339
  
340
  <xsl:template match="tei:w//tei:hi[matches(@rend,'initiale?|lettrine')]">
341
    <xsl:choose>
342
      <xsl:when test="tei:choice/tei:abbr and tei:choice/tei:expan">
343
        <choice xmlns="http://www.tei-c.org/ns/1.0">
344
          <abbr xmlns="http://www.tei-c.org/ns/1.0">
345
            <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>
346
          </abbr>
347
          <xsl:copy-of select="descendant::tei:expan"/>
348
        </choice>
349
      </xsl:when>
350
      <xsl:otherwise>
351
        <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>
352
      </xsl:otherwise>
353
    </xsl:choose>
354
  </xsl:template>
355
  
356
  <xsl:template match="tei:w//tei:hi[matches(@rend,'lettres allongées|red|sup|highlight')]">
357
    <xsl:copy>
358
      <xsl:apply-templates select="@*"/>
359
      <xsl:attribute name="rend"><xsl:value-of select="replace(@rend,' ','_')"/></xsl:attribute>
360
      <xsl:for-each select="child::node()">
361
        <xsl:choose>
362
          <xsl:when test="self::text()">
363
            <xsl:if test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])"><xsl:call-template name="tokenise-chars"/></xsl:if>
364
          </xsl:when>
365
          <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
366
        </xsl:choose>
367
      </xsl:for-each>
368
    </xsl:copy>
369
  </xsl:template>
370
  
371
  <xsl:template match="*[ancestor::tei:w and not(ancestor-or-self::*[@ana='ori:align-no'])]" priority="-0.1">
372
    <xsl:copy>
373
      <xsl:apply-templates select="@*"/>
374
      <xsl:for-each select="child::node()">
375
        <xsl:choose>
376
          <xsl:when test="self::tei:choice and $exclude-no-alignable='yes'">
377
            <xsl:apply-templates select="tei:abbr|tei:orig|tei:sic"/>
378
          </xsl:when>          
379
          <xsl:when test="self::text()">
380
            <xsl:if test="matches(.,'\S')"><xsl:call-template name="tokenise-chars"/></xsl:if>
381
          </xsl:when>
382
          <xsl:otherwise><xsl:apply-templates select="."/></xsl:otherwise>
383
        </xsl:choose>
384
      </xsl:for-each>
385
    </xsl:copy>
386
  </xsl:template>
387
  
388
  <xsl:template match="tei:choice[ancestor::tei:w and matches(tei:abbr,'^\p{M}+$')]" priority="1">
389
    <xsl:comment>abréviation déplacée : <xsl:copy-of select="."/></xsl:comment>
390
  </xsl:template>
391
  
392
  <xsl:template name="tokenise-chars">
393
    
394
    <xsl:variable name="following-am">
395
      <xsl:if test="following-sibling::node()[1][self::tei:abbr] and not(matches(following-sibling::node()[1][self::tei:abbr],'\P{M}'))">
396
        <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="following-sibling::tei:abbr[1]"/></g>
397
      </xsl:if>
398
      <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}'))">
399
        <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="following::tei:abbr[1]"/></g>
400
      </xsl:if>
401
      <xsl:if test="following-sibling::node()[1][self::tei:am] and not(matches(following-sibling::node()[1][self::tei:am],'\P{M}'))">
402
        <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="following-sibling::tei:am[1]"/></g>
403
      </xsl:if>
404
      <xsl:if test="following-sibling::node()[1][self::tei:hi[@rend='suscrit']]">
405
        <g xmlns="http://www.tei-c.org/ns/1.0" type="suscrit"><xsl:value-of select="following-sibling::tei:hi[1]"/></g>
406
      </xsl:if>
407
      <xsl:if test="following-sibling::node()[1][self::tei:hi[@rend='enclavé']]">
408
        <g xmlns="http://www.tei-c.org/ns/1.0" type="enclavé"><xsl:value-of select="following-sibling::tei:hi[1]"/></g>
409
      </xsl:if>
410
    </xsl:variable>
411
    
412
    <xsl:variable name="following-expan">
413
      <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')">
414
        <expan xmlns="http://www.tei-c.org/ns/1.0">
415
          <xsl:value-of select="substring(.,string-length(.))"/>
416
          <xsl:apply-templates select="following-sibling::tei:choice[1]/tei:expan[1]/node()"/>
417
        </expan>
418
      </xsl:if>
419
    </xsl:variable>
420
    
421
    <xsl:choose>
422
      <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</p>
81
	</xsl:param>
82

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

  
85
	<xsl:template match="tei:teiHeader">
86
		<xsl:copy>
87
			<xsl:apply-templates select="@*" />
88
			<xsl:choose>
89
				<xsl:when test="child::tei:encodingDesc">
90
					<xsl:apply-templates />
91
				</xsl:when>
92
				<xsl:otherwise>
93
					<xsl:apply-templates
94
						select="tei:fileDesc|tei:profileDesc" />
95
					<encodingDesc xmlns="http://www.tei-c.org/ns/1.0">
96
						<editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
97
							<xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
98
						</editorialDecl>
99
					</encodingDesc>
100
					<xsl:apply-templates select="tei:revisionDesc" />
101
				</xsl:otherwise>
102
			</xsl:choose>
103
		</xsl:copy>
104
	</xsl:template>
105

  
106
	<xsl:template match="tei:encodingDesc">
107
		<xsl:copy>
108
			<xsl:apply-templates select="@*" />
109
			<xsl:choose>
110
				<xsl:when test="child::tei:editorialDecl">
111
					<xsl:apply-templates />
112
				</xsl:when>
113
				<xsl:otherwise>
114
					<xsl:apply-templates />
115
					<editorialDecl xmlns="http://www.tei-c.org/ns/1.0">
116
						<xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
117
					</editorialDecl>
118
				</xsl:otherwise>
119
			</xsl:choose>
120
		</xsl:copy>
121
	</xsl:template>
122

  
123
	<xsl:template match="tei:editorialDecl">
124
		<xsl:copy>
125
			<xsl:apply-templates select="@*" />
126
			<xsl:apply-templates />
127
			<xsl:copy-of select="$editorialDeclPatch"></xsl:copy-of>
128
		</xsl:copy>
129
	</xsl:template>
130

  
131
	<xsl:template match="tei:supplied">
132
		<gap reason="supplied" xmlns="http://www.tei-c.org/ns/1.0">
133
			<xsl:comment>
134
				<xsl:copy-of select="."></xsl:copy-of>
135
			</xsl:comment>
136
		</gap>
137
	</xsl:template>
138

  
139
	<xsl:template
140
		match="tei:w|tei:pc|tei:seg[@type='wp']|tei:seg[@type='deleted']">
141
		<xsl:copy>
142
			<xsl:apply-templates select="@*" />
143
			<xsl:for-each select="child::node()">
144
				<xsl:choose>
145
					<xsl:when
146
						test="self::tei:choice and $exclude-no-alignable='yes'">
147
						<xsl:apply-templates
148
							select="tei:abbr|tei:orig|tei:sic" />
149
					</xsl:when>
150
					<xsl:when test="self::text()">
151
						<xsl:if
152
							test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
153
							<xsl:call-template name="tokenise-chars" />
154
						</xsl:if>
155
					</xsl:when>
156
					<xsl:otherwise>
157
						<xsl:apply-templates select="." />
158
					</xsl:otherwise>
159
				</xsl:choose>
160
			</xsl:for-each>
161
		</xsl:copy>
162
	</xsl:template>
163

  
164
	<xsl:template match="tei:orig|tei:sic">
165
		<xsl:copy>
166
			<xsl:apply-templates select="@*" />
167
			<xsl:choose>
168
				<xsl:when test="ancestor::tei:w|ancestor::tei:pc">
169
					<xsl:for-each select="child::node()">
170
						<xsl:choose>
171
							<xsl:when
172
								test="self::text() and not(ancestor::*[@ana='ori:align-no'])">
173
								<xsl:if test="matches(.,'\S')">
174
									<xsl:call-template name="tokenise-chars" />
175
								</xsl:if>
176
							</xsl:when>
177
							<xsl:otherwise>
178
								<xsl:apply-templates select="." />
179
							</xsl:otherwise>
180
						</xsl:choose>
181
					</xsl:for-each>
182
				</xsl:when>
183
				<xsl:otherwise>
184
					<xsl:apply-templates />
185
				</xsl:otherwise>
186
			</xsl:choose>
187
		</xsl:copy>
188
	</xsl:template>
189

  
190

  
191
	<xsl:template match="tei:abbr">
192
		<xsl:choose>
193
			<xsl:when test="matches(.,'\P{M}')">
194
				<xsl:copy>
195
					<xsl:apply-templates select="@*" />
196
					<xsl:choose>
197
						<xsl:when test="ancestor::tei:w">
198
							<xsl:for-each select="child::node()">
199
								<xsl:choose>
200
									<xsl:when test="self::text()">
201
										<xsl:if
202
											test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
203
											<xsl:call-template name="tokenise-chars" />
204
										</xsl:if>
205
									</xsl:when>
206
									<xsl:otherwise>
207
										<xsl:apply-templates select="." />
208
									</xsl:otherwise>
209
								</xsl:choose>
210
							</xsl:for-each>
211
						</xsl:when>
212
						<xsl:otherwise>
213
							<xsl:apply-templates />
214
						</xsl:otherwise>
215
					</xsl:choose>
216
				</xsl:copy>
217
			</xsl:when>
218
			<xsl:otherwise><!-- on supprime les abréviations consistant uniquement 
219
					de caractères modifieurs -->
220
			</xsl:otherwise>
221
		</xsl:choose>
222
	</xsl:template>
223

  
224

  
225
	<xsl:template match="tei:g">
226
		<xsl:choose>
227
			<xsl:when test="ancestor::*[@ana='ori:align-no']">
228
				<xsl:copy-of select="." />
229
			</xsl:when>
230
			<xsl:otherwise>
231
				<c xmlns="http://www.tei-c.org/ns/1.0">
232
					<xsl:if test="matches(@type,'initiale?|lettrine')">
233
						<xsl:attribute name="type">initiale</xsl:attribute>
234
					</xsl:if>
235
					<xsl:copy-of select="." />
236
				</c>
237
			</xsl:otherwise>
238
		</xsl:choose>
239
	</xsl:template>
240

  
241
	<xsl:template match="tei:c">
242
		<xsl:choose>
243
			<xsl:when
244
				test="ancestor::*[@ana='ori:align-no'] or ancestor::tei:expan[parent::tei:choice]">
245
				<xsl:copy-of select="child::node()" />
246
			</xsl:when>
247
			<xsl:otherwise>
248
				<xsl:copy-of select="."></xsl:copy-of>
249
			</xsl:otherwise>
250
		</xsl:choose>
251
	</xsl:template>
252

  
253
	<xsl:template match="tei:am">
254
		<xsl:choose>
255
			<xsl:when test="matches(.,'\P{M}')">
256
				<!-- \p{M} est la classe unicode de caractères combinants => \P{M} = 
257
					tout sauf combinant -->
258
				<c xmlns="http://www.tei-c.org/ns/1.0" type="am">
259
					<xsl:apply-templates select="@*" />
260
					<xsl:apply-templates />
261
				</c>
262
			</xsl:when>
263
		</xsl:choose>
264
	</xsl:template>
265

  
266

  
267
	<xsl:template match="*[@ana='ori:align-no']">
268
		<xsl:choose>
269
			<xsl:when test="$exclude-no-alignable='yes'">
270
				<xsl:comment>
271
					<xsl:value-of select="." />
272
				</xsl:comment>
273
			</xsl:when>
274
			<xsl:otherwise>
275
				<!--<xsl:copy-of select="."/> -->
276
				<xsl:copy>
277
					<xsl:apply-templates select="@*|node()" />
278
				</xsl:copy>
279
			</xsl:otherwise>
280
		</xsl:choose>
281
	</xsl:template>
282

  
283
	<xsl:template
284
		match="tei:ex[not(ancestor-or-self::*[@ana='ori:align-no']) and not(parent::tei:expan/parent::tei:choice/tei:abbr)]">
285
		<xsl:choose>
286
			<xsl:when test="$exclude-no-alignable='yes'">
287
				<xsl:choose>
288
					<xsl:when
289
						test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
290
						<c xmlns="http://www.tei-c.org/ns/1.0">
291
							<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
292
								<xsl:call-template name="abbreviate" />
293
							</g>
294
						</c>
295
					</xsl:when>
296
					<xsl:otherwise>
297
						<xsl:comment>
298
							<xsl:copy-of select="." />
299
						</xsl:comment>
300
					</xsl:otherwise>
301
				</xsl:choose>
302
			</xsl:when>
303
			<xsl:otherwise>
304
				<choice xmlns="http://www.tei-c.org/ns/1.0">
305
					<abbr xmlns="http://www.tei-c.org/ns/1.0">
306
						<xsl:choose>
307
							<xsl:when
308
								test="matches(.,'^(et|cum|co[mn]|est|ur|us)$','i')">
309
								<c xmlns="http://www.tei-c.org/ns/1.0">
310
									<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
311
										<xsl:call-template name="abbreviate" />
312
									</g>
313
								</c>
314
							</xsl:when>
315
							<xsl:otherwise />
316
						</xsl:choose>
317
					</abbr>
318
					<expan xmlns="http://www.tei-c.org/ns/1.0">
319
						<xsl:copy-of select="." />
320
					</expan>
321
				</choice>
322
			</xsl:otherwise>
323
		</xsl:choose>
324
	</xsl:template>
325

  
326
	<xsl:template name="abbreviate">
327
		<xsl:choose>
328
			<xsl:when test="matches(.,'^(cum|com|con)$','i')">
329
				&#xA76F;
330
			</xsl:when>
331
			<xsl:when test="matches(.,'^et$','i')">
332
				&#x204A;
333
			</xsl:when>
334
			<xsl:when test="matches(.,'^est$','i')">
335
				&#x223B;
336
			</xsl:when>
337
			<xsl:when test="matches(.,'^us$','i')">
338
				&#xA770;
339
			</xsl:when>
340
			<xsl:otherwise>
341
				¤
342
			</xsl:otherwise>
343
		</xsl:choose>
344
	</xsl:template>
345

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

  
350
	<xsl:template
351
		match="tei:expan[parent::tei:choice/tei:abbr and not(ancestor-or-self::*[@ana='ori:align-no'])]">
352
		<xsl:copy-of select="." />
353
	</xsl:template>
354

  
355

  
356
	<xsl:template
357
		match="tei:w//tei:hi[matches(@rend,'suscrit|enclavé')]">
358
		<!-- les lettres suscrites et enclavées sont regroupées avec le caractère 
359
			précédent -->
360
	</xsl:template>
361

  
362
	<xsl:template
363
		match="tei:w//tei:hi[matches(@rend,'ligature|fusionnées')]">
364
		<xsl:choose>
365
			<xsl:when test="descendant::*">
366
				<xsl:copy>
367
					<xsl:apply-templates select="@*" />
368
					<xsl:for-each select="child::node()">
369
						<xsl:choose>
370
							<xsl:when test="self::text()">
371
								<xsl:if
372
									test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
373
									<xsl:call-template name="tokenise-chars" />
374
								</xsl:if>
375
							</xsl:when>
376
							<xsl:otherwise>
377
								<xsl:apply-templates select="." />
378
							</xsl:otherwise>
379
						</xsl:choose>
380
					</xsl:for-each>
381
				</xsl:copy>
382
			</xsl:when>
383
			<xsl:otherwise>
384
				<c xmlns="http://www.tei-c.org/ns/1.0">
385
					<g xmlns="http://www.tei-c.org/ns/1.0" type="{@rend}">
386
						<xsl:apply-templates />
387
					</g>
388
				</c>
389
			</xsl:otherwise>
390
		</xsl:choose>
391
	</xsl:template>
392

  
393
	<xsl:template
394
		match="tei:w//tei:hi[matches(@rend,'lettre majuscule')]">
395
		<c xmlns="http://www.tei-c.org/ns/1.0">
396
			<g xmlns="http://www.tei-c.org/ns/1.0"
397
				type="{replace(@rend,' ','_')}">
398
				<xsl:apply-templates />
399
			</g>
400
		</c>
401
	</xsl:template>
402

  
403
	<xsl:template
404
		match="tei:w//tei:hi[matches(@rend,'initiale?|lettrine')]">
405
		<xsl:choose>
406
			<xsl:when
407
				test="tei:choice/tei:abbr and tei:choice/tei:expan">
408
				<choice xmlns="http://www.tei-c.org/ns/1.0">
409
					<abbr xmlns="http://www.tei-c.org/ns/1.0">
410
						<c type="initiale" xmlns="http://www.tei-c.org/ns/1.0">
411
							<g xmlns="http://www.tei-c.org/ns/1.0" type="initiale">
412
								<xsl:value-of select="tei:choice/tei:abbr" />
413
							</g>
414
						</c>
415
					</abbr>
416
					<xsl:copy-of select="descendant::tei:expan" />
417
				</choice>
418
			</xsl:when>
419
			<xsl:otherwise>
420
				<c type="initiale" xmlns="http://www.tei-c.org/ns/1.0">
421
					<g xmlns="http://www.tei-c.org/ns/1.0" type="initiale">
422
						<xsl:apply-templates />
423
					</g>
424
				</c>
425
			</xsl:otherwise>
426
		</xsl:choose>
427
	</xsl:template>
428

  
429
	<xsl:template
430
		match="tei:w//tei:hi[matches(@rend,'lettres allongées|red|sup|highlight')]">
431
		<xsl:copy>
432
			<xsl:apply-templates select="@*" />
433
			<xsl:attribute name="rend"><xsl:value-of
434
				select="replace(@rend,' ','_')" /></xsl:attribute>
435
			<xsl:for-each select="child::node()">
436
				<xsl:choose>
437
					<xsl:when test="self::text()">
438
						<xsl:if
439
							test="matches(.,'\S') and not(ancestor::*[@ana='ori:align-no'])">
440
							<xsl:call-template name="tokenise-chars" />
441
						</xsl:if>
442
					</xsl:when>
443
					<xsl:otherwise>
444
						<xsl:apply-templates select="." />
445
					</xsl:otherwise>
446
				</xsl:choose>
447
			</xsl:for-each>
448
		</xsl:copy>
449
	</xsl:template>
450

  
451
	<xsl:template
452
		match="*[ancestor::tei:w and not(ancestor-or-self::*[@ana='ori:align-no'])]"
453
		priority="-0.1">
454
		<xsl:copy>
455
			<xsl:apply-templates select="@*" />
456
			<xsl:for-each select="child::node()">
457
				<xsl:choose>
458
					<xsl:when
459
						test="self::tei:choice and $exclude-no-alignable='yes'">
460
						<xsl:apply-templates
461
							select="tei:abbr|tei:orig|tei:sic" />
462
					</xsl:when>
463
					<xsl:when test="self::text()">
464
						<xsl:if test="matches(.,'\S')">
465
							<xsl:call-template name="tokenise-chars" />
466
						</xsl:if>
467
					</xsl:when>
468
					<xsl:otherwise>
469
						<xsl:apply-templates select="." />
470
					</xsl:otherwise>
471
				</xsl:choose>
472
			</xsl:for-each>
473
		</xsl:copy>
474
	</xsl:template>
475

  
476
	<xsl:template
477
		match="tei:choice[ancestor::tei:w and matches(tei:abbr,'^\p{M}+$')]"
478
		priority="1">
479
		<xsl:comment>
480
			abréviation déplacée :
481
			<xsl:copy-of select="." />
482
		</xsl:comment>
483
	</xsl:template>
484

  
485
	<xsl:template name="tokenise-chars">
486

  
487
		<xsl:variable name="following-am">
488
			<xsl:if
489
				test="following-sibling::node()[1][self::tei:abbr] and not(matches(following-sibling::node()[1][self::tei:abbr],'\P{M}'))">
490
				<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
491
					<xsl:value-of select="following-sibling::tei:abbr[1]" />
492
				</g>
493
			</xsl:if>
494
			<xsl:if
495
				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}'))">
496
				<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
497
					<xsl:value-of select="following::tei:abbr[1]" />
498
				</g>
499
			</xsl:if>
500
			<xsl:if
501
				test="following-sibling::node()[1][self::tei:am] and not(matches(following-sibling::node()[1][self::tei:am],'\P{M}'))">
502
				<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
503
					<xsl:value-of select="following-sibling::tei:am[1]" />
504
				</g>
505
			</xsl:if>
506
			<xsl:if
507
				test="following-sibling::node()[1][self::tei:hi[@rend='suscrit']]">
508
				<g xmlns="http://www.tei-c.org/ns/1.0" type="suscrit">
509
					<xsl:value-of select="following-sibling::tei:hi[1]" />
510
				</g>
511
			</xsl:if>
512
			<xsl:if
513
				test="following-sibling::node()[1][self::tei:hi[@rend='enclavé']]">
514
				<g xmlns="http://www.tei-c.org/ns/1.0" type="enclavé">
515
					<xsl:value-of select="following-sibling::tei:hi[1]" />
516
				</g>
517
			</xsl:if>
518
		</xsl:variable>
519

  
520
		<xsl:variable name="following-expan">
521
			<xsl:if
522
				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')">
523
				<expan xmlns="http://www.tei-c.org/ns/1.0">
524
					<xsl:value-of select="substring(.,string-length(.))" />
525
					<xsl:apply-templates
526
						select="following-sibling::tei:choice[1]/tei:expan[1]/node()" />
527
				</expan>
528
			</xsl:if>
529
		</xsl:variable>
530

  
531
		<xsl:choose>
532
			<xsl:when
533
				test="ancestor::*[@ana='ori:align-no'] 
423 534
        or ancestor::tei:expan[parent::tei:choice]
424 535
        or ancestor::tei:corr[parent::tei:choice]
425 536
        or ancestor::tei:reg[parent::tei:choice]">
426
        <xsl:copy-of select="."/>
427
      </xsl:when>
428
      <xsl:otherwise>
429
        <xsl:analyze-string select="." regex="^(.*)(\P{{M}})(\p{{M}}*)">
430
          <xsl:matching-substring>
431
            <xsl:variable name="chars"><xsl:value-of select="replace(regex-group(1),'[''’]','')"/></xsl:variable>
432
            <xsl:variable name="last-char"><xsl:value-of select="replace(regex-group(2),'[''’]','')"/></xsl:variable>
433
            <xsl:variable name="last-comb-mark"><xsl:value-of select="regex-group(3)"/></xsl:variable>
434
            <xsl:analyze-string select="$chars" regex="(\P{{M}})(\p{{M}}*)">
435
              <xsl:matching-substring>
436
                <c xmlns="http://www.tei-c.org/ns/1.0">
437
                  <xsl:value-of select="regex-group(1)"/>
438
                  <xsl:if test="matches(regex-group(2),'.+')">
439
                    <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="regex-group(2)"/></g>
440
                  </xsl:if>
441
                </c>
442
              </xsl:matching-substring>
443
            </xsl:analyze-string>
444
            <xsl:if test="matches($last-char,'.+')">
445
              <xsl:choose>
446
                <xsl:when test="matches($following-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 xmlns="http://www.tei-c.org/ns/1.0">
450
                        <xsl:value-of select="$last-char"/>
451
                        <xsl:if test="matches($last-comb-mark,'.+')">
452
                          <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="$last-comb-mark"/></g>
453
                        </xsl:if>
454
                        <xsl:copy-of select="$following-am"/>
455
                      </c>
456
                    </abbr>
457
                    <xsl:copy-of select="$following-expan"/>
458
                  </choice>
459
                </xsl:when>
460
                <xsl:otherwise>
461
                  <c xmlns="http://www.tei-c.org/ns/1.0">
462
                    <xsl:value-of select="$last-char"/>
463
                    <xsl:if test="matches($last-comb-mark,'.+')">
464
                      <g xmlns="http://www.tei-c.org/ns/1.0" type="am"><xsl:value-of select="$last-comb-mark"/></g>
465
                    </xsl:if>
466
                    <xsl:copy-of select="$following-am"/>
467
                  </c>
468
                </xsl:otherwise>
469
              </xsl:choose>
470
            </xsl:if>
471
          </xsl:matching-substring>
472
        </xsl:analyze-string>
473
      </xsl:otherwise>
474
    </xsl:choose>
475
    
476
  </xsl:template>
537
				<xsl:copy-of select="." />
538
			</xsl:when>
539
			<xsl:otherwise>
540
				<xsl:analyze-string select="."
541
					regex="^(.*)(\P{{M}})(\p{{M}}*)">
542
					<xsl:matching-substring>
543
						<xsl:variable name="chars">
544
							<xsl:value-of
545
								select="replace(regex-group(1),'[''’]','')" />
546
						</xsl:variable>
547
						<xsl:variable name="last-char">
548
							<xsl:value-of
549
								select="replace(regex-group(2),'[''’]','')" />
550
						</xsl:variable>
551
						<xsl:variable name="last-comb-mark">
552
							<xsl:value-of select="regex-group(3)" />
553
						</xsl:variable>
554
						<xsl:analyze-string select="$chars"
555
							regex="(\P{{M}})(\p{{M}}*)">
556
							<xsl:matching-substring>
557
								<c xmlns="http://www.tei-c.org/ns/1.0">
558
									<xsl:value-of select="regex-group(1)" />
559
									<xsl:if test="matches(regex-group(2),'.+')">
560
										<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
561
											<xsl:value-of select="regex-group(2)" />
562
										</g>
563
									</xsl:if>
564
								</c>
565
							</xsl:matching-substring>
566
						</xsl:analyze-string>
567
						<xsl:if test="matches($last-char,'.+')">
568
							<xsl:choose>
569
								<xsl:when test="matches($following-expan,'.+')">
570
									<choice xmlns="http://www.tei-c.org/ns/1.0">
571
										<abbr xmlns="http://www.tei-c.org/ns/1.0">
572
											<c xmlns="http://www.tei-c.org/ns/1.0">
573
												<xsl:value-of select="$last-char" />
574
												<xsl:if test="matches($last-comb-mark,'.+')">
575
													<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
576
														<xsl:value-of select="$last-comb-mark" />
577
													</g>
578
												</xsl:if>
579
												<xsl:copy-of select="$following-am" />
580
											</c>
581
										</abbr>
582
										<xsl:copy-of select="$following-expan" />
583
									</choice>
584
								</xsl:when>
585
								<xsl:otherwise>
586
									<c xmlns="http://www.tei-c.org/ns/1.0">
587
										<xsl:value-of select="$last-char" />
588
										<xsl:if test="matches($last-comb-mark,'.+')">
589
											<g xmlns="http://www.tei-c.org/ns/1.0" type="am">
590
												<xsl:value-of select="$last-comb-mark" />
591
											</g>
592
										</xsl:if>
593
										<xsl:copy-of select="$following-am" />
594
									</c>
595
								</xsl:otherwise>
596
							</xsl:choose>
597
						</xsl:if>
598
					</xsl:matching-substring>
599
				</xsl:analyze-string>
600
			</xsl:otherwise>
601
		</xsl:choose>
477 602

  
603
	</xsl:template>
478 604

  
605

  
479 606
</xsl:stylesheet>

Also available in: Unified diff