Marco de plantillas HTML de C ++, biblioteca de plantillas, biblioteca de generadores de HTML

Estoy buscando bibliotecas de plantillas / generadores para C ++ que sean similares a, por ejemplo. Erb de Ruby, Haml, Smarty de PHP, etc.

Sería genial si tuviera características básicas como bucles, if / else, conversión int a cadenas, etc.

El parámetro que pasa al motor de representación de la plantilla también es importante si pudiera pasarlos a todos en un mapa hash en lugar de llamar a alguna función para cada uno de los parámetros.

Tiene alguna recomendación?

También veo la posibilidad de incrustar lenguajes como Lua, pero tampoco he encontrado una biblioteca de técnicas para eso.

Una revisión rápida del proyecto mencionado.

http://rgrz.tumblr.com/post/13808947359/review-of-html-template-engines-in-c-language

ClearSilver

Teng

Templatizer

  • Sitio: http://www.lazarusid.com/libtemplate.shtml
  • Proyecto: solo descarga
  • Grupo: ninguno
  • Licencia: uso gratuito
  • Idioma: C (nivel bajo) / C ++ (interfaz) mixto
  • Última actualización: desconocido
  • Última publicación: desconocido
  • Documento: ninguno
  • Comunidad: ninguno

Plantilla HTML C ++

ctpp

  • Sitio: http://ctpp.havoc.ru/en/
  • Proyecto: solo descarga
  • Grupo: ninguno
  • Licencia: Licencia BSD
  • Idioma: C ++ con API C
  • Última actualización: 5 de octubre de 2011
  • Última publicación: Versión 2.7.2 del 5 de octubre de 2011
  • Documento: Rich
  • Comunidad: ninguno

Wt

Flate

  • Sitio: http://flate.dead-inside.org/
  • Proyecto: ninguno
  • Grupo: ninguno
  • Licencia: LGPL v2.1
  • Idioma: C
  • Última actualización: 4 de septiembre de 2010
  • Última publicación: 2.0 el 4 de septiembre de 2010
  • Documento: Pobre
  • Comunidad: ninguno

NLTemplate es una pequeña biblioteca de plantillas C ++ con una syntax similar a Django.

  • Reemplazo variable
  • Bloques repetibles u opcionales
  • El archivo incluye
  • Licencia MIT
  • Sin dependencias externas
  • Archivo fuente único, fácil de agregar a cualquier proyecto

Descargo de responsabilidad: soy el autor.

Grantlee es un motor de plantillas de cadenas basado en el sistema de plantillas de Django. Está portado a C ++ / Qt.

Wt (pronunciado ‘ingenioso’) es una biblioteca C ++ y un servidor de aplicaciones para desarrollar e implementar aplicaciones web. No es un ‘marco’, que impone una forma de progtwigción, sino una biblioteca.

CTPP es una biblioteca muy rápida y potente escrita en C ++. Tiene enlaces para Perl, PHP y Python.

ClearSilver está disponible para c. Aquí hay una lista de sitios web existentes que usan clearsilver. Pero yo no lo uso yo mismo.

formato de facebook:

std::cout << format("The answers are {} and {}", 23, 42); // => "The answers are 23 and 42" std::map m { {"what", "answer"}, {"value", "42"} }; std::cout << vformat("The only {what} is {value}", m); // => "The only answer is 42" 

He intentado usar el motor de plantillas y las páginas dinámicas en C ++ proporcionadas por el framework ffead-cpp, una implementación de ejemplo se muestra en el wiki

ctemplate

https://code.google.com/p/ctemplate/?redir=1

Nueva licencia BSD

De alguna manera me perdí NLTemplate cuando estaba buscando originalmente, y escribí mi propio motor de plantillas C ++, con aparentemente un caso de uso similar a NLTemplate 🙂

https://github.com/hughperkins/Jinja2CppLight

  • Sintaxis similar a Jinja2
  • liviano, sin dependencias en boost, qt, etc, …
  • sustitución variable
  • para bucles
    • incluyendo nesteds para bucles 🙂

Desarrollé algo aquí modelado después de jade para c ++. Requiere un lenguaje de entrada simple pero poderoso y crea una función de plantilla única de C ++ que escribe HTML en una secuencia.

 < html < h1 The title is ${{ params["title"] }}& > < ul > & for(int i = 0; i < boost::get(params["items"]); ++i) { < li Item ${{ i }}$ > & } > 
  • Reemplazo variable
  • Bloques de código definidos por el usuario
  • cosecha toda la potencia de c ++ (bucles, declaraciones de variables, lo que sea)
  • Súper fácil de integrar en comstackciones de origen
  • Todo lo posible hecho en tiempo de comstackción
  • Sin formato intermedio (recta c + +)
  • Fácil de depurar (porque la salida de C ++)
  • Sin dependencias externas
  • Súper pequeño con menos de 600 líneas de c ++
  • Licencia GPL

Templtext es una pequeña biblioteca de procesamiento de plantillas de texto de C ++. Admite variables tipo bash (% VAR o% {VAR}). Pero la característica principal es un soporte de funciones definidas por el usuario . La biblioteca fue creada por mí.

  • El análisis de la plantilla
  • Reemplazo variable
  • Funciones definidas por el usuario en la plantilla
  • C ++ 11
  • Licencia GPL

necesita la biblioteca de expresiones regulares BOOST, pero se reemplazará con std :: regex en la próxima versión

Ejemplo 1:

 using namespace templtext; Templ * t = new Templ( "Dear %SALUTATION %NAME. I would like to invite you for %TEXT. Sincerely yours, %MYNAME." ); std::map tokens01 = { { "SALUTATION", "Mr." }, { "NAME", "John Doe" }, { "TEXT", "an interview" }, { "MYNAME", "Ty Coon" } }; std::map tokens02 = { { "SALUTATION", "Sweetheart" }, { "NAME", "Mary" }, { "TEXT", "a cup of coffee" }, { "MYNAME", "Bob" } }; std::cout << t->format( tokens01 ) << std::endl; std::cout << t->format( tokens02 ) << std::endl; 

Salida:

 Dear Mr. John Doe. I would like to invite you for an interview. Sincerely yours, Ty Coon. Dear Sweetheart Mary. I would like to invite you for a cup of coffee. Sincerely yours, Bob. 

Ejemplo 2:

 using namespace templtext; std::unique_ptr tf1( new Templ( "You have got an $decode( 1 )." ) ); std::unique_ptr tf2( new Templ( "You have got an $decode( 2 )." ) ); std::unique_ptr tf3( new Templ( "English version - $decode_loc( 1, EN )." ) ); std::unique_ptr tf4( new Templ( "German version - $decode_loc( 1, DE )." ) ); std::unique_ptr tf5( new Templ( "Flexible version - $decode_loc( 1, %LANG )." ) ); tf1->set_func_proc( func ); tf2->set_func_proc( func ); tf3->set_func_proc( func ); tf4->set_func_proc( func ); tf5->set_func_proc( func ); Templ::MapKeyValue map1 = { { "LANG", "EN" } }; Templ::MapKeyValue map2 = { { "LANG", "DE" } }; std::cout << tf1->format() << std::endl; std::cout << tf2->format() << std::endl; std::cout << tf3->format() << std::endl; std::cout << tf4->format() << std::endl; std::cout << tf5->format( map1 ) << std::endl; std::cout << tf5->format( map2 ) << std::endl; 

Salida:

 You have got an apple. You have got an orange. English version - apple. German version - Apfel. Flexible version - apple. Flexible version - Apfel.