C++ HTML template framework, biblioteka szablonów, biblioteka generatora HTML

Szukam bibliotek szablonów / generatorów do C++, które są podobne do np. Ruby 's Erb, Haml, PHP' S Smarty, itp.

Byłoby świetnie, gdybym miał kilka podstawowych funkcji, takich jak pętle, if / else, konwersja int na ciągi itp.

Przekazywanie parametru do silnika renderowania szablonów jest również ważne, jeśli mogę przekazać je wszystkie w mapie hashowej zamiast wywoływać jakąś funkcję dla każdego z parametrów.

Masz jakieś zalecenia?

Widzę też możliwość osadzania języków takich jak Lua, jednak nie znalazłem biblioteki szablonów do tego.

Author: Ajay, 2008-12-10

12 answers

Szybki przegląd wspomnianego projektu.

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

ClearSilver

Teng

Templatizer

  • strona: http://www.lazarusid.com/libtemplate.shtml
  • projekt: tylko do pobrania
  • Grupa: brak
  • Licencja: free to use
  • Język: C (low level)/C++ (interface) mixed
  • Ostatnia aktualizacja: nieznany
  • ostatnie wydanie: nieznane
  • dokument: brak
  • Wspólnota: none

Szablon HTML C++

Ctpp

  • strona: http://ctpp.havoc.ru/en /
  • projekt: tylko do pobrania
  • Grupa: brak
  • Licencja: licencja BSD
  • Język: C++ Z C API
  • Last Update: Oct 5, 2011
  • ostatnia wersja: Wersja 2.7.2 5 października 2011
  • Dokument: Rich
  • społeczność: brak

Wt

Flate

  • strona: http://flate.dead-inside.org /
  • projekt: Brak
  • Grupa: brak
  • Licencja: LGPL v2. 1
  • Język: C
  • Last Update: Sep 4, 2010
  • ostatnie wydanie: 2.0 on Sep 4, 2010
  • Dokument: Poor
  • społeczność: brak
 49
Author: rogerz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-02 04:52:50

NLTemplate jest małą biblioteką szablonów C++ O składni podobnej do Django.

  • zmienna zastępcza
  • bloki powtarzalne lub opcjonalne
  • plik zawiera
  • licencja MIT
  • Brak zewnętrznych zależności
  • pojedynczy plik źródłowy, łatwy do dodania do dowolnego projektu

Zastrzeżenie: jestem autorem.

 6
Author: Tomas Andrle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 19:45:49

Grantlee jest silnikiem szablonów łańcuchowych opartym na systemie szablonów Django. Jest on przeportowany do C++ / Qt.

 6
Author: Kristian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 09:13:33

Wt (wymawiane 'dowcipny') jest biblioteką C++ i serwerem aplikacji do tworzenia i wdrażania aplikacji internetowych. Nie jest to "framework", który wymusza sposób programowania, ale biblioteka.

 3
Author: yesraaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 17:26:43

CTPP jest bardzo szybką i wydajną biblioteką napisaną w C++. Posiada powiązania dla Perla, PHP i Pythona.

 3
Author: Karim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-13 16:32:06
 2
Author: wimh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-10 11:17:55

Facebook ' S format:

std::cout << format("The answers are {} and {}", 23, 42); 
// => "The answers are 23 and 42"

std::map<std::string, std::string> m { {"what", "answer"}, {"value", "42"} }; 
std::cout << vformat("The only {what} is {value}", m); 
// => "The only answer is 42"
 2
Author: kirill_igum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-23 21:28:06

Próbowałem użyć silnika szablonów i dynamicznych stron C++ dostarczanych przez ffead-cpp framework, przykładowa implementacja jest pokazana na wiki

 1
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-01 04:28:24
 1
Author: OJW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-21 13:03:21

Jakoś przegapiłem NLTemplate kiedy szukałem oryginalnie i napisałem własny silnik szablonów C++, z widocznym podobnym przypadkiem użycia jak NLTemplate: -)

Https://github.com/hughperkins/Jinja2CppLight

  • Jinja2-jak składnia
  • lekki, bez zależności od boost, qt, itp ...
  • substytucja zmiennej
  • dla pętli
    • w tym zagnieżdżone dla pętli: -)
 1
Author: Hugh Perkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 09:21:01

Opracowałem tutaj coś wzorowanego na jade dla c++. Wymaga prostego, ale potężnego języka wejściowego i tworzy pojedynczą funkcję szablonu c++, która zapisuje HTML do strumienia.

< html
  < h1 The title is ${{ params["title"] }}& >
    < ul >
    & for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
      < li Item ${{ i }}$ >
    & }
>
  • zmienna zastępcza
  • bloki kodu zdefiniowane przez Użytkownika
  • pobiera pełną moc c++ (pętle, deklaracje zmiennych, nazwę)
  • Super łatwy do integracji z kompilacjami źródłowymi
  • wszystko co możliwe w czasie kompilacji
  • Brak formatu pośredniego (straight c++)
  • Łatwy do debugowania (ponieważ wyjście c++)
  • brak zewnętrznych zależności
  • Super tiny mniej niż 600 linii c++
  • licencja GPL
 0
Author: burner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 23:23:32

Templtext jest małą biblioteką przetwarzania szablonów tekstowych w języku C++. Obsługuje zmienne podobne do bash (%VAR lub % {VAR}). Ale główną cechą jest obsługa funkcji zdefiniowanych przez użytkownika . Biblioteka została stworzona przeze mnie.

  • parsowanie szablonów
  • zmienna zastępcza
  • funkcje zdefiniowane przez Użytkownika w szablonie
  • C++11
  • licencja GPL

Potrzebujesz biblioteki regex BOOST, ale zostanie ona zastąpiona przez STD:: regex w następnym wersja

Przykład 1:

using namespace templtext;

Templ * t = new Templ( "Dear %SALUTATION %NAME. I would like to invite you for %TEXT. Sincerely yours, %MYNAME." );

std::map<std::string, std::string> tokens01 =
{
        { "SALUTATION", "Mr." },
        { "NAME", "John Doe" },
        { "TEXT", "an interview" },
        { "MYNAME", "Ty Coon" }
};

std::map<std::string, std::string> 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;

Wyjście:

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.

Przykład 2:

using namespace templtext;

std::unique_ptr<Templ> tf1( new Templ( "You have got an $decode( 1 )." ) );
std::unique_ptr<Templ> tf2( new Templ( "You have got an $decode( 2 )." ) );
std::unique_ptr<Templ> tf3( new Templ( "English version - $decode_loc( 1, EN )." ) );
std::unique_ptr<Templ> tf4( new Templ( "German version  - $decode_loc( 1, DE )." ) );
std::unique_ptr<Templ> 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;

Wyjście:

You have got an apple.
You have got an orange.
English version - apple.
German version  - Apfel.
Flexible version - apple.
Flexible version - Apfel.
 0
Author: trodevel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-09 22:33:34