Salut la liste,
Il y a quelques temps, j'avais évoqué une refonte du système de
parsing des squelettes. Je suis loin d'avoir fini, mais voici un état
d'avancement du truc, histoire de voir si ça interesse quelqu'un, et
surtout, de voir s'il y a des volontaires pour tester le machin.
Dans http://piif.free.fr/tmp/parser.tgz il y a l'état actuel des
choses (j'ai pas inclu la gpl, mais ça va de soi).
L'idée est la suivante :
- j'ai écrit une grammaire des squelettes spip, dans un format
assez spécifique, qui permet les analyses lexicales et syntaxique,
un peu à la manière de lex et yacc. C'est le fichier grammaire.txt
Dedans sont inclus les bouts de codes php à exécuter à chaque étape
du parsing.
J'expliquerai plus tard la syntaxe de ce fichier, car c'est un
peu tordu.
- à partir de cette grammaire, on peut déduire un code php qui parse
un fichier et exécute le code associé. Le fichier generateParser.php
s'occupe de ça. C'est à dire que si on appelle
generateParser.php?fichier=grammaire.txt, on obtient un fichier
Squelette_parser.php
- le fichier abstractParser.php est inclu par ce code généré, et
contient la partie de code indépendante de la grammaire.
- le fichier parser.template est utilisé par generateParser.php pour
construire le code.
- le fichier tstParser.php constitue un exemple de test, utilisant
Squelette_parser.php. Si on appelle
tstParser.php?fichier=article-dist.html, on obtient l'affichage
d'un "dump" de l'arbre de Champ/Boucle/Texte généré par l'analyse
du squelette.
Ce qui reste à faire :
- vérifier que c'est bien "php3 compliant"
- inclure dans le code à générer le "vrai" code permettant de créer
l'arbre représentant un squelette.
- ajouter la gestion des includes
- bencher, tester, debugger, tester, debugger, tester, debugger,
tester ...
- descendre d'un cran, c'est à dire reconnaitre de cette façon les
arguments de boucle, les filtres ...
Pour l'instant, je n'ai fait que le parsing d'un seul squelette
jusqu'à arriver à une version "qui marche".
Il est déjà presque possible de voir si un squelette donné se
retrouve bien parsé de la même façon qu'avec le parseur original.
Je vais modifier un peu le code de tout ça pour avoir un
"valideur" c'est à dire un truc qui prend un squelette en paramètre
le parse en version originale et en version "pif" et compare les deux.
Y a-t'il des volontaires pour essayer ce futur valideur sur un tas
de squelettes bien sauvages de préférence (j'espère qu'il sera
dispo à la fin de la semaine prochaine).
Ça permettra également de voir si cette version est plus
performante.
À partir de là, on saura si ça vaut le coup de continuer dans cette
route, et d'inclure cette version dans le code "officiel".
Une remarque en passant : la version actuelle permet à priori
d'imbriquer les champs étendus et même d'y mettre des boucles (bien
que ça soit peut être pas conseillé d'utiliser ça intensivement,
bonjour la lisibilité
À+, Pif.