source: spip-zone/_plugins_/porte_plume/extensions/enluminures_typographiques_v3/typoenluminee.php @ 34469

Last change on this file since 34469 was 34469, checked in by patfr@…, 10 years ago

Petites optimisations et nettoyage typo sur les {{{*

File size: 13.1 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        // remplace les fausses listes a puce par de vraies
150        // (recherche en debut de lignes - suivi d'un ou plusieurs caracteres blancs, en mode multiligne)
151        // $texte =  preg_replace('/^-\s+/m','-* ',$texte); # deja fait dans post_propre
152
153        return $texte;
154}
155
156function typoenluminee_post_propre($texte) {
157        static $cherche1 = NULL;
158        static $remplace1 = NULL;
159
160        if ($cherche1===NULL) {
161                # Le remplacement des intertitres de premier niveau a deja ete effectue dans inc/texte.php
162                $cherche1 = array();
163                $remplace1 = array();
164                global $BarreTypoEnrichieBlocs;
165                if (is_array($BarreTypoEnrichieBlocs))
166                        foreach($BarreTypoEnrichieBlocs as $item) {
167                                $cherche1[]=$item['chercher'];
168                                $remplace1[]=$item['remplacer'];
169                        }
170       
171                $cherche1[] = /* 15 */  ",\[/(.*)/\],Ums";
172                $cherche1[] = /* 16 */  ",\[!(.*)!\],Ums";
173                $cherche1[] = /* 17 */  ",\[\|(.*)\|\],Ums";
174                $cherche1[] = /* 19 */  ",\[\((.*)\)\],Ums";
175                $cherche1[] = /* 21 */  "/\[\*\*/S";
176                $cherche1[] = /* 21b */         "/\[\*/S";
177                $cherche1[] = /* 22 */  "/\*\]/S";
178                $cherche1[] = /* 23 */  "/\[\^/S";
179                $cherche1[] = /* 24 */  "/\^\]/S";
180       
181                $remplace1[] = /* 15 */         "<div class=\"spip\" style=\"text-align:right;\">$1</div>";
182                $remplace1[] = /* 16 */         "<div class=\"spip\" style=\"text-align:left;\">$1</div>";
183                $remplace1[] = /* 17 */         "<div class=\"spip\" style=\"text-align:center;\">$1</div>";
184                $remplace1[] = /* 19 */         "<div class=\"texteencadre-spip spip\">$1</div>";
185                $remplace1[] = /* 21 */         "<strong class=\"caractencadre2-spip spip\">";
186                $remplace1[] = /* 21b */        "<strong class=\"caractencadre-spip spip\">";
187                $remplace1[] = /* 22 */ "</strong>";
188                $remplace1[] = /* 23 */         "<sup>";
189                $remplace1[] = /* 24 */ "</sup>";
190                $remplace1[] = /* 25 */         "<sub>";
191                $remplace1[] = /* 26 */ "</sub>";
192        }
193        if(!$texte) return $texte;
194        $texte = preg_replace($cherche1, $remplace1, $texte);
195        $texte = paragrapher($texte,$GLOBALS['toujours_paragrapher']); // il faut reparagrapher a cause des raccourcis typo que l'on a ajoute (block div)
196        return $texte;
197}
198
199
200function typoenluminee_pre_typo($texte) {
201        static $local_barre_typo_pas_de_fausses_puces = null;
202        static $chercher_raccourcis;
203        static $remplacer_raccourcis;
204        global $debut_italique, $fin_italique;
205        if (!isset($GLOBALS['barre_typo_pas_de_fork_typo']) OR $GLOBALS['barre_typo_pas_de_fork_typo'] === true)
206                return $texte;
207
208        if ($local_barre_typo_pas_de_fausses_puces===NULL){
209                // remplace les fausses listes a puce par de vraies
210                // (recherche en debut de lignes - suivi d'un ou plusieurs caracteres blancs, en mode multiligne)
211                // Mettre $GLOBALS['barre_typo_preserve_puces'] = true; dans mes_options.php pour ne pas avoir ce comportement
212                if (!function_exists('lire_config')) {
213                        $local_barre_typo_pas_de_fausses_puces = $GLOBALS['barre_typo_pas_de_fausses_puces'];
214                } else {
215                        $local_barre_typo_pas_de_fausses_puces = (lire_config('bte/puces','Non') == 'Oui')?true:false;
216                }
217                tester_variable('debut_italique', "<i$class_spip>");
218                tester_variable('fin_italique', '</i>');
219               
220                $chercher_raccourcis = array(
221                        /* 9 */         "/(?<![{\d])[{](?![{\d])/S", // Expressions complexes car on n'a pas encore traite les titres ici
222                        /* 10 */        "/(?<![}\d])[}](?![}\d])/S", // puisque italique utilisent les memes caracteres en nombre inferieur
223                        /* 13 */        "/<-->/S",
224                        /* 14 */        "/-->/S",
225                        /* 15 */        "/<--/S",
226                        /* 16 */        "/<==>/S",
227                        /* 17 */        "/==>/S",
228                        /* 18 */        "/<==/S",
229                        /* 19 */        "/\(c\)/Si",
230                        /* 20 */        "/\(r\)/Si",
231                        /* 21 */        "/\(tm\)/Si",
232                        /* 22 */        "/\.\.\./S",
233                );
234       
235                $remplacer_raccourcis = array(
236                        /* 9 */         $debut_italique,
237                        /* 10 */        $fin_italique,
238                        /* 13 */        "&harr;",
239                        /* 14 */        "&rarr;",
240                        /* 15 */        "&larr;",
241                        /* 16 */        "&hArr;",
242                        /* 17 */        "&rArr;",
243                        /* 18 */        "&lArr;",
244                        /* 19 */        "&copy;",
245                        /* 20 */        "&reg;",
246                        /* 21 */        "&trade;",
247                        /* 22 */        "&hellip;",
248                );
249        }
250        if(!$texte) return $texte;
251
252        if ($local_barre_typo_pas_de_fausses_puces === true) {
253                $texte =  preg_replace('/^-\s+/m','-* ',$texte);
254        }
255
256        $texte = preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte);
257       
258        /*
259                Cas particulier pour le gras
260                Il ne faut pas traiter la mise en gras ici si le texte contient un tableau
261        */
262        if (!preg_match(',.(\|([[:space:]]*{{[^}]+}}[[:space:]]*|<))+.,sS', $texte)) {
263                $chercher_raccourcisg = array(
264                        /* 7 */         "/(?<![{])[{][{](?![{])/S", // Expressions complexes car on n'a pas encore traite les titres ici
265                        /* 8 */         "/(?<![}])[}][}](?![}])/S" // En gros, verification qu'on n'est pas a l'interieur d'un titre
266                );
267                $remplacer_raccourcisg = array(
268                        /* 7 */         "<strong class=\"spip\">",
269                        /* 8 */         "</strong>"
270                );
271                $texte = preg_replace($chercher_raccourcisg, $remplacer_raccourcisg, $texte);
272        }
273        return $texte;
274}
275
276function typoenluminee_post_typo($texte) {
277        static $cherche1;
278        static $remplace1;
279        if (!isset($GLOBALS['barre_typo_pas_de_fork_typo']) OR $GLOBALS['barre_typo_pas_de_fork_typo'] === true)
280                return $texte;
281        if (!$cherche1) {
282                $cherche1 = array(
283                        /* 21 */        "/\[\*\*/S",
284                        /* 21b */       "/\[\*/S",
285                        /* 22 */        "/\*\]/S",
286                        /* 23 */        "/\[\^/S",
287                        /* 24 */        "/\^\]/S",
288                );
289       
290                $remplace1 = array(
291                        /* 21 */        "<strong class=\"caractencadre2-spip spip\">",
292                        /* 21b */       "<strong class=\"caractencadre-spip spip\">",
293                        /* 22 */        "</strong>",
294                        /* 23 */        "<sup>",
295                        /* 24 */        "</sup>",
296                        /* 25 */        "<sub>",
297                        /* 26 */        "</sub>",
298                );
299        }
300        if(!$texte) return $texte;
301        $texte = preg_replace($cherche1, $remplace1, $texte);
302        // Correction des & en &amp;
303        $texte = preg_replace('/&([A-Za-z#0-9]*);/','@@@amp:\1:amp@@@',$texte); // echapement des entites html deja presentes
304        $texte = str_replace('&','&amp;',$texte);
305        $texte = preg_replace('/@@@amp:([A-Za-z#0-9]*):amp@@@/','&\1;',$texte);
306        // Raccourci typographique <sc></sc>
307        $texte = str_replace("<sc>",
308                "<span class=\"spip\" style=\"font-variant: small-caps\">", $texte);
309        $texte = str_replace("</sc>", "</span>", $texte);
310        return $texte;
311}
312
313function typoenluminee_nettoyer_raccourcis_typo($texte){
314        $texte = preg_replace(',\{[1-5]\{,','',$texte);
315        $texte = preg_replace(',\}[1-5]\},','',$texte);
316        $texte = preg_replace(',\{\{\{\*+,','{{{',$texte);
317        $texte = str_replace('&hellip;','...',$texte);
318        return $texte;
319}
320
321?>
Note: See TracBrowser for help on using the repository browser.