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

La fonction {{{inc_lien_dist}}} était toujours appelée après un appel à la...

La fonction {{{inc_lien_dist}}} était toujours appelée après un appel à la fonction {{{calculer_url}}}, on fait migrer l'appel de celle-ci dans celle-là, afin que la surcharge de {{{inc_lien_dist}}} entraîne de fait celle de l'autre. Le gros avantage de ce changement est qu'on dispose des éventuels attributs de la future balise A au moment de calculer l'URL, notamment le {{{hreflang}}} qui peut influer sur ce calcul. Cet architecture fonctionne bien pour les raccourcis internes (soit {{{[{it}->artNNN]}}} etc) mais pas encore pour les raccourcis externes comme les glossaires {{{[?X{es}]}}}. A améliorer à terme.

Test (version étendue de celui de [10301]):

{{{
Doc 2239 centré
<doc2239|center>

Je mets 2 fois un raccourci de glossaire
[?SPIP]  [?SPIP|mon title{fr}] dont un avec href et title
puis un [raccourci|avec son title->art1]
et un autre, automatique, [{en}->art3784].

Suivre la note
[[elle est terminée par un  [raccourci->art1]]].

Un moment de poésie.
<poesie>
un 
   haiku
sur
2 lignes
</poesie>

Elle préfère parler d'un {accroissement de la dispersion salariale} [[
 [{Perspectives économiques}->http://www.oecd.org/document/4/0,3343,fr_2649_201185_20347588_1_1_1_1,00.html]
- Vol. 2007-1, nÁ~81, mai 2007, p. ~184. ]]

Elle aussi préf§re parler d'un {accroissement de la dispersion salariale}
mais sur une seule ligne  [[  [{Perspectives économiques}->http://www.oecd.org/document/4/0,3343,fr_2649_201185_20347588_1_1_1_1,00.html]
- Vol. 2007-1, nÁ~81, mai 2007, p. ~184. ]].

Une Juliette [[<*> sans numéro.]].

Et un lien explicite:
http://www.spip.net/spipnet/ecrire/?exec=articles_edit&id_article=3628
}}}
parent 79d52cc1
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+19 −10
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,8 +21,14 @@ include_spip('base/abstract_sql');
//

// http://doc.spip.org/@traiter_raccourci_lien_lang
function inc_lien_dist($lien, $texte, $class='', $title='', $hlang='', $lang='', $connect='')
function inc_lien_dist($lien, $texte='', $class='', $title='', $hlang='', $rel='', $connect='')
{		
	$r = calculer_url($lien, $texte, 'tout', $connect);
	$texte = $r['titre'];
	if (!$class AND isset($r['class'])) $class = $r['class'];
	$lang = isset($r['lang']) ?$r['lang'] : '';
	$lien = $r['url'];

	if (substr($lien,0,1) == '#')  # ancres pures (internes a la page)
		$class = 'spip_ancre';
	elseif (preg_match('/^\s*mailto:/',$lien)) # pseudo URL de mail
@@ -37,13 +43,14 @@ function inc_lien_dist($lien, $texte, $class='', $title='', $hlang='', $lang='',
	$lang = ($hlang ? " hreflang='$hlang'" : '');

	if ($title) $title = ' title="'.texte_backend($title).'"';
	if ($rel) $rel = " rel='$rel'";
	$lien = "<a href='$lien' class='$class'$lang$title$rel>$texte</a>";

	# ceci s'execute heureusement avant les tableaux et leur "|".
	# Attention, le texte initial est deja echappe mais pas forcement
	# celui retourne par calculer_url.

	# Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>')
	return typo("<a href='$lien' class='$class'$lang$title>$texte</a>", true, $connect);
	return typo($lien, true, $connect);
}

// Regexp des raccouris, aussi utilisee pour la fusion de sauvegarde Spip
@@ -60,11 +67,14 @@ function expanser_liens($texte, $connect='')
	if (preg_match_all(_RACCOURCI_LIEN, $texte, $regs, PREG_SET_ORDER)) {
		$lien = charger_fonction('lien', 'inc');
		foreach ($regs as $k => $reg) {
			list($titre, $bulle, $hlang) = traiter_raccourci_lien_atts($reg[1]);

			$inserts[$k] = '@@SPIP_ECHAPPE_LIEN_' . $k . '@@';
			$texte = str_replace($reg[0], $inserts[$k], $texte);
			$r = calculer_url($reg[count($reg)-1], $titre, 'tout', $connect);
			$regs[$k] = $lien($r['url'], $r['titre'], @$r['class'], $bulle, $hlang, isset($r['lang'])?$r['lang']:'');

			list($titre, $bulle, $hlang) = traiter_raccourci_lien_atts($reg[1]);
			$r = $reg[count($reg)-1];
			$regs[$k] = $lien($r, $titre, '', $bulle, $hlang, '', $connect);

		}
	}

@@ -111,7 +121,7 @@ function nettoyer_raccourcis_typo($texte, $connect='')
// Repere dans la partie texte d'un raccourci [texte->...]
// la langue et la bulle eventuelles

define('_RACCOURCI_ATTRIBUTS', '/^(.*?)([|]([^<>]*?))?([{]([a-z_]+)[}])?$/');
define('_RACCOURCI_ATTRIBUTS', '/^(.*?)([|]([^<>]*?))?([{]([a-z_]*)[}])?$/');

// http://doc.spip.org/@traiter_raccourci_lien_atts
function traiter_raccourci_lien_atts($texte) {
@@ -168,10 +178,9 @@ function traiter_autoliens($r) {
	if (!preg_match(_EXTRAIRE_DOMAINE, $l)) return $tout;
	// supprimer les ponctuations a la fin d'une URL
	preg_match('/^(.*?)([,.;?]?)$/', $l, $k);
	$r = traiter_lien_explicite($protocol.'://'.$k[1], '', 'tout');
	$url = $protocol.'://'.$k[1];
	$lien = charger_fonction('lien', 'inc');
	$r = $lien($r['url'], $r['titre']);
	$r = inserer_attribut($r, 'rel', 'nofollow') . $k[2];
	$r = $lien($url,'','','','','nofollow') . $k[2];
	// si l'orignal ne contenait pas le 'http:' on le supprime du clic
	return $m ? $r : str_replace('>http://', '>', $r);
}