C ++ HTML模板框架,templatizing库,HTML生成器库
我正在寻找与C ++类似的模板/生成器库。 Ruby的Erb,Haml,PHP的Smarty等等
如果我会运行一些基本的function,比如循环,if / else,int转换为string,那将会很棒。
传递给模板渲染引擎的参数也很重要,如果我可以将它们全部传递到哈希映射而不是为每个参数调用某个函数。
你有什么build议?
我也可以看到像Lua这样的语言embedded的可能性,但是我还没有find一个templatizing库。
快速审查提到的项目。
http://rgrz.tumblr.com/post/13808947359/review-of-html-template-engines-in-c-language
ClearSilver
- 网站: http : //www.clearsilver.net
- 项目: https : //code.google.com/p/clearsilver/
- 组: http : //tech.groups.yahoo.com/group/ClearSilver
- 许可证:新的BSD许可证
- 语言:C
- 最后更新:2011年11月28日
- 最新版本:2007年7月12日0.10.5
- 文件:丰富
- 社区:中等(每月<10次讨论)
腾
- 网站: http : //teng.sourceforge.net
- 代码: http : //teng.svn.sourceforge.net/teng/
- 组: http : //sourceforge.net/projects/teng/
- 许可证:新的BSD许可证
- 语言:C ++
- 绑定:php,python
- 最后更新:2011年3月8日
- 最后的版本:2.1.1在2011年3月8日
- 文件:丰富
- 社区:低(自2010年以来罕见讨论)
Templatizer
- 网站: 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 ++
- 最后更新:2011年3月27日
- 最新版本:Beta 0.7.4,2011年3月27日
- 文档:中等
- 社区:无
CTPP
- 网站: http : //ctpp.havoc.ru/en/
- 项目:只下载
- 组:没有
- 许可证:BSD许可证
- 语言:使用C API的C ++
- 最后更新:2011年10月5日
- 最新版本:2011年10月5日,版本2.7.2
- 文件:丰富
- 社区:无
重量
- 网站: http : //www.webtoolkit.eu/wt/
- 项目: http : //www.webtoolkit.eu/wt/
- 组: http : //www.webtoolkit.eu/wt/community
- 许可证:GPL和商业
- 语言:C ++
- 最后更新:2011年11月29日
- 最后的版本:3.2.0在2011年11月29日
- 文件:丰富
- 社区:低(稀有活动)
Flate
- 网站: http : //flate.dead-inside.org/
- 项目:无
- 组:没有
- 许可证:LGPL v2.1
- 语言:C
- 最后更新:2010年9月4日
- 2.0版于2010年9月4日发布
- 文件:差
- 社区:无
Grantlee是一个基于Django模板系统的string模板引擎。 它被移植到C ++ / Qt。
NLTemplate是一个小的C ++模板库,语法类似于Django。
- 可变的replace
- 可重复或可选块
- 文件包括
- MIT许可
- 没有外部依赖性
- 单一源文件,易于添加到任何项目
免责声明:我是作者。
Wt (发音为'witty')是用于开发和部署Web应用程序的C ++库和应用程序服务器。 这不是一个“框架”,它强制编程的方式,而是一个图书馆。
CTPP是用C ++编写的非常快速和强大的库。 它具有Perl,PHP和Python的绑定。
ClearSilver可用于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"
我曾尝试使用由ffead-cpp框架提供的模板引擎和dynamicC ++页面,在wiki上显示了一个示例实现
不知何故,当我最初search时,我错过了NLTemplate,并编写了自己的C ++模板引擎,与NLTemplate显然有类似的用例:-)
https://github.com/hughperkins/Jinja2CppLight
- 类似Jinja2的语法
- 轻量级,没有依赖提升,QT等,…
- variables替代
- for循环
- 包括嵌套for循环:-)
我在这里开发了一些模仿玉石的c ++。 它需要一个简单而强大的input语言,并创build一个将HTML写入stream的单个c ++模板函数。
< html < h1 The title is ${{ params["title"] }}& > < ul > & for(int i = 0; i < boost::get<int>(params["items"]); ++i) { < li Item ${{ i }}$ > & } >
- 可变的replace
- 用户定义的代码块
- 收获c ++的全部力量(循环,variables声明,你的名字)
- 超级容易融入源代码构build
- 一切可能在编译时完成
- 没有中间格式(直c ++)
- 易于debugging(因为c + +输出)
- 没有外部依赖性
- 超级小于600行的c ++
- GPL许可
Templtext是一个小型的C ++文本模板处理库。 它支持类似bash的variables(%VAR或%{VAR})。 但主要function是支持用户定义的function 。 图书馆是由我创build的。
- 模板parsing
- 可变的replace
- 用户在模板中定义的function
- C ++ 11
- GPL许可证
需要BOOST正则expression式库,但在下一个版本中它将被replace为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.