Mise en route du suivi.
[aidenligne_francais_universite.git] / plugins / couteau_suisse / outils / decoration.php
1 <?php
2
3 /*
4 Cet outil 'decoration' permet aux redacteurs d'un site spip de d'appliquer des styles aux textes SPIP
5 Attention : seules les balises en minuscules sont reconnues.
6 Doc : http://www.spip-contrib.net/?article2427
7 */
8
9 // cette fonction est appelee automatiquement a chaque affichage de la page privee du Couteau Suisse
10 function decoration_installe() {
11 if(!defined('_decoration_BALISES')) return;
12 cs_log("decoration_installe()");
13 // on decode les balises entrees dans la config
14 $deco_balises = preg_split("/[\r\n]+/", trim(_decoration_BALISES));
15 $aide = $trouve = $remplace = $alias = $auto_balises = $auto_remplace = $BT = array();
16 foreach ($deco_balises as $balise) {
17 if (preg_match('/(span|div|auto)\.([^.]+)\.(class|lang)\s*=(.+)$/', $balise, $regs)) {
18 // les class/lang
19 list($div, $racc, $attr, $valeur) = array($regs[1], trim($regs[2]), trim($regs[3]), trim($regs[4]));
20 $attr="$attr=\"$valeur\"";
21 $BT[] = array(
22 $racc,//$div=='div'?strtoupper($racc):$racc,
23 $div=='auto'?"('<$racc>','</$racc>'":"_etendu('<$racc>','</$racc>','<$racc/>'",
24 );
25 if ($div=='auto') {
26 $auto_balises[] = $racc;
27 $auto_remplace[$racc] = "$attr>";
28 } else {
29 $aide[] = $racc;
30 $trouve[] = "<$racc>"; $trouve[] = "</$racc>"; $trouve[] = "<$racc/>";
31 $remplace[] = $a = "<$div $attr>";
32 $remplace[] = $b = "</$div>"; $remplace[] = $a.$b;
33 }
34 } elseif (preg_match('/(span|div|auto)\.([^=]+)=(.+)$/', $balise, $regs)) {
35 // les styles inline
36 list($div, $racc, $style) = array($regs[1], trim($regs[2]), trim($regs[3]));
37 $attr="style=\"$style\"";
38 $BT[] = array(
39 $racc,//$div=='span'?"<$div $attr>$racc</$div>":($div=='div'?strtoupper($racc):$racc),
40 $div=='auto'?"('<$racc>','</$racc>'":"_etendu('<$racc>','</$racc>','<$racc/>'",
41 );
42 if ($div=='auto') {
43 $auto_balises[] = $racc;
44 $auto_remplace[$racc] = "$attr>";
45 } else {
46 $aide[] = $racc;
47 $trouve[] = "<$racc>"; $trouve[] = "</$racc>"; $trouve[] = "<$racc/>";
48 $remplace[] = $a = "<$div $attr>";
49 $remplace[] = $b = "</$div>"; $remplace[] = $a.$b;
50 }
51 } elseif (preg_match('/([^=]+)=(.+)$/', $balise, $regs)) {
52 // les alias
53 $alias[trim($regs[1])] = trim($regs[2]);
54 }
55 }
56 // ajout des alias qu'on a trouves
57 foreach ($alias as $a=>$v)
58 if(($i=array_search("<$v>", $trouve, true))!==false) {
59 $aide[] = $a; $trouve[] = "<$a>"; $trouve[] = "</$a>"; $trouve[] = "<$a/>";
60 $remplace[] = $remplace[$i]; $remplace[] = $remplace[$i+1]; $remplace[] = $remplace[$i+2];
61 } elseif(array_search($v, $auto_balises, true)!==false) {
62 $auto_balises[] = $a;
63 $auto_remplace[$a] = $auto_remplace[$v];
64 }
65 // liste des balises disponibles
66 $aide = array_merge($aide, $auto_balises);
67 // sauvegarde en meta : aide
68 ecrire_meta('cs_decoration_racc', '<b>'.join('</b>, <b>', $aide).'</b>');
69 // protection $auto_balises pour la future regExpr
70 array_walk($auto_balises, 'cs_preg_quote');
71 // sauvegarde en meta : decoration
72 ecrire_meta('cs_decoration', serialize(array(
73 // balises fixes a trouver
74 $trouve,
75 // replacement des balises fixes
76 $remplace,
77 // RegExpr pour les balises automatiques
78 count($auto_balises)?',<('.join('|', $auto_balises).')>(.*?)</\1>,ms':'',
79 // association pour les balises automatiques
80 $auto_remplace,
81 // balises disponibles
82 $BT,
83 )));
84 ecrire_metas();
85 }
86
87 // cette fonction est appelee automatiquement a chaque affichage de la page privee du Couteau Suisse
88 // le resultat est une chaine apportant des informations sur les nouveaux raccourcis ajoutes par l'outil
89 // si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide');
90 function decoration_raccourcis() {
91 return _T('couteauprive:decoration:aide', array('liste' => $GLOBALS['meta']['cs_decoration_racc']));
92 }
93
94 function decoration_callback($matches) {
95 global $deco_balises;
96 return cs_block($matches[2])
97 ?'<div ' . $deco_balises[3][$matches[1]] . $matches[2] . '</div>'
98 :'<span ' . $deco_balises[3][$matches[1]] . $matches[2] . '</span>';
99 }
100
101 // cette fonction n'est pas appelee dans les balises html : html|code|cadre|frame|script
102 function decoration_rempl($texte) {
103 if (strpos($texte, '<')===false) return $texte;
104 // reecrire les raccourcis du type <balise />
105 $texte = preg_replace(', +/>,', '/>', $texte);
106 global $deco_balises;
107 // balises fixes, facile : on remplace tout d'un coup !
108 $texte = str_replace($deco_balises[0], $deco_balises[1], $texte);
109 // balises automatiques, plus long : il faut un callback pour analyser l'interieur du texte
110 return strlen($deco_balises[2])
111 ?preg_replace_callback($deco_balises[2], 'decoration_callback', $texte)
112 :$texte;
113 }
114
115 // fonction pipeline
116 function decoration_pre_typo($texte) {
117 if (strpos($texte, '<')===false || !defined('_decoration_BALISES')) return $texte;
118 if (!isset($GLOBALS['meta']['cs_decoration'])) decoration_installe();
119 // pour les callbacks
120 global $deco_balises;
121 // lecture des balises et des remplacements
122 $deco_balises = unserialize($GLOBALS['meta']['cs_decoration']);
123 // on remplace apres echappement
124 $texte = cs_echappe_balises('', 'decoration_rempl', $texte);
125 // menage
126 unset($deco_balises);
127 return $texte;
128 }
129
130 // cette fonction renvoie une ligne de tableau entre <tr></tr> afin de l'inserer dans la Barre Typo V2, si elle est presente
131 function decoration_BarreTypo($tr) {
132 // les raccoucis de couleur sont-il dispo ?
133 if (!isset($GLOBALS['meta']['cs_decoration'])) decoration_installe();
134 // le tableau des smileys est present dans les metas
135 decoration_installe();
136 $balises = unserialize($GLOBALS['meta']['cs_decoration']);
137 //print_r($balises);die();
138 $res = array();
139 foreach($balises[4] as $v)
140 $res[] = "<a href=\"javascript:barre_raccourci$v[1],@@champ@@)\"><span class=\"cs_BT\">$v[0]</span></a>";
141 $res = join(' ', $res);
142 return $tr.'<tr><td><p style="margin:0; line-height:1.8em;">'._T('couteauprive:decoration:nom')."&nbsp;$res</p></td></tr>";
143 }
144
145 ?>