Фреймворк шаблонов C ++ HTML, библиотека для создания шаблонов, библиотека генераторов HTML [закрыто]
-
21-08-2019 - |
Вопрос
Я ищу библиотеки шаблонов / генераторов для C ++, которые похожи, например.Ruby - это Erb, Haml, PHP-это Smarty и т.д.
Было бы здорово, если бы я использовал некоторые базовые функции, такие как циклы, if / else, преобразование int в строки и т.д.
Передача параметров в механизм рендеринга шаблонов также важна, если бы я мог передать их все в хэш-карте вместо вызова некоторой функции для каждого из параметров.
У вас есть какие-нибудь рекомендации?
Я вижу также возможность встраивания таких языков, как Lua, однако я также не нашел для этого библиотеку шаблонизации.
Решение
Краткий обзор упомянутого проекта.
http://rgrz.tumblr.com/post/13808947359/review-of-html-template-engines-in-c-language
Прозрачное серебро
- Сайт: 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 года)
Шаблонизатор
- Сайт: 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 г.
- Документ:Средний
- Сообщество:Нет
ctpp
- Сайт: 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 г.
- Документ:Богатый
- Сообщество:Низкая (редкая активность)
Флейт
- Сайт: http://flate.dead-inside.org/
- Проект:Нет
- Группа:Нет
- Лицензия:LGPL v2.1
- Язык:C
- Последнее обновление:4 сентября 2010
- Последний выпуск:2.0 от 4 сентября 2010 г.
- Документ:Бедный
- Сообщество:Нет
Jinja2C++
- Сайт: https://jinja2cpp.dev
- Проект: https://github.com/jinja2cpp
- Группа: https://gitter.im/Jinja2Cpp/Lobby
- Лицензия:МПЛ-2,0
- Язык:C++14/17
- Последнее обновление:20 июня 2019
- Последний выпуск:0.9.2 от 02 июня 2019 года
- Документ:Умеренный
- Сообщество:Нет
Другие советы
Грантли это движок шаблонов строк, основанный на системе шаблонов Django.Он портирован на C ++ / Qt.
Шаблон NLTemplate представляет собой небольшую библиотеку шаблонов C ++ с синтаксисом, похожим на Django.
- Переменная замена
- Повторяющиеся или необязательные блоки
- Файл включает в себя
- Лицензия MIT
- Отсутствие внешних зависимостей
- Единый исходный файл, легко добавляемый в любой проект
Отказ от ответственности:Я автор.
Вес, кг (произносится "witty") - библиотека C ++ и сервер приложений для разработки и развертывания веб-приложений.Это не "фреймворк", который навязывает определенный способ программирования, а библиотека.
CTPP это очень быстрая и мощная библиотека, написанная на C ++.Он имеет привязки для Perl, PHP и Python.
Прозрачное серебро доступно для c. Здесь это список существующих веб-сайтов, которые используют clearsilver.Но я сам им не пользуюсь.
facebook-это формат:
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"
Я пробовал использовать механизм шаблонов и динамические страницы C ++, предоставляемые платформой ffead-cpp, пример реализации показан на Вики
Каким-то образом я пропустил NLTemplate при первоначальном поиске и написал свой собственный движок шаблонов C ++, по-видимому, с аналогичным вариантом использования, что и NLTemplate :-)
https://github.com/hughperkins/Jinja2CppLight
- Синтаксис, подобный Jinja2
- легкий, без зависимостей от boost, qt и т.д...
- замена переменной
- для циклов
- включая вложенные циклы for :-)
Я кое-что разработал здесь по образцу нефрит для 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 строк c ++
- Лицензия GPL
Темплтекст представляет собой небольшую библиотеку обработки текстовых шаблонов 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.
Jinja2C++
- Сайт: https://jinja2cpp.dev
- Проект: https://github.com/jinja2cpp
- Лицензия:МПЛ-2,0
- Язык:C++14/17
- Последнее обновление:20 июня 2019
- Последний выпуск:0.9.2 от 02 июня 2019 года
- Документ:Умеренный
Описание:
- Библиотека C++ 14/17
- Поддерживает основные компиляторы (Visual C ++, gcc, clang)
- Простой в использовании интерфейс.
- Соответствие спецификации Jinja2 http://jinja.pocoo.org/docs/2.10/
- Частичная поддержка как строк с узкими, так и с широкими символами как для шаблонов, так и для параметров.
- Встроенное отражение для типов C ++.
- Определяемые пользователем вызываемые объекты.
- Мощные полнофункциональные выражения Jinja2 с фильтрацией (через оператор ‘|’) и ‘if’-выражения.
- Большой набор тегов Jinja2 включает макросы и расширения шаблонов.
- Подробные отчеты об ошибках.