From e6f49578a198f0c1c312af4f9876d65e2bc30f83 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Wed, 23 Aug 2006 21:53:29 +0000
Subject: [PATCH] espaces et tags html dans les arguments des modeles (merci
 piif et toggg pour la regexp)

---
 dist/modeles/fromage.html | 16 ++++++++++++----
 ecrire/inc/texte.php      | 16 +++++++++++-----
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/dist/modeles/fromage.html b/dist/modeles/fromage.html
index be0712a80d..5c2c9fbc3e 100644
--- a/dist/modeles/fromage.html
+++ b/dist/modeles/fromage.html
@@ -11,10 +11,18 @@
 
 	<fromage1020|lait=brebis|pays=France|region=Poitou|date_appellation=1923>
 
+	ou encore avec des espaces et des tags html :
+
+	<fromage 1020
+	|lait=brebis
+	|pays={France}
+	|region=<b>Poitou</b>
+	|date_appellation=1923
+	>
+
 	ou 1020 est le numero du document qui contient la photo, le nom du
 	fromage (titre), et le commentaire du critique culinaire (descriptif).
 ]
-
 <BOUCLE_doc(DOCUMENTS){id_document=#ENV{id_fromage}}>
 [(#REM) Code pour {doublons}]
 <table class='spip_document_#ID_DOCUMENT' border="1" align="right" cellpadding="4" cellspacing="0" style="margin: 0 0 1em 1em; border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px; background-color: #FFFFDD; font-size: 90%; border-collapse: collapse;">
@@ -35,15 +43,15 @@
 ]
 [<tr>
 <td><b>Pays d'origine</b></td>
-<td align="center" style="background: #FFFFFF">(#ENV{pays})</td>
+<td align="center" style="background: #FFFFFF">(#ENV*{pays}|propre)</td>
 </tr>]
 [<tr>
 <td><b>R&eacute;gion, ville</b></td>
-<td align="center" style="background: #FFFFFF">(#ENV{region})</td>
+<td align="center" style="background: #FFFFFF">(#ENV*{region}|propre)</td>
 </tr>]
 [<tr>
 <td><b>Lait de</b></td>
-<td align="center" style="background: #FFFFFF">(#ENV{lait})</td>
+<td align="center" style="background: #FFFFFF">(#ENV*{lait}|propre)</td>
 </tr>]
 [<tr>
 <td><b>Appellation, depuis</b></td>
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index 43ff87027b..dea96eccb4 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -941,18 +941,24 @@ function supprime_img($letexte) {
 // http://doc.spip.org/@traiter_modeles
 function traiter_modeles($texte, $doublons=false) {
 	// detecter les modeles (rapide)
-	if (preg_match_all('/<[a-z_-]{3,}[0-9|]+/iS',
+	if (preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS',
 	$texte, $matches, PREG_SET_ORDER)) {
 		include_spip('public/assembler');
 		foreach ($matches as $match) {
 			// Recuperer l'appel complet (y compris un eventuel lien)
-			// $regs : 1 => modele, 2 => type, 3 => id, 5 => params, 6 => a
+			// $regs : 1 => modele, 2 => type, 3 => id, 4 => params, 5 => a
 			$a = strpos($texte,$match[0]);
 			preg_match(
-			'/^(<([a-z_-]{3,})([0-9]*)([|](.*?))?'.'>)\s*(<\/a>)?/isS',
+			'/^' #debut
+			.'(<([a-z_-]{3,})' # <modele
+			.'\s*([0-9]*)\s*' # id
+			.'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
+			.'>)' # fin du modele >
+			.'\s*(<\/a>)?' # eventuel </a>
+			.'/isS',
 			substr($texte, $a), $regs);
 
-			if ($regs[6] AND preg_match(
+			if ($regs[5] AND preg_match(
 			',<a\s.*>\s*$,Uis', substr($texte, 0, $a), $r)) {
 				$lien = array(
 					extraire_attribut($r[0],'href'),
@@ -967,7 +973,7 @@ function traiter_modeles($texte, $doublons=false) {
 
 			// calculer le modele
 			if ($doublons) $modele = ''; else # hack articles_edit, breves_edit
-			$modele = inclure_modele($regs[2], $regs[3], $regs[5], $lien);
+			$modele = inclure_modele($regs[2], $regs[3], $regs[4], $lien);
 
 			// le remplacer dans le texte
 			if ($modele !== false) {
-- 
GitLab