source: spip-zone/_plugins_/_stable_/couteau_suisse/outils/cout_fonctions.php @ 26916

Last change on this file since 26916 was 26916, checked in by patfr@…, 10 years ago

Ajout :

  • D'une horloge JavaScript?
  • D'une trousse à balises : #BOLO, #MAINTENANT (#NOW), #LESMOTS
  • Des filtres |oui et |non, et de la balise #VAL pour SPIP 1.92

Tout ça est encore en test et ne fonctionne sûrement pas bien, mais c'est la 1ère phase ;)

File size: 4.2 KB
Line 
1<?php
2// Ce fichier contient des fonctions toujours compilees dans tmp/couteau-suisse/mes_fonctions.php
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5// compatibilite SPIP < 1.92
6if(defined('_SPIP19100')) {
7        if (!function_exists('stripos')) {
8                function stripos($botte, $aiguille) {
9                        if (preg_match('@^(.*)' . preg_quote($aiguille, '@') . '@isU', $botte, $regs)) return strlen($regs[1]);
10                        return false;
11                }
12        }
13        if (!function_exists('interprete_argument_balise')){
14                function interprete_argument_balise($n,$p) {
15                        if (($p->param) && (!$p->param[0][0]) && (count($p->param[0])>$n))
16                                return calculer_liste($p->param[0][$n], $p->descr, $p->boucles, $p->id_boucle); 
17                        else return NULL;
18                }
19        }
20        function f_insert_head($texte) {
21                if (!$GLOBALS['html']) return $texte;
22                //include_spip('public/admin'); // pour strripos
23                ($pos = stripos($texte, '</head>'))     || ($pos = stripos($texte, '<body>'))|| ($pos = 0);
24                if (false === strpos(substr($texte, 0,$pos), '<!-- insert_head -->')) {
25                        $insert = "\n".pipeline('insert_head','<!-- f_insert_head -->')."\n";
26                        $texte = substr_replace($texte, $insert, $pos, 0);
27                }
28                return $texte;
29        }
30        if(!function_exists('_q')) { 
31                function _q($t) {return spip_abstract_quote($t);}
32        }
33}
34
35// compatibilite SPIP < 2.00
36if(!defined('_SPIP19300')) {
37        // #VAL{x} renvoie 'x' (permet d'appliquer un filtre a une chaine)
38        // Attention #VAL{1,2} renvoie '1', indiquer #VAL{'1,2'}
39        function balise_VAL($p){
40                $p->code = interprete_argument_balise(1,$p);
41                if (!strlen($p->code)) $p->code = "''";
42                $p->interdire_scripts = false;
43                return $p;
44        }
45        if(!function_exists('oui')) { function oui($code) { return $code?' ':''; } }
46        if(!function_exists('non')) { function non($code) { return $code?'':' '; } }
47}
48
49// fonction appelant une liste de fonctions qui permettent de nettoyer un texte original de ses raccourcis indesirables
50function cs_introduire($texte) {
51        // liste de filtres qui sert a la balise #INTRODUCTION
52        if(!is_array($GLOBALS['cs_introduire'])) return $texte;
53        $liste = array_unique($GLOBALS['cs_introduire']);
54        foreach($liste as $f)
55                if (function_exists($f)) $texte = $f($texte);
56        return $texte;
57}
58
59// Fonction propre() sans paragraphage
60function cs_propre($texte) {
61        include_spip('inc/texte');
62        $mem = $GLOBALS['toujours_paragrapher'];
63        $GLOBALS['toujours_paragrapher'] = false;
64        $texte = propre($texte);
65        $GLOBALS['toujours_paragrapher'] = $mem;
66        return $texte;
67}
68
69// Filtre creant un lien <a> sur un texte
70// Exemple d'utilisation : [(#EMAIL*|cs_lien{#NOM})]
71function cs_lien($lien, $texte='') {
72        if(!$lien) return $texte;
73        return cs_propre("[{$texte}->{$lien}]");
74}
75
76// filtre pour ajouter un <span> autour d'un texte
77function cs_span($texte, $attr='') { return "<span $attr>$texte</span>"; }
78
79// Controle (basique!) des 3 balises usuelles p|div|span eventuellement coupees
80// Attention : simple traitement pour des balises non imbriquees
81function cs_safebalises($texte) {
82        $texte = trim($texte);
83        // ouvre/supprime la premiere balise trouvee fermee (attention aux modeles SPIP)
84        if(preg_match(',^(.*)</([a-z]+)>,Ums', $texte, $m) && !preg_match(",<$m[2][ >],", $m[1])) 
85                $texte = strlen($m[1])?"<$m[2]>$texte":trim(substr($texte, strlen($m[2])+3));
86        // referme/supprime la derniere balise laissee ouverte (attention aux modeles SPIP)
87        if(preg_match(',^(.*)[ >]([a-z]+)<,Ums', $rev = strrev($texte), $m) && !preg_match(",>$m[2]/<,", $m[1])) 
88                $texte = strrev(strlen($m[1])?">$m[2]/<$rev":trim(substr($rev, strlen($m[2])+2)));
89        // balises <p|span|div> a traiter
90        foreach(array('span', 'div', 'p') as $b) {
91                // ouvrante manquante
92                if(($fin = strpos($texte, "</$b>")) !== false)
93                        if(!preg_match(",<{$b}[ >],", substr($texte, 0, $fin)))
94                                $texte = "<$b>$texte";
95                // fermante manquante
96                $texte = strrev($texte);
97                if(preg_match(',[ >]'.strrev("<{$b}").',', $texte, $reg)) {
98                        $fin = strpos(substr($texte, 0, $deb = strpos($texte, $reg[0])), strrev("</$b>"));
99                        if($fin===false || $fin>$deb) $texte = strrev("</$b>").$texte;
100                }
101                $texte = strrev($texte);
102        }
103        return $texte;
104}
105
106// fonction de suppression de notes. Utile pour #CS_SOMMAIRE ou #CS_DECOUPE
107function cs_supprime_notes($texte) {
108        return preg_replace(', *\[\[(.*?)\]\],msS', '', $texte);
109}
110
111
112?>
Note: See TracBrowser for help on using the repository browser.