Valider ab046844 rédigé par esj's avatar esj
Parcourir les fichiers

Troisième modification des spécifications du décompilateur (cf [14261],...

Troisième modification des spécifications du décompilateur (cf [14261], [14197] et [14227]), et normalement la dernière.

L'inclusion accepte à la fois un nom de fichier entre parenthèses et un argument {{{fond=}}}, redondance obscure qui ne définit d'ailleurs pas quoi faire si les deux sont présents, et complexifie sans raison la fonction associée dans le décompilateur. En conséquence, on accepte à présent que le nom entre parenthèses ne se termine pas nécessairement par {{{.php}}}, auquel cas on considère qu'il s'agit du fond. Du coup la fonction de décompilation ne recoit plus que les 2 arguments évidents, savoir le nom de fichier et la liste des valeurs d'inclusions.  Les anciens cas sont évidemment toujours acceptés, mais le décompilateur fournira la nouvelle syntaxe, sauf pour les inclusions calculées car on tombe sur une des limitations de l'analyseur actuel.

On peut donc écrire {{{<INCLURE(inc-pied)>}}} plutôt que {{{<INCLURE{fond=inc-pied}>}}}, mais il faut toujours écrire {{{<INCLURE{fond=#ENV{skel}}>}}}, ce qui est regrettable.

Le [http://zone.spip.org/trac/spip-zone/changeset/29950 plugin] permettant de réaliser plus facilement le devoir de vacances suite à la [http://videos.spip.org/spip.php?article113 session de Juin 2009 de SPIP-Party] devra être mis à jour (merci Mathieu).
parent bfb58870
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+32 −20
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -121,8 +121,19 @@ function argumenter_inclure($params, $rejet_filtres, $descr, &$boucles, $id_bouc
// http://doc.spip.org/@calculer_inclure
function calculer_inclure($p, $descr, &$boucles, $id_boucle) {

	// si ce champ est present, ce n'est pas un squelette
	if ($fichier = $p->texte) {
	$_contexte = argumenter_inclure($p->param, false, $descr, $boucles, $id_boucle);
	if (is_string($p->texte)) {
		$fichier = $p->texte;
		$code = "'$fichier'";
	} else {
		$code = calculer_liste($p->texte, $descr, $boucles, $id_boucle);
		if (preg_match("/^'([^']*)'/s", $code, $r))
			$fichier = $r[1];
		else $fichier = '';
	}

	// s'il y a une extension .php, ce n'est pas un squelette
	if (preg_match('/^.+[.]php$/s', $fichier)) {
		// si inexistant, on essaiera a l'execution
		if ($path = find_in_path($fichier))
			$path = "\"$path\"";
@@ -132,10 +143,10 @@ function calculer_inclure($p, $descr, &$boucles, $id_boucle) {
	else { include_spip(\"public/debug\");
			erreur_squelette(_T(\"zbug_info_erreur_squelette\"),
				 _T(\"fichier_introuvable\", array(\"fichier\" => \"$fichier\")));}";
	} else 	$code = 'include _DIR_RESTREINT . "public.php";';

	$_contexte = argumenter_inclure($p->param, false, $descr, $boucles, $id_boucle);

	} else 	{
		$_contexte['fond'] = "\'fond\' => ' . argumenter_squelette(" . $code  . ") . '";
		$code = 'include _DIR_RESTREINT . "public.php";';
	}
	// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
	if ($env = (isset($_contexte['env'])|| isset($_contexte['self']))) {
		unset($_contexte['env']);
@@ -189,10 +200,11 @@ function calculer_boucle($id_boucle, &$boucles) {
		$corps = calculer_boucle_nonrec($id_boucle, $boucles);
		// attention, ne calculer la requete que maintenant
		// car la fonction precedente appelle index_pile qui influe dessus
      $req =	(($init = $boucles[$id_boucle]->doublons) ?
			("\n\t$init = array();") : '') .
		calculer_requete_sql($boucles[$id_boucle]);
		$req = (($init = $boucles[$id_boucle]->doublons)
			? ("\n\t$init = array();") : '')
		. calculer_requete_sql($boucles[$id_boucle]);
	}

	$notrace = (_request('var_mode_affiche') != 'resultat');
	return $req . $corps 
	. ($notrace ? "" : "
@@ -370,7 +382,7 @@ function calculer_boucle_nonrec($id_boucle, &$boucles) {


// http://doc.spip.org/@calculer_requete_sql
function calculer_requete_sql(&$boucle)
function calculer_requete_sql($boucle)
{
	if (!$boucle->select) return ""; // l'optimiseur a fait fort
	return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
+4 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -45,18 +45,16 @@ function decompiler_boucle($struct, $fmt, $prof=0)
function decompiler_include($struct, $fmt, $prof=0)
{
	$res = array();
	$fond = '';
	foreach($struct->param as $couple) {
		array_shift($couple);
		foreach($couple as $v) {
			$a = public_decompiler($v, $fmt, $prof);
			if (preg_match(',^fond=(.*)$,sS', $a, $r))
			    $fond = $r[1];
			else $res[]= $a;
			$res[]= public_decompiler($v, $fmt, $prof);
		}
	}
	$file = is_string($struct->texte) ? $struct->texte :
		public_decompiler($struct->texte, $fmt, $prof);
	$f = 'format_inclure_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES);
	return $f($struct->texte, $fond, $res, $prof);
	return $f($file, $res, $prof);
}

function decompiler_texte($struct, $fmt, $prof=0)
+7 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,11 +21,14 @@ function format_boucle_html ($avant, $nom, $type, $crit, $corps, $apres, $altern
	return "$avant<BOUCLE$nom($type)$crit$corps$apres$altern";
}

function format_inclure_html ($file, $fond, $args, $prof)
function format_inclure_html ($file, $args, $prof)
{
	if (strpos($file, '#')===false)
	 	$t = $file ? ("(" . $file . ")") : "" ;
	if ($fond) array_unshift($args, "fond=" . $fond);
	if ($args) $args = "{" . join(", ",$args) . "}";
	else {
		$t = "{fond=" . $file . '}';
	}
	$args = !$args ? '' : ("{" . join(", ",$args) . "}");
	return ("<INCLURE" . $t . $args  . ">");
}

+20 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -167,4 +167,24 @@ function normaliser_args_inclumodel($p)
	array_unshift($p->param, $args);
}

function normaliser_inclure($champ)
{
	normaliser_args_inclumodel($champ);
	$l = $champ->param[0];
	if (!$l[0]) foreach ($l as $k => $p) {
		if ($p[0]->type != 'texte' OR 
		    !preg_match('/^fond\s*=\s*(.*)$/',$p[0]->texte, $r))
			continue;
		if ($r[1])
			$p[0]->texte = $r[1];
		else unset($p[0]);
		$champ->texte = $p;
		unset($champ->param[0][$k]);
		if (count($champ->param[0]) ==1) 
			array_shift($champ->param);
		return;
	}
	spip_log("inclure sans fond ni fichier");
}

?>
+4 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -59,6 +59,10 @@ function phraser_inclure($texte, $ligne, $result) {
		$texte = substr($texte, $p+strlen($match[0]));
		// on assimile {var=val} a une liste de un argument sans fonction
		phraser_args($texte,"/>","",$result,$champ);
		if (!$champ->texte OR count($champ->param) > 1) {
			include_spip('public/normaliser');
			normaliser_inclure($champ);
		}
		$texte = substr($champ->apres, strpos($champ->apres, '>')+1);
		$champ->apres = "";
		$texte = preg_replace(',^</INCLU[DR]E>,', '', $texte);