$tab[0][1][] = cs_code_echappement("$espace\"$smy\"", 'SMILE'); $tab[0][2][] = $file; $tab['racc'][] = $smy; // pour le porte-plume $tab[0][4]['smiley_'.$img] = $file; } // cette fonction appelee automatiquement a chaque affichage de la page privee du Couteau Suisse renvoie un tableau function smileys_installe_dist($tab = array(0 => array(), 'racc' => array())) { // l'ordre des smileys ici est important : // - les doubles, puis les simples, puis les courts // - le raccourci insere par la balise #SMILEYS est la premiere occurence de chaque fichier $smileys = array( // attention ' est different de ’ (’) (SPIP utilise/ecrit ce dernier) ":’-))"=> 'pleure_de_rire', ":’-)"=> 'pleure_de_rire', ":’-D" => 'pleure_de_rire', ":’-(" => 'triste', // les doubles : ':-))' => 'mort_de_rire', ':))' => 'mort_de_rire', ":'-))"=> 'pleure_de_rire', ':-((' => 'en_colere', // les simples : ';-)' => 'clin_d-oeil', ':-)' => 'sourire', ':-D' => 'mort_de_rire', ":'-)"=> 'pleure_de_rire', ":'-D" => 'pleure_de_rire', ':-(' => 'pas_content', ":'-(" => 'triste', ':->' => 'diable', '|-)' => 'rouge', ':o)' => 'rigolo', 'B-)' => 'lunettes', ':-P' => 'tire_la_langue', ':-p' => 'tire_la_langue', ':-|' => 'bof', ':-/' => 'mouais', ':-O' => 'surpris', ':-o' => 'surpris', // les courts : tester a l'usage... // attention : ils ne sont reconnus que s'il y a un espace avant ! ':)' => 'sourire', ':(' => 'pas_content', ';)' => 'clin_d-oeil', ':|' => 'bof', '|)' => 'rouge', ':/' => 'mouais', ); foreach ($smileys as $smy=>$val) compile_smiley($tab, $smy, $val); return $tab; } // liste des nouveaux raccourcis ajoutes par l'outil // si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide'); function smileys_raccourcis() { $racc = cs_lire_data_outil('smileys', 'racc'); return _T('couteauprive:smileys:aide', array('liste' => ''.join(', ', $racc).'')); } function smileys_echappe_balises_callback($matches) { return cs_code_echappement($matches[1], 'SMILE'); } // fonction de remplacement // les balises suivantes sont protegees : html|code|cadre|frame|script|acronym|cite function cs_rempl_smileys($texte) { if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte; $smileys_rempl = cs_lire_data_outil('smileys'); // protection des images, on ne sait jamais... $texte = preg_replace_callback(',(),ms', 'smileys_echappe_balises_callback', $texte); // smileys a probleme : $texte = str_replace(':->', ':->', $texte); // remplacer > par > // remplacer ’ (apostrophe curly) par ’ $texte = str_replace(':’-', ':’-', $texte); $texte = str_replace(':'.chr(146).'-', ':’-', $texte); // voila, on remplace tous les smileys d'un coup... $texte = str_replace($smileys_rempl[0], $smileys_rempl[1], $texte); return echappe_retour($texte, 'SMILE'); } // fonction principale (pipeline pre_typo) function cs_smileys_pre_typo($texte) { if (strpos($texte, ':')===false && strpos($texte, ')')===false) return $texte; // appeler cs_rempl_smileys() une fois que certaines balises ont ete protegees return cs_echappe_balises('html|code|cadre|frame|script|acronym|cite', 'cs_rempl_smileys', $texte); } // fonction qui renvoie un tableau de smileys uniques function smileys_uniques($smileys) { $max = count($smileys[1]); $new = array(array(), array(), array()); for ($i=0; $i<$max; $i++) { if(!in_array($smileys[2][$i], $new[2])) { $new[0][] = $smileys[0][$i]; // texte $new[1][] = $smileys[1][$i]; // image $new[2][] = $smileys[2][$i]; // nom de fichier } } return $new; } // cette fonction renvoie une ligne de tableau entre afin de l'inserer dans la Barre Typo V2, si elle est presente function cs_smileys_BarreTypo($tr) { $smileys = smileys_uniques(cs_lire_data_outil('smileys')); $max = count($smileys[0]); $res = ''; for ($i=0; $i<$max; $i++) $res .= "{$smileys[1][$i]}"; return $tr.'<@@span@@>'._T('couteauprive:smileys:nom').' '.echappe_retour($res, 'SMILE').''; } // les 2 fonctions suivantes inserent les boutons pour le plugin Porte Plume, s'il est present (SPIP>=2.0) function cs_smileys_PP_pre_charger($flux) { $smileys = smileys_uniques(cs_lire_data_outil('smileys')); $max = count($smileys[0]); $r = array(); for ($i=0; $i<$max; $i++) { $id = 'smiley_' . substr($smileys[2][$i], 0, strrpos($smileys[2][$i], '.')); $r[] = array( "id" => $id, "name" => _T('couteau:pp_smileys_inserer', array('smiley'=>$smileys[0][$i])), "className" => $id, "replaceWith" => $smileys[0][$i], "display" => true); } $r = array( "id" => 'cs_smileys_drop', "name" => _T('couteau:pp_smileys_inserer', array('smiley'=>'')), "className" => 'cs_smileys_drop', "replaceWith" => '', "display" => true, "dropMenu" => $r, ); foreach(cs_pp_liste_barres('smileys') as $b) $flux[$b]->ajouterApres('grpCaracteres', $r); return $flux; } function cs_smileys_PP_icones($flux) { $smileys = cs_lire_data_outil('smileys'); $path = find_in_path('img/smileys').'/'; // icones utilisees. Attention : mettre les drop-boutons en premier !! $flux['cs_smileys_drop'] = smileys_creer_icone_barre(find_in_path('img/smileys/mort_de_rire.png')); foreach($smileys[4] as $i=>$v) $flux[$i] = smileys_creer_icone_barre($path.$v); return $flux; } // creation d'icone pour le plugin porte-plume function smileys_creer_icone_barre($file) { static $icones_barre; rep_icones_barre($icones_barre); $file = filtrer('image_recadre', $file, 16, 16, 'topleft'); $nom = basename($src = extraire_attribut($file, 'src')); @copy($src, $icones_barre.$nom); return $nom; } ?>