source: spip-zone/_plugins_/macrosession/trunk/inc/macrosession_utils.php @ 113657

Last change on this file since 113657 was 113657, checked in by jluc@…, 4 months ago

peaufinures

File size: 3.5 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) {
3        return;
4}
5
6
7if (!function_exists('existe_argument_balise')) {
8        // prolégomène à interprete_argument_balise
9        function existe_argument_balise ($n, $p) {
10                return (($p->param) && (!$p->param[0][0]) && (count($p->param[0])>$n));
11        };
12}
13
14/*
15 * Recevant un argument entre quotes (contenant par exemple un nom de filtre)
16 * trim_quote enlève les espaces de début et fin *à l'intérieur* des quotes
17 * ex : reçoit ' filtre ' (quotes comprises) et renvoie 'filtre'
18*/
19function trim_quote($f) {
20        $f = trim($f);  // c'est pas ça l'important
21        $l = strlen($f);
22        if ((strpos($f,"'")!== 0) or (strrpos($f,"'")!== $l-1))
23                return $f;
24        $r = '\''.trim(substr($f, 1, $l-2)).'\'';
25        return $r;
26}
27
28// une fonction pour le code de |? (la négation de choixsivide)
29function choix_selon ($test, $sioui, $sinon) {
30        return $test ? $sioui : $sinon;
31}
32
33
34//
35// Prépare une expression compilée à être réinjectée dans le code compilé
36//
37// OK pour une petite variété de formes syntaxiques :
38// - Balises sans traitements : #ID_ARTICLE, #TITRE*...
39// - #GET{variabledenv}
40// À mieux tester et étendre en prenant autrement le pb
41//
42function reinjecte_expression_compilee($expr_org) {
43        if (isset($_GET['debug'])) {
44                echo "reinjecte_expression_compilee reçoit : <pre style='display: inline'>$expr_org </pre>";
45        }
46
47        $expr = $expr_org;
48        // #GET{aa} est implémenté par un appel à table_valeur
49        // On traduit en appels de tableau php
50        // Pour #GET, le 3eme argument de table_valeur est toujours 'null' donc osef
51        // La syntaxe #GET{vartableau/index1/index2} n'est pas gérée
52        $expr = preg_replace (
53                '/table_valeur\((.*),(.*),.*\)/',   // TODO : affiner pour pouvoir traiter une plus grande variété de codes
54                '$1[$2]',
55                $expr
56        );
57
58        if (($expr!=$expr_org) and isset($_GET['debug']))
59                echo "Passe par : <pre style='display:inline'>$expr</pre> ";
60
61        // Variables scalaires $truc et tableaux multiniveaux $Pile[0][$SP]['index']
62        $expr = preg_replace(
63                '/@?(\$\w+(\[[^\]]*\])*)/',
64                '\'{$1}\'',
65                $expr);
66
67        if (isset($_GET['debug']))
68                echo "et renvoie : <pre>$expr</pre>";
69        return $expr;
70}
71
72function macrosession_pipe($q="!!! non défini !!!") {
73        if (isset($_GET['debug'])) {
74                echo "exec macrosession_pipe($q)<br>";
75        }
76        return $q;
77}
78
79/**
80 * @param $a
81 * @return string
82 */
83function macrosession_print($a) {
84        if (isset($_GET['debug']))
85                echo '<pre>'.print_r($a, 1).'</pre>';
86        return "''";
87}
88
89//
90/**
91 * @param string $macro         description du contexte d'appel (nom de la macro + arguments éventuellement)
92 * @param string $arg_name      nom de l'argument testé
93 * @param string $val           code compilé pour l'argument testé et devant être réinjecté
94 * @param array $p              pile contexte
95 * @param bool $contexte_ok     Désormais et pour l'instant inutilisé
96 *                              Indique si les motclé de référence au contexte sont acceptés : env, boucle, url, #GET{variable}, #BALISE
97  * @return bool
98 */
99function erreur_argument_macro($macro, $arg_name, $val, $p, $contexte_ok=false) {
100        if (substr($val, 0, 1) != "'") {
101                if ($contexte_ok)
102                        $contexte_ok = "Pour chercher dans les variables d'environnement ou d'url, vous pouvez utiliser 'env', 'boucle', 'url' et aussi '#BALISE' pour les balises reçues par le squelette, mais pas pour les champs de la boucle immédiatement englobante";
103                // if (isset($_GET['debug']))
104                erreur_squelette ("L'argument '$arg_name' de la macro '$macro' ne doit pas être une valeur calculée (".$val."). $contexte_ok", $p);
105                return true;
106        };
107        return false;
108}
Note: See TracBrowser for help on using the repository browser.