Skip to content
Extraits de code Groupes Projets
Valider 1a9d6473 rédigé par esj's avatar esj
Parcourir les fichiers

bug dans les emboitements des champs (Noe)

parent 1cccf534
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -87,6 +87,12 @@ function parser_champs($texte) { ...@@ -87,6 +87,12 @@ function parser_champs($texte) {
return array_merge($result, parser_texte($texte)); return array_merge($result, parser_texte($texte));
} }
// Gestion des imbrications:
// on cherches les [..] les plus internes et on les remplace par une chaine
// %###N@ o N indexe un tableau comportant le rsultat de leur phras
// et o le nombre de # vaut le nombre d'emboitement (0 pour les + internes)
// on recommence tant qu'il y a des [...] en substituant l'appel suivant
// le code n'est ni optimal ni lisible. Vivement SAX!
function parser_champs_etendus($debut) { function parser_champs_etendus($debut) {
$sep = '##'; $sep = '##';
...@@ -97,6 +103,7 @@ function parser_champs_etendus($debut) { ...@@ -97,6 +103,7 @@ function parser_champs_etendus($debut) {
function parser_champs_exterieurs($debut, $sep, $nested) { function parser_champs_exterieurs($debut, $sep, $nested) {
spip_log("$sep: $debut");
$res = array(); $res = array();
foreach (split("%$sep",$debut) as $v) { foreach (split("%$sep",$debut) as $v) {
if (!ereg("^([0-9]+)@(.*)$", $v, $m)) if (!ereg("^([0-9]+)@(.*)$", $v, $m))
...@@ -135,17 +142,26 @@ function parser_champs_interieurs($texte, $sep, $nested) { ...@@ -135,17 +142,26 @@ function parser_champs_interieurs($texte, $sep, $nested) {
$p = strpos($texte, $regs[0]); $p = strpos($texte, $regs[0]);
if ($p) if ($p)
$result[$i++] = substr($texte, 0, $p); {
foreach (split("%$sep",substr($texte, 0, $p)) as $v) {
if (!ereg("^([0-9]+)@(.*)$", $v, $m))
$result[$i++] = $v;
else if ($m[2] == 'Object') {
$result[$i++] = $nested[$m[1]];
} else {
$result[$i++] = $m[2];
}
}
}
$result[$i++] = $champ; $result[$i++] = $champ;
$texte = $regs[8]; $texte = $regs[8];
} }
if ($texte) if ($texte) { $result[$i++] = $texte;}
$result[$i] = $texte;
$x =''; $x ='';
$j=0; $j=0;
while($j <= $i) while($j < $i)
$x .= "%#$sep$j@" . $result[$j++]; $x .= "%#$sep$j@" . $result[$j++];
if (ereg(CHAMP_ETENDU, $x)) if (ereg(CHAMP_ETENDU, $x))
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter