Statistics
| Revision:

root / tmp / org.txm.core / res / org / txm / xml / xsl / txm-filter-teibvh-xmlw-posttok.xsl @ 187

History | View | Annotate | Download (19 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" xmlns:txm="http://textometrie.org/1.0"
4
  exclude-result-prefixes="tei edate txm" xpath-default-namespace="http://www.tei-c.org/ns/1.0" version="2.0">
5

    
6
  <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no"/> 
7
  
8
  
9
<!-- Partie générale : on copie les éléments, les attributs, le texte, les commentaires, on supprime mes prrocessing intstructions -->
10
  
11
  <xsl:template match="*">      
12
        <xsl:copy>
13
          <xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
14
        </xsl:copy>    
15
  </xsl:template>
16
  
17
  <xsl:template match="*" mode="position"><xsl:value-of select="count(preceding-sibling::*)"/></xsl:template>
18

    
19

    
20
  <xsl:template match="@*|comment()|processing-instruction()">
21
    <xsl:copy/>
22
  </xsl:template>
23

    
24
  <xsl:template match="text()">
25
    <xsl:value-of select="."/>
26
  </xsl:template>
27

    
28
  <xsl:template match="teiHeader"/>
29
  
30
  <xsl:template match="text">
31
    <xsl:copy>
32
      <xsl:apply-templates select="@*"/>
33
      <xsl:if test="not(child::*[1][self::pb])"><pb xmlns="http://www.tei-c.org/ns/1.0" n="title"/></xsl:if>
34
      <xsl:apply-templates/>
35
    </xsl:copy>
36
  </xsl:template>
37

    
38
  <xsl:template match="choice[not(@txm:wordPart)]">
39
    <xsl:choose>
40
      <xsl:when test="child::corr">
41
        <corr xmlns="http://www.tei-c.org/ns/1.0">
42
          <xsl:attribute name="sic"><xsl:value-of select="normalize-space(child::sic)"/></xsl:attribute>
43
          <xsl:apply-templates select="child::corr/w"/>
44
        	<xsl:if test="child::sic//lb and not(child::corr//lb)"><xsl:copy-of select="child::sic//lb"/></xsl:if>
45
        </corr>
46
      </xsl:when>
47
      <xsl:when test="child::reg">
48
        <reg xmlns="http://www.tei-c.org/ns/1.0">
49
          <xsl:attribute name="orig"><xsl:value-of select="normalize-space(child::orig)"/></xsl:attribute>
50
          <xsl:apply-templates select="child::reg/w"/>
51
        	<xsl:if test="child::orig//lb  and not(child::reg//lb)"><xsl:copy-of select="child::orig//lb"/></xsl:if>
52
        </reg>
53
      </xsl:when>
54
      <xsl:when test="child::expan">
55
        <expan xmlns="http://www.tei-c.org/ns/1.0">
56
          <xsl:attribute name="abbr"><xsl:value-of select="normalize-space(child::abbr)"/></xsl:attribute>
57
          <xsl:apply-templates select="child::expan/w"/>
58
        </expan>
59
      </xsl:when>
60
    </xsl:choose>
61
  </xsl:template>
62
  
63
  <xsl:template match="w">
64
    <xsl:variable name="nextLb">
65
      <xsl:choose>
66
      	<xsl:when test="following::lb">
67
      		<xsl:apply-templates select="following::lb[1]" mode="position"/>
68
      	</xsl:when>      	
69
<!--        <xsl:when test="following::lb[@rend='hyphen']">
70
          <xsl:apply-templates select="following::lb[@rend='hyphen'][1]" mode="position"/>
71
        </xsl:when>-->
72
        <xsl:otherwise>99999999</xsl:otherwise>
73
      </xsl:choose>      
74
    </xsl:variable>
75
    <xsl:variable name="nextW1">
76
      <xsl:choose>
77
        <xsl:when test="following-sibling::w[1]">
78
          <xsl:apply-templates select="following::w[1]" mode="position"/>
79
        </xsl:when>
80
        <xsl:otherwise>0</xsl:otherwise>
81
      </xsl:choose>
82
    </xsl:variable>    
83
    <xsl:variable name="nextW2">
84
      <xsl:choose>
85
        <xsl:when test="following::w[2]">
86
          <xsl:apply-templates select="following::w[2]" mode="position"/>
87
        </xsl:when>
88
        <xsl:otherwise>0</xsl:otherwise>
89
      </xsl:choose>
90
    </xsl:variable>
91
    <xsl:variable name="ref">
92
      <xsl:choose>
93
        <xsl:when test="preceding::pb[1][@n]">
94
          <xsl:value-of select="concat(ancestor::text/@id,', p. ',preceding::pb[1]/@n)"/>
95
        </xsl:when>
96
        <xsl:when test="preceding::pb[1][@facs]">
97
          <xsl:value-of select="concat(ancestor::text/@id,', p. ',substring-before(preceding::pb[1]/@facs,'.'))"/>
98
        </xsl:when>
99
        <xsl:otherwise><xsl:value-of select="ancestor::text/@id"/></xsl:otherwise>
100
      </xsl:choose>
101
      
102
    </xsl:variable>
103
    <xsl:variable name="lang">
104
      <xsl:choose>
105
        <xsl:when test="ancestor::*[@lang]"><xsl:value-of select="ancestor::*[@lang][1]/@lang"/></xsl:when>
106
        <xsl:when test="ancestor::*[@xml:lang]"><xsl:value-of select="ancestor::*[@xml:lang][1]/@xml:lang"/></xsl:when>
107
        <xsl:otherwise>frm</xsl:otherwise>
108
      </xsl:choose>
109
    </xsl:variable>
110
    <xsl:variable name="nametype">
111
      <xsl:choose>
112
        <xsl:when test="ancestor::name">
113
          <xsl:choose>
114
            <xsl:when test="ancestor::name[1][@type]"><xsl:value-of select="ancestor::name[1]/@type"/></xsl:when>
115
            <xsl:otherwise>name</xsl:otherwise>
116
          </xsl:choose>
117
        </xsl:when>
118
        <xsl:otherwise>NA</xsl:otherwise>
119
      </xsl:choose>
120
    </xsl:variable>
121
    <xsl:variable name="lb">
122
      <xsl:choose>
123
        <xsl:when test="preceding-sibling::*[1][self::lb]">avant</xsl:when>
124
        <xsl:when test="following-sibling::*[1][self::lb or self::pb]">après</xsl:when>
125
        <xsl:otherwise>non</xsl:otherwise>
126
      </xsl:choose>
127
    </xsl:variable>
128
    <xsl:variable name="sic">
129
      <xsl:choose>
130
        <xsl:when test="parent::corr[parent::choice]">
131
          <xsl:value-of select="ancestor::choice/sic/w[position()]"/>
132
        </xsl:when>
133
        <xsl:otherwise>
134
          <xsl:value-of select="."></xsl:value-of>
135
        </xsl:otherwise>
136
      </xsl:choose>
137
    </xsl:variable>
138
    <xsl:variable name="orig">
139
      <xsl:choose>
140
        <xsl:when test="parent::reg[parent::choice]">
141
          <xsl:value-of select="ancestor::choice/orig/w[position()]"/>
142
        </xsl:when>
143
        <xsl:otherwise>
144
          <xsl:value-of select="."></xsl:value-of>
145
        </xsl:otherwise>
146
      </xsl:choose>
147
    </xsl:variable>
148
    <xsl:variable name="abbr">
149
      <xsl:choose>
150
        <xsl:when test="parent::expan[parent::choice]">
151
          <xsl:value-of select="ancestor::choice/abbr/w[position()]"/>
152
        </xsl:when>
153
        <xsl:otherwise>
154
          <xsl:value-of select="."></xsl:value-of>
155
        </xsl:otherwise>
156
      </xsl:choose>
157
    </xsl:variable>
158
    <xsl:choose>
159
      <xsl:when test="matches(.,'^\s*[\-=]\s*$') and ($nextW1 &gt; $nextLb)">
160
        <xsl:comment>trait d'union effacé</xsl:comment>
161
      </xsl:when>      
162
      <xsl:when test="matches(.,'[\-=]\s*$') and ($nextW1 &gt; $nextLb)">
163
        <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" orig="{$orig}" abbr="{$abbr}">
164
          <xsl:apply-templates select="@*"/>
165
          <xsl:attribute name="lb">milieu-marqué</xsl:attribute>
166
          <xsl:analyze-string select="normalize-space(.)" regex="^(.+)(.)$">
167
            <xsl:matching-substring><xsl:value-of select="regex-group(1)"/><lb rend="hyphen({regex-group(2)})"/></xsl:matching-substring>
168
          </xsl:analyze-string>
169
          <xsl:value-of select="normalize-space(following::w[1])"/>
170
        </w>        
171
      </xsl:when>
172
      <xsl:when test="following::w[1][matches(.,'^\s*[\-=]\s*$')] and ($nextW2 &gt; $nextLb)">
173
        <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" orig="{$orig}" abbr="{$abbr}">
174
          <xsl:apply-templates select="@*"/>
175
          <xsl:attribute name="lb">milieu-marqué2</xsl:attribute>
176
          <xsl:value-of select="normalize-space(.)"/><lb rend="hyphen({normalize-space(following::w[1])})"/><xsl:value-of select="normalize-space(following::w[2])"/>
177
        </w>
178
      </xsl:when>
179
      <xsl:when test="not(matches(.,'-\s*$')) and following-sibling::*[1][self::lb[@rend='hyphen']]">
180
        <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" orig="{$orig}" abbr="{$abbr}">
181
          <xsl:apply-templates select="@*"/>
182
          <xsl:attribute name="lb">milieu-non-marqué</xsl:attribute>
183
          <xsl:value-of select="normalize-space(.)"/><lb rend="noHyphen"/><xsl:value-of select="normalize-space(following::w[1])"/>
184
        </w>
185
      </xsl:when>
186
      <xsl:when test="preceding-sibling::*[1][self::lb[@rend='hyphen']]">
187
        <xsl:comment>fin de mot coupé : <xsl:value-of select="."/></xsl:comment>
188
      </xsl:when>
189
    	<xsl:when test="preceding-sibling::*[1][self::lb] and preceding-sibling::*[2][self::w[matches(.,'\w[\-=]\s*$')]]">
190
    		<xsl:comment>fin de mot coupé (lb non marqué !) : <xsl:value-of select="."/></xsl:comment>
191
    	</xsl:when>    	
192
      <xsl:when test="preceding-sibling::*[1][matches(@txm:wordPart,'^(end|middle)$')]">
193
        <xsl:comment>fin de mot coupé par une balise : <xsl:value-of select="normalize-space(.)"/></xsl:comment>
194
      </xsl:when>
195
      <xsl:when test="preceding-sibling::*[1][@txm:wordPart='start']">
196
        <xsl:choose>
197
          <xsl:when test="preceding-sibling::*[1][self::choice][child::reg]">
198
            <reg>
199
              <xsl:apply-templates select="preceding-sibling::choice[1]/reg/@*"/>
200
              <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" abbr="{$abbr}" lb="{$lb}">
201
                <xsl:attribute name="orig"><xsl:value-of select="concat(preceding-sibling::choice[1]/orig[1]/w[1],.)"/></xsl:attribute>
202
                <xsl:apply-templates select="@*"/>
203
                <xsl:value-of select="preceding-sibling::choice[1]/reg/w"/><xsl:apply-templates/>
204
              </w>
205
            </reg>
206
          </xsl:when>
207
          <xsl:when test="preceding-sibling::*[1][self::choice][child::corr]">
208
            <corr>
209
              <xsl:apply-templates select="preceding-sibling::choice[1]/corr/@*"/>
210
              <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
211
                <xsl:attribute name="sic"><xsl:value-of select="concat(preceding-sibling::choice[1]/sic[1]/w[1],.)"/></xsl:attribute>
212
                <xsl:apply-templates select="@*"/>
213
                <xsl:value-of select="preceding-sibling::choice[1]/reg/w"/><xsl:apply-templates/>
214
              </w>
215
            </corr>
216
          </xsl:when>
217
          <xsl:when test="preceding-sibling::*[1][self::supplied]">
218
            <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
219
              <xsl:attribute name="sic"><xsl:value-of select="."/></xsl:attribute>
220
              <xsl:apply-templates select="@*"/>
221
              <supplied xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="preceding-sibling::supplied[1]/w"/></supplied><xsl:apply-templates/>
222
            </w>
223
          </xsl:when>
224
          <xsl:when test="preceding-sibling::*[1][self::subst][child::add]">
225
            <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}" del="{normalize-space(preceding-sibling::subst[1]/del)}">
226
                <xsl:attribute name="del"><xsl:value-of select="concat('(',preceding-sibling::subst[1]/del[1]/w[1],')',.)"/></xsl:attribute>
227
                <xsl:apply-templates select="@*"/>
228
                <xsl:element name="add" namespace="http://www.tei-c.org/ns/1.0">
229
<!--                  <xsl:attribute name="rend">inWord</xsl:attribute>-->
230
                  <xsl:attribute name="del"><xsl:value-of select="normalize-space(preceding-sibling::subst[1]/del)"/></xsl:attribute>
231
                  <xsl:apply-templates select="preceding-sibling::subst[1]/add/@*"/>
232
                  <xsl:value-of select="preceding-sibling::subst[1]/add/w"/>
233
                </xsl:element><xsl:apply-templates/>
234
              </w>
235
          </xsl:when>
236
          <xsl:otherwise>
237
            <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
238
              <xsl:apply-templates select="@*"/>
239
              <xsl:element name="{local-name(preceding-sibling::*[1])}" namespace="http://www.tei-c.org/ns/1.0">
240
                <xsl:value-of select="preceding-sibling::*[1]//w"/>
241
              </xsl:element>
242
              <xsl:apply-templates/>
243
            </w>
244
          </xsl:otherwise>
245
        </xsl:choose>
246
      </xsl:when>
247
      <xsl:when test="following-sibling::*[1][matches(@txm:wordPart,'^(end|middle)$')]">
248
        <xsl:variable name="wordPartPosition">
249
          <xsl:value-of select="following-sibling::*[1]/@txm:wordPart"/>
250
        </xsl:variable>
251
        <xsl:choose>
252
          <xsl:when test="following-sibling::*[1][self::choice][child::reg]">
253
            <reg>
254
              <xsl:apply-templates select="following-sibling::choice[1]/reg/@*"/>
255
              <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" abbr="{$abbr}" lb="{$lb}">
256
                <xsl:attribute name="orig"><xsl:value-of select="concat(.,following-sibling::choice[1]/orig[1]/w[1])"/>
257
                  <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
258
                </xsl:attribute>
259
                <xsl:apply-templates select="@*"/>
260
                <xsl:apply-templates/>
261
                <xsl:value-of select="following-sibling::choice[1]/reg/w"/>
262
                <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
263
              </w>
264
            </reg>
265
          </xsl:when>
266
          <xsl:when test="following-sibling::*[1][self::choice][child::corr]">
267
            <corr>
268
              <xsl:apply-templates select="following-sibling::choice[1]/corr/@*"/>
269
              <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
270
                <xsl:attribute name="sic"><xsl:value-of select="concat(.,following-sibling::choice[1]/sic[1]/w[1])"/>
271
                  <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
272
                </xsl:attribute>
273
                <xsl:apply-templates select="@*"/>
274
                <xsl:apply-templates/><xsl:value-of select="following-sibling::choice[1]/reg/w"/>
275
                <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
276
              </w>
277
            </corr>
278
          </xsl:when>
279
          <xsl:when test="following-sibling::*[1][self::supplied]">
280
            <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
281
              <xsl:attribute name="sic"><xsl:value-of select="."/></xsl:attribute>
282
              <xsl:apply-templates select="@*"/>
283
              <xsl:apply-templates/><supplied xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="following-sibling::supplied[1]/w"/></supplied>
284
              <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
285
            </w>
286
          </xsl:when>
287
          <xsl:when test="following-sibling::*[1][self::subst][child::add]">
288
            <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}" del="{normalize-space(following-sibling::subst[1]/del)}">
289
              <xsl:attribute name="del"><xsl:value-of select="concat('(',following-sibling::subst[1]/del[1]/w[1],')',.)"/></xsl:attribute>
290
              <xsl:apply-templates select="@*"/>
291
              <xsl:apply-templates/>
292
              <xsl:element name="add" namespace="http://www.tei-c.org/ns/1.0">
293
<!--                <xsl:attribute name="rend">inWord</xsl:attribute>-->
294
                <xsl:attribute name="del"><xsl:value-of select="normalize-space(following-sibling::subst[1]/del)"></xsl:value-of></xsl:attribute>
295
                <xsl:apply-templates select="following-sibling::subst[1]/add/@*"/>
296
                <xsl:value-of select="following-sibling::subst[1]/add/w"/>
297
              </xsl:element>
298
              <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
299
            </w>
300
          </xsl:when>
301
          <xsl:otherwise>
302
            <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
303
              <xsl:apply-templates select="@*"/>
304
              <xsl:apply-templates/>
305
              <xsl:element name="{local-name(following-sibling::*[1])}" namespace="http://www.tei-c.org/ns/1.0">
306
                <xsl:value-of select="following-sibling::*[1]//w"/>
307
              </xsl:element>
308
              <xsl:if test="$wordPartPosition='middle'"><xsl:value-of select="following-sibling::w[1]"/></xsl:if>
309
            </w>
310
          </xsl:otherwise>
311
        </xsl:choose>
312
      </xsl:when>
313
      <xsl:otherwise>
314
        <w xmlns="http://www.tei-c.org/ns/1.0" ref="{$ref}" lang="{$lang}" nametype="{$nametype}" sic="{$sic}" orig="{$orig}" abbr="{$abbr}" lb="{$lb}">
315
          <xsl:apply-templates select="@*"/>
316
          <xsl:apply-templates select="*|processing-instruction()|comment()|text()"/>
317
        </w>
318
      </xsl:otherwise>
319
    </xsl:choose>
320
  </xsl:template>
321
  
322
  <xsl:template match="*[@txm:wordPart]">
323
    <xsl:choose>
324
      <xsl:when test="matches(local-name(.),'choice') and count(child::*[1]/tei:w) &gt; 1">
325
        <xsl:comment>Attention : problème de tokenisation (choice) : <xsl:value-of select="normalize-space(.)"/></xsl:comment>
326
        <xsl:for-each select="tei:corr|tei:reg|tei:expan">
327
          <xsl:element name="{name(.)}">
328
            <xsl:apply-templates select="descendant::tei:w[not(position()=1)]"/>
329
          </xsl:element>
330
        </xsl:for-each>
331
      </xsl:when>
332
      <xsl:when test="matches(local-name(.),'subst') and count(child::*[1]/tei:w) &gt; 1">
333
        <xsl:comment>Attention : problème de tokenisation (subst) : <xsl:value-of select="normalize-space(.)"/></xsl:comment>
334
        <xsl:copy>
335
          <xsl:apply-templates select="@*[not(local-name()='wordPart')]"/>
336
          <xsl:for-each select="tei:add|tei:del">
337
            <xsl:element name="{name(.)}">
338
              <xsl:apply-templates select="descendant::tei:w[not(position()=1)]"/>
339
            </xsl:element>
340
          </xsl:for-each>
341
        </xsl:copy>
342
      </xsl:when>      
343
      <xsl:when test="count(child::w) &gt; 1">
344
        <xsl:comment>Attention : problème de tokenisation : <xsl:value-of select="normalize-space(.)"/></xsl:comment>
345
        <xsl:copy>
346
          <xsl:apply-templates select="@*[not(local-name()='wordPart')]"/>
347
          <xsl:apply-templates select="descendant::tei:w[not(position()=1)]"/>
348
        </xsl:copy>
349
      </xsl:when>
350
      <xsl:otherwise><xsl:comment>Mot coupé par une balise : <xsl:value-of select="normalize-space(.)"/></xsl:comment></xsl:otherwise>
351
    </xsl:choose>
352
    
353
  </xsl:template>
354
  
355
  <xsl:template match="lb[@rend='hyphen' and preceding-sibling::*[1][self::w]]">
356
    <xsl:comment>lb déplacé à l'intérieur du mot précédent</xsl:comment>
357
  </xsl:template>
358
	
359
	<xsl:template match="lb[not(@rend='hyphen') and matches(preceding-sibling::tei:w[1],'\w+-\s*$')]">
360
		<xsl:comment>Attention : coupure de mot non marquée ! lb déplacé à l'intérieur du mot précédent</xsl:comment>
361
		<!--<note xmlns="http://www.tei-c.org/ns/1.0" type="auto">Attention : coupure de mot non marquée !</note>-->
362
	</xsl:template>
363
	
364
  
365
  <xsl:template match="s">
366
    <xsl:apply-templates/>
367
  </xsl:template>
368

    
369
</xsl:stylesheet>