source: spip-zone/_plugins_/_stable_/odt2spip/version_0.1_stable/inc/odt2spip.xsl @ 28686

Last change on this file since 28686 was 28686, checked in by cy_altern@…, 12 years ago

ajout du choix de la langue de publication de l'article généré

File size: 29.3 KB
Line 
1<?xml version="1.0" encoding="iso-8859-1"?>
2<xsl:stylesheet version="1.0"
3        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4    xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
5    xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
6    xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
7    xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
8    xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
9    xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
10    xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
11    xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
12    xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
13    xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
14    xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
15    xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
16    xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
17    xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0"
18
19    xmlns:dc="http://purl.org/dc/elements/1.1/"
20    xmlns:xlink="http://www.w3.org/1999/xlink"
21    xmlns:math="http://www.w3.org/1998/Math/MathML"
22    xmlns:xforms="http://www.w3.org/2002/xforms"
23
24    xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
25    xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
26    xmlns:smil="urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"
27       
28    xmlns:ooo="http://openoffice.org/2004/office"
29    xmlns:ooow="http://openoffice.org/2004/writer"
30    xmlns:oooc="http://openoffice.org/2004/calc"
31    xmlns:int="http://catcode.com/odf_to_xhtml/internal"
32   
33    exclude-result-prefixes="office meta config text table draw presentation
34                dr3d chart form script style number anim dc xlink math xforms fo
35                svg smil ooo ooow oooc int"
36>
37
38<xsl:output method = "xml"
39            encoding="ISO-8859-1"
40            indent="yes" />
41<xsl:preserve-space elements="*" />
42
43<!-- Récuperation des parametres venant de PHP:
44  IntertitresRiches = oui|non
45  en fct de la presence d'un des plugins enluminure_typo ou intertitres_enrichis -->
46<xsl:param name="IntertitresRiches"/>
47<!-- ModeImages = img|doc pour la balise a utiliser pour integrer les images -->
48<xsl:param name="ModeImages"/>
49<!-- LanguePublication = code de la langue de publication de l'article -->
50<xsl:param name="LanguePublication"/>
51
52<!-- gestion des titres de façon la plus generique possible -->
53<!-- si @text:style-name='Heading' est utilise, recuperer 'Heading' dans $STyleTitreGeneral -->
54<xsl:variable name="StyleTitreGeneral">
55  <xsl:if test="count(//*[node()][@text:style-name='Heading']) > 0">Heading</xsl:if>
56</xsl:variable>
57
58<!-- trouver le niveau de titre qui servira de $NivoTitre1 (= {{{intertitres}}})... a la bourrin !  -->
59<xsl:variable name="NivoTitre1">
60    <xsl:choose>
61        <xsl:when test="count(//*[node()][@text:outline-level='1']
62                              | //*[node()][@text:style-name='Heading_20_1']) > 0">1</xsl:when>
63        <xsl:when test="count(//*[node()][@text:outline-level='2']
64                              | //*[node()][@text:style-name='Heading_20_2']) > 0">2</xsl:when>
65        <xsl:when test="count(//*[node()][@text:outline-level='3']
66                              | //*[node()][@text:style-name='Heading_20_3']) > 0">3</xsl:when>   
67        <xsl:when test="count(//*[node()][@text:outline-level='4']
68                              | //*[node()][@text:style-name='Heading_20_4']) > 0">4</xsl:when>
69        <xsl:when test="count(//*[node()][@text:outline-level='5']
70                              | //*[node()][@text:style-name='Heading_20_5']) > 0">5</xsl:when>
71        <xsl:when test="count(//*[node()][@text:outline-level='6']
72                              | //*[node()][@text:style-name='Heading_20_6']) > 0">6</xsl:when>
73        <xsl:when test="count(//*[node()][@text:outline-level='7']
74                              | //*[node()][@text:style-name='Heading_20_7']) > 0">7</xsl:when>
75        <xsl:when test="count(//*[node()][@text:outline-level='8']
76                              | //*[node()][@text:style-name='Heading_20_8']) > 0">8</xsl:when>
77        <xsl:when test="count(//*[node()][@text:outline-level='9']
78                              | //*[node()][@text:style-name='Heading_20_9']) > 0">9</xsl:when>
79        <xsl:when test="count(//*[node()][@text:outline-level='10']
80                              | //*[node()][@text:style-name='Heading_20_10']) > 0">10</xsl:when>
81    </xsl:choose>
82</xsl:variable>
83<!-- idem pour le niveau $NivoTitre2 (= {{titres_gras}}) en se basant sur le niveau de $NivoTitre1... Hue! -->
84<xsl:variable name="NivoTitre2">
85    <xsl:choose>
86        <xsl:when test="count(//*[node()][@text:outline-level=$NivoTitre1 + 1]
87                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 1)]) > 0"><xsl:value-of select="$NivoTitre1 + 1"/></xsl:when>
88        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 2']
89                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 2)]) > 0"><xsl:value-of select="$NivoTitre1 + 2"/></xsl:when>
90        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 3']
91                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 3)]) > 0"><xsl:value-of select="$NivoTitre1 + 3"/></xsl:when>   
92        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 4']
93                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 4)]) > 0"><xsl:value-of select="$NivoTitre1 + 4"/></xsl:when>
94        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 5']
95                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 5)]) > 0"><xsl:value-of select="$NivoTitre1 + 5"/></xsl:when>
96        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 6']
97                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 6)]) > 0"><xsl:value-of select="$NivoTitre1 + 6"/></xsl:when>
98        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 7']
99                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 7)]) > 0"><xsl:value-of select="$NivoTitre1 + 7"/></xsl:when>
100        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 8']
101                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 8)]) > 0"><xsl:value-of select="$NivoTitre1 + 8"/></xsl:when>
102        <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre1 + 9']
103                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1 + 9)]) > 0"><xsl:value-of select="$NivoTitre1 + 9"/></xsl:when>
104    </xsl:choose>
105</xsl:variable>
106
107<!-- si il n'existe pas de $StyleTitreGeneral et si il n'y a qu'un seul element de $NivoTitre1 dans le doc
108     utiliser $NivoTitre1 comme $StyleTitreGeneral => $DecalerTitres = oui -->
109<xsl:variable name="DecalerTitres">
110    <xsl:if test="not($StyleTitreGeneral = 'Heading')
111                  and count(//*[@text:outline-level='$NivoTitre1']
112                            | //*[@text:style-name=concat('Heading_20_',$NivoTitre1)]) = 1">oui</xsl:if>
113</xsl:variable>
114       
115<!--  si $DecalerTitres == oui => du fait du decalage on va avoir besoin d'un $NivoTitre3
116      idem si enluminure-typo ou intertitres_enrichis  -->
117<xsl:variable name="NivoTitre3">
118    <xsl:if test="$DecalerTitres = 'oui' or $IntertitresRiches = 'oui'">
119        <xsl:choose>
120            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 1']
121                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 1)]) > 0"><xsl:value-of select="$NivoTitre2 + 1"/></xsl:when>
122            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 2']
123                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 2)]) > 0"><xsl:value-of select="$NivoTitre2 + 2"/></xsl:when>
124            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 3']
125                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 3)]) > 0"><xsl:value-of select="$NivoTitre2 + 3"/></xsl:when>   
126            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 4']
127                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 4)]) > 0"><xsl:value-of select="$NivoTitre2 + 4"/></xsl:when>
128            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 5']
129                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 5)]) > 0"><xsl:value-of select="$NivoTitre2 + 5"/></xsl:when>
130            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 6']
131                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 6)]) > 0"><xsl:value-of select="$NivoTitre2 + 6"/></xsl:when>
132            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 7']
133                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 7)]) > 0"><xsl:value-of select="$NivoTitre2 + 7"/></xsl:when>
134            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre2 + 8']
135                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre2 + 8)]) > 0"><xsl:value-of select="$NivoTitre2 + 8"/></xsl:when>
136        </xsl:choose>
137    </xsl:if>
138</xsl:variable>
139
140<!-- super-reloud! si enluminure-typo ou intertitres_enrichis on a besoin de titre4 et titre5
141     si en plus on a $DecalerTitres == oui il faut en plus titre6
142     ca sent le besoin de pouvoir faire des boucles et/ou des fonctions en xsl...  -->
143<xsl:variable name="NivoTitre4">
144    <xsl:if test="$IntertitresRiches = 'oui'">
145        <xsl:choose>
146            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 1']
147                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 1)]) > 0"><xsl:value-of select="$NivoTitre3 + 1"/></xsl:when>
148            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 2']
149                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 2)]) > 0"><xsl:value-of select="$NivoTitre3 + 2"/></xsl:when>
150            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 3']
151                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 3)]) > 0"><xsl:value-of select="$NivoTitre3 + 3"/></xsl:when>   
152            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 4']
153                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 4)]) > 0"><xsl:value-of select="$NivoTitre3 + 4"/></xsl:when>
154            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 5']
155                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 5)]) > 0"><xsl:value-of select="$NivoTitre3 + 5"/></xsl:when>
156            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 6']
157                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 6)]) > 0"><xsl:value-of select="$NivoTitre3 + 6"/></xsl:when>
158            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre3 + 7']
159                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre3 + 7)]) > 0"><xsl:value-of select="$NivoTitre3 + 7"/></xsl:when>
160        </xsl:choose>
161    </xsl:if>
162</xsl:variable>
163<xsl:variable name="NivoTitre5">
164    <xsl:if test="$IntertitresRiches = 'oui'">
165        <xsl:choose>
166            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre4 + 1']
167                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre4 + 1)]) > 0"><xsl:value-of select="$NivoTitre4 + 1"/></xsl:when>
168            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre4 + 2']
169                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre4 + 2)]) > 0"><xsl:value-of select="$NivoTitre4 + 2"/></xsl:when>
170            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre4 + 3']
171                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre4 + 3)]) > 0"><xsl:value-of select="$NivoTitre4 + 3"/></xsl:when>   
172            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre4 + 4']
173                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre4 + 4)]) > 0"><xsl:value-of select="$NivoTitre4 + 4"/></xsl:when>
174            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre4 + 5']
175                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre4 + 5)]) > 0"><xsl:value-of select="$NivoTitre4 + 5"/></xsl:when>
176            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre4 + 6']
177                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre4 + 6)]) > 0"><xsl:value-of select="$NivoTitre4 + 6"/></xsl:when>
178        </xsl:choose>
179    </xsl:if>
180</xsl:variable>
181<xsl:variable name="NivoTitre6">
182    <xsl:if test="$DecalerTitres = 'oui' and $IntertitresRiches = 'oui'">
183        <xsl:choose>
184            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre5 + 1']
185                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre5 + 1)]) > 0"><xsl:value-of select="$NivoTitre5 + 1"/></xsl:when>
186            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre5 + 2']
187                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre5 + 2)]) > 0"><xsl:value-of select="$NivoTitre5 + 2"/></xsl:when>
188            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre5 + 3']
189                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre5 + 3)]) > 0"><xsl:value-of select="$NivoTitre5 + 3"/></xsl:when>   
190            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre5 + 4']
191                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre5 + 4)]) > 0"><xsl:value-of select="$NivoTitre5 + 4"/></xsl:when>
192            <xsl:when test="count(//*[node()][@text:outline-level='$NivoTitre5 + 5']
193                              | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre5 + 5)]) > 0"><xsl:value-of select="$NivoTitre5 + 5"/></xsl:when>
194        </xsl:choose>
195    </xsl:if>
196</xsl:variable>
197
198
199<!-- trouver un titre general au document:
200     si $StyleTitreGeneral existe, concatener tous les elements avec ce style
201     sinon utiliser le premier element ayant le niveau de style $NivoTitre1
202     sinon utiliser le premier element text:h ou text:p et basta! -->
203<xsl:variable name="ContenuTitreDoc">
204        <xsl:choose>
205            <xsl:when test="$StyleTitreGeneral='Heading'">
206                <xsl:for-each select="//*[node()][@text:style-name='Heading']"><xsl:value-of select="."/> </xsl:for-each>
207            </xsl:when>
208            <xsl:when test="count(//*[node()][@text:outline-level=$NivoTitre1]
209                                  | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1)]
210                                  ) > 0">
211                <xsl:value-of select="//*[node()][@text:outline-level=$NivoTitre1][1]
212                                      | //*[node()][@text:style-name=concat('Heading_20_',$NivoTitre1)][1]"/>
213            </xsl:when>
214           <xsl:otherwise>
215                <xsl:value-of select="//text:h[node()][1] | //text:p[node()][1]"/>
216            </xsl:otherwise>
217        </xsl:choose>
218</xsl:variable>
219
220
221<!-- traitement de l'ensemble du doc -->
222<xsl:template match="/office:document-content">
223<!--  test niveaux de titres
224t1= <xsl:value-of select="$NivoTitre1" />
225t2= <xsl:value-of select="$NivoTitre2" />
226t3= <xsl:value-of select="$NivoTitre3" />
227tG= <xsl:value-of select="$StyleTitreGeneral" />
228-->
229<!-- test recuperation du parametre passe par PHP
230intertitres_riches= <xsl:value-of select="$IntertitresRiches" />
231ModeImages= <xsl:value-of select="$ModeImages" />
232-->
233<articles>
234        <article>
235                <id_article></id_article>
236                <surtitre></surtitre>
237    <titre><xsl:value-of select="$ContenuTitreDoc"/></titre>
238                <soustitre></soustitre>
239                <id_rubrique></id_rubrique>
240                <descriptif></descriptif>
241                <chapo></chapo>
242                <texte>
243        <xsl:apply-templates select="office:body/office:text"/>
244    </texte>
245                <ps></ps>
246                <date></date>
247                <statut>prop</statut>
248                <id_secteur></id_secteur>
249                <date_redac></date_redac>
250                <accepter_forum></accepter_forum>
251                <date_modif></date_modif>
252                <lang><xsl:value-of select="$LanguePublication" /></lang>
253                <langue_choisie></langue_choisie>
254                <id_trad></id_trad>
255                <extra></extra>
256                <nom_site></nom_site>
257                <url_site></url_site>
258                <url_propre></url_propre>
259        </article>
260</articles>   
261
262</xsl:template>
263
264
265<!-- virer les eventuels table des matieres et index -->
266<xsl:template match="//text:table-of-content | //text:alphabetical-index"/>
267
268
269<!-- les paragraphes y compris les vides utilises pour saut de ligne -->
270<xsl:template match="text:p">
271                <xsl:apply-templates/>
272    <xsl:if test="count(node())=0"><xsl:text >&#xA;&#xA;</xsl:text></xsl:if>
273</xsl:template>
274
275
276<!-- bidouiller pour ne pas afficher le titre du document dans le texte (part 1) -->
277<xsl:template match="//*[@text:style-name='Heading']"/>
278
279<!-- les titres de façon dynamique en fonction des niveaux presents dans le fichier  -->
280<xsl:template match="//*[node()][@text:outline-level]
281                     | //*[node()][starts-with(@text:style-name,'Heading_20_')]">
282    <xsl:choose>
283<!-- suite de la bidouille pour ne pas afficher le titre du document dans le texte -->
284        <xsl:when test="not($StyleTitreGeneral='Heading') and text()=$ContenuTitreDoc"/>
285        <xsl:otherwise>
286            <xsl:call-template name="titres"/>
287        </xsl:otherwise>
288    </xsl:choose>
289</xsl:template>
290
291<xsl:template name="titres">
292<!-- si $DecalerTitres == oui, décaler les niveaux puisqu'il n'existe pas de $StyleTitreGeneral et qu'il n'y a qu'un $NivoTitre1 -->
293    <xsl:variable name="NivoTitre1_ec">
294      <xsl:choose>
295          <xsl:when test="not($DecalerTitres='oui')">
296            <xsl:value-of select="$NivoTitre1"/>
297          </xsl:when>
298          <xsl:otherwise>
299            <xsl:value-of select="$NivoTitre2"/>
300          </xsl:otherwise>
301      </xsl:choose>
302    </xsl:variable>
303    <xsl:variable name="NivoTitre2_ec">
304      <xsl:choose>
305          <xsl:when test="not($DecalerTitres='oui')">
306            <xsl:value-of select="$NivoTitre2"/>
307          </xsl:when>
308          <xsl:otherwise>
309            <xsl:value-of select="$NivoTitre3"/>
310          </xsl:otherwise>
311      </xsl:choose>
312    </xsl:variable>
313<!-- appliquer les formatages des titres -->
314<xsl:text >&#xA;</xsl:text>
315                <xsl:choose>
316<!-- formatages avec enluminure_typo ou intertitres_enrichis  -->
317        <xsl:when test="$IntertitresRiches = 'oui'">
318          <!-- definir les niveaux de titre 3, 4 et 5 en fonction de $DecalerTitres  -->
319            <xsl:variable name="NivoTitre3_ec">
320              <xsl:choose>
321                  <xsl:when test="not($DecalerTitres='oui')">
322                    <xsl:value-of select="$NivoTitre3"/>
323                  </xsl:when>
324                  <xsl:otherwise>
325                    <xsl:value-of select="$NivoTitre4"/>
326                  </xsl:otherwise>
327              </xsl:choose>
328            </xsl:variable>
329            <xsl:variable name="NivoTitre4_ec">
330              <xsl:choose>
331                  <xsl:when test="not($DecalerTitres='oui')">
332                    <xsl:value-of select="$NivoTitre4"/>
333                  </xsl:when>
334                  <xsl:otherwise>
335                    <xsl:value-of select="$NivoTitre5"/>
336                  </xsl:otherwise>
337              </xsl:choose>
338            </xsl:variable>
339            <xsl:variable name="NivoTitre5_ec">
340              <xsl:choose>
341                  <xsl:when test="not($DecalerTitres='oui')">
342                    <xsl:value-of select="$NivoTitre5"/>
343                  </xsl:when>
344                  <xsl:otherwise>
345                    <xsl:value-of select="$NivoTitre6"/>
346                  </xsl:otherwise>
347              </xsl:choose>
348            </xsl:variable>
349          <!-- appliquer le formatage proprement dit -->
350            <xsl:choose>
351                                <xsl:when test="@text:outline-level=$NivoTitre1_ec or @text:style-name=concat('Heading_20_',$NivoTitre1_ec)">
352{{{<xsl:apply-templates/>}}}
353</xsl:when>
354                                <xsl:otherwise>
355                    <!-- recuperer le niveau de titre en cours a la bourrin
356                    (a coup sur y'a moyen de faire mieux mais on va pas se decarcasser pour ces p*** de plugins qui forkent definitivement le code spip !  -->
357                    <xsl:variable name="NivoTitre_ec">
358                        <xsl:choose>
359                            <xsl:when test="@text:outline-level=$NivoTitre2_ec or @text:style-name=concat('Heading_20_',$NivoTitre2_ec)">2</xsl:when>
360                            <xsl:when test="@text:outline-level=$NivoTitre3_ec or @text:style-name=concat('Heading_20_',$NivoTitre3_ec)">3</xsl:when>
361                            <xsl:when test="@text:outline-level=$NivoTitre4_ec or @text:style-name=concat('Heading_20_',$NivoTitre4_ec)">4</xsl:when>
362                            <xsl:when test="@text:outline-level=$NivoTitre5_ec or @text:style-name=concat('Heading_20_',$NivoTitre5_ec)">5</xsl:when>
363                        </xsl:choose>
364                    </xsl:variable>
365{<xsl:value-of select="$NivoTitre_ec"/>{<xsl:apply-templates/>}<xsl:value-of select="$NivoTitre_ec"/>}
366</xsl:otherwise>
367                        </xsl:choose>
368        </xsl:when>
369<!-- formatages sans enluminure_typo ou intertitres_enrichis  -->
370        <xsl:otherwise>
371            <xsl:choose>
372                                <xsl:when test="@text:outline-level=$NivoTitre1_ec or @text:style-name=concat('Heading_20_',$NivoTitre1_ec)">
373{{{<xsl:apply-templates/>}}}
374</xsl:when>
375                                <xsl:when test="@text:outline-level=$NivoTitre2_ec or @text:style-name=concat('Heading_20_',$NivoTitre2_ec)">
376{{<xsl:apply-templates/>}}
377</xsl:when>
378                                <xsl:otherwise>
379{<xsl:apply-templates/>}
380</xsl:otherwise>
381                        </xsl:choose>
382        </xsl:otherwise>
383    </xsl:choose>
384<xsl:text >&#xA;</xsl:text>
385</xsl:template>
386
387
388<!-- traitement des listes -->
389<xsl:template match="text:list">
390  <xsl:variable name="level" select="count(ancestor::text:list)+1"/>
391
392        <!-- le type de liste est le @text:style-name de l'element <text:list> le plus exterieur des listes imbriquees -->
393        <xsl:variable name="listClass">
394                <xsl:choose>
395                        <xsl:when test="$level=1">
396                                <xsl:value-of select="@text:style-name"/>
397                        </xsl:when>
398                        <xsl:otherwise>
399                                <xsl:value-of select="ancestor::text:list[last()]/@text:style-name"/>
400                        </xsl:otherwise>
401                </xsl:choose>
402        </xsl:variable>
403
404        <!-- choisir le bon type de liste en fonction du <text:list-level-style-XXX> du  <text:list-style> dans les styles pre-definis
405        <xsl:variable name="node" select="key('listTypes', $listClass)/*[@text:level='$level']"/>  -->
406  <xsl:variable name="node" select="/office:document-content/office:automatic-styles/text:list-style[@style:name=$listClass]/*[1]"/> 
407       
408  <xsl:variable name="s">
409    <xsl:choose>
410        <xsl:when test="local-name($node)='list-level-style-number'">#</xsl:when>
411                <xsl:otherwise>*</xsl:otherwise>
412    </xsl:choose>
413  </xsl:variable>
414<!-- -->
415  <xsl:call-template name="process-list">
416    <xsl:with-param name="s" select="$s"/>
417        </xsl:call-template>
418 
419  <xsl:text >&#xA;</xsl:text>
420</xsl:template>
421
422<xsl:template name="process-list"> 
423  <xsl:param name="s"/>
424  <xsl:for-each select="descendant::text:list-item/text:p[node()]">
425-<xsl:for-each select="ancestor::*"><!-- gestion des listes imbriquées -->
426        <xsl:if test="name()='text:list-item'"><xsl:value-of select="$s"/></xsl:if>
427</xsl:for-each> 
428    <xsl:apply-templates />
429  </xsl:for-each>
430</xsl:template>
431
432
433<!-- traitement des tableaux -->
434<xsl:template match="table:table">
435<xsl:text >&#xA;</xsl:text>
436                <xsl:apply-templates select="table:table-row | */table:table-row"/>
437<xsl:text >&#xA;</xsl:text>       
438</xsl:template>
439
440<xsl:template match="table:table-row | */table:table-row">
441<xsl:text >&#xA;</xsl:text>|<xsl:choose>
442<!-- si c'est la premiere ligne *et* qu'il n'y a as de cellules fusionnees verticalement utiliser {{ }} pour faire un thead -->
443   <xsl:when test="position()=1 and count(table:table-cell[@table:number-rows-spanned])=0">
444       <xsl:apply-templates select="table:table-cell | table:covered-table-cell" mode="thead"/>
445   </xsl:when>
446   <xsl:otherwise>
447        <xsl:apply-templates select="table:table-cell | table:covered-table-cell" mode="tbody"/>
448   </xsl:otherwise>
449</xsl:choose>
450</xsl:template>
451
452<xsl:template match="table:table-cell" mode="thead">{{<xsl:apply-templates select="*[node()]"/>}}|</xsl:template>
453<xsl:template match="table:table-cell" mode="tbody"><xsl:apply-templates select="*[node()]"/>|</xsl:template>
454
455<!-- ca c'est la mauvaise bidouille pour avoir le meme traitement pour les cellules de fusion alors qu'elles ont un mode different -->
456<xsl:template match="table:covered-table-cell" mode="thead"><xsl:call-template name="cells_fusionnees"/></xsl:template>
457<xsl:template match="table:covered-table-cell" mode="tbody"><xsl:call-template name="cells_fusionnees"/></xsl:template>
458
459<!-- traitement des cellules masquees du fait de fusions par colonnes/lignes
460     bidouille: si dans les cellules precedentes de la meme ligne il y a un table:number-columns-spanned="XX"
461     alors c'est une fusion de cellules d'une meme ligne (code <|) sinon fusion de cellules d'une meme colonne (code ^|) -->
462<xsl:template name="cells_fusionnees">
463  <xsl:variable name="fusion">
464                <xsl:for-each select="preceding-sibling::*">
465                    <xsl:if test="@table:number-columns-spanned &gt; 1">&lt;</xsl:if>
466    </xsl:for-each>
467        </xsl:variable>
468        <xsl:variable name="caractere_fusion">
469    <xsl:choose>
470        <xsl:when test="$fusion = ''">^</xsl:when>
471        <xsl:otherwise>&lt;</xsl:otherwise>
472    </xsl:choose>
473  </xsl:variable>
474<xsl:value-of select="$caractere_fusion"/>|</xsl:template>
475
476
477<!-- les liens -->
478<xsl:template match="text:a">[<xsl:apply-templates />-><xsl:value-of select="@xlink:href" />]</xsl:template>
479
480<!-- les ancres -->
481<xsl:template match="text:bookmark-start|text:bookmark">[<xsl:value-of select="@text:name" />&lt;-]
482</xsl:template>
483
484<!-- notes de bas de page       -->
485<xsl:template match="text:note-citation"/>
486<xsl:template match="text:note-body">[[<xsl:apply-templates />]]</xsl:template>
487       
488<!-- les sauts de ligne -->
489<xsl:template match="text:line-break">
490_ <xsl:apply-templates />
491</xsl:template>
492
493<!-- gras et italiques -->
494<xsl:template match="text:span">
495        <xsl:variable name="StyleType" select="@text:style-name"/>
496        <xsl:variable name="weight" select="/office:document-content/office:automatic-styles/style:style[@style:name=$StyleType]/style:text-properties/@fo:font-weight"/>
497        <xsl:variable name="style" select="/office:document-content/office:automatic-styles/style:style[@style:name=$StyleType]/style:text-properties/@fo:font-style"/>
498        <xsl:choose>
499    <xsl:when test="$weight='bold'">{{<xsl:apply-templates />}}</xsl:when>
500        <xsl:when test="$style='italic'">{<xsl:apply-templates />}</xsl:when>
501        <xsl:otherwise>
502                        <xsl:apply-templates />
503                </xsl:otherwise>
504        </xsl:choose>   
505</xsl:template>
506
507
508<!-- nettement plus bricolage : les images...
509     on met le nom de fichier de l'image qu'il faudra echanger en php par son id document spip une fois qu'il sera reference dans la table document --> 
510<xsl:template match="draw:image">
511<!-- on filtre les elements draw:image qui ont un frere draw:object cad qui ne sont pas des images -->   
512   <xsl:if test="count(parent::draw:frame/draw:object)=0">
513      <xsl:call-template name="img2texte" />
514   </xsl:if>
515</xsl:template>
516
517<xsl:template name="img2texte">&#60;<xsl:value-of select="$ModeImages" /><xsl:value-of select="substring(@xlink:href,10)"/>;;;<xsl:value-of select="substring-before(parent::draw:frame/@svg:width,'cm')" />;;;<xsl:value-of select="substring-before(parent::draw:frame/@svg:height,'cm')" />;;;|<xsl:choose>
518<!-- sale bidouille pour approximer la position de l'image (|left |center |right) -->
519<xsl:when test="substring-before(parent::draw:frame/@svg:x, 'cm') &lt;= 2">left</xsl:when>
520<xsl:when test="substring-before(parent::draw:frame/@svg:x, 'cm') &gt;= 5">right</xsl:when>
521<xsl:otherwise>center</xsl:otherwise>
522</xsl:choose>&#62;</xsl:template>
523
524<!-- pour continuer dans les bidouillages, les objets integres
525     i.e. les formules de math sous forme d'un fichier MathML externe stocke dans un ss-rep: /Object X/content.xml
526     ici on cree une balise <math>Object X</math> qui sera ensuite post-traitee pour recuperer la formule   -->
527<xsl:template match="draw:object[@xlink:href]">
528&#60;math&#62;<xsl:value-of select="substring(@xlink:href,3)"/>&#60;/math&#62;
529</xsl:template>
530
531<!--
532        This template is too dangerous to leave active...
533<xsl:template match="text()">
534        <xsl:if test="normalize-space(.) !=''">
535                <xsl:value-of select="normalize-space(.)"/>
536        </xsl:if>
537</xsl:template>
538-->
539
540</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.