Statistics
| Revision:

root / tmp / org.txm.core / bin / org / txm / macro / oriflamms / prepare / txm-front-teioriflammsc-xtz.xsl @ 54

History | View | Annotate | Download (17.3 kB)

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

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

    
12
  <xd:doc type="stylesheet">
13
    <xd:short>
14
      Cette feuille XSLT prépare les fichiers au format TEI Oriflamms
15
      (tokénisés par mot) à l'imppportation dans TXM avec le module XTZ
16
      (étape 2 "front").
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.
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.
28
      
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>2016, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
34
  </xd:doc>
35
  
36

    
37
  <xsl:template match="*" mode="#all">
38
    <xsl:copy>
39
      <xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()" mode="#current"/>
40
    </xsl:copy>
41
  </xsl:template>
42
  
43
  <xsl:template match="comment()|processing-instruction()|text()|@*">
44
    <xsl:copy>
45
      <xsl:apply-templates/>
46
    </xsl:copy>
47
  </xsl:template>
48
  
49
  <xsl:template match="comment()|processing-instruction()|@*" mode="expan letters-all 
50
    letters-alignable characters-alignable">
51
    <xsl:copy>
52
      <xsl:apply-templates/>
53
    </xsl:copy>
54
  </xsl:template>
55

    
56
  <xsl:variable name="filename">
57
    <xsl:analyze-string select="document-uri(.)" regex="^(.*)/([^/]+)\.xml$">
58
      <xsl:matching-substring>
59
        <xsl:value-of select="replace(regex-group(2),'-c$','')"/>
60
      </xsl:matching-substring>
61
    </xsl:analyze-string>
62
  </xsl:variable>
63
  
64
  <xsl:template match="tei:facsimile"/>
65
  
66
<xsl:template match="tei:teiCorpus">
67
  <TEI xmlns="http://www.tei-c.org/ns/1.0">
68
    <text>
69
      <!-- on ajoute des attributs utiles pour la création de partitions et de sous-corpus -->
70
      <xsl:apply-templates/>
71
    </text>
72
  </TEI>
73
</xsl:template>
74

    
75

    
76
<xsl:template match="tei:TEI[ancestor::tei:teiCorpus]">
77
<xsl:apply-templates/>
78
</xsl:template>
79
  
80
  <xsl:template match="tei:teiHeader">
81
    <!--<xsl:copy-of select="."/>-->
82
  </xsl:template>
83
  
84
  <xsl:template match="tei:text[not(ancestor::tei:teiCorpus)]">
85
    <xsl:element name="text" namespace="http://www.tei-c.org/ns/1.0">
86
      <!-- on ajoute des attributs utiles pour la création de partitions et de sous-corpus -->
87
      <xsl:apply-templates select="@*"/>
88
     <xsl:apply-templates/> 
89
    </xsl:element>
90
  </xsl:template>
91
  
92
  <xsl:template match="tei:text[ancestor::tei:teiCorpus]">
93
    <div type="text" id="{$filename}-{count(preceding::tei:text) + 1}" xmlns="http://www.tei-c.org/ns/1.0">
94
      <xsl:apply-templates select="@*|node()"/>
95
    </div>
96
  </xsl:template>
97

    
98
<xsl:template match="tei:milestone[@unit='surface']">
99
  <pb xmlns="http://www.tei-c.org/ns/1.0" n="{following::tei:pb[1]/@n}" facs="{@facs}" xml:id="{@xml:id}"/>
100
</xsl:template>
101
  
102
  <xsl:template match="tei:pb">
103
    <milestone unit="ms-page">
104
      <xsl:apply-templates select="@*"/>
105
    </milestone>
106
  </xsl:template>
107

    
108
<xsl:template match="tei:w[not(tei:seg[@type='wp'])]">
109
  <xsl:element name="w" namespace="http://www.tei-c.org/ns/1.0">
110
    <xsl:apply-templates select="@*"/>
111
    <xsl:attribute name="expan"><xsl:apply-templates mode="expan" select="descendant::tei:c"/></xsl:attribute>
112
    <xsl:attribute name="letters-all"><xsl:apply-templates mode="letters-all" select="descendant::tei:c"/></xsl:attribute>
113
    <xsl:attribute name="letters-alignable"><xsl:apply-templates mode="letters-alignable" select="descendant::tei:c"/></xsl:attribute>
114
    <xsl:attribute name="characters"><xsl:apply-templates mode="characters-alignable" select="descendant::tei:c"/></xsl:attribute>
115
    <xsl:attribute name="abbr-n">
116
      <xsl:choose>
117
        <xsl:when test="descendant::tei:abbr">
118
          <xsl:value-of select="count(descendant::tei:abbr)"/>
119
        </xsl:when>
120
        <xsl:when test="descendant::tei:expan">
121
          <xsl:value-of select="count(descendant::tei:expan)"/>
122
        </xsl:when>
123
        <xsl:when test="descendant::tei:ex">
124
          <xsl:value-of select="count(descendant::tei:ex)"/>
125
        </xsl:when>
126
        <xsl:otherwise>0</xsl:otherwise>
127
      </xsl:choose>
128
    </xsl:attribute>
129
    <xsl:attribute name="ref"><xsl:value-of select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)"/></xsl:attribute>
130
    <xsl:apply-templates/>
131
  </xsl:element>
132
</xsl:template>
133
  
134
  <xsl:template match="tei:w[tei:seg[@type='wp']]">
135
    <xsl:element name="w-lb" namespace="http://www.tei-c.org/ns/1.0">
136
      <xsl:apply-templates select="@*"/>
137
      <xsl:attribute name="expan"><xsl:apply-templates mode="expan" select="descendant::tei:c"/></xsl:attribute>
138
      <xsl:attribute name="letters-all"><xsl:apply-templates mode="letters-all" select="descendant::tei:c"/></xsl:attribute>
139
      <xsl:attribute name="letters-alignable"><xsl:apply-templates mode="letters-alignable" select="descendant::tei:c"/></xsl:attribute>
140
      <xsl:attribute name="characters"><xsl:apply-templates mode="characters-alignable" select="descendant::tei:c"/></xsl:attribute>
141
      <xsl:attribute name="abbr-n">
142
        <xsl:choose>
143
          <xsl:when test="descendant::tei:abbr">
144
            <xsl:value-of select="count(descendant::tei:abbr)"/>
145
          </xsl:when>
146
          <xsl:when test="descendant::tei:expan">
147
            <xsl:value-of select="count(descendant::tei:expan)"/>
148
          </xsl:when>
149
          <xsl:when test="descendant::tei:ex">
150
            <xsl:value-of select="count(descendant::tei:ex)"/>
151
          </xsl:when>
152
          <xsl:otherwise>0</xsl:otherwise>
153
        </xsl:choose>
154
      </xsl:attribute>      <xsl:attribute name="ref"><xsl:value-of select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)"/></xsl:attribute>
155
      <xsl:apply-templates/>
156
    </xsl:element>
157
  </xsl:template>
158
  
159
  <xsl:template match="tei:seg[@type='wp']">
160
    <xsl:element name="w" namespace="http://www.tei-c.org/ns/1.0">
161
      <xsl:apply-templates select="@*"/>
162
      <xsl:attribute name="expan"><xsl:apply-templates mode="expan" select="descendant::tei:c"/></xsl:attribute>
163
      <xsl:attribute name="letters-all"><xsl:apply-templates mode="letters-all" select="descendant::tei:c"/></xsl:attribute>
164
      <xsl:attribute name="letters-alignable"><xsl:apply-templates mode="letters-alignable" select="descendant::tei:c"/></xsl:attribute>
165
      <xsl:attribute name="characters"><xsl:apply-templates mode="characters-alignable" select="descendant::tei:c"/></xsl:attribute>
166
      <xsl:attribute name="abbr-n">
167
        <xsl:choose>
168
          <xsl:when test="descendant::tei:abbr">
169
            <xsl:value-of select="count(descendant::tei:abbr)"/>
170
          </xsl:when>
171
          <xsl:when test="descendant::tei:expan">
172
            <xsl:value-of select="count(descendant::tei:expan)"/>
173
          </xsl:when>
174
          <xsl:when test="descendant::tei:ex">
175
            <xsl:value-of select="count(descendant::tei:ex)"/>
176
          </xsl:when>
177
          <xsl:otherwise>0</xsl:otherwise>
178
        </xsl:choose>
179
      </xsl:attribute>
180
      <xsl:attribute name="ref"><xsl:value-of select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)"/></xsl:attribute>
181
      <xsl:apply-templates/>
182
    </xsl:element>
183
  </xsl:template>
184
  
185
  <xsl:template match="tei:pc[not(child::tei:reg or @ana='ori:align-no')]">
186
    <xsl:element name="w" namespace="http://www.tei-c.org/ns/1.0">
187
      <xsl:apply-templates select="@*"/>
188
      <xsl:attribute name="type">pc</xsl:attribute>
189
      <xsl:attribute name="expan"><xsl:apply-templates/></xsl:attribute>
190
      <xsl:attribute name="letters-all"/>
191
      <xsl:attribute name="letters-alignable"/>
192
      <xsl:attribute name="characters"><xsl:apply-templates mode="characters-alignable" select="descendant::tei:c"/></xsl:attribute>
193
      <xsl:attribute name="abbr-n">
194
        <xsl:value-of select="0"/>
195
      </xsl:attribute>
196
      <xsl:attribute name="ref"><xsl:value-of select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)"/></xsl:attribute>
197
      <xsl:apply-templates/>
198
    </xsl:element>
199
  </xsl:template>
200
  
201
  <xsl:template match="tei:pc[child::tei:reg or @ana='ori:align-no']">
202
    <xsl:comment><xsl:copy-of select="."/></xsl:comment>
203
  </xsl:template>
204

    
205
  <xsl:template match="tei:choice[tei:abbr]">
206
    <xsl:apply-templates select="tei:abbr"/>
207
  </xsl:template>
208
  
209
  <xsl:template match="tei:choice[tei:abbr]" mode="expan">
210
    <xsl:apply-templates select="tei:expan" mode="#current"/>
211
  </xsl:template>
212
  
213
  <xsl:template match="tei:choice[tei:abbr]" mode="letters-all">
214
    <xsl:apply-templates select="tei:expan" mode="#current"/>
215
  </xsl:template>
216
  
217
  <xsl:template match="tei:choice[tei:abbr]" mode="letters-alignable">
218
    <xsl:apply-templates select="tei:expan" mode="#current"/>
219
  </xsl:template>
220

    
221
  <xsl:template match="tei:choice[tei:abbr]" mode="characters-alignable">
222
    <xsl:apply-templates select="tei:abbr" mode="#current"/>
223
  </xsl:template>
224
  
225
  <xsl:template match="tei:choice[tei:orig]" mode="#all">
226
    <xsl:apply-templates select="tei:orig" mode="#current"/>
227
  </xsl:template>
228
  
229
  <xsl:template match="tei:reg" mode="#all"></xsl:template>
230
  
231
  <xsl:template match="tei:orig" mode="#all">
232
    <xsl:apply-templates mode="#current"/>
233
  </xsl:template>
234
  
235
  <xsl:template match="tei:ex" mode="expan">
236
    <xsl:text>(</xsl:text>
237
    <xsl:value-of select="."/>
238
    <xsl:text>)</xsl:text>
239
  </xsl:template>
240
  
241
  <xsl:template match="tei:ex" mode="letters-all">
242
    <xsl:value-of select="."/>
243
  </xsl:template>
244
  
245
  <xsl:template match="tei:ex" mode="letters-alignable"/>
246
  
247
  <xsl:template match="tei:ex" mode="characters-alignable">
248
    <xsl:choose>
249
      <xsl:when test="matches(.,'^\s*(cum|com|con)\s*$','i')">&#xA76F;</xsl:when>
250
      <xsl:when test="matches(.,'^\s*et\s*$','i')">&#x204A;</xsl:when>
251
      <xsl:when test="matches(.,'^\sest\s*$','i')">&#x223B;</xsl:when>
252
      <xsl:when test="matches(.,'^\s*us\s*$','i')">&#xA770;</xsl:when>
253
      <xsl:otherwise/>
254
    </xsl:choose>
255
  </xsl:template>
256
  
257
  <xsl:template match="tei:supplied"></xsl:template>
258
  
259

    
260

    
261

    
262
  <xsl:template match="tei:w//text()" mode="expan letters-all">
263
    <xsl:choose>
264
      <xsl:when test="ancestor::tei:c">
265
        <xsl:value-of select="."></xsl:value-of>
266
      </xsl:when>
267
      <xsl:otherwise/>
268
    </xsl:choose>
269
  </xsl:template>
270

    
271

    
272
<xsl:template match="tei:c">
273
  <xsl:element name="c" namespace="http://www.tei-c.org/ns/1.0">
274
    <xsl:apply-templates select="@*"/>
275
    <xsl:attribute name="expan">
276
      <xsl:apply-templates select="." mode="expan"/>
277
    </xsl:attribute>
278
    <xsl:attribute name="letters-all">
279
      <xsl:apply-templates select="." mode="letters-all"/>
280
    </xsl:attribute>
281
    <xsl:attribute name="letters-alignable">
282
      <xsl:apply-templates select="." mode="letters-alignable"></xsl:apply-templates>
283
    </xsl:attribute>
284
    <xsl:attribute name="characters">
285
      <xsl:apply-templates mode="characters-alignable"/>
286
    </xsl:attribute>
287
    <xsl:attribute name="abbr-n">
288
      <xsl:choose>
289
        <xsl:when test="ancestor::tei:abbr and not(following-sibling::tei:c)">1</xsl:when>
290
        <xsl:when test="ancestor::tei:expan and not(following-sibling::tei:c)">1</xsl:when>
291
        <!--<xsl:when test="ancestor::tei:ex and not(following-sibling::tei:c)">1</xsl:when>-->
292
        <xsl:otherwise>0</xsl:otherwise>
293
      </xsl:choose>
294
    </xsl:attribute>
295
    <xsl:attribute name="ref"><xsl:value-of select="concat($filename,', f. ',preceding::tei:pb[1]/@n,', col. ',preceding::tei:cb[1]/@n,', l. ',preceding::tei:lb[1]/@n)"/></xsl:attribute>
296
    <xsl:apply-templates/>
297
  </xsl:element>
298
</xsl:template>
299
  
300
  <xsl:template match="tei:c" mode="expan">
301
    <xsl:if test="not(@type='am') and not(ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]])">
302
      <xsl:apply-templates mode="letters-alignable"/>
303
    </xsl:if>
304
    <xsl:choose>
305
      <xsl:when test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan/tei:ex]">
306
        <xsl:text>(</xsl:text>
307
        <xsl:value-of select="ancestor::tei:choice/tei:expan/tei:ex"/>
308
        <xsl:text>)</xsl:text>
309
      </xsl:when>
310
      <xsl:when test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]]">
311
        <xsl:text>(</xsl:text>
312
        <xsl:value-of select="ancestor::tei:choice/tei:expan"/>
313
        <xsl:text>)</xsl:text>
314
      </xsl:when>
315
      <xsl:when test="not(following-sibling::tei:c) and following-sibling::*[1][self::tei:choice[tei:abbr[not(child::node())]]]">
316
        <xsl:text>(</xsl:text>
317
        <xsl:value-of select="following-sibling::tei:choice[1]//tei:ex"/>
318
        <xsl:text>)</xsl:text>
319
      </xsl:when>
320
      <xsl:otherwise/>
321
    </xsl:choose>
322
  </xsl:template>
323
  
324
  <xsl:template match="tei:c" mode="letters-all">
325
    <xsl:if test="not(@type='am') and not(ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]])">
326
      <xsl:apply-templates mode="letters-alignable"/>
327
    </xsl:if>
328
    <xsl:choose>
329
      <xsl:when test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan/tei:ex]">
330
        <xsl:value-of select="ancestor::tei:choice/tei:expan/tei:ex"/>
331
      </xsl:when>
332
      <xsl:when test="not(following-sibling::tei:c) and ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]]">
333
        <xsl:value-of select="ancestor::tei:choice/tei:expan"/>
334
      </xsl:when>
335
      <xsl:when test="not(following-sibling::tei:c) and following-sibling::*[1][self::tei:choice[tei:abbr[not(child::node())]]]">
336
        <xsl:value-of select="following-sibling::tei:choice[1]//tei:ex"/>
337
      </xsl:when>
338
      <xsl:otherwise/>
339
    </xsl:choose>
340
  </xsl:template>
341
  
342
  <xsl:template match="tei:c" mode="letters-alignable">
343
    <xsl:choose>
344
      <xsl:when test="@type='am' and not(ancestor::tei:abbr[parent::tei:choice/tei:expan[not(tei:ex)]])"/>
345
      <xsl:otherwise><xsl:apply-templates mode="letters-alignable"/></xsl:otherwise>
346
    </xsl:choose>
347
  </xsl:template>
348
  
349
  <xsl:template match="tei:c" mode="characters-alignable">
350
    <xsl:apply-templates mode="characters-alignable"/>
351
  </xsl:template>
352
  
353
  <xsl:template match="tei:g[@type='am']" mode="letters-alignable letters-all"></xsl:template>
354
  
355
  <xsl:template match="tei:g[@type='am' and matches(.,'\p{M}')]" mode="characters-alignable"></xsl:template>
356

    
357

    
358
<!--  <xsl:template match="tei:w//text()" mode="letters-alignable characters-alignable">
359
    <xsl:choose>
360
      <xsl:when test="ancestor::tei:c">
361
        <xsl:analyze-string select="." regex="\p{{M}}">
362
          <xsl:matching-substring/>
363
          <xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
364
        </xsl:analyze-string>      
365
      </xsl:when>
366
      <xsl:otherwise/>
367
    </xsl:choose>
368
  </xsl:template>
369
-->
370

    
371
  <xsl:template match="tei:w//text()" mode="characters-alignable">
372
    <xsl:choose>
373
      <xsl:when test="ancestor::tei:c">
374
        <xsl:analyze-string select="." regex="\p{{M}}|\s">
375
          <xsl:matching-substring/>
376
          <xsl:non-matching-substring><xsl:value-of select="."/></xsl:non-matching-substring>
377
        </xsl:analyze-string>        
378
      </xsl:when>
379
      <xsl:otherwise/>
380
    </xsl:choose>
381
  </xsl:template>
382
  
383
  <xsl:template match="tei:w//text()" mode="letters-alignable">
384
    <xsl:choose>
385
      <xsl:when test="ancestor::tei:c">
386
        <xsl:analyze-string select="." regex=".">
387
          <xsl:matching-substring>
388
            <xsl:choose>
389
              <xsl:when test="matches(.,'\p{M}|\s')"></xsl:when>
390
              <xsl:when test="matches(.,$alignable-abbreviation-marks)"/>
391
              <xsl:when test="matches(.,$modified-letters)">
392
                <xsl:call-template name="modified-letters"/>
393
              </xsl:when>
394
              <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
395
            </xsl:choose>
396
          </xsl:matching-substring>
397
        </xsl:analyze-string>
398
      </xsl:when>
399
      <xsl:otherwise/>
400
    </xsl:choose>
401
  </xsl:template>
402
  
403
  <xsl:variable name="modified-letters">^(&#x0141;|&#x0142;|[&#xA748;-&#xA759;])$</xsl:variable>
404
  <xsl:variable name="alignable-abbreviation-marks">^(&amp;|&#x204A;|&#x2079;|&#x223B;|&#xA76F;|&#xA770;|&#xF1A6;|&#xF1AC;)$</xsl:variable>
405
  
406
  <xsl:template name="modified-letters">
407
    <xsl:choose>
408
      <xsl:when test="matches(.,'&#x0141;|&#xA748;')">L</xsl:when>
409
      <xsl:when test="matches(.,'&#x0142;|&#xA749;')">l</xsl:when>
410
      <xsl:when test="matches(.,'&#xA750;|&#xA752;|&#xA754;')">P</xsl:when>
411
      <xsl:when test="matches(.,'&#xA751;|&#xA753;|&#xA755;')">p</xsl:when>
412
      <xsl:when test="matches(.,'&#xA756;|&#xA758;')">Q</xsl:when>
413
      <xsl:when test="matches(.,'&#xA757;|&#xA759;')">q</xsl:when>
414
      <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
415
    </xsl:choose>
416
  </xsl:template>
417

    
418
</xsl:stylesheet>