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

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

Revert de [46107]

File size: 12.9 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        return $texte;
308}
309
310function typoenluminee_nettoyer_raccourcis_typo($texte){
311        $texte = preg_replace(',\{[1-5]\{,','',$texte);
312        $texte = preg_replace(',\}[1-5]\},','',$texte);
313        $texte = preg_replace(',\{\{\{\*+,','{{{',$texte);
314        $texte = str_replace('&hellip;','...',$texte);
315        return $texte;
316}
317
318?>
Note: See TracBrowser for help on using the repository browser.