С++ HTML-шаблон, библиотека шаблонов, библиотека генераторов HTML
Я ищу библиотеки шаблонов/генераторов для С++, которые аналогичны, например. Ruby Erb, Haml, PHP Smarty и т.д.
Было бы здорово, если бы у меня были бы некоторые базовые функции, такие как циклы, if/else, преобразование int в строки и т.д.
Передача параметров в механизм рендеринга шаблонов также важна, если я могу передать их все в хэш-карте вместо вызова некоторой функции для каждого из параметров.
Есть ли у вас рекомендации?
Я также вижу возможность встраивания таких языков, как Lua, однако я тоже не нашел для них библиотеку templatizing.
Ответы
Ответ 1
Краткий обзор упомянутого проекта.
http://rgrz.tumblr.com/post/13808947359/review-of-html-template-engines-in-c-language
ClearSilver
Тэн
Templatizer
- Сайт: http://www.lazarusid.com/libtemplate.shtml
- Проект: скачать только
- Группа: нет
- Лицензия: бесплатно использовать
- Язык: C (низкий уровень)/C++ (интерфейс) смешанный
- Последнее обновление: неизвестно
- Последний выпуск: неизвестен
- Документ: нет
- Сообщество: нет
HTML-шаблон C++
СТРР
- Сайт: http://ctpp.havoc.ru/en/
- Проект: скачать только
- Группа: нет
- Лицензия: Лицензия BSD
- Язык: C++ с C API
- Последнее обновление: 5 октября 2011 г.
- Последняя версия: версия 2.7.2, 5 октября 2011 г.
- Документ: Богатый
- Сообщество: нет
Wt
Flate
- Сайт: http://flate.dead-inside.org/
- Проект: нет
- Группа: нет
- Лицензия: LGPL v2.1
- Язык: C
- Последнее обновление: 4 сентября 2010 г.
- Последний выпуск: 2.0 4 сентября 2010 г.
- Документ: плохой
- Сообщество: нет
Jinja2 C++
Ответ 2
Grantlee - это механизм строковых шаблонов, основанный на системе шаблонов Django. Он портирован на С++/Qt.
Ответ 3
NLTemplate - небольшая библиотека шаблонов С++ с синтаксисом, подобным Django.
- Переменная замена
- Повторяемые или необязательные блоки
- Файл включает
- Лицензия MIT
- Нет внешних зависимостей
- Один исходный файл, который легко добавить в любой проект
Отказ от ответственности: я автор.
Ответ 4
Wt (произносится как "witty" ) - это библиотека С++ и сервер приложений для разработки и развертывания веб-приложений. Это не "каркас", который обеспечивает способ программирования, но библиотеку.
Ответ 5
CTPP - очень быстрая и мощная библиотека, написанная на С++. Он имеет привязки для Perl, PHP и Python.
Ответ 6
ClearSilver доступен для c. Здесь - список существующих веб-сайтов, которые используют clearsilver. Но я не использую его сам.
Ответ 7
facebook 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"
Ответ 8
Я пробовал использовать движок шаблонов и динамические С++-страницы, предоставляемые инфраструктурой ffead-cpp, пример реализации показан на wiki
Ответ 9
ctemplate
https://code.google.com/p/ctemplate/?redir=1
Новая лицензия BSD
Ответ 10
Как-то я пропустил NLTemplate, когда я искал оригинал, и написал свой собственный механизм моделирования шаблонов на С++, по-видимому, аналогичный пример использования: NLTemplate: -)
https://github.com/hughperkins/Jinja2CppLight
- Синтаксис Jinja2-like
- легкий, без зависимостей от boost, qt и т.д.,...
- подстановка переменных
- для циклов
- включая вложенные для циклов: -)
Ответ 11
Jinja2C++
Описание:
- C++ Библиотека 14/17
- Поддерживает основные компиляторы (Visual C++, gcc, clang)
- Простой в использовании интерфейс.
- Соответствие спецификации Jinja2 http://jinja.pocoo.org/docs/2.10/
- Поддержка как narrow-, так и строк широких символов как для шаблонов, так и для - параметров.
- Встроенное отражение для типов C++ и популярных библиотек json (nlohmann, RapidJson).
- Пользовательские вызовы.
- Мощные полнофункциональные выражения Jinja2 с фильтрацией (через оператор ‘|) и‘ if-выражений.
- Большой набор тегов Jinja2 включает макросы и расширения шаблонов.
- Богатые сообщения об ошибках.
Ответ 12
Я разработал нечто здесь, смоделированное после jade для С++. Он использует простой, но мощный язык ввода и создает единственную функцию шаблона С++, которая записывает HTML в поток.
< html
< h1 The title is ${{ params["title"] }}& >
< ul >
& for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
< li Item ${{ i }}$ >
& }
>
- Переменная замена
- Пользовательские кодовые блоки
- собирает всю мощь С++ (циклы, объявления переменных, вы называете это)
- Супер легко интегрируется в исходные сборки
- Все, что можно сделать во время компиляции
- Нет промежуточного формата (прямой С++)
- Легко отлаживать (поскольку вывод С++)
- Нет внешних зависимостей
- Супер миниатюрный менее 600 строк С++
- Лицензия GPL
Ответ 13
Templtext - небольшая библиотека обработки шаблонов текста на С++. Он поддерживает bash -подобные переменные (% VAR или% {VAR}). Но главная особенность - поддержка пользовательских функций. Библиотека была создана мной.
- Разбор шаблонов
- Переменная замена
- Пользовательские функции в шаблоне
- С++ 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.