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

Dénonciation des ID déclarés plusieurs fois dans une meme page, sur la base du...

Dénonciation des ID déclarés plusieurs fois dans une meme page, sur la base du symbole ID indiqué dans la DTD comme type d'un attribut (en l'occurrence, uniquement "id"). 

Les seules différences avec la validation officielle résident donc dans quelques successions pathologiques non signalées, comme Body avant Head et autre improbabilités. De toutes façons, quand on lit dans les DTD de xhtml (meme la stricte: thttp://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd):

{{{
<!--
  Each label must not contain more than ONE field
  Label elements shouldn't be nested.
-->
<!ELEMENT label %Inline;>
<!ATTLIST label
  %attrs;
  for         IDREF          #IMPLIED
  accesskey   %Character;    #IMPLIED
  onfocus     %Script;       #IMPLIED
  onblur      %Script;       #IMPLIED
  >
}}}

on se dit que l'officiel n'est pas un gage de sérieux, et leur validateur se garde bien de corriger la paresse de la spécification par une implémentation respectant le commentaire, puisqu'il considère ceci comme valide:

{{{
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 
'http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd'
><html lang='fr' dir='ltr'>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<p id='x'><label for='x'><label>
<input />
label+label=les moches
<input />
</label></label></p>
</body>
</html>
}}}

''Note: The Validator XML support has some limitations.'': oui, et ses grammaires aussi...
parent ae9dd31f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -181,6 +181,7 @@ function xml_parsestring($xml_parser, $data) ...@@ -181,6 +181,7 @@ function xml_parsestring($xml_parser, $data)
var $elements = array(); var $elements = array();
var $entites = array(); var $entites = array();
var $attributs = array(); var $attributs = array();
var $ids = array();
var $err = array(); var $err = array();
} }
......
...@@ -71,7 +71,7 @@ function inc_validateur_dist($data) ...@@ -71,7 +71,7 @@ function inc_validateur_dist($data)
$att = array(); $att = array();
if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+(\S+)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) { if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+(\S+)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) {
foreach($r2 as $m2) { foreach($r2 as $m2) {
$v = preg_match('/^\w+$/', $m2[2]) ? '' $v = preg_match('/^\w+$/', $m2[2]) ? $m2[2]
: ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/'); : ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/');
$att[$m2[1]] = array($v, $m2[5]); $att[$m2[1]] = array($v, $m2[5]);
} }
...@@ -146,17 +146,37 @@ function validerAttribut($parser, $name, $val, $bal) ...@@ -146,17 +146,37 @@ function validerAttribut($parser, $name, $val, $bal)
. _L(' attribut inconnu de ') . _L(' attribut inconnu de ')
. "<b>$bal</b>" . "<b>$bal</b>"
. coordonnees_erreur($parser); . coordonnees_erreur($parser);
elseif ($a[$name][0][0]=='/') { else{
if (!preg_match($a[$name][0], $val)) { $type = $a[$name][0];
$phraseur_xml->err[]= " <p><b>$val</b>" if ($type[0]=='/') {
. _L(" valeur de l'attribut ") if (!preg_match($a[$name][0], $val)) {
. "<b>$name</b>" $phraseur_xml->err[]= " <p><b>$val</b>"
. _L(' de ') . _L(" valeur de l'attribut ")
. "<b>$bal</b>" . "<b>$name</b>"
. _L(" n'est pas conforme au motif</p><p>") . _L(' de ')
. "<b>" . $a[$name][0] . "</b></p>" . "<b>$bal</b>"
. coordonnees_erreur($parser); . _L(" n'est pas conforme au motif</p><p>")
} . "<b>" . $a[$name][0] . "</b></p>"
. coordonnees_erreur($parser);
}
} elseif ($type == 'ID') {
if (isset($phraseur_xml->ids[$val])) {
$phraseur_xml->err[]= " <p><b>$val</b>"
. _L(" valeur de l'attribut ")
. "<b>$name</b>"
. _L(' de ')
. "<b>$bal</b>"
. _L(" incorrect ")
. coordonnees_erreur($parser);
list($l,$c) = $phraseur_xml->ids[$val];
$phraseur_xml->err[]= " <p><b>$val</b>"
. _L(" vu auparavant ligne ")
. $l
. _L(" colonne ")
. $c;
}
else $phraseur_xml->ids[$val] = array(xml_get_current_line_number($parser), xml_get_current_column_number($parser));
}
} }
} }
?> ?>
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