Фреймворк шаблонов C ++ HTML, библиотека для создания шаблонов, библиотека генераторов HTML [закрыто]

StackOverflow https://stackoverflow.com/questions/355650

  •  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.lazarusid.com/libtemplate.shtml
  • Проект:только для загрузки
  • Группа:Нет
  • Лицензия:свободно использовать
  • Язык:Смешанный C (низкий уровень) / C ++ (интерфейс)
  • Последнее обновление:неизвестный
  • Последний выпуск:неизвестный
  • Документ:Нет
  • Сообщество:Нет

HTML-шаблон C++

ctpp

  • Сайт: http://ctpp.havoc.ru/en/
  • Проект:только для загрузки
  • Группа:Нет
  • Лицензия:Лицензия BSD
  • Язык:C ++ с C API
  • Последнее обновление:5 октября 2011
  • Последний выпуск:Версия 2.7.2 от 5 октября 2011 г.
  • Документ:Богатый
  • Сообщество:Нет

Вес, кг

Флейт

  • Сайт: http://flate.dead-inside.org/
  • Проект:Нет
  • Группа:Нет
  • Лицензия:LGPL v2.1
  • Язык:C
  • Последнее обновление:4 сентября 2010
  • Последний выпуск:2.0 от 4 сентября 2010 г.
  • Документ:Бедный
  • Сообщество:Нет

Jinja2C++

Другие советы

Грантли это движок шаблонов строк, основанный на системе шаблонов 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, пример реализации показан на Вики

шаблон ctemplate

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

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

Каким-то образом я пропустил 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 включает макросы и расширения шаблонов.
  • Подробные отчеты об ошибках.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top