Mise en route du suivi.
[aidenligne_francais_universite.git] / plugins / couteau_suisse / outils / cout_fonctions.php
1 <?php
2 // Ce fichier contient des fonctions toujours compilees dans tmp/couteau-suisse/mes_fonctions.php
3
4 // compatibilite SPIP < 1.92
5 if(defined('_SPIP19100')) {
6 if (!function_exists('stripos')) {
7 function stripos($botte, $aiguille) {
8 if (preg_match('@^(.*)' . preg_quote($aiguille, '@') . '@isU', $botte, $regs)) return strlen($regs[1]);
9 return false;
10 }
11 }
12 if (!function_exists('interprete_argument_balise')){
13 function interprete_argument_balise($n,$p) {
14 if (($p->param) && (!$p->param[0][0]) && (count($p->param[0])>$n))
15 return calculer_liste($p->param[0][$n], $p->descr, $p->boucles, $p->id_boucle);
16 else return NULL;
17 }
18 }
19 function f_insert_head($texte) {
20 if (!$GLOBALS['html']) return $texte;
21 //include_spip('public/admin'); // pour strripos
22 ($pos = stripos($texte, '</head>')) || ($pos = stripos($texte, '<body>'))|| ($pos = 0);
23 if (false === strpos(substr($texte, 0,$pos), '<!-- insert_head -->')) {
24 $insert = "\n".pipeline('insert_head','<!-- f_insert_head -->')."\n";
25 $texte = substr_replace($texte, $insert, $pos, 0);
26 }
27 return $texte;
28 }
29 }
30
31 // fonction appelant une liste de fonctions qui permettent de nettoyer un texte original de ses raccourcis indesirables
32 function cs_introduire($texte) {
33 // liste de filtres qui sert a la balise #INTRODUCTION
34 if(!is_array($GLOBALS['cs_introduire'])) return $texte;
35 $liste = array_unique($GLOBALS['cs_introduire']);
36 foreach($liste as $f)
37 if (function_exists($f)) $texte = $f($texte);
38 return $texte;
39 }
40
41 // Fonction propre() sans paragraphage
42 function cs_propre($texte) {
43 include_spip('inc/texte');
44 $mem = $GLOBALS['toujours_paragrapher'];
45 $GLOBALS['toujours_paragrapher'] = false;
46 $texte = propre($texte);
47 $GLOBALS['toujours_paragrapher'] = $mem;
48 return $texte;
49 }
50
51 // Filtre creant un lien <a> sur un texte
52 // Exemple d'utilisation : [(#EMAIL*|cs_lien{#NOM})]
53 function cs_lien($lien, $texte='') {
54 if(!$lien) return $texte;
55 return cs_propre("[{$texte}->{$lien}]");
56 }
57
58 // Controle (basique!) des 3 balises usuelles p|div|span eventuellement coupees
59 // Attention : simple traitement pour des balises non imbriquees
60 function cs_safebalises($texte) {
61 $texte = trim($texte);
62 // ouvre/supprime la premiere balise trouvee fermee (attention aux modeles SPIP)
63 if(preg_match(',^(.*)</([a-z]+)>,Ums', $texte, $m) && !preg_match(",<$m[2][ >],", $m[1]))
64 $texte = strlen($m[1])?"<$m[2]>$texte":trim(substr($texte, strlen($m[2])+3));
65 // referme/supprime la derniere balise laissee ouverte (attention aux modeles SPIP)
66 if(preg_match(',^(.*)[ >]([a-z]+)<,Ums', $rev = strrev($texte), $m) && !preg_match(",>$m[2]/<,", $m[1]))
67 $texte = strrev(strlen($m[1])?">$m[2]/<$rev":trim(substr($rev, strlen($m[2])+2)));
68 // balises <p|span|div> a traiter
69 foreach(array('span', 'div', 'p') as $b) {
70 // ouvrante manquante
71 if(($fin = strpos($texte, "</$b>")) !== false)
72 if(!preg_match(",<{$b}[ >],", substr($texte, 0, $fin)))
73 $texte = "<$b>$texte";
74 // fermante manquante
75 $texte = strrev($texte);
76 if(preg_match(',[ >]'.strrev("<{$b}").',', $texte, $reg)) {
77 $fin = strpos(substr($texte, 0, $deb = strpos($texte, $reg[0])), strrev("</$b>"));
78 if($fin===false || $fin>$deb) $texte = strrev("</$b>").$texte;
79 }
80 $texte = strrev($texte);
81 }
82 return $texte;
83 }
84
85 ?>