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

On ne reproche plus à un élément d'avoir un père inconnu, il n'y peut rien.

En revanche, si le père est connu mais ne reconnait pas cet élément comme fils, on donne la liste des pères possibles. Au passage, on voit tout ceux qui sont effectivement acceptés par la DTD, le validateur du W3C ne montrant que ceux politiquement corrects. Il faut les voir pour le croire.

Suite à mon ignorance de la triple accolade dans le Wiki lors des dépots [8061] et [8067], je redonne les globales qu'il faut affecter dans mes_options.php pour utiliser ce validateur (et, en cas de réussite, aussi indenteur fiable depuique que [8090] a trouvé comment contourner le bug de conception de SAX):

{{{
$GLOBALS['xml_indent'] = 'sax'; // pour seulement le validateur XML
$GLOBALS['xml_validation'] = true; // pour le validateur selon la DTD
}}}

et je mets en commentaire dans inc/utils ligne 994 de quoi essayer XHTML 1.0 strict pour voir ce que ça donne  (pour la non stricte, on ne voit plus grand chose maintenant).
parent dc5702ad
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -188,6 +188,7 @@ function xml_parsestring($phraseur, $data)
 var $ouvrant = array();
 var $reperes = array();
 var $elements = array();
 var $peres = array();
 var $entites = array();
 var $attributs = array();
 var $ids = array();
+3 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -991,6 +991,7 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
	define('_DOCTYPE_ECRIRE', 
		// "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
		"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
		// "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd'>\n");

	define('_DOCTYPE_AIDE', 
	       "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
+21 −10
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -50,8 +50,9 @@ function inc_validateur_dist($data)
	} 
	$phraseur_xml->entites = $res;

	// reperer pour chaque noeud ses fils potentiels, sans repetitions,
	// pour faire une analyse syntaxique sommaire
	// reperer pour chaque noeud ses fils potentiels.
	// mais tant pis pour leur eventuel ordre de succession (, * +):
	// les cas sont rares et si aberrants que interet/temps-de-calcul -> 0
	$res = array();
	if (preg_match_all('/<!ELEMENT\s+(\w+)([^>]*)>/', $dtd, $r, PREG_SET_ORDER)) {
	  foreach($r as $m) {
@@ -59,6 +60,11 @@ function inc_validateur_dist($data)
	    $val = expanserEntite($val, $phraseur_xml->entites);
	    $val = array_values(preg_split('/\W+/', $val,-1,PREG_SPLIT_NO_EMPTY));
	    $res[$nom]= $val;
	    foreach ($val as $k) {
		if (!isset($phraseur_xml->peres[$k])
		OR !in_array($nom, $phraseur_xml->peres[$k]))
		  $phraseur_xml->peres[$k][]= $nom;
	    }
	  }
	} 
	$phraseur_xml->elements = $res;
@@ -113,15 +119,20 @@ function validerElement($parser, $name, $attrs)
	  if (isset($ouvrant[$depth])) {
	    if (preg_match('/^\s*(\w+)/', $ouvrant[$depth], $r)) {
	      $pere = $r[1];
	      if (!@in_array($name, $phraseur_xml->elements[$pere]))
	      if (isset($phraseur_xml->elements[$pere]))
		if (!@in_array($name, $phraseur_xml->elements[$pere])) {
		  $bons_peres = @join ('</b>, <b>', $phraseur_xml->peres[$name]);
		  $phraseur_xml->err[]= " <b>$name</b>" 
		    . _L(" n'est pas un fils de ")
		    . '<b>'
		    .  $pere
		    . '</b>'
		    . (!$bons_peres ? '' 
		       : (_L( '<p style="font-size: 80%"> mais de <b>') . $bons_peres . '</b></p>'))
		    .  coordonnees_erreur($parser);
		}
	    }
	  }
	  foreach ($phraseur_xml->attributs[$name] as $n => $v)
	    { if (($v[1] == '#REQUIRED') AND (!isset($attrs[$n])))
		$phraseur_xml->err[]= " <b>$n</b>"
+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -538,7 +538,7 @@ function emboite_texte($texte, $fonc='',$self='')
				$GLOBALS['xhtml_error'],
				$regs,
			       PREG_SET_ORDER);
		$err = '<tr><th>#</th><th>Occ.</th><th>Msg</th><th>L</th><th>Col</th></tr>';
		$err = '<tr><th>#</th><th>Occ.</th><th>Li.</th><th>Col.</th><th>Err.</th></tr>';
		$fautifs = array();
		$i = 0;
		$encore = array();
@@ -560,14 +560,14 @@ function emboite_texte($texte, $fonc='',$self='')
			  . "'><td style='text-align: right'>"
			  . $i
			  . "</td><td  style='text-align: right'>"
			  . "$ref/$encore[$msg]</td><td>$msg</td>"
			  . "$ref/$encore[$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";
			  . "</td><td>$msg</td></tr>\n";
			$fautifs[]= array($ligne, $col, $i);
		}
		return array(ancre_texte($texte, $fautifs),