Journal TempLight, une classe de template

Posté par .
Tags : aucun
0
20
mar.
2006
J'ai écris il y a quelque temps une petite classe de génération de texte que j'ai nommé TempLight. C'est une évolution d'un ancien travail.

En relisant le code dernièrement je me suis dit que c'était pas trop mal et que ça valait un petit journal.

Cette classe de template offre :

* 3 primitives de bases
** remplacements simples
** remplacements itératifs
** remplacements récursifs à l'aide de structures de données arborescente
* Gestion des langues simple
* Primitive d'inclusion
* Possibilité de réaliser des conditions complexes dans la récursion
* Possibilité de changer facilement les "délimiteurs" du langage de template
* Le langage de Template n'est pas XML, par défaut c'est des commentaires HTML

Et hop le lien : http://dosimple.ch/articles/TempLight/

Ce qui manque cruellement à mon goût ... C'est la possibilité de dériver les template que j'ai découvert avec le framework Django. C'est vraiment super comme truc.

Sinon il y a des ptits choses toute simple que je pourrais rajouter comme des filtres comme "uppercase" ou "return2br" qui permettent de mettre en forme du texte ...
  • # kit à faire de la pub pour ses moteurs de template ;-)

    Posté par (page perso) . Évalué à  3 .

    J'en ai également fait un ... pour python ...

    ses features:
    - lightweight (400 lignes de codes)
    - compile les templates en pyc
    - gestion des héritages (comme celui de django ;-)
    - gestion de l'unicode
    - possibilité de structurer son code comme en python (indentation de bloc), permat ainsi de generer du xhtml plus simplement
    - gestion des for-in / capture / if-else, et possibilité de mettre des modifier (comme en smarty) sur les données (un simple appel a une methode python)

    http://manatlan.online.fr/hypy.php
    • [^] # Re: kit à faire de la pub pour ses moteurs de template ;-)

      Posté par . Évalué à  2 .

      Et tant qu'a continuer sur Python, j'ai réussi à extraire le système de templates de Django, car je le trouve assez sympatoche[1].

      Si ça peut intéresser quelqu'un ...

      Sinon mon préféré reste Cheetah (j'ai pas mal recherché sur les frameworks Python aujourd'hui), il est d'ailleurs semblable à celui de Django sur certains points.

      [1] : En fait c'était pour faire un django like en tout petit, et tout dans un dossier, comme Karrigell quoi. Mais bon c'était plus un test qu'autre chose, il supporte pas le POST par exemple.
    • [^] # Re: kit à faire de la pub pour ses moteurs de template ;-)

      Posté par . Évalué à  1 .

      Concept intéressant, c bien d'avoir fait l'héritage.

      En ce qui concerne la génération automatique des tags HTML je suis dubitatif. Il y a souvent plein de petit trucs que l'on veut rajouter par la suite comme attribut. Une classe CSS ou j'en passe ...
  • # Do simple

    Posté par (page perso) . Évalué à  1 .

    J'aimais bien ta premère version simple :
    http://dosimple.ch/articles/Template/
    là ça devient un peu obscur... limite je préfère Templeet...
    • [^] # Re: Do simple

      Posté par (page perso) . Évalué à  2 .

      il a presque reinventé mon tag TK qui date de 1994 :)

      en gros ce tag est du genre :
      <TK TMPLON="t1,t2,t3,...,tn" [FROM="node"] [AS="class1,class2,...,classn"]>
      template html lisant &attr1; &attrto2; &titi; comme contenu à mapper dans cette partie qui est considéré comme vide si l'attribut FROM est defini. l'attribut AS servant à instancier des classes d'alteration locale pour certains rendu spécifique ( permettant d'eviter le recalcul de certaines recursions "lourde" de type "fermeture transitive d'un graphe orienté" ).
      </TK>

      un template contenu dans un noeud "arbo_item" :
      <dl class="closed">
      <dt>&title;</a></dt>
      <dd><TK TMLON="sons" FROM="arbo_item" /></dd>
      </dl>

      n'a besoin que d'une classe truc avec comme propriété title et sons ( ce dernier contenant une liste de truc ) pour faire apparaitre une arborescence complete.

      apres, il y a juste 1 appel de fonction du genre
      apply_tk( root_node_to_render , root_object );

      aujourd'hui cela se mappe aisément sur un DOM.

      Apres cette breve présentation, je dois dire que meme si je suis excessivement satisfait de la méthode très proches de certains concepts comme les fonctions recursives & autres machines de turing, et malgré une très grande aisance au debug quand on maitrise la chose ( et ya un putain de temps gagné ) ...

      CETTE METHODE EST A DECONSEILLER TRES VIVEMENT A TOUT LE MONDE.

      pour donner un exemple simple du probleme sous jacent, c'est comme apprendre la programmation en LISP et avoir comme projet en TD de reimplementer tout emacs21 avec juste un sous ensemble du LISP :p
      • [^] # Re: Do simple

        Posté par . Évalué à  1 .

        Pas certain de comprendre là ...
        • [^] # Re: Do simple

          Posté par (page perso) . Évalué à  4 .

          je dis juste que ton idée est bonne et que tu peux la pousser encore plus loin au niveau abstraction ...

          une liste de liste ( ou arbre ) dont tu fais un rendu, tu peux le faire :
          - en profondeur d'abord ( recursion des petits enfants pendant itération des fils )
          - en largeur d'abord ( iterations des fils puis recursion pour itération des petits enfants )

          la stratégie en profondeur d'abord est la plus courante.

          la stratégie en largeur d'abord peut etre percu comme une stratégie en profondeur d'abord sur un arbre transformé correctement.

          de plus toute condition fausse peut etre consideré comme une itération ou récursion sur une liste vide. à contrario toute condition vrai peut etre considéré comme une liste ne contenant qu'un seul element contenant la liste elle meme à traiter ( voire dans certains cas suffisament générique, la liste elle meme sans le singleton intermediaire ).

          Apres pour faire des inclusions, nous avons pour chacunes au moins une de ces contraintes à appliquer :
          - obligatoire comme pour inclure une partie commune stockée ailleurs
          - conditionné comme pour inclure une partie stockée ailleurs
          - répétée comme pour inclure N fois une partie stockée ailleurs
          - variable comme pour inclure une partie stockée ailleurs que l'on ne sait pas determiné à l'écriture du template

          maintenant, ton template peut nécessiter plus qu'un attribut texte ne serait ce que pour remplir un tag HTML <img> en séparant le rendu du processing et en évitant les templates de gorets. de plus, tu peux vouloir plus d'une liste possible, et vouloir appliquer sur un produit cartesien d'au moins deux listes.

          Tu as tout ca dans ce petit tag TK à la con au travers deja des attributs TMPLON et FROM .

          je dois avouer que je n'ai eu besoin de l'attribut AS que très très très rarement, malgré le fait que j'ai utilisé ce systeme pour générer beaucoup plus d'autres choses que du HTML , XML , JS , CSS , ...
    • [^] # Re: Do simple

      Posté par . Évalué à  1 .

      A part l'objet currentNode, qui correspond au noeud traité courant, et les fonctions associées, c'est pareil que l'ancienne classe ... Enfin l'ancienne classe n'acceptais pas bien les conditions imbriquées alors que là oui.

      C'est surtout moins bien présenté je pense.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.