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

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

amelioration de la gestion des sauts de paragraphe (la mort du serpent de mer de ce plugin?)

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