Фреймворк 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

Тэн

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 г.
  • Документ: Богатый
  • Сообщество: нет

вес

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++

Описание:

  • Библиотека 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.

ctemplate

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

Новая лицензия BSD

Другие вопросы по тегам