Фреймворк HTML C++, библиотека шаблонов, библиотека генератора HTML
Я ищу библиотеки шаблонов / генераторов для C++, которые похожи, например, на. Ruby's Erb, Haml, PHP Smarty и др.
Было бы замечательно, если бы я использовал некоторые базовые функции, такие как циклы, if/else, преобразование int в строки и т. Д.
Передача параметров в механизм визуализации шаблонов также важна, если бы я мог передать их все в хэш-карту вместо вызова некоторой функции для каждого из параметров.
У вас есть какие-нибудь рекомендации?
Я также вижу возможность встраивания таких языков, как Lua, однако я не нашел и шаблонизирующей библиотеки для этого.
12 ответов
Краткий обзор упомянутого проекта.
http://rgrz.tumblr.com/post/13808947359/review-of-html-template-engines-in-c-language
ClearSilver
- Сайт: http://www.clearsilver.net/
- Проект: https://code.google.com/p/clearsilver/
- Группа: http://tech.groups.yahoo.com/group/ClearSilver
- Лицензия: Новая лицензия BSD
- Язык: C
- Последнее обновление: 28 ноября 2011 г.
- Последний выпуск: 0.10.5 12 июля 2007 г.
- Документ: Богатый
- Сообщество: Среднее (<10 дискуссий в месяц)
Тэн
- Сайт: http://teng.sourceforge.net/
- Код: http://teng.svn.sourceforge.net/teng/
- Группа: http://sourceforge.net/projects/teng/
- Лицензия: Новая лицензия BSD
- Язык: C++
- Связывание: php, python
- Последнее обновление: 8 марта 2011 г.
- Последний выпуск: 2.1.1 8 марта 2011 г.
- Документ: Богатый
- Сообщество: Низкое (редкое обсуждение с 2010 года)
Templatizer
- Сайт: http://www.lazarusid.com/libtemplate.shtml
- Проект: только для скачивания
- Группа: нет
- Лицензия: бесплатно использовать
- Язык: C (низкий уровень)/C++ (интерфейс) смешанный
- Последнее обновление: неизвестно
- Последний выпуск: неизвестен
- Документ: нет
- Сообщество: нет
HTML шаблон C++
- Сайт: http://nulidex.com/code/docs/html_template/
- Проект: http://sourceforge.net/projects/htmltemplatec
- Группа: http://sourceforge.net/projects/htmltemplatec
- Лицензия: GPL
- Язык: C++
- Последнее обновление: 27 марта 2011 г.
- Последний выпуск: бета-версия 0.7.4, 27 марта 2011 г.
- Документ: средний
- Сообщество: нет
СТРР
- Сайт: http://ctpp.havoc.ru/en/
- Проект: только для скачивания
- Группа: нет
- Лицензия: Лицензия BSD
- Язык: C++ с C API
- Последнее обновление: 5 октября 2011 г.
- Последний выпуск: версия 2.7.2 5 октября 2011 г.
- Документ: Богатый
- Сообщество: нет
вес
- Сайт: http://www.webtoolkit.eu/wt/
- Проект: http://www.webtoolkit.eu/wt/
- Группа: http://www.webtoolkit.eu/wt/community
- Лицензия: GPL и коммерческая
- Язык: C++
- Последнее обновление: 29 ноября 2011 г.
- Последний выпуск: 3.2.0 29 ноября 2011 г.
- Документ: Богатый
- Сообщество: Низкое (редкая активность)
Flate
- Сайт: http://flate.dead-inside.org/
- Проект: нет
- Группа: нет
- Лицензия: LGPL v2.1
- Язык: C
- Последнее обновление: 4 сентября 2010 г.
- Последний выпуск: 2.0 4 сентября 2010 г.
- Документ: плохой
- Сообщество: нет
Grantlee - это механизм шаблонов строк, основанный на системе шаблонов Django. Он портирован на C++/Qt.
NLTemplate - это небольшая библиотека шаблонов C++ с синтаксисом, похожим на Django.
- Переменная замена
- Повторяемые или дополнительные блоки
- Файл включает в себя
- MIT лицензирован
- Нет внешних зависимостей
- Единый исходный файл, который легко добавить в любой проект
Отказ от ответственности: я автор.
CTPP - очень быстрая и мощная библиотека, написанная на C++. У него есть привязки для Perl, PHP и Python.
Wt (произносится как "остроумный") - это библиотека C++ и сервер приложений для разработки и развертывания веб-приложений. Это не "фреймворк", который реализует способ программирования, а библиотека.
формат фейсбука:
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"
ClearSilver доступен для c. Вот список существующих сайтов, которые используют clearsilver. Но я не использую это сам.
Я разработал что-то здесь по образцу Jade для C++. Он использует простой, но мощный язык ввода и создает одну шаблонную функцию C++, которая записывает HTML в поток.
< html
< h1 The title is ${{ params["title"] }}& >
< ul >
& for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
< li Item ${{ i }}$ >
& }
>
- Переменная замена
- Пользовательские блоки кода
- использует всю мощь C++ (циклы, объявления переменных, вы называете это)
- Супер легко интегрировать в исходные сборки
- Все возможное сделано во время компиляции
- Нет промежуточного формата (прямой C++)
- Легко отлаживать (потому что вывод C++)
- Нет внешних зависимостей
- Супер крошечный менее 600 строк с ++
- Лицензия GPL
Я попытался использовать шаблонизатор и динамические страницы C++, предоставляемые инфраструктурой ffead-cpp, пример реализации показан в вики
Каким-то образом я пропустил NLTemplate, когда искал изначально, и написал свой собственный шаблонизатор C++, с явно похожим вариантом использования, как NLTemplate:-)
https://github.com/hughperkins/Jinja2CppLight
- Jinja2-подобный синтаксис
- легкий, без зависимостей от boost, qt и т. д.,...
- подстановка переменных
- для петель
- в том числе вложенные для циклов:-)
Jinja2C++
- Сайт: https://jinja2cpp.dev/
- Проект: https://github.com/jinja2cpp
- Пакет Конана: https://bintray.com/beta/#/flexferrum/conan-packages/jinja2cpp:flexferrum?tab=overview
- Лицензия: MPL-2.0.
- Язык: C++14/17
- Последнее изменение: 01 окт.2019 г.
- Последний выпуск: 1.0.0 01 октября 2019 г.
- Документ: умеренный
Описание:
- Библиотека C++14/17
- Поддерживает основные компиляторы (Visual C++, gcc, clang)
- Удобный интерфейс.
- Соответствие спецификации Jinja2 http://jinja.pocoo.org/docs/2.10/
- Поддержка строк с узкими и широкими символами как для шаблонов, так и для параметров.
- Встроенное отражение для типов C++ и популярных json-библиотек (nlohmann, RapidJson).
- Пользовательские вызываемые объекты.
- Мощные полнофункциональные выражения Jinja2 с фильтрацией (с помощью оператора '|') и выражениями 'if'.
- Большой набор тегов Jinja2 включает макросы и расширения шаблонов.
- Подробные отчеты об ошибках.
Templtext - это небольшая библиотека для обработки текстовых шаблонов C++. Он поддерживает переменные типа bash (%VAR или%{VAR}). Но главная особенность - поддержка пользовательских функций. Библиотека была создана мной.
- Разбор шаблона
- Переменная замена
- Пользовательские функции в шаблоне
- C++11
- Лицензия GPL
нужна библиотека регулярных выражений BOOST, но в следующей версии она будет заменена на std::regex
Пример 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;
Выход:
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.
Пример 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;
Выход:
You have got an apple.
You have got an orange.
English version - apple.
German version - Apfel.
Flexible version - apple.
Flexible version - Apfel.