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

Deux améliorations liées dans la compilation des balises dynamiques.

Plutôt que de produire dans le code des appels à {{{lang_select}}} qui souvent ne servent pas car {{{recuperer_fond}}} en fait un aussi au départ, communiquer à celle-ci la langue désirée par la balise dynamique, ça supprime un couple d'appel à  {{{lang_select}}}. 

Puisqu'en fait on dispose de tout le contexte de compil lors de la production du l'appel d'une balise dynamique, autant l'envoyer à {{{recuperer_fond}}}, qui pourra ainsi fournir la localisation de l'éventuelle erreur à l'inclusion.
parent 020f2c65
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+30 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -243,12 +243,33 @@ function inclure_page($fond, $contexte, $connect='') {
	return $page;
}

# Attention, un appel explicite a cette fonction suppose certains include
# $echo = faut-il faire echo ou return
// Fonction inseree par le compilateur dans le code compile.
// Elle recoit un contexte pour inclure un squelette, 
// et les valeurs du contexte de compil prepare par memoriser_contexte_compil
// elle-meme appelee par calculer_balise_dynamique dans references.php:
// 0: sourcefile
// 1: codefile
// 2: id_boucle
// 3: ligne
// 4: langue

function inserer_balise_dynamique($contexte_exec, $contexte_compil)
{
	if (!is_array($contexte_exec))
		echo $contexte_exec; // message d'erreur etc
	else {
		if ($contexte_compil[4] AND empty($contexte_exec[2]['lang']))
			$contexte_exec[2]['lang'] = $contexte_compil[4];
		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
	}
}

// http://doc.spip.org/@inclure_balise_dynamique
function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
// Attention, un appel explicite a cette fonction suppose certains include
// $echo = faut-il faire echo ou return

// http://doc.spip.org/@inclure_balise_dynamique
function inclure_balise_dynamique($texte, $echo=true, $contexte_compil=array())
{
	if (is_array($texte)) {

		list($fond, $delainc, $contexte_inclus) = $texte;
@@ -257,7 +278,7 @@ function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
		$d = isset($GLOBALS['delais']) ? $GLOBALS['delais'] : NULL;
		$GLOBALS['delais'] = $delainc;

		$page = recuperer_fond($fond,$contexte_inclus,array('trim'=>false, 'raw' => true));
		$page = recuperer_fond($fond,$contexte_inclus,array('trim'=>false, 'raw' => true, 'compil' => $contexte_compil));

		$texte = $page['texte'];

@@ -287,9 +308,11 @@ function inclure_balise_dynamique($texte, $echo=true, $ligne=0) {
		}
	}

	if ($GLOBALS['var_mode'] == 'debug')
	if ($GLOBALS['var_mode'] == 'debug') {
		// compatibilite : avant on donnait le numero de ligne ou rien.
		$ligne =  intval(isset($contexte_compil[3]) ? $contexte_compil[3] : $contexte_compil);
		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;

	}
	if ($echo)
		echo $texte;
	else
+4 −12
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -290,24 +290,16 @@ function filtre_introduction_dist($descriptif, $texte, $longueur, $connect) {
// http://doc.spip.org/@synthetiser_balise_dynamique

define('CODE_INCLURE_BALISE', '<' . '?php 
$lang_select = lang_select("%s");
include_once(_DIR_RACINE . "%s");
inclure_balise_dynamique(balise_%s_dyn(%s), 1, %s);
if ($lang_select) lang_select();
inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
?'
       .'>');

// Cette fonction fabrique l'appel d'une balise dynamique a l'aide du contexte
// de compilation prepare par memoriser_contexte_compil
// elle-meme appelee par calculer_balise_dynamique dans references.php:
// 0: sourcefile
// 1: codefile
// 2: id_boucle
// 3: ligne
// 4: langue

function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
	$r = sprintf(CODE_INCLURE_BALISE, $context_compil[4], $file, $nom, join(", ", array_map('argumenter_squelette', $args)), $context_compil[3]);
	$r = sprintf(CODE_INCLURE_BALISE, $file, $nom,
	       join(', ', array_map('argumenter_squelette', $args)),
	       join(', ', array_map('_q', $context_compil)));
	return $r;
}