Statistics
| Revision:

root / tmp / org.txm.oriflamms.rcp / groovy / org / txm / macro / oriflamms / prepare / txm-front-teioriflammsc-xtz.xsl @ 2398

History | View | Annotate | Download (17.1 kB)

1
<?xml version="1.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:me="http://www.menota.org/ns/1.0"
7
	xmlns:bfm="http://bfm.ens-lsh.fr/ns/1.0"
8
	xmlns:xd="http://www.pnp-software.com/XSLTdoc"
9
	exclude-result-prefixes="tei edate bfm me" version="2.0">
10

    
11
	<xsl:output method="xml" encoding="utf-8"
12
		omit-xml-declaration="no" />
13

    
14

    
15
	<xd:doc type="stylesheet">
16
		<xd:short>
17
			Cette feuille XSLT prépare les fichiers au format TEI Oriflamms
18
			(tokénisés par mot) à l'imppportation dans TXM avec le module XTZ
19
			(étape 2 "front").
20
		</xd:short>
21
		<xd:detail>
22
			This stylesheet is free software; you can redistribute it and/or
23
			modify it under the terms of the GNU Lesser General Public
24
			License as published by the Free Software Foundation; either
25
			version 3 of the License, or (at your option) any later version.
26

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

    
32
			You should have received a copy of GNU Lesser Public License with
33
			this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
34
		</xd:detail>
35
		<xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
36
		<xd:copyright>2016, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
37
	</xd:doc>
38

    
39

    
40
	<xsl:template match="*" mode="#all">
41
		<xsl:copy>
42
			<xsl:apply-templates
43
				select="*|@*|processing-instruction()|comment()|text()"
44
				mode="#current" />
45
		</xsl:copy>
46
	</xsl:template>
47

    
48
	<xsl:template
49
		match="comment()|processing-instruction()|text()|@*">
50
		<xsl:copy>
51
			<xsl:apply-templates />
52
		</xsl:copy>
53
	</xsl:template>
54

    
55
	<xsl:template
56
		match="comment()|processing-instruction()|@*"
57
		mode="expan letters-all 
58
    letters-alignable characters-alignable">
59
		<xsl:copy>
60
			<xsl:apply-templates />
61
		</xsl:copy>
62
	</xsl:template>
63

    
64
	<xsl:variable name="filename">
65
		<xsl:analyze-string select="document-uri(.)"
66
			regex="^(.*)/([^/]+)\.xml$">
67
			<xsl:matching-substring>
68
				<xsl:value-of select="replace(regex-group(2),'-c$','')" />
69
			</xsl:matching-substring>
70
		</xsl:analyze-string>
71
	</xsl:variable>
72

    
73
	<xsl:template match="tei:facsimile" />
74

    
75
	<xsl:template match="tei:teiCorpus">
76
		<TEI xmlns="http://www.tei-c.org/ns/1.0">
77
			<text>
78
				<!-- on ajoute des attributs utiles pour la création de partitions et 
79
					de sous-corpus -->
80
				<xsl:apply-templates />
81
			</text>
82
		</TEI>
83
	</xsl:template>
84

    
85

    
86
	<xsl:template match="tei:TEI[ancestor::tei:teiCorpus]">
87
		<xsl:apply-templates />
88
	</xsl:template>
89

    
90
	<xsl:template match="tei:teiHeader">
91
		<!--<xsl:copy-of select="."/> -->
92
	</xsl:template>
93

    
94
	<xsl:template
95
		match="tei:text[not(ancestor::tei:teiCorpus)]">
96
		<xsl:element name="text"
97
			namespace="http://www.tei-c.org/ns/1.0">
98
			<!-- on ajoute des attributs utiles pour la création de partitions et 
99
				de sous-corpus -->
100
			<xsl:apply-templates select="@*" />
101
			<xsl:apply-templates />
102
		</xsl:element>
103
	</xsl:template>
104

    
105
	<xsl:template match="tei:text[ancestor::tei:teiCorpus]">
106
		<div type="text" id="{$filename}-{count(preceding::tei:text) + 1}"
107
			xmlns="http://www.tei-c.org/ns/1.0">
108
			<xsl:apply-templates select="@*|node()" />
109
		</div>
110
	</xsl:template>
111

    
112
	<xsl:template match="tei:milestone[@unit='surface']">
113
		<pb xmlns="http://www.tei-c.org/ns/1.0"
114
			n="{following::tei:pb[1]/@n}" facs="{@facs}" xml:id="{@xml:id}" />
115
	</xsl:template>
116

    
117
	<xsl:template match="tei:pb">
118
		<milestone unit="ms-page">
119
			<xsl:apply-templates select="@*" />
120
		</milestone>
121
	</xsl:template>
122

    
123
	<xsl:template match="tei:w[not(tei:seg[@type='wp'])]">
124
		<xsl:element name="w"
125
			namespace="http://www.tei-c.org/ns/1.0">
126
			<xsl:apply-templates select="@*" />
127
			<xsl:attribute name="expan"><xsl:apply-templates
128
				mode="expan" select="descendant::tei:c" /></xsl:attribute>
129
			<xsl:attribute name="letters-all"><xsl:apply-templates
130
				mode="letters-all" select="descendant::tei:c" /></xsl:attribute>
131
			<xsl:attribute name="letters-alignable"><xsl:apply-templates
132
				mode="letters-alignable" select="descendant::tei:c" /></xsl:attribute>
133
			<xsl:attribute name="characters"><xsl:apply-templates
134
				mode="characters-alignable" select="descendant::tei:c" /></xsl:attribute>
135
			<xsl:attribute name="abbr-n">
136
      <xsl:choose>
137
        <xsl:when test="descendant::tei:abbr">
138
          <xsl:value-of
139
				select="count(descendant::tei:abbr)" />
140
        </xsl:when>
141
        <xsl:when test="descendant::tei:expan">
142
          <xsl:value-of
143
				select="count(descendant::tei:expan)" />
144
        </xsl:when>
145
        <xsl:when test="descendant::tei:ex">
146
          <xsl:value-of select="count(descendant::tei:ex)" />
147
        </xsl:when>
148
        <xsl:otherwise>0</xsl:otherwise>
149
      </xsl:choose>
150
    </xsl:attribute>
151
			<xsl:attribute name="ref"><xsl:value-of
152
				select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)" /></xsl:attribute>
153
			<xsl:apply-templates />
154
		</xsl:element>
155
	</xsl:template>
156

    
157
	<xsl:template match="tei:w[tei:seg[@type='wp']]">
158
		<xsl:element name="w-lb"
159
			namespace="http://www.tei-c.org/ns/1.0">
160
			<xsl:apply-templates select="@*" />
161
			<xsl:attribute name="expan"><xsl:apply-templates
162
				mode="expan" select="descendant::tei:c" /></xsl:attribute>
163
			<xsl:attribute name="letters-all"><xsl:apply-templates
164
				mode="letters-all" select="descendant::tei:c" /></xsl:attribute>
165
			<xsl:attribute name="letters-alignable"><xsl:apply-templates
166
				mode="letters-alignable" select="descendant::tei:c" /></xsl:attribute>
167
			<xsl:attribute name="characters"><xsl:apply-templates
168
				mode="characters-alignable" select="descendant::tei:c" /></xsl:attribute>
169
			<xsl:attribute name="abbr-n">
170
        <xsl:choose>
171
          <xsl:when test="descendant::tei:abbr">
172
            <xsl:value-of
173
				select="count(descendant::tei:abbr)" />
174
          </xsl:when>
175
          <xsl:when test="descendant::tei:expan">
176
            <xsl:value-of
177
				select="count(descendant::tei:expan)" />
178
          </xsl:when>
179
          <xsl:when test="descendant::tei:ex">
180
            <xsl:value-of
181
				select="count(descendant::tei:ex)" />
182
          </xsl:when>
183
          <xsl:otherwise>0</xsl:otherwise>
184
        </xsl:choose>
185
      </xsl:attribute>
186
			<xsl:attribute name="ref"><xsl:value-of
187
				select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)" /></xsl:attribute>
188
			<xsl:apply-templates />
189
		</xsl:element>
190
	</xsl:template>
191

    
192
	<xsl:template match="tei:seg[@type='wp']">
193
		<xsl:element name="w"
194
			namespace="http://www.tei-c.org/ns/1.0">
195
			<xsl:apply-templates select="@*" />
196
			<xsl:attribute name="expan"><xsl:apply-templates
197
				mode="expan" select="descendant::tei:c" /></xsl:attribute>
198
			<xsl:attribute name="letters-all"><xsl:apply-templates
199
				mode="letters-all" select="descendant::tei:c" /></xsl:attribute>
200
			<xsl:attribute name="letters-alignable"><xsl:apply-templates
201
				mode="letters-alignable" select="descendant::tei:c" /></xsl:attribute>
202
			<xsl:attribute name="characters"><xsl:apply-templates
203
				mode="characters-alignable" select="descendant::tei:c" /></xsl:attribute>
204
			<xsl:attribute name="abbr-n">
205
        <xsl:choose>
206
          <xsl:when test="descendant::tei:abbr">
207
            <xsl:value-of
208
				select="count(descendant::tei:abbr)" />
209
          </xsl:when>
210
          <xsl:when test="descendant::tei:expan">
211
            <xsl:value-of
212
				select="count(descendant::tei:expan)" />
213
          </xsl:when>
214
          <xsl:when test="descendant::tei:ex">
215
            <xsl:value-of
216
				select="count(descendant::tei:ex)" />
217
          </xsl:when>
218
          <xsl:otherwise>0</xsl:otherwise>
219
        </xsl:choose>
220
      </xsl:attribute>
221
			<xsl:attribute name="ref"><xsl:value-of
222
				select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)" /></xsl:attribute>
223
			<xsl:apply-templates />
224
		</xsl:element>
225
	</xsl:template>
226

    
227
	<xsl:template
228
		match="tei:pc[not(child::tei:reg or @ana='ori:align-no')]">
229
		<xsl:element name="w"
230
			namespace="http://www.tei-c.org/ns/1.0">
231
			<xsl:apply-templates select="@*" />
232
			<xsl:attribute name="type">pc</xsl:attribute>
233
			<xsl:attribute name="expan"><xsl:apply-templates /></xsl:attribute>
234
			<xsl:attribute name="letters-all" />
235
			<xsl:attribute name="letters-alignable" />
236
			<xsl:attribute name="characters"><xsl:apply-templates
237
				mode="characters-alignable" select="descendant::tei:c" /></xsl:attribute>
238
			<xsl:attribute name="abbr-n">
239
        <xsl:value-of select="0" />
240
      </xsl:attribute>
241
			<xsl:attribute name="ref"><xsl:value-of
242
				select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)" /></xsl:attribute>
243
			<xsl:apply-templates />
244
		</xsl:element>
245
	</xsl:template>
246

    
247
	<xsl:template
248
		match="tei:pc[child::tei:reg or @ana='ori:align-no']">
249
		<xsl:comment>
250
			<xsl:copy-of select="." />
251
		</xsl:comment>
252
	</xsl:template>
253

    
254
	<xsl:template match="tei:choice[tei:abbr]">
255
		<xsl:apply-templates select="tei:abbr" />
256
	</xsl:template>
257

    
258
	<xsl:template match="tei:choice[tei:abbr]" mode="expan">
259
		<xsl:apply-templates select="tei:expan"
260
			mode="#current" />
261
	</xsl:template>
262

    
263
	<xsl:template match="tei:choice[tei:abbr]"
264
		mode="letters-all">
265
		<xsl:apply-templates select="tei:expan"
266
			mode="#current" />
267
	</xsl:template>
268

    
269
	<xsl:template match="tei:choice[tei:abbr]"
270
		mode="letters-alignable">
271
		<xsl:apply-templates select="tei:expan"
272
			mode="#current" />
273
	</xsl:template>
274

    
275
	<xsl:template match="tei:choice[tei:abbr]"
276
		mode="characters-alignable">
277
		<xsl:apply-templates select="tei:abbr"
278
			mode="#current" />
279
	</xsl:template>
280

    
281
	<xsl:template match="tei:choice[tei:orig]" mode="#all">
282
		<xsl:apply-templates select="tei:orig"
283
			mode="#current" />
284
	</xsl:template>
285

    
286
	<xsl:template match="tei:reg" mode="#all"></xsl:template>
287

    
288
	<xsl:template match="tei:orig" mode="#all">
289
		<xsl:apply-templates mode="#current" />
290
	</xsl:template>
291

    
292
	<xsl:template match="tei:ex" mode="expan">
293
		<xsl:text>(</xsl:text>
294
		<xsl:value-of select="." />
295
		<xsl:text>)</xsl:text>
296
	</xsl:template>
297

    
298
	<xsl:template match="tei:ex" mode="letters-all">
299
		<xsl:value-of select="." />
300
	</xsl:template>
301

    
302
	<xsl:template match="tei:ex" mode="letters-alignable" />
303

    
304
	<xsl:template match="tei:ex" mode="characters-alignable">
305
		<xsl:choose>
306
			<xsl:when test="matches(.,'^\s*(cum|com|con)\s*$','i')">
307
				&#xA76F;
308
			</xsl:when>
309
			<xsl:when test="matches(.,'^\s*et\s*$','i')">
310
				&#x204A;
311
			</xsl:when>
312
			<xsl:when test="matches(.,'^\sest\s*$','i')">
313
				&#x223B;
314
			</xsl:when>
315
			<xsl:when test="matches(.,'^\s*us\s*$','i')">
316
				&#xA770;
317
			</xsl:when>
318
			<xsl:otherwise />
319
		</xsl:choose>
320
	</xsl:template>
321

    
322
	<xsl:template match="tei:supplied"></xsl:template>
323

    
324

    
325

    
326

    
327
	<xsl:template match="tei:w//text()"
328
		mode="expan letters-all">
329
		<xsl:choose>
330
			<xsl:when test="ancestor::tei:c">
331
				<xsl:value-of select="."></xsl:value-of>
332
			</xsl:when>
333
			<xsl:otherwise />
334
		</xsl:choose>
335
	</xsl:template>
336

    
337

    
338
	<xsl:template match="tei:c">
339
		<xsl:element name="c"
340
			namespace="http://www.tei-c.org/ns/1.0">
341
			<xsl:apply-templates select="@*" />
342
			<xsl:attribute name="expan">
343
      <xsl:apply-templates select="." mode="expan" />
344
    </xsl:attribute>
345
			<xsl:attribute name="letters-all">
346
      <xsl:apply-templates select="."
347
				mode="letters-all" />
348
    </xsl:attribute>
349
			<xsl:attribute name="letters-alignable">
350
      <xsl:apply-templates select="."
351
				mode="letters-alignable"></xsl:apply-templates>
352
    </xsl:attribute>
353
			<xsl:attribute name="characters">
354
      <xsl:apply-templates
355
				mode="characters-alignable" />
356
    </xsl:attribute>
357
			<xsl:attribute name="abbr-n">
358
      <xsl:choose>
359
        <xsl:when
360
				test="ancestor::tei:abbr and not(following-sibling::tei:c)">1</xsl:when>
361
        <xsl:when
362
				test="ancestor::tei:expan and not(following-sibling::tei:c)">1</xsl:when>
363
        <!--<xsl:when test="ancestor::tei:ex and not(following-sibling::tei:c)">1</xsl:when>-->
364
        <xsl:otherwise>0</xsl:otherwise>
365
      </xsl:choose>
366
    </xsl:attribute>
367
			<xsl:attribute name="ref"><xsl:value-of
368
				select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)" /></xsl:attribute>
369
			<xsl:apply-templates />
370
		</xsl:element>
371
	</xsl:template>
372

    
373
	<xsl:template match="tei:c" mode="expan">
374
		<xsl:if
375
			test="not(@type='am') and not(ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]])">
376
			<xsl:apply-templates mode="letters-alignable" />
377
		</xsl:if>
378
		<xsl:choose>
379
			<xsl:when
380
				test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan/tei:ex]">
381
				<xsl:text>(</xsl:text>
382
				<xsl:value-of
383
					select="ancestor::tei:choice/tei:expan/tei:ex" />
384
				<xsl:text>)</xsl:text>
385
			</xsl:when>
386
			<xsl:when
387
				test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]]">
388
				<xsl:text>(</xsl:text>
389
				<xsl:value-of select="ancestor::tei:choice/tei:expan" />
390
				<xsl:text>)</xsl:text>
391
			</xsl:when>
392
			<xsl:when
393
				test="not(following-sibling::tei:c) and following-sibling::*[1][self::tei:choice[tei:abbr[not(child::node())]]]">
394
				<xsl:text>(</xsl:text>
395
				<xsl:value-of
396
					select="following-sibling::tei:choice[1]//tei:ex" />
397
				<xsl:text>)</xsl:text>
398
			</xsl:when>
399
			<xsl:otherwise />
400
		</xsl:choose>
401
	</xsl:template>
402

    
403
	<xsl:template match="tei:c" mode="letters-all">
404
		<xsl:if
405
			test="not(@type='am') and not(ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]])">
406
			<xsl:apply-templates mode="letters-alignable" />
407
		</xsl:if>
408
		<xsl:choose>
409
			<xsl:when
410
				test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan/tei:ex]">
411
				<xsl:value-of
412
					select="ancestor::tei:choice/tei:expan/tei:ex" />
413
			</xsl:when>
414
			<xsl:when
415
				test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]]">
416
				<xsl:value-of select="ancestor::tei:choice/tei:expan" />
417
			</xsl:when>
418
			<xsl:when
419
				test="not(following-sibling::tei:c) and following-sibling::*[1][self::tei:choice[tei:abbr[not(child::node())]]]">
420
				<xsl:value-of
421
					select="following-sibling::tei:choice[1]//tei:ex" />
422
			</xsl:when>
423
			<xsl:otherwise />
424
		</xsl:choose>
425
	</xsl:template>
426

    
427
	<xsl:template match="tei:c" mode="letters-alignable">
428
		<xsl:choose>
429
			<xsl:when
430
				test="@type='am' and not(ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]])" />
431
			<xsl:otherwise>
432
				<xsl:apply-templates mode="letters-alignable" />
433
			</xsl:otherwise>
434
		</xsl:choose>
435
	</xsl:template>
436

    
437
	<xsl:template match="tei:c" mode="characters-alignable">
438
		<xsl:apply-templates mode="characters-alignable" />
439
	</xsl:template>
440

    
441
	<xsl:template match="tei:g[@type='am']"
442
		mode="letters-alignable letters-all"></xsl:template>
443

    
444
	<xsl:template
445
		match="tei:g[@type='am' and matches(.,'\p{M}')]"
446
		mode="characters-alignable"></xsl:template>
447

    
448

    
449
	<!-- <xsl:template match="tei:w//text()" mode="letters-alignable characters-alignable"> 
450
		<xsl:choose> <xsl:when test="ancestor::tei:c"> <xsl:analyze-string select="." 
451
		regex="\p{{M}}"> <xsl:matching-substring/> <xsl:non-matching-substring><xsl:value-of 
452
		select="."/></xsl:non-matching-substring> </xsl:analyze-string> </xsl:when> 
453
		<xsl:otherwise/> </xsl:choose> </xsl:template> -->
454

    
455
	<xsl:template match="tei:w//text()"
456
		mode="characters-alignable">
457
		<xsl:choose>
458
			<xsl:when test="ancestor::tei:c">
459
				<xsl:analyze-string select="." regex="\p{{M}}|\s">
460
					<xsl:matching-substring />
461
					<xsl:non-matching-substring>
462
						<xsl:value-of select="." />
463
					</xsl:non-matching-substring>
464
				</xsl:analyze-string>
465
			</xsl:when>
466
			<xsl:otherwise />
467
		</xsl:choose>
468
	</xsl:template>
469

    
470
	<xsl:template match="tei:w//text()"
471
		mode="letters-alignable">
472
		<xsl:choose>
473
			<xsl:when test="ancestor::tei:c">
474
				<xsl:analyze-string select="." regex=".">
475
					<xsl:matching-substring>
476
						<xsl:choose>
477
							<xsl:when test="matches(.,'\p{M}|\s')"></xsl:when>
478
							<xsl:when
479
								test="matches(.,$alignable-abbreviation-marks)" />
480
							<xsl:when test="matches(.,$modified-letters)">
481
								<xsl:call-template name="modified-letters" />
482
							</xsl:when>
483
							<xsl:otherwise>
484
								<xsl:value-of select="." />
485
							</xsl:otherwise>
486
						</xsl:choose>
487
					</xsl:matching-substring>
488
				</xsl:analyze-string>
489
			</xsl:when>
490
			<xsl:otherwise />
491
		</xsl:choose>
492
	</xsl:template>
493

    
494
	<xsl:variable name="modified-letters">
495
		^(&#x0141;|&#x0142;|[&#xA748;-&#xA759;])$
496
	</xsl:variable>
497
	<xsl:variable name="alignable-abbreviation-marks">^(&amp;|&#x204A;|&#x2079;|&#x223B;|&#xA76F;|&#xA770;|&#xF1A6;|&#xF1AC;)$
498
	</xsl:variable>
499

    
500
	<xsl:template name="modified-letters">
501
		<xsl:choose>
502
			<xsl:when test="matches(.,'&#x0141;|&#xA748;')">
503
				L
504
			</xsl:when>
505
			<xsl:when test="matches(.,'&#x0142;|&#xA749;')">
506
				l
507
			</xsl:when>
508
			<xsl:when test="matches(.,'&#xA750;|&#xA752;|&#xA754;')">
509
				P
510
			</xsl:when>
511
			<xsl:when test="matches(.,'&#xA751;|&#xA753;|&#xA755;')">
512
				p
513
			</xsl:when>
514
			<xsl:when test="matches(.,'&#xA756;|&#xA758;')">
515
				Q
516
			</xsl:when>
517
			<xsl:when test="matches(.,'&#xA757;|&#xA759;')">
518
				q
519
			</xsl:when>
520
			<xsl:otherwise>
521
				<xsl:value-of select="." />
522
			</xsl:otherwise>
523
		</xsl:choose>
524
	</xsl:template>
525

    
526
</xsl:stylesheet>