Je suis à la recherche d'un léger moteur de template en Java. Je veux donner à mes utilisateurs la possibilité de définir un modèle dans la ligne de:
"Some arbitrary text ${some_function(Some more text ${1}, function_param)} whatever"
Et le modèle sera compilé et rempli d'exécution. Les exigences sont les suivantes:
- Modèle accepte tableau d'objets comme paramètres (et extrait à l'aide d'expressions telles que ${0} lorsque 0 est le nombre de paramètre)
- Modèle dispose de fonctions de modifier leur contenu. Par exemple: ${trim(^^^bla bla ${0})} avec le paramètre ["bla^^^"] sera de retour "bla bla bla" (^ = space. Le site des bandes de mon des espaces supplémentaires)
- Les fonctions peuvent accepter des paramètres. Par exemple ${substring(que ce soit, 4, 8)} retournera "jamais".
- Les fonctions peuvent être imbriquées. Une fonction opère sur des données après la fonction interne a été évaluée.
- Les fonctions sont extensibles, je veux être en mesure de définir ma propre.
- Mon logiciel est intégré à d'autres systèmes de production, de sorte qu'il doit être aussi petite que possible (je ne veux pas d'un gigantesque cadre avec un petit moteur de template qui fait ce dont j'ai besoin).
- De cette raison, la performance est un problème. Je peux me permettre de ralentir le temps de compilation, mais le gabarit-temps de remplissage doit être aussi rapide que possible.
- Nous utilisons javaSE 1.4. Ne peut pas aller plus haut, c'est une de nos caractéristiques.
Je ne pense pas que c'est très compliqué exigence afin que je puisse écrire quelque chose comme moi-même, MAIS puisque c'est vraiment un marginal de la fonctionnalité de nos produits, je suis réticent à passer du temps sur elle, plus elle semble être d'une utilisation courante de cas, je pense que quelqu'un doit avoir fait cela avant.
J'ai regardé modèle-moteurs comme la Vitesse et StringTemplate et FreeMarker. Je pense qu'ils sont conçus pour produire des documents de grande taille avec des modèles, lorsque la performance n'est pas un problème. J'ai besoin de quelque chose de petit, simple et rapide.
Des idées?