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

Last change on this file since 88040 was 88040, checked in by kent1@…, 5 years ago

Remettre l'ancienne regexp, la nouvelle fait péter les titres, grml

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