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

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

passage version 0.12: ajout du chois du mode (doc/img) pour les images et utilisation du nom du fichier si le titre est vide

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