Подтвердить что ты не робот

С++ HTML-шаблон, библиотека шаблонов, библиотека генераторов HTML

Я ищу библиотеки шаблонов/генераторов для С++, которые аналогичны, например. Ruby Erb, Haml, PHP Smarty и т.д.

Было бы здорово, если бы у меня были бы некоторые базовые функции, такие как циклы, if/else, преобразование int в строки и т.д.

Передача параметров в механизм рендеринга шаблонов также важна, если я могу передать их все в хэш-карте вместо вызова некоторой функции для каждого из параметров.

Есть ли у вас рекомендации?

Я также вижу возможность встраивания таких языков, как Lua, однако я тоже не нашел для них библиотеку templatizing.

4b9b3361

Ответ 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

Ответ 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.