3 // Outil SMILEYS - 25 decembre 2006
4 // serieuse refonte et integration au Couteau Suisse : Patrice Vanneufville, 2006
5 // Toutes les infos sur : http://www.spip-contrib.net/?article1561
6 // dessin des frimousses : Sylvain Michel [http://www.guaph.net/]
8 // fonction ajoutant un sailey au tableau $tab
9 // ex : compile_smiley($tab, ':-*', 'icon_kiss', 'gif');
10 function compile_smiley(&$tab, $smy, $img, $ext='png') {
13 $path = find_in_path('img/smileys');
14 cs_log("smileys_installe_dist() : $path");
15 $path2 = url_absolue($path);
16 $pp = defined('_DIR_PLUGIN_PORTE_PLUME');
18 $espace = strlen($smy)==2?
' ':'';
20 list(,,,$size) = @getimagesize
("$path/$file");
21 $tab['0']['0'][] = $espace.$smy;
22 // cs_code_echappement evite que le remplacement se fasse a l'interieur des attributs de la balise <img>
23 $tab[0][1][] = cs_code_echappement("$espace<img alt=\"$smy\" title=\"$smy\" class=\"no_image_filtrer format_$ext\" src=\"$path2/$file\" $size/>", 'SMILE');
25 $tab['racc'][] = $smy;
26 // pour le porte-plume
27 $tab[0][4]['smiley_'.$img] = $file;
30 // cette fonction appelee automatiquement a chaque affichage de la page privee du Couteau Suisse renvoie un tableau
31 function smileys_installe_dist($tab = array(0 => array(), 'racc' => array())) {
32 // l'ordre des smileys ici est important :
33 // - les doubles, puis les simples, puis les courts
34 // - le raccourci insere par la balise #SMILEYS est la premiere occurence de chaque fichier
36 // attention ' est different de ’ (’) (SPIP utilise/ecrit ce dernier)
37 ":’-))"=> 'pleure_de_rire',
38 ":’-)"=> 'pleure_de_rire',
39 ":’-D" => 'pleure_de_rire',
40 ":’-(" => 'triste',
43 ':-))' => 'mort_de_rire',
44 ':))' => 'mort_de_rire',
45 ":'-))"=> 'pleure_de_rire',
46 ':-((' => 'en_colere',
49 ';-)' => 'clin_d-oeil',
51 ':-D' => 'mort_de_rire',
52 ":'-)"=> 'pleure_de_rire',
53 ":'-D" => 'pleure_de_rire',
54 ':-(' => 'pas_content',
60 ':-P' => 'tire_la_langue',
61 ':-p' => 'tire_la_langue',
67 // les courts : tester a l'usage...
68 // attention : ils ne sont reconnus que s'il y a un espace avant !
70 ':(' => 'pas_content',
71 ';)' => 'clin_d-oeil',
77 foreach ($smileys as $smy=>$val)
78 compile_smiley($tab, $smy, $val);
83 // liste des nouveaux raccourcis ajoutes par l'outil
84 // si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide');
85 function smileys_raccourcis() {
86 $racc = cs_lire_data_outil('smileys', 'racc');
87 return _T('couteauprive:smileys:aide', array('liste' => '<b>'.join('</b>, <b>', $racc).'</b>'));
90 function smileys_echappe_balises_callback($matches) {
91 return cs_code_echappement($matches[1], 'SMILE');
94 // fonction de remplacement
95 // les balises suivantes sont protegees : html|code|cadre|frame|script|acronym|cite
96 function cs_rempl_smileys($texte) {
97 if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
98 $smileys_rempl = cs_lire_data_outil('smileys');
99 // protection des images, on ne sait jamais...
100 $texte = preg_replace_callback(',(<img .*?/>),ms', 'smileys_echappe_balises_callback', $texte);
101 // smileys a probleme :
102 $texte = str_replace(':->', ':->', $texte); // remplacer > par >
103 // remplacer ’ (apostrophe curly) par ’
104 $texte = str_replace(':’-', ':’-', $texte);
105 $texte = str_replace(':'.chr(146).'-', ':’-', $texte);
106 // voila, on remplace tous les smileys d'un coup...
107 $texte = str_replace($smileys_rempl[0], $smileys_rempl[1], $texte);
108 return echappe_retour($texte, 'SMILE');
111 // fonction principale (pipeline pre_typo)
112 function cs_smileys_pre_typo($texte) {
113 if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte;
114 // appeler cs_rempl_smileys() une fois que certaines balises ont ete protegees
115 return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'cs_rempl_smileys', $texte);
118 // fonction qui renvoie un tableau de smileys uniques
119 function smileys_uniques($smileys) {
120 $max = count($smileys[1]);
121 $new = array(array(), array(), array());
122 for ($i=0; $i<$max; $i++
) {
123 if(!in_array($smileys[2][$i], $new[2])) {
124 $new[0][] = $smileys[0][$i]; // texte
125 $new[1][] = $smileys[1][$i]; // image
126 $new[2][] = $smileys[2][$i]; // nom de fichier
132 // cette fonction renvoie une ligne de tableau entre <tr></tr> afin de l'inserer dans la Barre Typo V2, si elle est presente
133 function cs_smileys_BarreTypo($tr) {
134 $smileys = smileys_uniques(cs_lire_data_outil('smileys'));
135 $max = count($smileys[0]);
137 for ($i=0; $i<$max; $i++
)
138 $res .= "<a href=\"javascript:barre_inserer('{$smileys[0][$i]}',@@champ@@)\">{$smileys[1][$i]}</a>";
139 return $tr.'<tr><td><@@span@@>'._T('couteauprive:smileys:nom').'</span> '.echappe_retour($res, 'SMILE').'</td></tr>';
142 // les 2 fonctions suivantes inserent les boutons pour le plugin Porte Plume, s'il est present (SPIP>=2.0)
143 function cs_smileys_PP_pre_charger($flux) {
144 $smileys = smileys_uniques(cs_lire_data_outil('smileys'));
145 $max = count($smileys[0]);
147 for ($i=0; $i<$max; $i++
) {
148 $id = 'smiley_' . substr($smileys[2][$i], 0, strrpos($smileys[2][$i], '.'));
151 "name" => _T('couteau:pp_smileys_inserer', array('smiley'=>$smileys[0][$i])),
153 "replaceWith" => $smileys[0][$i],
157 "id" => 'cs_smileys_drop',
158 "name" => _T('couteau:pp_smileys_inserer', array('smiley'=>'')),
159 "className" => 'cs_smileys_drop',
164 foreach(cs_pp_liste_barres('smileys') as $b)
165 $flux[$b]->ajouterApres('grpCaracteres', $r);
168 function cs_smileys_PP_icones($flux) {
169 $smileys = cs_lire_data_outil('smileys');
170 $path = find_in_path('img/smileys').'/';
171 // icones utilisees. Attention : mettre les drop-boutons en premier !!
172 $flux['cs_smileys_drop'] = smileys_creer_icone_barre(find_in_path('img/smileys/mort_de_rire.png'));
173 foreach($smileys[4] as $i=>$v) $flux[$i] = smileys_creer_icone_barre($path.$v);
176 // creation d'icone pour le plugin porte-plume
177 function smileys_creer_icone_barre($file) {
178 static $icones_barre;
179 rep_icones_barre($icones_barre);
180 $file = filtrer('image_recadre', $file, 16, 16, 'topleft');
181 $nom = basename($src = extraire_attribut($file, 'src'));
182 @copy
($src, $icones_barre.$nom);