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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+37 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,9 +12,43 @@

if (!defined("_ECRIRE_INC_VERSION")) return;

// Les balises URL_$type sont generiques:
// Elles produisent un appel a generer_url_$type(id-courant)
// sauf qq cas particuliers
// Les balises URL_$type sont generiques, sauf qq cas particuliers:
// elles produisent un appel a generer_url_$type(id-courant)
// 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
function balise_URL__dist($p) {
+6 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -785,7 +785,6 @@ function balise_CHEMIN_dist($p) {
// http://doc.spip.org/@balise_ENV_dist
function balise_ENV_dist($p, $src = NULL) {
	// le tableau de base de la balise (cf #META ci-dessous)
	if (!$src) $src = '@$Pile[0]';

	$_nom = interprete_argument_balise(1,$p);
	$_sinon = interprete_argument_balise(2,$p);
@@ -793,10 +792,14 @@ function balise_ENV_dist($p, $src = NULL) {
	if (!$_nom) {
		// cas de #ENV sans argument : on retourne le serialize() du tableau
		// 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 {
		// 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)
			$p->code = 'sinon('. 
				$p->code.",$_sinon)";
+3 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -20,6 +20,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// reperer un code ne calculant rien, meme avec commentaire
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
// dans l'arborescence des boucles
include_spip('public/references');
+0 −15
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -45,7 +45,6 @@ function public_composer_dist($squelette, $mime_type, $gram, $source, $connect)
	AND lire_fichier ($phpfile, $contenu,
	array('critique' => 'oui', 'phpcheck' => 'oui'))) 
		eval('?'.'>'.$contenu);

	if (@file_exists($fonc = $squelette . '_fonctions'.'.php')
	OR @file_exists($fonc = $squelette . '_fonctions'.'.php3')) {
		include_once $fonc;
@@ -432,20 +431,6 @@ function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier
	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
// http://doc.spip.org/@calculer_notes
function calculer_notes() {
+0 −35
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -204,41 +204,6 @@ function quete_meta($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
# En deduit un contexte disant si la page est une redirection ou 
Chargement en cours