[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / blocs.php
diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/blocs.php
new file mode 100644 (file)
index 0000000..1356740
--- /dev/null
@@ -0,0 +1,94 @@
+<?php\r
+\r
+/*\r
+   Cet outil 'blocs' permet aux redacteurs d'un site spip d'inclure des blocs visibles ou invisibles dans leurs textes\r
+   balises : <bloc></bloc> ou <invisible></invisible>, et <visible></visible>\r
+   le titre est obtenu en sautant deux lignes a l'interieur du bloc\r
+   Attention : seules les balises en minuscules sont reconnues.\r
+*/\r
+\r
+@define('_BLOC_TITRE_H', 'h4');\r
+\r
+// depliage/repliage - fonction de personnalisation des title a placer dans mes_fonctions.php\r
+// function blocs_title($titre='', $corps='', $num='') {\r
+//     return array(_T('couteau:bloc_deplier'), _T('couteau:bloc_replier'));\r
+// }\r
+\r
+// liste des nouveaux raccourcis ajoutes par l'outil\r
+// si cette fonction n'existe pas, le plugin cherche alors  _T('couteauprive:un_outil:aide');\r
+function blocs_raccourcis() {\r
+       return _T('couteauprive:blocs:aide');\r
+}\r
+\r
+function blocs_callback($matches) {\r
+       list($titre, $corps) = preg_split(',(\n\n|\r\n\r\n|\r\r),', trim($matches[3]), 2);\r
+       // pas de corps !\r
+       if(!strlen($corps = trim($corps))) {\r
+               $corps = $titre;\r
+               $titre = preg_replace(',[\n\r]+,s', ' ', couper(propre($titre), 30));\r
+       }\r
+       // pas d'intertitre !\r
+       $titre = preg_replace(',^{{{(.*)}}}$,', '$1', trim($titre));\r
+       if(!strlen($titre)) $titre = '???';\r
+       // un resume facultatif\r
+       if(preg_match(',<resume>(.*)</resume>\s?(.*)$,ms', $corps, $res))\r
+               { $corps = $res[2]; $res = $res[1]; } else $res = '';\r
+       // types de blocs : bloc|invisible|visible\r
+       if ($matches[1]=='visible' || defined('_CS_PRINT')) {\r
+               $h = $d = '';\r
+               $r = ' blocs_invisible blocs_slide';\r
+       } else {\r
+               $h = ' blocs_replie';\r
+               $d = ' blocs_invisible blocs_slide';\r
+               $r = '';\r
+       }\r
+\r
+       // blocs numerotes\r
+       $b = strlen($matches[2])?" cs_bloc$matches[2]":''; \r
+       // title\r
+       $title = function_exists('blocs_title')\r
+               ?"<div class='blocs_title blocs_invisible'>".join(_BLOC_TITLE_SEP, blocs_title($titre, $corps, $matches[2], $h<>'')).'</div>'\r
+               :''; // valeur par defaut geree en JS\r
+       return "<div class='cs_blocs$b'><"._BLOC_TITRE_H." class='blocs_titre$h blocs_click'><a href='javascript:;'>$titre</a></"._BLOC_TITRE_H.">"\r
+               .(strlen($res)?"<div class='blocs_resume$r'>\n$res\n</div>":"")\r
+               ."<div class='blocs_destination$d'>\n\n".blocs_rempl($corps)."\n\n</div>$title</div>";\r
+}\r
+\r
+// cette fonction n'est pas appelee dans les balises html : html|code|cadre|frame|script\r
+function blocs_rempl($texte) {\r
+       if (strpos($texte, '<')===false) return $texte;\r
+       // balises blocs|visible|invisible : il faut un callback pour analyser l'interieur du texte\r
+       return preg_replace_callback(',<(bloc#?|visible#?|invisible#?|blocintertitre#?)([0-9]*)>(.*?)</\1\2>,ms', 'blocs_callback', $texte);\r
+}\r
+\r
+// fonction pipeline\r
+function blocs_pre_typo($texte) {\r
+       if (strpos($texte, '<')===false) return $texte;\r
+       // on remplace apres echappement\r
+       return cs_echappe_balises('', 'blocs_rempl', $texte);\r
+}\r
+\r
+// 2 fonctions pour le plugin Porte Plume, s'il est present (SPIP>=2.0)\r
+function blocs_CS_pre_charger($flux) {\r
+       $r = array(array(\r
+               "id" => 'blocs_bloc',\r
+               "name" => _T('couteau:pp_blocs_bloc'),\r
+               "className" => 'blocs_bloc',\r
+               "replaceWith" => "\n<bloc>"._T('couteau:pp_un_titre')."\n\n"._T('couteau:pp_votre_texte')."\n</bloc>\n",\r
+               "display" => true), array(\r
+               "id" => 'blocs_visible',\r
+               "name" => _T('couteau:pp_blocs_visible'),\r
+               "className" => 'blocs_visible',\r
+               "replaceWith" => "\n<visible>"._T('couteau:pp_un_titre')."\n\n"._T('couteau:pp_votre_texte')."\n</visible>\n",\r
+               "display" => true));\r
+       foreach(cs_pp_liste_barres('blocs') as $b)\r
+               $flux[$b] = isset($flux[$b])?array_merge($flux[$b], $r):$r;\r
+       return $flux;\r
+}\r
+function blocs_PP_icones($flux) {\r
+       $flux['blocs_bloc'] = 'bloc_invisible.png';\r
+       $flux['blocs_visible'] = 'bloc_visible.png';\r
+       return $flux;\r
+}\r
+\r
+?>
\ No newline at end of file