From dc5702ade38978befb4c115cd6329eca0cc32de7 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Tue, 19 Dec 2006 17:58:06 +0000 Subject: [PATCH] =?UTF-8?q?Pr=C3=A9sentation=20synth=C3=A9tique=20des=20er?= =?UTF-8?q?reurs=20de=20validation,=20avec=20liens=20du=20texte=20de=20l'e?= =?UTF-8?q?rreur=20vers=20la=20ligne=20fautive=20et=20r=C3=A9ciproquement?= =?UTF-8?q?=20(avec=20une=20ambiguit=C3=A9=20si=20une=20meme=20ligne=20a?= =?UTF-8?q?=20plusieurs=20erreurs,=20il=20y=20a=20int=C3=A9ret=20=C3=A0=20?= =?UTF-8?q?faire=20des=20lignes=20courtes).=20Et=20on=20ne=20se=20plaint?= =?UTF-8?q?=20plus=20d'attributs=20inconnus=20d'une=20balise=20inconnue.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A signaler que le validateur du W3C dénonce plusieurs occurrences d'une meme erreur en plusieurs endroits, sauf si elles se suivent dans la liste des erreurs. Vachement clair. Et pour continuer le feuilleton [8129], sachez que la DTD xhtml dite scricte (http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd) trouve ceci valide: {{{<form action='/'><div><form action='/'></form></div></form>}}} Au moins la non stricte avait l'honneteté de le signaler en commentaire. Ils sont décidément très forts les grammairiens du W3C. --- ecrire/inc/sax.php | 8 +++--- ecrire/inc/validateur.php | 11 +++++--- ecrire/public/debug.php | 55 ++++++++++++++++++++++++++++++--------- 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/ecrire/inc/sax.php b/ecrire/inc/sax.php index 23a6911785..5e65f34f3a 100644 --- a/ecrire/inc/sax.php +++ b/ecrire/inc/sax.php @@ -171,9 +171,9 @@ function xml_parsestring($phraseur, $data) list($nom, $ligne, $col) = $idref; if (!isset($phraseur_xml->ids[$nom])) $phraseur_xml->err[]= " <p><b>$nom</b>" - . _L(" ID inconnu ligne ") + . _L(" ID inconnu ") . $ligne - . _L(" colonne ") + . " " . $col; } if ($phraseur_xml->err) @@ -235,9 +235,9 @@ function inc_sax_dist($page, $apply=false) { function coordonnees_erreur($xml_parser) { return - _L(" ligne ") . + ' ' . xml_get_current_line_number($xml_parser) . - _L(" colonne ") . + ' ' . xml_get_current_column_number($xml_parser); } diff --git a/ecrire/inc/validateur.php b/ecrire/inc/validateur.php index fe7836ba00..aee7e1b964 100644 --- a/ecrire/inc/validateur.php +++ b/ecrire/inc/validateur.php @@ -139,9 +139,12 @@ function validerAttribut($parser, $name, $val, $bal) { global $phraseur_xml; - $a = @$phraseur_xml->attributs[$bal]; // vide ou absent, pareil. + // Si la balise est inconnue, eviter d'insister + if (!isset($phraseur_xml->attributs[$bal])) + return ; + + $a = $phraseur_xml->attributs[$bal]; if (!isset($a[$name])) - $phraseur_xml->err[]= " <b>$name</b>" . _L(' attribut inconnu de ') . "<b>$bal</b>" @@ -170,9 +173,9 @@ function validerAttribut($parser, $name, $val, $bal) . coordonnees_erreur($parser); list($l,$c) = $phraseur_xml->ids[$val]; $phraseur_xml->err[]= " <p><b>$val</b>" - . _L(" vu auparavant ligne ") + . _L(" vu auparavant ") . $l - . _L(" colonne ") + . " " . $c; } else $phraseur_xml->ids[$val] = array(xml_get_current_line_number($parser), xml_get_current_column_number($parser)); } elseif ($type == 'IDREF') { diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php index bc778a3d62..1148e4c3f2 100644 --- a/ecrire/public/debug.php +++ b/ecrire/public/debug.php @@ -314,7 +314,7 @@ function ancre_texte($texte, $fautifs=array()) $ancre = md5($texte); $n = strlen(count($tableau)); - $format = "<a href='#T$ancre'><span id='L%d' style='text-align: right;color: black;'>%0" + $format = "<a href='#T%s'><span id='L%d' style='text-align: right;color: black;'>%0" . strval($n) . "d </span></a>\n"; @@ -324,23 +324,26 @@ function ancre_texte($texte, $fautifs=array()) $flignes = array(); + $loc = array(0,0); foreach ($fautifs as $lc) - if (is_array($lc)) - $flignes[$lc[0]] = $lc[1]; - else $flignes[$lc] = 0; + if (is_array($lc)) { + $l = array_shift($lc); + $flignes[$l] = $lc; + } else $flignes[$lc] = $loc; foreach ($tableau as $ligne) { if (isset($flignes[$i])) { $ligne = str_replace(' ',' ', $ligne); + $indexmesg = $flignes[$i][1]; // tentative de pointer sur la colonne fautive; // marche pas car highlight_string rajoute des entites. A revoir. - // $m = $flignes[$i]; + // $m = $flignes[$i][0]; // $ligne = substr($ligne, 0, $m-1) . // sprintf($formaterr, substr($ligne,$m)); $ligne = sprintf($formaterr, $ligne); - } + } else $indexmesg = $ancre; $res .= "<br />\n" - . sprintf((($i%10) ? $format :$format10), $i, $i) + . sprintf((($i%10) ? $format :$format10), $indexmesg, $i, $i) . $ligne; $i++; } @@ -531,18 +534,44 @@ function emboite_texte($texte, $fonc='',$self='') $eregs)) return array(ancre_texte($texte, array('', '')), true); if (!isset($GLOBALS['debug_objets'])) { - preg_match_all(",([^0-9]* )([0-9]+)(.*?(\d*)<br />),", + preg_match_all(",(.*?)(\d+)(\D+(\d+)<br />),", $GLOBALS['xhtml_error'], $regs, PREG_SET_ORDER); - $err = ''; + $err = '<tr><th>#</th><th>Occ.</th><th>Msg</th><th>L</th><th>Col</th></tr>'; $fautifs = array(); + $i = 0; + $encore = array(); + foreach($regs as $r) { + if (isset($encore[$r[1]])) + $encore[$r[1]]++; + else $encore[$r[1]] = 1; + } + $encore2 = array(); + $colors = array('#e0e0f0', '#f8f8ff'); foreach($regs as $r) { - $err .= $r[1] . - "<a href='#L" . $r[2] . "'>$r[2]</a>$r[3]"; - $fautifs[]= array($r[2], $r[4]); + $i++; + list(,$msg, $ligne, $fin, $col) = $r; + if (isset($encore2[$msg])) + $ref = $encore2[$msg]++; + else $encore2[$msg] = $ref = 1; + $err .= "<tr style='background-color: " + . $colors[$i%2] + . "'><td style='text-align: right'>" + . $i + . "</td><td style='text-align: right'>" + . "$ref/$encore[$msg]</td><td>$msg</td>" + . "<td style='text-align: right'><a href='#L" + . $ligne + . "' id='T$i'>" + . $ligne + . "</a></td><td style='text-align: right'>" + . $fin + . "</td></tr>\n"; + $fautifs[]= array($ligne, $col, $i); } - return array(ancre_texte($texte, $fautifs), $err); + return array(ancre_texte($texte, $fautifs), + "<table>$err</table>"); } else { $fermant = $eregs[2]; $ouvrant = $eregs[4]; -- GitLab