Il était écrit que la prochaine version de SPIP n'allait pas sortir avec un...
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.
parent
c0dcba2b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Veuillez vous inscrire ou vous se connecter pour commenter