La fonction propre() est le centre du moteur de rendu : pour passer d’un article contenant des racourcis spip à du html, il suffit d’appeler $apres=propre($avant).
Seulement voila, cette fonction est un vrai foutoir :-) un peu de reverse engineering s’impose donc.
Je pars de la version dans le cvs du labo. Sauf indication contraire, toutes les fonctions suivantes sont dans include/texte.php
Comment faire mieux ?
voila ce que Fil en pense :
pour ce qui est du w3-compliant, je reste persuadé qu’on ne peut le faire bien que si propre() explose d’abord les paragraphes (et les intertitres etc) puis les traite individuellement avant de les recoller. Ca demande de réécrire propre(), mais ça n’est pas forcément monstrueux ; le seul hic risque d’être la vitesse d’exécution.
(NicolasHoizey) Je pense aussi que c’est la meilleure approche pour obtenir un code maintenable, évolutif, et sans doute avec moins d’effets de bord imprévisibles. Est-ce que regarder le code de PEAR ::Text_Wiki ou du WikiRenderer* de Laurent Jouanneau ne pourrait pas nous inspirer ?
(PiiF) j’avais regardé Text_Wiki il y a qqs temps, et je viens de regarder wikirenderer.
Les deux ont à première vue l’avantage d’être configurables, mais c’est en fait vachement orienté wiki (titre marqués par un prefixe, pas de foot notes, mots wiki, ...)
Y’a surement des idées à prendre sur la façon de coder, mais faire un truc aussi paramétrable me semble assez chaud, et finalement pas si souple que ça.
Pour wikirenderer, honnètement, je comprend rien au code ! pour Text_Wiki j’ose même pas essayer : 5936 lignes ! (pour info le formatter de wikini en fait 300)
(NicolasHoizey) Il n’est sans doute pas nécessaire de faire un code configurable, mais sans doute y a t’il des choses à reprendre dans ces projet, notamment au niveau de la découpe d’un texte en une hiérarchie d’éléments unitaires « facilement » interprétables.
C’est quoi "faire mieux"
Il faut faire attention aux effets de bord de toutes modif. Ainsi, éviter d’insérer certains tag p serait plus compliant, mais change le rendu.
(Au début d’un quote, par exemple, si on laisse une ligne vide, on a un espace. Ce bug a été corrigé depuis.)
C’est le gros risque d’effet de bord de toute intervention du type de celles proposées dans CompatibleAFaire.
Méthode (MichaëlParienti) Une suggestion : avant de commencer à recoder la fonction propre, il faudrait écrire une batterie de tests unitaires auxquels devront être soumises les différentes version de la fonction propre. Dans le cas de la fonction propres, les tests unitaires seront définis par par une liste de chaînes, qui seront passées en argument à propre, et dont on testera automatiquement la valeur de retour.
(PiiF) comme signalé dans la page CompatibleAFaire, il y a un article avec plein de trucs pas possibles créé dans ce but. De plus, dans la branche spip_tools du cvs, il y a une page php permettant de comparer l’original avec une version maison
Quelques remarques sur l’existant Il faudrait cogiter sur le sens de certains raccourcis, car avant de recoder ça autrement, y’a quelques points tordus qu’il faudrait éclaircir : RaccourcisQuestions
Les chantiers en cours
Reste à finaliser un peu et à comparer les résultats, la lisibilité du code, son évolutivité et les perfs.