Skip to content
Extraits de code Groupes Projets
  1. jan. 08, 2007
  2. jan. 07, 2007
    • Christian Lefebvre's avatar
      autodoc · 09c6eb5b
      Christian Lefebvre a rédigé
      09c6eb5b
    • esj's avatar
      Il était écrit que la prochaine version de SPIP n'allait pas sortir avec un... · 22d2f964
      esj a rédigé
      Il était écrit que la prochaine version de SPIP n'allait pas sortir avec un validateur limité. Je suis nul de ne pas y avoir pensé avant: pour vérifier les rares règles plus complexes que celle de la forme {{{(A|B|C|)*}}} il suffit de les compiler en une RegExp (ce qu'elles sont à peu près, il faut juste supprimer les virgules et normaliser l'usage des espaces) et appliquer celle-ci sur la suite des noms de balises rencontrées séparées par des espaces. Ainsi, la règle:
      {{{
      <!ELEMENT table
           (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))>
      }}}
      se compile en 
      {{{
      /^((caption )?((col )*|(colgroup )*)(thead )?(tfoot )?((tbody )+|(tr )+))$/
      }}}
      appliquer preg_match dessus et, par exemple, "tr caption tr ", permettra e refuser cette construction ce qui n'était pas le cas auparavant.
      
      La règle sur head, que la DTD énonce en 2 coups:
      {{{
      <!ENTITY % head.misc "(script|style|meta|link|object|isindex)*">
      
      <!ELEMENT head (%head.misc;,
           ((title, %head.misc;, (base, %head.misc;)?) |
            (base, %head.misc;, (title, %head.misc;))))>
      }}}
      est compilée en:
      {{{
      /^(((script )|(style )|(meta )|(link )|(object ))*(((title )((script )|(style )|(meta )|(link )|(object ))*((base )((script )|(style )|(meta )|(link )|(object ))*)?)|((base )((script )|(style )|(meta )|(link )|(object ))*((title )((script )|(style )|(meta )|(link )|(object ))*))))$/
      }}}
      ce qui assure qu'il y aura une et une seule balise Title et au plus une balise Base.
      
      Seul défaut de cette stratégie hyper efficace: le message d'erreur mentionnera comme ligne fautive celle contenant la balise fermant la suite problématique, sans plus de précision. Cela dit ce n'est de toutes façons pas possible d'etre plus précis dans le cas général.
      22d2f964
  3. jan. 05, 2007
  4. jan. 04, 2007
  5. déc. 27, 2006
  6. déc. 25, 2006
  7. déc. 24, 2006
    • Christian Lefebvre's avatar
      autodoc · 3da3cd9e
      Christian Lefebvre a rédigé
      3da3cd9e
    • esj's avatar
      Suite de [8184]: permettre la surcharge de la phase finale du validateur. Et... · f9524916
      esj a rédigé
      Suite de [8184]: permettre la surcharge de la phase finale du validateur. Et un cadre refermé trop tard.
      f9524916
    • esj's avatar
      4 améliorations du validateur intégré: · 1f527339
      esj a rédigé
      Suite de [8144]: on charge maintenant les DTD appelées à l'intérieur d'une DTD, ce qui permet en particulier de charger celle définissant les entités symbol, special et lat1 réféncées dans la DTD XHTML
      
      Suite à cela et à [8179] le validateur peut maintenant dénoncer des entités présentes dans la page et non déclarées dans la DTD et ses inclusions
      
      Suite de [8149]: le validateur est plus modulaire et peut s'étendre par simple ajout de fonctions. Si une DTD contient un nouveau symbole S de type d'attributs (i.e. un symbole utilisé dans le meme contexte que ID, IDREF etc), le validateur appellera automatiquement la fonction validerAttribut_S censée vérifier que la valeur d'attribut est conforme à la rèlge associée à ce symbole.
      
      Suite de [8090]: l'erreur de conception de SAX est à présent systématiquement contournée sans plus vérifier que la DTD HTMLSymbol était référencée, ce qui n'était de toutes façons qu'un pis aller. Au cas où cette transformation des entités dans le charset déclaré serait malencontreuse, il suffira de surcharger le validateur par une variante n'appelant pas html2unicode.
      1f527339
  8. déc. 22, 2006
  9. déc. 21, 2006
  10. déc. 20, 2006
    • Christian Lefebvre's avatar
      autodoc · 73c17d71
      Christian Lefebvre a rédigé
      73c17d71
    • esj's avatar
      Simplification de l'interface à l'indenteur/validateur, d'une part pour que... · 7e8fe71d
      esj a rédigé
      Simplification de l'interface à l'indenteur/validateur, d'une part pour que l'indenteur ne s'encombre pas des données du validateur, et pour qu'on puisse écrire des validateur meilleurs que celui du W3C en récupérant un maximum de code. Il y a peu de programmation objet, mais entre les incompatibilités de PHP4 et PHP5 sur la question, et la folie de la sémantique de référence dans les deux cas, c'est minimal.
      
      A présent, il faut affecter dans mes_options.php une seule variable, qui sera le nom passé à charger_fonction à la fin de ecrire/index.php:
      
      {{{
      $GLOBALS['transformer_xml'] = 'indenter_xml';  // pour l'indenteur XML
      $GLOBALS['transformer_xml'] = 'valider_xml';  // pour le validateur par DTD
      }}}
      
      Les spécifications de [8136] n'auront donc vécu que le temps de 13 dépots.
      7e8fe71d
    • esj's avatar
      Afficher le nombre d'erreurs de validation, et des liens pour aller en debut... · de075ade
      esj a rédigé
      Afficher le nombre d'erreurs de validation, et des liens pour aller en debut et en fin du tableau des erreurs. Et faire des lignes html plus courtes.
      de075ade
    • esj's avatar
      aacceac5
  11. déc. 19, 2006
    • esj's avatar
      On ne reproche plus à un élément d'avoir un père inconnu, il n'y peut rien. · a7e01c3b
      esj a rédigé
      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).
      a7e01c3b
    • esj's avatar
      Présentation synthétique des erreurs de validation, avec liens du texte de... · dc5702ad
      esj a rédigé
      Présentation synthétique des erreurs de validation, avec liens du texte de l'erreur vers la ligne fautive et réciproquement (avec une ambiguité si une meme ligne a plusieurs erreurs, il y a intéret à faire des lignes courtes). Et on ne se plaint plus d'attributs inconnus d'une balise inconnue.
      
      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.
      dc5702ad
    • esj's avatar
      Validateur intégré: dénoncer les IDREF inconnus (i.e. les attributs For de la... · 7ad7c0be
      esj a rédigé
      Validateur intégré: dénoncer les IDREF inconnus (i.e. les attributs For de la balise Label qui n'ont pas pour valeur celle d'un attribut Id dans la page)
      7ad7c0be
  12. déc. 18, 2006
    • esj's avatar
      Dénonciation des ID déclarés plusieurs fois dans une meme page, sur la base du... · 0d19d491
      esj a rédigé
      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...
      
      0d19d491
  13. déc. 17, 2006
    • Fil's avatar
      le (c) c'est important, en 2007 comme en 2006 · d0e8c69f
      Fil a rédigé
      d0e8c69f
    • esj's avatar
      Quand la DTD donne une RegExp comme valeur admise pour l'attribut, l'appliquer... · d8202bca
      esj a rédigé
      Quand la DTD donne une RegExp comme valeur admise pour l'attribut, l'appliquer sur celui-ci à la validation. Et petite amélioration de présentation.
      d8202bca
    • esj's avatar
      Suite de [8061]: contournement de la faute de conception de SAX (entité dans... · 6255c5d5
      esj a rédigé
      Suite de [8061]: contournement de la faute de conception de SAX (entité dans un attribut non distinguable des autres contextes) en remplaçant les entités HTML de lettres accentuées (mais pas les autres pour sécuriser les valeurs d'attributs) par leur valeur effective dans le charset du site. Cette opération n'est effectué que si la DTD de la page contient l'entité HTMLSymbol (definie en http://www.w3.org/TR/1999/REC-html401-19991224/HTMLsymbol.ent mais elle n'est pas chargée). L'analyse de la DTD a permis aussi d'améliorer l'indenteur, qui abrège <bal attributs></bal> en <bal attributs /> lorsque la DTD indique que l'ensemble des fils de la balise est à EMPTY (soit: base, meta, link, hr, br, basefont, param, img, area, input, isindex, col).
      
      En résumé, l'indenteur intégré est à présent parfaitement opérationnel, et le validateur intégré à peine moins laxiste que l'officiel du W3C.
      6255c5d5
  14. déc. 16, 2006
  15. déc. 14, 2006
    • Christian Lefebvre's avatar
      autodoc · 437beeee
      Christian Lefebvre a rédigé
      437beeee
    • esj's avatar
      2e1001c2
    • esj's avatar
      Suite de [8061]: mini-analyse syntaxique selon la DTD dans le validateur XML. · cabb8470
      esj a rédigé
      Sans aller jusqu'à une analyse syntaxique digne d'un vrai validateur, le petit validateur XML controle quand meme si une balise est une fille légitime de sa mère. Ca ne controle pas l'ordre (par exemple mettre Body avant Head ne sera pas dénoncé) mais ça controle bien la hiérarchie (Div après P interdit; P après Div accepté etc).
      
      Le temps de calcul devenant perceptible, toute cette validation est désormais controlé par la globale:
      $GLOBALS&#91;'xml_validation'&#93;= 'sax';
      à mettre dans mes_options.php.
      cabb8470
    • esj's avatar
      Placer le nom du répertoire à la fois par PHP et par JS au cas où celui-ci ne... · aa87ed8e
      esj a rédigé
      Placer le nom du répertoire à la fois par PHP et par JS au cas où celui-ci ne marcherait pas. Et un peu de conformité XHTML grace au mini-validateur qui lui) même améliore sa présentation.
      aa87ed8e
    • esj's avatar
      Extension du validateur XML à un validateur lexical selon la DTD. · 4788bd90
      esj a rédigé
      Le petit validateur construit autour de SAX va à présent chercher la DTD indiqué par la page des espaces public ou privé, à analyser, et vérifie que toutes les balises de la page sont présentes dans la DTD, et que tous les attributs figurant dans une balise sont autorisés par la DTD.
      
      Attention, cette analyse est seulement lexicale, pas syntaxique: on ne vérifie pas qu'un attribut obligatoire est présent, ni que la succession des balises est conforme (ça laisse passer des Form imbriqués par exemple). De plus, les entités déclarées externes ne sont pas traitées. Ca permet néanmoins de répérer les fautes les plus grossières sans passer par les validateurs externes complets, qui n'ont pas accès par URL aux pages calculées par les scripts de l'espace privé faute de Login. Cette vérification s'obtient en mettant:
      $GLOBALS['xml_indent'] = 'sax';
      dans mes_options.php.
      
      A signaler à propos de ce validateur/indenteur, un bug non résolu mais à présent identifié. Le modèle SAX appelle une fonction définissable par le programmeur (le ''handler'', en français le ''preneur'') à chaque rencontre d'un lexème, en particulier les entités HTML comme "& eacute ;" etc. Ces entités se rencontrent dans les éléments Text et dans les attributs, ce qui provoque l'appel du preneur dans 2 contextes différents sans qu'il puisse les distinguer. Il s'ensuit que l'indenteur mettra à tort dans la dernière zone Texte les entités HTML (typiquement les lettres accentuées) présentes dans les attributs de la balise suivant cette zone. Si quelqu'un a une solution pour contourner ce bug de conception de SAX, je suis ... preneur.
      4788bd90
Chargement en cours