source: spip-zone/_plugins_/porte_plume_extras/enluminures_typographiques_v3/typoenluminee.php @ 46107

Last change on this file since 46107 was 46107, checked in by teddy.spip@…, 9 years ago

Ajout de nouveaux boutons, provenant de la barre typo enrichie 1.9.1
Bémol, actuellement, dans la partie privée, les raccourcis typo ne sont pas interprétés. Mais tout se passe bien en front office.

File size: 14.3 KB
Line 
1<?php
2
3/*
4  * Ce plugin rajoute des raccourcis typographique et ameliore les possibilites de la barre typographique pour les redacteurs
5*/
6
7        /*
8         *    Fonctions de ces filtres :
9         *     Ils rajoutent quelques racourcis typo a SPIP
10         *
11         *     Syntaxe des raccourcis :
12         *           [/texte/] : aligner le texte a droite
13         *           [!texte!] : aligner le texte a gauche
14         *           [|texte|] : centrer le texte
15         *           [(texte)] : encadrer le texte (occupe toute la largeur de la page, a mettre autour d'un paragraphe)
16         *           [*texte*] : encadrer/surligner le texte (une partie a l'interieur d'un paragraphe)
17         *           [**texte*] : variante encadrer/surligner le texte (une partie a l'interieur d'un paragraphe)
18         *           <sup>texte</sup> : mettre en exposant le texte selectionne
19         *           <sub>texte</sub> : mettre en indice le texte selectionne
20         *
21         *     Styles pour les encadrements a rajouter dans votre feuille de style :
22         *            .texteencadre-spip {
23         *              background: #FFE;
24         *              border-bottom: 2px solid #999999;
25         *              border-left: 1px solid #EEEEEE;
26         *              border-right: 2px solid #999999;
27         *              border-top: 1px solid #EEEEEE;
28         *              padding: .25em;
29         *           }
30         *           .caractencadre-spip {
31         *              border: 1px solid #666;
32         *              padding: 0px .5em 0px .5em;
33         *           }
34         *
35        */
36
37// Gerer les variables de personnalisation, fonction depreciee sous SPIP 2.0
38// A suivre sur la methode...
39if(!function_exists('tester_variable')) {
40        function tester_variable($var, $val){
41                if (!isset($GLOBALS[$var]))     $GLOBALS[$var] = $val;
42        }
43}
44
45function typoenluminee_pre_propre($texte) {
46        static $chercher_raccourcis=NULL;
47        static $remplacer_raccourcis=NULL;
48       
49        if ($chercher_raccourcis===NULL) {
50       
51                // tous les elements block doivent etre introduits ici
52                // pour etre pris en charge par paragrapher
53       
54                // Definition des differents intertitres possibles, si pas deja definies
55                if ((!function_exists('lire_config')) OR (isset($GLOBALS['config_intertitre']))) {
56                        tester_variable('debut_intertitre', '<h3 class="spip">');
57                        tester_variable('fin_intertitre', '</h3>');
58                        tester_variable('debut_intertitre_2', '<h4 class="spip">');
59                        tester_variable('fin_intertitre_2', '</h4>');
60                        tester_variable('debut_intertitre_3', '<h5 class="spip">');
61                        tester_variable('fin_intertitre_3', '</h5>');
62                        tester_variable('debut_intertitre_4', '<h6 class="spip">');
63                        tester_variable('fin_intertitre_4', '</h6>');
64                        tester_variable('debut_intertitre_5', '<strong class="spip titraille5">');
65                        tester_variable('fin_intertitre_5', '</strong>');
66                } else {
67                        $GLOBALS['debut_intertitre'] = lire_config('bte/titraille1open','<h3 class="spip">');
68                        $GLOBALS['fin_intertitre'] = lire_config('bte/titraille1close','</h3>');
69                        $GLOBALS['debut_intertitre_2'] = lire_config('bte/titraille2open','<h4 class="spip">');
70                        $GLOBALS['fin_intertitre_2'] = lire_config('bte/titraille2close','</h4>');
71                        $GLOBALS['debut_intertitre_3'] = lire_config('bte/titraille3open','<h5 class="spip">');
72                        $GLOBALS['fin_intertitre_3'] = lire_config('bte/titraille3close','</h5>');
73                        $GLOBALS['debut_intertitre_4'] = lire_config('bte/titraille4open','<h6 class="spip">');
74                        $GLOBALS['fin_intertitre_4'] = lire_config('bte/titraille4close','</h6>');
75                        $GLOBALS['debut_intertitre_5'] = lire_config('bte/titraille5open','<strong class="spip titraille5">');
76                        $GLOBALS['fin_intertitre_5'] = lire_config('bte/titraille5close','</strong>');
77                }
78       
79                tester_variable('toujours_paragrapher', false);
80       
81                global $debut_intertitre, $fin_intertitre;
82                global $debut_intertitre_2, $fin_intertitre_2;
83                global $debut_intertitre_3, $fin_intertitre_3;
84                global $debut_intertitre_4, $fin_intertitre_4;
85                global $debut_intertitre_5, $fin_intertitre_5;
86       
87                $chercher_raccourcis=array();
88                $remplacer_raccourcis=array();
89                global $BarreTypoEnrichie;
90                if (is_array($BarreTypoEnrichie))
91                        foreach($BarreTypoEnrichie as $item) {
92                                $chercher_raccourcis[]=$item['chercher'];
93                                $remplacer_raccourcis[]=$item['remplacer'];     
94                        }
95       
96                        /* 9b */        $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*\*\*\*(.*)[}][}][}]($|[^}])/S";
97                        /* 9 */         $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*\*\*(.*)[}][}][}]($|[^}])/S";
98                        /* 7 */         $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*\*(.*)[}][}][}]($|[^}])/S";
99                        /* 5 */         $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*(.*)[}][}][}]($|[^}])/S";
100                        /* 3 */         $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*(.*)[}][}][}]($|[^}])/S";
101                        /* 1 */         $chercher_raccourcis[]="/(^|[^{])[{][{][{](.*)[}][}][}]($|[^}])/S";
102                        /* 11 */        $chercher_raccourcis[]="/\{(§|§)\{/S"; # § Pour gerer l'unicode aussi !
103                        /* 12 */        $chercher_raccourcis[]="/\}(§|§)\}/S"; # ne pas sauvergarder ce fichier en utf8 !
104                        /* 13 */        $chercher_raccourcis[]="/<-->/S";
105                        /* 14 */        $chercher_raccourcis[]="/-->/S";
106                        /* 15 */        $chercher_raccourcis[]="/<--/S";
107                        /* 16 */        $chercher_raccourcis[]="/<==>/S";
108                        /* 17 */        $chercher_raccourcis[]="/==>/S";
109                        /* 18 */        $chercher_raccourcis[]="/<==/S";
110                        /* 19 */        $chercher_raccourcis[]="/\([cC]\)/S";
111                        /* 20 */        $chercher_raccourcis[]="/\([rR]\)/S";
112                        /* 21 */        $chercher_raccourcis[]="/\([tT][mM]\)/S";
113                        /* 22 */        $chercher_raccourcis[]="/\.\.\./S";
114       
115                        /* 9b */        $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_5\$2$fin_intertitre_5\n\n\$3";
116                        /*  9 */        $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_4\$2$fin_intertitre_4\n\n\$3";
117                        /*  7 */        $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_3\$2$fin_intertitre_3\n\n\$3";
118                        /*  5 */        $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_2\$2$fin_intertitre_2\n\n\$3";
119                        /*  3 */        $remplacer_raccourcis[]="\$1\n\n$debut_intertitre\$2$fin_intertitre\n\n\$3";
120                        /*  1 */        $remplacer_raccourcis[]="\$1\n\n$debut_intertitre\$2$fin_intertitre\n\n\$3";
121                        /* 11 */        $remplacer_raccourcis[]="<span style=\"font-variant: small-caps\">";
122                        /* 12 */        $remplacer_raccourcis[]="</span>";
123                        /* 13 */        $remplacer_raccourcis[]="&harr;";
124                        /* 14 */        $remplacer_raccourcis[]="&rarr;";
125                        /* 15 */        $remplacer_raccourcis[]="&larr;";
126                        /* 16 */        $remplacer_raccourcis[]="&hArr;";
127                        /* 17 */        $remplacer_raccourcis[]="&rArr;";
128                        /* 18 */        $remplacer_raccourcis[]="&lArr;";
129                        /* 19 */        $remplacer_raccourcis[]="&copy;";
130                        /* 20 */        $remplacer_raccourcis[]="&reg;";
131                        /* 21 */        $remplacer_raccourcis[]="&trade;";
132                        /* 22 */        $remplacer_raccourcis[]="&hellip;";
133        }
134
135        if(!$texte) return $texte;
136
137        // Conversion des intertitres d'enluminures type {ß{titre}ß}
138        // ou ß est un nombre en intertitres avec des étoiles type {{{* (avec ß étoiles)
139        // {1{ sera converti en {{{* ; {2{ sera converti en {{{** ; etc.
140        $texte=preg_replace_callback ("/(\{(\d)\{)(.*?)(\}\d\})/",
141                                        create_function (
142                                                '$matches',
143                                                'return "{{{".str_repeat("*",$matches[2]).$matches[3]."}}}";'
144                                                ),
145                                        $texte);
146
147        $texte = preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte);
148
149        return $texte;
150}
151
152function typoenluminee_post_propre($texte) {
153        static $cherche1 = NULL;
154        static $remplace1 = NULL;
155
156        if ($cherche1===NULL) {
157                # Le remplacement des intertitres de premier niveau a deja ete effectue dans inc/texte.php
158                $cherche1 = array();
159                $remplace1 = array();
160                global $BarreTypoEnrichieBlocs;
161                if (is_array($BarreTypoEnrichieBlocs))
162                        foreach($BarreTypoEnrichieBlocs as $item) {
163                                $cherche1[]=$item['chercher'];
164                                $remplace1[]=$item['remplacer'];
165                        }
166       
167                $cherche1[] = /* 15 */  ",\[/(.*)/\],Ums";
168                $cherche1[] = /* 16 */  ",\[!(.*)!\],Ums";
169                $cherche1[] = /* 17 */  ",\[\|(.*)\|\],Ums";
170                $cherche1[] = /* 19 */  ",\[\((.*)\)\],Ums";
171                $cherche1[] = /* 21 */  "/\[\*\*/S";
172                $cherche1[] = /* 21b */         "/\[\*/S";
173                $cherche1[] = /* 22 */  "/\*\]/S";
174                $cherche1[] = /* 23 */  "/\[\^/S";
175                $cherche1[] = /* 24 */  "/\^\]/S";
176       
177                $remplace1[] = /* 15 */         "<div class=\"spip\" style=\"text-align:right;\">$1</div>";
178                $remplace1[] = /* 16 */         "<div class=\"spip\" style=\"text-align:left;\">$1</div>";
179                $remplace1[] = /* 17 */         "<div class=\"spip\" style=\"text-align:center;\">$1</div>";
180                $remplace1[] = /* 19 */         "<div class=\"texteencadre-spip spip\">$1</div>";
181                $remplace1[] = /* 21 */         "<strong class=\"caractencadre2-spip spip\">";
182                $remplace1[] = /* 21b */        "<strong class=\"caractencadre-spip spip\">";
183                $remplace1[] = /* 22 */ "</strong>";
184                $remplace1[] = /* 23 */         "<sup>";
185                $remplace1[] = /* 24 */ "</sup>";
186                $remplace1[] = /* 25 */         "<sub>";
187                $remplace1[] = /* 26 */ "</sub>";
188        }
189        if(!$texte) return $texte;
190        $texte = preg_replace($cherche1, $remplace1, $texte);
191        $texte = paragrapher($texte,$GLOBALS['toujours_paragrapher']); // il faut reparagrapher a cause des raccourcis typo que l'on a ajoute (block div)
192        return $texte;
193}
194
195
196function typoenluminee_pre_typo($texte) {
197        static $local_barre_typo_pas_de_fausses_puces = null;
198        static $chercher_raccourcis;
199        static $remplacer_raccourcis;
200        global $debut_italique, $fin_italique;
201        if (!isset($GLOBALS['barre_typo_pas_de_fork_typo']) OR $GLOBALS['barre_typo_pas_de_fork_typo'] === true)
202                return $texte;
203        if(!$texte) return $texte;
204
205        if ($local_barre_typo_pas_de_fausses_puces===null){
206                // remplace les fausses listes a puce par de vraies ?
207                // (recherche en debut de lignes - suivi d'un ou plusieurs caracteres blancs, en mode multiligne)
208                // Mettre $GLOBALS['barre_typo_pas_de_fausses_puces'] = true; dans mes_options.php pour avoir ce comportement
209                if (isset($GLOBALS['barre_typo_pas_de_fausses_puces'])) {
210                        $local_barre_typo_pas_de_fausses_puces = $GLOBALS['barre_typo_pas_de_fausses_puces'];
211                } else {
212                        if (function_exists('lire_config')) {
213                                $local_barre_typo_pas_de_fausses_puces = (lire_config('bte/puces','Non') == 'Oui')?true:false;
214                        }
215                }
216                tester_variable('debut_italique', "<i$class_spip>");
217                tester_variable('fin_italique', '</i>');
218               
219                $chercher_raccourcis = array(
220                        /* 9 */         "/(?<![{\d])[{](?![{\d])/S", // Expressions complexes car on n'a pas encore traite les titres ici
221                        /* 10 */        "/(?<![}\d])[}](?![}\d])/S", // puisque italique utilisent les memes caracteres en nombre inferieur
222                        /* 13 */        "/<-->/S",
223                        /* 14 */        "/-->/S",
224                        /* 15 */        "/<--/S",
225                        /* 16 */        "/<==>/S",
226                        /* 17 */        "/==>/S",
227                        /* 18 */        "/<==/S",
228                        /* 19 */        "/\(c\)/Si",
229                        /* 20 */        "/\(r\)/Si",
230                        /* 21 */        "/\(tm\)/Si",
231                        /* 22 */        "/\.\.\./S",
232                );
233       
234                $remplacer_raccourcis = array(
235                        /* 9 */         $debut_italique,
236                        /* 10 */        $fin_italique,
237                        /* 13 */        "&harr;",
238                        /* 14 */        "&rarr;",
239                        /* 15 */        "&larr;",
240                        /* 16 */        "&hArr;",
241                        /* 17 */        "&rArr;",
242                        /* 18 */        "&lArr;",
243                        /* 19 */        "&copy;",
244                        /* 20 */        "&reg;",
245                        /* 21 */        "&trade;",
246                        /* 22 */        "&hellip;",
247                );
248        }
249        if ($local_barre_typo_pas_de_fausses_puces === true) {
250                $texte =  preg_replace('/^-\s+/m','-* ',$texte);
251        }
252
253        $texte = preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte);
254       
255        /*
256                Cas particulier pour le gras
257                Il ne faut pas traiter la mise en gras ici si le texte contient un tableau
258        */
259        if (!preg_match(',.(\|([[:space:]]*{{[^}]+}}[[:space:]]*|<))+.,sS', $texte)) {
260                $chercher_raccourcisg = array(
261                        /* 7 */         "/(?<![{])[{][{](?![{])/S", // Expressions complexes car on n'a pas encore traite les titres ici
262                        /* 8 */         "/(?<![}])[}][}](?![}])/S" // En gros, verification qu'on n'est pas a l'interieur d'un titre
263                );
264                $remplacer_raccourcisg = array(
265                        /* 7 */         "<strong class=\"spip\">",
266                        /* 8 */         "</strong>"
267                );
268                $texte = preg_replace($chercher_raccourcisg, $remplacer_raccourcisg, $texte);
269        }
270        return $texte;
271}
272
273function typoenluminee_post_typo($texte) {
274        static $cherche1;
275        static $remplace1;
276        if (!isset($GLOBALS['barre_typo_pas_de_fork_typo']) OR $GLOBALS['barre_typo_pas_de_fork_typo'] === true)
277                return $texte;
278        if (!$cherche1) {
279                $cherche1 = array(
280                        /* 21 */        "/\[\*\*/S",
281                        /* 21b */       "/\[\*/S",
282                        /* 22 */        "/\*\]/S",
283                        /* 23 */        "/\[\^/S",
284                        /* 24 */        "/\^\]/S",
285                );
286       
287                $remplace1 = array(
288                        /* 21 */        "<strong class=\"caractencadre2-spip spip\">",
289                        /* 21b */       "<strong class=\"caractencadre-spip spip\">",
290                        /* 22 */        "</strong>",
291                        /* 23 */        "<sup>",
292                        /* 24 */        "</sup>",
293                        /* 25 */        "<sub>",
294                        /* 26 */        "</sub>",
295                );
296        }
297        if(!$texte) return $texte;
298        $texte = preg_replace($cherche1, $remplace1, $texte);
299        // Correction des & en &amp;
300        $texte = preg_replace('/&([A-Za-z#0-9]*);/','@@@amp:\1:amp@@@',$texte); // echapement des entites html deja presentes
301        $texte = str_replace('&','&amp;',$texte);
302        $texte = preg_replace('/@@@amp:([A-Za-z#0-9]*):amp@@@/','&\1;',$texte);
303        // Raccourci typographique <sc></sc>
304        $texte = str_replace("<sc>",
305                "<span class=\"spip\" style=\"font-variant: small-caps\">", $texte);
306        $texte = str_replace("</sc>", "</span>", $texte);
307
308        // Gestion de la <boitedepliante>
309        $texte = str_replace("<boitedepliante>", "<div class=\"boitedepliante\"><img src=\"squelettes/images/plus-boite-depliante.gif\" alt=\"en savoir plus\"></div>\n<div class=\"boitedepliante_encadre\">", $texte);
310        $texte = str_replace("</boitedepliante>", "</div>", $texte);
311
312        // Gestion de la <boitejaune>
313        $texte = str_replace("<boitejaune>", "<div class=\"boitejaune\">\n<div class=\"bj1\"><div class=\"bj2\"><div>", $texte);
314        $texte = str_replace("</boitejaune>", "</div></div></div></div>", $texte);
315
316        // Gestion de <bonasavoir>
317        $texte = str_replace("<bonasavoir>", "<div class=\"bonasavoir\">\n<div class=\"bonasavoir1\"></div><div class=\"bonasavoir2\"><div>", $texte);
318        $texte = str_replace("</bonasavoir>", "</div></div></div>", $texte);
319
320        // Gestion de <attention>
321        $texte = str_replace("<attention>", "<div class=\"attention\">\n<div class=\"attention1\"></div><div class=\"attention2\"><div>", $texte);
322        $texte = str_replace("</attention>", "</div></div></div>", $texte);
323
324        // Gestion de <exemple>
325        $texte = str_replace("<exemple>", "<div class=\"exemple\">\n<div class=\"exemple1\"></div><div class=\"exemple2\"><div>", $texte);
326        $texte = str_replace("</exemple>", "</div></div></div>", $texte);
327
328        // Gestion de <lettrine>
329        $texte = str_replace("<lettrine>", "<span class=\"lettrine\">", $texte);
330        $texte = str_replace("</lettrine>", "</span>", $texte);
331
332        return $texte;
333}
334
335function typoenluminee_nettoyer_raccourcis_typo($texte){
336        $texte = preg_replace(',\{[1-5]\{,','',$texte);
337        $texte = preg_replace(',\}[1-5]\},','',$texte);
338        $texte = preg_replace(',\{\{\{\*+,','{{{',$texte);
339        $texte = str_replace('&hellip;','...',$texte);
340        return $texte;
341}
342
343?>
Note: See TracBrowser for help on using the repository browser.