From 71568fb9efdc5ffca6bed67fd712a670fa1b9cdf Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Fri, 10 Nov 2006 08:45:31 +0000 Subject: [PATCH] =?UTF-8?q?Le=20validateur=20xml=20int=C3=A9gr=C3=A9=20?= =?UTF-8?q?=C3=A0=20Spip=20et=20appelable=20depuis=20le=20d=C3=A9busqueur?= =?UTF-8?q?=20souffrait=20de=20quelques=20incoh=C3=A9rences=20(depuis=20l'?= =?UTF-8?q?introduction=20du=20plugin=20"affichage=5Ffinal"=20peut-etre).?= =?UTF-8?q?=20Il=20est=20=C3=A0=20nouveau=20accessible,=20en=20mettant=20'?= =?UTF-8?q?$xhtml=20=3D=20"sax";'=20dans=20mes=5Foptions.=20La=20d=C3=A9du?= =?UTF-8?q?ction=20de=20la=20ligne=20fautive=20dans=20le=20squelette=20?= =?UTF-8?q?=C3=A0=20partir=20de=20la=20ligne=20fautive=20dans=20le=20r?= =?UTF-8?q?=C3=A9sultat=20ne=20remarche=20en=20revanche=20pas=20encore,=20?= =?UTF-8?q?mais=20le=20probl=C3=A8me=20a=20l'air=20plus=20g=C3=A9n=C3=A9ra?= =?UTF-8?q?l=20car=20les=20arguments=20de=20debug=5Fsequence=20d=C3=A9clen?= =?UTF-8?q?che=20un=20Warning=20sur=20le=20modele=20"pagination".=20Tout?= =?UTF-8?q?=20=C3=A7a=20est=20neutralis=C3=A9=20par=20un=20@=20ligne=20450?= =?UTF-8?q?=20de=20compiler.php,=20et=20un=20test=20pr=C3=A9ventif=20ligne?= =?UTF-8?q?=20235=20de=20debug.php=20mais=20il=20faudra=20y=20revenir.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/balise/formulaire_admin.php | 2 +- ecrire/inc/sax.php | 29 +++++----- ecrire/public/assembler.php | 3 +- ecrire/public/compiler.php | 2 +- ecrire/public/debug.php | 92 ++++++++++++++++++------------ 5 files changed, 70 insertions(+), 58 deletions(-) diff --git a/ecrire/balise/formulaire_admin.php b/ecrire/balise/formulaire_admin.php index f994aa99ba..e4fc5292d2 100644 --- a/ecrire/balise/formulaire_admin.php +++ b/ecrire/balise/formulaire_admin.php @@ -107,7 +107,7 @@ function balise_FORMULAIRE_ADMIN_dyn($float='', $debug='') { ) ) ? parametre_url(self(),'var_mode', 'debug', '&'): ''; $analyser = !$xhtml ? "" : - (($xhtml === 'spip_sax') ? + (($xhtml === 'sax') ? (parametre_url(self(), 'var_mode', 'debug', '&') .'&var_mode_affiche=validation') : ('http://validator.w3.org/check?uri=' diff --git a/ecrire/inc/sax.php b/ecrire/inc/sax.php index da86c2d793..09fa79194f 100644 --- a/ecrire/inc/sax.php +++ b/ecrire/inc/sax.php @@ -109,7 +109,7 @@ function defautElement($parser, $data) $depth = &$phraseur_xml->depth; $contenu = &$phraseur_xml->contenu; - $contenu[$depth] .= $data; + @$contenu[$depth] .= $data; } // http://doc.spip.org/@translate_entities @@ -151,7 +151,7 @@ function xml_parsestring($xml_parser, $data) xml_get_current_line_number($xml_parser) . _L(" colonne ") . xml_get_current_column_number($xml_parser) . - (!$depth ? '' : + (!$phraseur_xml->depth ? '' : ('<br />' . _L("dernière balise non refermée : ") . "<tt>" . @@ -162,7 +162,6 @@ function xml_parsestring($xml_parser, $data) } else $r = $phraseur_xml->res; - xml_parser_free($xml_parser); return $r; } @@ -173,23 +172,21 @@ var $ouvrant = array(); var $reperes = array(); } -// xml_set_objet a utiliser a terme -global $phraseur_xml, $xml_parser; -$phraseur_xml = new PhraseurXML(); - -$xml_parser = xml_parser_create($GLOBALS['meta']['charset']); -xml_set_element_handler($xml_parser, - array($phraseur_xml, "debutElement"), - array($phraseur_xml, "finElement")); -xml_set_character_data_handler($xml_parser, array($phraseur_xml, "textElement")); -xml_set_processing_instruction_handler($xml_parser, array($phraseur_xml, 'PiElement')); -xml_set_default_handler($xml_parser, array($phraseur_xml, "defautElement")); -xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); - // http://doc.spip.org/@inc_sax_dist function inc_sax_dist($page) { global $phraseur_xml, $xml_parser, $xhtml_error; + $phraseur_xml = new PhraseurXML(); + + $xml_parser = xml_parser_create($GLOBALS['meta']['charset']); + xml_set_element_handler($xml_parser, + array($phraseur_xml, "debutElement"), + array($phraseur_xml, "finElement")); + xml_set_character_data_handler($xml_parser, array($phraseur_xml, "textElement")); + xml_set_processing_instruction_handler($xml_parser, array($phraseur_xml, 'PiElement')); + xml_set_default_handler($xml_parser, array($phraseur_xml, "defautElement")); + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); $res = $phraseur_xml->xml_parsestring($xml_parser, $page); + xml_parser_free($xml_parser); if ($res[0] != '<') $xhtml_error = $res; else diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 947a346e24..dc1b8c2e63 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -315,8 +315,7 @@ function f_tidy ($texte) { AND (_request('var_fragment') === NULL) AND !headers_sent()) { # Compatibilite ascendante - if ($xhtml === true) $xhtml ='tidy'; - else if ($xhtml == 'spip_sax') $xhtml = 'sax'; + if (!is_string($xhtml)) $xhtml ='tidy'; if ($f = charger_fonction($xhtml, 'inc')) $texte = $f($texte); diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 27c739428c..793bbd7f53 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -447,7 +447,7 @@ function calculer_liste($tableau, $descr, &$boucles, $id_boucle='') { return (($n==1) ? $codes[0] : "(" . join (" .\n$tab", $codes) . ")"); - else return "debug_sequence('$id_boucle', '" . + else return "@debug_sequence('$id_boucle', '" . ($descr['nom']) . "', " . $descr['niv'] . diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php index ee9ed71479..c8d2c5aed5 100644 --- a/ecrire/public/debug.php +++ b/ecrire/public/debug.php @@ -232,6 +232,7 @@ function trouve_boucle_debug($n, $nom, $debut=0, $boucle = "") global $debug_objets; $id = $nom . $boucle; + if (!is_array($debug_objets['sequence'][$id])) return array(); foreach($debug_objets['sequence'][$id] as $v) { if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[2],$r)) $y = substr_count($v[2], "\n"); @@ -307,8 +308,9 @@ function ancre_texte($texte, $fautifs=array()) { global $var_mode_ligne; if ($var_mode_ligne) $fautifs[]=$var_mode_ligne; + $res =''; $s = highlight_string($texte,true); - if (substr($s,0,6) == '<code>') { $s=substr($s,6); echo '<code>';} + if (substr($s,0,6) == '<code>') { $s=substr($s,6); $res = '<code>';} $tableau = explode("<br />", $s); $n = strlen(count($tableau)); @@ -321,11 +323,12 @@ function ancre_texte($texte, $fautifs=array()) $i=1; foreach ($tableau as $ligne) { - echo "<br />\n", - sprintf((($i%10) ? $format :$format10), $i, $i), - sprintf(in_array($i, $fautifs) ? $formaterr : '%s', $ligne); + $res .= "<br />\n" + . sprintf((($i%10) ? $format :$format10), $i, $i) + . sprintf(in_array($i, $fautifs) ? $formaterr : '%s', $ligne); $i++; } + return $res; } // l'environnement graphique du debuggueur @@ -417,56 +420,46 @@ function debug_dumpfile ($texte, $fonc, $type) { echo "<div id=\"debug_boucle\"><fieldset>"; if ($var_mode_affiche == 'resultat') { echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>"; - ancre_texte(traite_query($debug_objets['requete'][$var_mode_objet])); + echo ancre_texte(traite_query($debug_objets['requete'][$var_mode_objet])); foreach ($res as $view) if ($view) echo "\n<br /><fieldset>",interdire_scripts($view),"</fieldset>"; } else if ($var_mode_affiche == 'code') { echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>"; - ancre_texte("<"."?php\n".$res."\n?".">"); + echo ancre_texte("<"."?php\n".$res."\n?".">"); } else if ($var_mode_affiche == 'boucle') { echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>"; - ancre_texte($res); + echo ancre_texte($res); } else if ($var_mode_affiche == 'squelette') { echo "<legend>",$debug_objets['sourcefile'][$var_mode_objet],"</legend>"; - ancre_texte($debug_objets['squelette'][$var_mode_objet]); + echo ancre_texte($debug_objets['squelette'][$var_mode_objet]); } echo "</fieldset></div>"; } } + if ($texte) { - $ouvrant = $fermant = $err = ""; - $titre = $GLOBALS['var_mode_affiche']; - if ($titre != 'validation') { - $titre = 'zbug_' . $titre; - } + $err = ""; + $titre = $GLOBALS['var_mode_affiche']; + if ($titre != 'validation') { + $titre = 'zbug_' . $titre; + $texte = ancre_texte($texte, array('','')); + } else { + list($texte, $err) = emboite_texte($texte, $self); + if ($err === false) + $err = _T('impossible'); + elseif ($err === true) + $err = _T('correcte'); + } - else if ($sax = charger_fonction('sax', 'inc') - AND $res = $sax($texte)) { - if (ereg("^[[:space:]]*([^<][^0-9]*)([0-9]*)(.*[^0-9])([0-9]*)$", $GLOBALS['xhtml_error'], $r)) { - $fermant = $r[2]; - $ouvrant = $r[4]; - $rf = reference_boucle_debug($fermant, $fonc, $self); - $ro = reference_boucle_debug($ouvrant, $fonc, $self); - $err = ": " . $r[1] . - "<a href='#L" . $r[2] . "'>$r[2]</a>$rf" . - $r[3] ."<a href='#L" . $r[4] . "'>$r[4]</a>$ro"; - } else { - $err = _T('correcte'); - $texte = $res; - } - } - else - $err = _T('impossible'); - - echo "<div id=\"debug_boucle\"><fieldset><legend>", - _T($titre), - ' ', - $err, - "</legend>"; - ancre_texte($texte, array($ouvrant, $fermant)); - echo "</fieldset></div>"; + echo "<div id=\"debug_boucle\"><fieldset><legend>", + _T($titre), + ' ', + $err, + "</legend>"; + echo $texte; + echo "</fieldset></div>"; } echo "\n</div>"; include_spip('balise/formulaire_admin'); @@ -476,4 +469,27 @@ function debug_dumpfile ($texte, $fonc, $type) { echo '</body></html>'; exit; } + +function emboite_texte($texte,$self='') +{ + if (!($sax = charger_fonction('sax', 'inc') AND $res = $sax($texte))) + return array(ancre_texte($texte, array('','')), false); + elseif (!ereg("^[[:space:]]*([^<][^0-9]*)([0-9]*)(.*[^0-9])([0-9]*)$", + $GLOBALS['xhtml_error'], + $r)) + return array(ancre_texte($texte, array('', '')), true); + else { + $fermant = $r[2]; + $ouvrant = $r[4]; + if (isset($GLOBALS['debug_objets'])) { + $rf = reference_boucle_debug($fermant, $fonc, $self); + $ro = reference_boucle_debug($ouvrant, $fonc, $self); + } else $rf = $ro = ''; + $err = ": " . $r[1] . + "<a href='#L" . $r[2] . "'>$r[2]</a>$rf" . + $r[3] ."<a href='#L" . $r[4] . "'>$r[4]</a>$ro"; + return array(ancre_texte($texte, array($ouvrant, $fermant)), $err); + } +} + ?> -- GitLab