X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fdecoration.php;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Fdecoration.php;h=fa7eb8c455ebf293e65115762e9dafc0ff23ae0e;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/decoration.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/decoration.php new file mode 100644 index 0000000..fa7eb8c --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/decoration.php @@ -0,0 +1,194 @@ +=2.1 on utilise l'astuce [XX]... pour beneficier ensuite de la typo appropriee + $BT[] = array($racc, true, $div); + $aide[] = $racc; + $trouve[] = "<$racc>"; $trouve[] = ""; + $remplace[] = $a = "[$valeur]"; + $remplace[] = $b = ""; + } else { + $attr="$attr=\"$valeur\""; + $BT[] = array($racc, $auto, $div); + if ($auto) { + $auto_balises[] = $racc; + $auto_remplace[$racc] = "$attr>"; + } else { + $aide[] = $racc; + $trouve[] = "<$racc>"; $trouve[] = ""; $trouve[] = "<$racc/>"; + $remplace[] = $a = "<$div $attr>"; + $remplace[] = $b = ""; $remplace[] = $a.$b; + } + } + } elseif (preg_match('/^(span|div|auto)\.([^=]+)=(.+)$/', $balise, $regs)) { + // les styles inline + list($auto, $div, $racc, $style) = array($regs[1]=='auto', $regs[1], trim($regs[2]), trim($regs[3])); + $BT[] = array($racc, $auto, $div); + $attr="style=\"$style\""; + if ($auto) { + $auto_balises[] = $racc; + $auto_remplace[$racc] = "$attr>"; + } else { + $aide[] = $racc; + $trouve[] = "<$racc>"; $trouve[] = ""; $trouve[] = "<$racc/>"; + $remplace[] = $a = "<$div $attr>"; + $remplace[] = $b = ""; $remplace[] = $a.$b; + } + } elseif (preg_match('/^([^=]+)=(.+)$/', $balise, $regs)) { + // les alias + $alias[trim($regs[1])] = trim($regs[2]); + } + } + // ajout des alias qu'on a trouves + foreach ($alias as $a=>$v) + if(($i=array_search("<$v>", $trouve, true))!==false) { + $aide[] = $a; $trouve[] = "<$a>"; $trouve[] = ""; $trouve[] = "<$a/>"; + $remplace[] = $remplace[$i]; $remplace[] = $remplace[$i+1]; $remplace[] = $remplace[$i+2]; + } elseif(array_search($v, $auto_balises, true)!==false) { + $auto_balises[] = $a; + $auto_remplace[$a] = $auto_remplace[$v]; + } + // liste des balises disponibles + $aide = array_merge($aide, $auto_balises); + $n = count($auto_balises); + // protection $auto_balises pour la future regExpr + array_walk($auto_balises, 'cs_preg_quote'); + // renvoi des donnees compilees + return array( array( + // balises fixes a trouver + $trouve, + // remplacement des balises fixes + $remplace, + // RegExpr pour les balises automatiques + $n?($n==1?",<($auto_balises[0])>(.*?),ms":',<('.join('|', $auto_balises).')>(.*?),ms'):'', + // association pour les balises automatiques + $auto_remplace, + // balises disponibles + $BT), + // casier special pour l'aide + 'racc' => $aide, + ); +} + +// liste des nouveaux raccourcis ajoutes par l'outil +// si cette fonction n'existe pas, le plugin cherche alors _T('couteauprive:un_outil:aide'); +function decoration_raccourcis() { + $racc = cs_lire_data_outil('decoration', 'racc'); + return _T('couteauprive:decoration:aide', array('liste' => ''.join(', ', $racc).'')); +} + +function decoration_callback($matches) { + global $deco_balises; + return cs_block($matches[2]) + ?'
' + :''; +} + +// cette fonction n'est pas appelee dans les balises html : html|code|cadre|frame|script +function decoration_rempl($texte) { + if (strpos($texte, '<')===false) return $texte; + // reecrire les raccourcis du type + $texte = preg_replace(', +/>,', '/>', $texte); + global $deco_balises; + // balises fixes, facile : on remplace tout d'un coup ! + $texte = str_replace($deco_balises[0], $deco_balises[1], $texte); + // balises automatiques, plus long : il faut un callback pour analyser l'interieur du texte + return strlen($deco_balises[2]) + ?preg_replace_callback($deco_balises[2], 'decoration_callback', $texte) + :$texte; +} + +// fonction pipeline +function decoration_pre_typo($texte) { + if (strpos($texte, '<')===false || !function_exists('_decoration_BALISES')) return $texte; + // pour les callbacks + global $deco_balises; + // lecture des balises et des remplacements + $deco_balises = cs_lire_data_outil('decoration'); + // on remplace apres echappement + $texte = cs_echappe_balises('', 'decoration_rempl', $texte); + // menage + unset($deco_balises); + return $texte; +} + +// cette fonction renvoie une ligne de tableau entre afin de l'inserer dans la Barre Typo V2, si elle est presente +function decoration_BarreTypo($tr) { + $balises = cs_lire_data_outil('decoration'); + $res = array(); + foreach($balises[4] as $v) { + $tmp = $v[1]?"('<$v[0]>',''":"_etendu('<$v[0]>','','<$v[0]/>'"; + $res[] = "$v[0]"; + } + $res = join(' ', $res); + return $tr.'

'._T('couteauprive:decoration:nom')." $res

"; +} + +// les 2 fonctions suivantes inserent les boutons pour le plugin Porte Plume, s'il est present (SPIP>=2.0) +function decoration_PP_pre_charger($flux) { + $balises = cs_lire_data_outil('decoration'); + $max = count($balises[4]); + $r = array(); + foreach($balises[4] as $b) { + $id = 'decoration_'.$b[0]; + $r[] = array( + "id" => $id, + "name" => _T('couteau:pp_decoration_inserer', array('racc'=>$b[0], 'balise'=>$b[2])), + "className" => $id, + "selectionType" => $b[2]=='div'?"line":"word", + // $b[1] est vrai si la balise est interdite + "replaceWith" => "function(h){ return outil_decoration(h.selection, '$b[0]', '$b[2]', '".($b[1]?'':"<$b[0]/>")."'); }", + "display" => true); + } + $r = array( + "id" => 'cs_decoration_drop', + "name" => _T('couteau:pp_decoration_inserer_drop'), + "className" => 'cs_decoration_drop', + "replaceWith" => '', + "display" => true, + "dropMenu" => $r, + + ); + foreach(cs_pp_liste_barres('decoration') as $b) { + $flux[$b]->ajouterApres('stroke_through', $r); + $flux[$b]->ajouterFonction("function outil_decoration(sel, racc, balise, defaut) { + if(sel) { + r='<'+racc+'>'+sel+''; + return balise=='span'?r.replace(/(\\n\\n|\\r\\n\\r\\n|\\r\\r)/g,'\$1<'+racc+'>'):r; + } + return defaut; + }"); + } + return $flux; +} +function decoration_PP_icones($flux){ + $balises = cs_lire_data_outil('decoration'); + // icones utilisees. Attention : mettre les drop-boutons en premier !! + $flux['cs_decoration_drop'] = 'decoration_div.png'; + foreach($balises[4] as $b) { + $id = 'decoration_'.$b[0]; + $flux[$id] = find_in_path("icones_barre/{$id}.png")?$id.'.png' + :"decoration_{$b[2]}.png"; + } + return $flux; +} + +?> \ No newline at end of file