Skip to content
Extraits de code Groupes Projets
Valider 9d8a35ef rédigé par esj's avatar esj
Parcourir les fichiers

Petites modifications, normalement transparentes, dans le code produit par le...

Petites modifications, normalement transparentes, dans le code produit par le compilateur pour maximiser le nombre d'occurrences de {{{$Pile[O]['}}}''nom''{{{']}}}. Cela concerne:

 * la balise ENV
 * les #PARAM non indiqués par les boucles

et déplacements de fonctions et inclusions pour que le validateur puisse exécuter le compilateur hors contexte.
parent 4bd842dc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -12,9 +12,43 @@ ...@@ -12,9 +12,43 @@
if (!defined("_ECRIRE_INC_VERSION")) return; if (!defined("_ECRIRE_INC_VERSION")) return;
// Les balises URL_$type sont generiques: // Les balises URL_$type sont generiques, sauf qq cas particuliers:
// Elles produisent un appel a generer_url_$type(id-courant) // elles produisent un appel a generer_url_$type(id-courant)
// sauf qq cas particuliers // grace a la fonction ci-dessous
// Si ces balises sont utilisees pour la base locale,
// producttion des appels aux fonctions generer_url parametrees par $type_urls
// Si la base est externe et non geree par SPIP
// on retourne NULL pour provoquer leur interpretation comme champ SQL normal.
// Si la base est externe et sous SPIP,
// on produit l'URL de l'objet si c'est une piece jointe
// ou sinon l'URL du site local applique sur l'objet externe
// ce qui permet de le voir a travers les squelettes du site local
// http://doc.spip.org/@generer_generer_url
function generer_generer_url($type, $p)
{
$_id = interprete_argument_balise(1,$p);
if (!$_id) $_id = champ_sql('id_' . $type, $p);
if ($s = $p->id_boucle) $s = $p->boucles[$s]->sql_serveur;
if (!$s)
return "generer_url_$type($_id)";
elseif (!$GLOBALS['connexions'][$s]['spip_connect_version']) {
return NULL;
} else {
$s = addslashes($s);
if ($type != 'document')
return "'./?page=$type&id_$type=' . $_id . '&connect=$s'";
else {
$u = "quete_meta('adresse_site', '$s')";
$f = "$_id . '&file=' . quete_fichier($_id,'$s')";
return "$u . '?action=acceder_document&arg=' .$f";
}
}
}
// http://doc.spip.org/@balise_URL__dist // http://doc.spip.org/@balise_URL__dist
function balise_URL__dist($p) { function balise_URL__dist($p) {
......
...@@ -785,7 +785,6 @@ function balise_CHEMIN_dist($p) { ...@@ -785,7 +785,6 @@ function balise_CHEMIN_dist($p) {
// http://doc.spip.org/@balise_ENV_dist // http://doc.spip.org/@balise_ENV_dist
function balise_ENV_dist($p, $src = NULL) { function balise_ENV_dist($p, $src = NULL) {
// le tableau de base de la balise (cf #META ci-dessous) // le tableau de base de la balise (cf #META ci-dessous)
if (!$src) $src = '@$Pile[0]';
$_nom = interprete_argument_balise(1,$p); $_nom = interprete_argument_balise(1,$p);
$_sinon = interprete_argument_balise(2,$p); $_sinon = interprete_argument_balise(2,$p);
...@@ -793,10 +792,14 @@ function balise_ENV_dist($p, $src = NULL) { ...@@ -793,10 +792,14 @@ function balise_ENV_dist($p, $src = NULL) {
if (!$_nom) { if (!$_nom) {
// cas de #ENV sans argument : on retourne le serialize() du tableau // cas de #ENV sans argument : on retourne le serialize() du tableau
// une belle fonction [(#ENV|affiche_env)] serait pratique // une belle fonction [(#ENV|affiche_env)] serait pratique
$p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")'; $p->code = $src
? ('(is_array($a = ('.$src.')) ? serialize($a) : "")')
: '@serialize($Pile[0])';
} else { } else {
// admet deux arguments : nom de variable, valeur par defaut si vide // admet deux arguments : nom de variable, valeur par defaut si vide
$p->code = 'is_array($a = ('.$src.')) ? $a['.$_nom.'] : ""'; $p->code = $src
? ('is_array($a = ('.$src.')) ? $a['.$_nom.'] : ""')
: ('@$Pile[0][' . $_nom . ']');
if ($_sinon) if ($_sinon)
$p->code = 'sinon('. $p->code = 'sinon('.
$p->code.",$_sinon)"; $p->code.",$_sinon)";
......
...@@ -20,6 +20,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; ...@@ -20,6 +20,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// reperer un code ne calculant rien, meme avec commentaire // reperer un code ne calculant rien, meme avec commentaire
define('CODE_MONOTONE', ",^(\n//[^\n]*\n)?\(?'([^'])*'\)?$,"); define('CODE_MONOTONE', ",^(\n//[^\n]*\n)?\(?'([^'])*'\)?$,");
// definition des structures de donnees
include_spip('public/interfaces');
// Definition de la structure $p, et fonctions de recherche et de reservation // Definition de la structure $p, et fonctions de recherche et de reservation
// dans l'arborescence des boucles // dans l'arborescence des boucles
include_spip('public/references'); include_spip('public/references');
......
...@@ -45,7 +45,6 @@ function public_composer_dist($squelette, $mime_type, $gram, $source, $connect) ...@@ -45,7 +45,6 @@ function public_composer_dist($squelette, $mime_type, $gram, $source, $connect)
AND lire_fichier ($phpfile, $contenu, AND lire_fichier ($phpfile, $contenu,
array('critique' => 'oui', 'phpcheck' => 'oui'))) array('critique' => 'oui', 'phpcheck' => 'oui')))
eval('?'.'>'.$contenu); eval('?'.'>'.$contenu);
if (@file_exists($fonc = $squelette . '_fonctions'.'.php') if (@file_exists($fonc = $squelette . '_fonctions'.'.php')
OR @file_exists($fonc = $squelette . '_fonctions'.'.php3')) { OR @file_exists($fonc = $squelette . '_fonctions'.'.php3')) {
include_once $fonc; include_once $fonc;
...@@ -432,20 +431,6 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier ...@@ -432,20 +431,6 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier
return $logo; return $logo;
} }
// les balises dynamiques et EMBED ont des filtres sans arguments
// car en fait ce sont des arguments pas des filtres.
// Si le besoin s'en fait sentir, il faudra recuperer la 2e moitie du tableau
// http://doc.spip.org/@argumenter_balise
function argumenter_balise($fonctions, $sep) {
$res = array();
if ($fonctions)
foreach ($fonctions as $f)
$res[] = str_replace('\'', '\\\'', str_replace('\\', '\\\\',$f[0]));
return ("'" . join($sep, $res) . "'");
}
// fonction appelee par la balise #NOTES // fonction appelee par la balise #NOTES
// http://doc.spip.org/@calculer_notes // http://doc.spip.org/@calculer_notes
function calculer_notes() { function calculer_notes() {
......
...@@ -204,41 +204,6 @@ function quete_meta($nom, $serveur) { ...@@ -204,41 +204,6 @@ function quete_meta($nom, $serveur) {
return sql_getfetsel("valeur", "spip_meta", "nom=" . _q($nom), '','','','','','','',$serveur); return sql_getfetsel("valeur", "spip_meta", "nom=" . _q($nom), '','','','','','','',$serveur);
} }
// Compilation finale des balise #URL_xxx
// Si ces balises sont utilisees pour la base locale,
// Producttion des appels aux fonctions generer_url parametrees par $type_urls
// Si la base est externe et non geree par SPIP
// on retourne NULL pour provoquer leur interpretation comme champ SQL normal.
// Si la base est externe et sous SPIP,
// on produit l'URL de l'objet si c'est une piece jointe
// ou sinon l'URL du site local applique sur l'objet externe
// ce qui permet de le voir a travers les squelettes du site local
// http://doc.spip.org/@generer_generer_url
function generer_generer_url($type, $p)
{
$_id = interprete_argument_balise(1,$p);
if (!$_id) $_id = champ_sql('id_' . $type, $p);
if ($s = $p->id_boucle) $s = $p->boucles[$s]->sql_serveur;
if (!$s)
return "generer_url_$type($_id)";
elseif (!$GLOBALS['connexions'][$s]['spip_connect_version']) {
return NULL;
} else {
$s = addslashes($s);
if ($type != 'document')
return "'./?page=$type&id_$type=' . $_id . '&connect=$s'";
else {
$u = "quete_meta('adresse_site', '$s')";
$f = "$_id . '&file=' . quete_fichier($_id,'$s')";
return "$u . '?action=acceder_document&arg=' .$f";
}
}
}
# Determine les parametres d'URL (hors reecriture) et consorts # Determine les parametres d'URL (hors reecriture) et consorts
# En deduit un contexte disant si la page est une redirection ou # En deduit un contexte disant si la page est une redirection ou
......
...@@ -294,6 +294,19 @@ function calculer_balise_dynamique($p, $nom, $l) { ...@@ -294,6 +294,19 @@ function calculer_balise_dynamique($p, $nom, $l) {
return $p; return $p;
} }
// les balises dynamiques et EMBED ont des filtres sans arguments
// car en fait ce sont des arguments pas des filtres.
// Si le besoin s'en fait sentir, il faudra recuperer la 2e moitie du tableau
// http://doc.spip.org/@argumenter_balise
function argumenter_balise($fonctions, $sep) {
$res = array();
if ($fonctions)
foreach ($fonctions as $f)
$res[] = str_replace('\'', '\\\'', str_replace('\\', '\\\\',$f[0]));
return ("'" . join($sep, $res) . "'");
}
// Construction du tableau des arguments d'une balise dynamique. // Construction du tableau des arguments d'une balise dynamique.
// Ces arguments peuvent etre eux-meme des balises (cf FORMULAIRE_SIGNATURE) // Ces arguments peuvent etre eux-meme des balises (cf FORMULAIRE_SIGNATURE)
// mais gare au bouclage (on peut s'aider de $nom pour le reperer au besoin) // mais gare au bouclage (on peut s'aider de $nom pour le reperer au besoin)
...@@ -483,12 +496,15 @@ function compose_filtres_args($p, $args, $sep) ...@@ -483,12 +496,15 @@ function compose_filtres_args($p, $args, $sep)
function calculer_argument_precedent($idb, $nom_champ, &$boucles) { function calculer_argument_precedent($idb, $nom_champ, &$boucles) {
// si recursif, forcer l'extraction du champ SQL mais ignorer le code // si recursif, forcer l'extraction du champ SQL mais ignorer le code
if ($boucles[$idb]->externe) if ($boucles[$idb]->externe) {
index_pile ($idb, $nom_champ, $boucles); index_pile ($idb, $nom_champ, $boucles);
// retourner $Pile[$SP] et pas $Pile[0] (bug recursion en 1ere boucle) $zero = '$SP';
} else $zero = '0';
// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
$prec = $boucles[$idb]->id_parent; $prec = $boucles[$idb]->id_parent;
return (($prec==="") ? ('$Pile[$SP][\''.$nom_champ.'\']') : return (($prec === '')
index_pile($prec, $nom_champ, $boucles)); ? ('$Pile[' . $zero . "]['$nom_champ']")
: index_pile($prec, $nom_champ, $boucles));
} }
// //
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter