I'm looking for endorsements and a review manager volunteer for a new library, Boost.Mustache. It's an implementation of Mustache templates (http://mustache.github.io/) in C++11 and at the moment supports the mandatory portions of the Mustache spec (https://github.com/mustache/spec). The repository is https://github.com/pdimov/mustache. Mustache is a simple templating language in which tags of the form {{something}} are replaced with the value of the entity `something`, which typically means with the member "something" of the JSON object passed when rendering the template. Boost.Mustache can take a Boost.JSON object as the context against which data references are resolved, but it can also take arbitrary values that can be converted to boost::json::value by using boost::json::value_from. This allows, for instance, described classes (structs and classes annotated with Boost.Describe) to be passed as the data context, such that references to e.g. {{title}} in the template are resolved to the corresponding `title` member of the class. A simple usage example demonstrating the above is: ``` #include <boost/mustache.hpp> #include <boost/describe.hpp> #include <iostream> struct item { std::string title; std::string author; std::string link; }; BOOST_DESCRIBE_STRUCT(item, (), (title, author, link)) struct reference { std::string heading; std::vector<item> items; }; BOOST_DESCRIBE_STRUCT(reference, (), (heading, items)) int main() { reference ref = { "Reference", { { "Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer", "David Stafford", "https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html" }, { "Stronger, better, morer, Moremur; a better Murmur3-type mixer", "Pelle Evensen", "https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be..." }, { "Improved mx3 and the RRC test", "Jon Maiga", "http://jonkagstrom.com/mx3/mx3_rev2.html" } } }; std::string tmpl = R"(<html> <body> <h1>{{heading}}</h1> <ul> {{#items}} <li> <strong>{{title}}</strong><br> <em>{{author}}</em><br> <a href="{{link}}">{{link}}</a> {{/items}} </ul> </body> </html>)"; boost::mustache::render( tmpl, std::cout, ref, {} ); } ``` The resulting output is <html> <body> <h1>Reference</h1> <ul> <li> <strong>Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer</strong><br> <em>David Stafford</em><br> <a href="https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html">https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html</a> <li> <strong>Stronger, better, morer, Moremur; a better Murmur3-type mixer</strong><br> <em>Pelle Evensen</em><br> <a href="https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-better.html">https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-better.html</a> <li> <strong>Improved mx3 and the RRC test</strong><br> <em>Jon Maiga</em><br> <a href="http://jonkagstrom.com/mx3/mx3_rev2.html">http://jonkagstrom.com/mx3/mx3_rev2.html</a> </ul> </body> </html>
Boost does need something like this, I do absolutely endorse this library becoming part of boost. On Fri, Dec 30, 2022, 08:23 Peter Dimov via Boost <boost@lists.boost.org> wrote:
I'm looking for endorsements and a review manager volunteer for a new library, Boost.Mustache. It's an implementation of Mustache templates (http://mustache.github.io/) in C++11 and at the moment supports the mandatory portions of the Mustache spec (https://github.com/mustache/spec).
The repository is https://github.com/pdimov/mustache.
Mustache is a simple templating language in which tags of the form {{something}} are replaced with the value of the entity `something`, which typically means with the member "something" of the JSON object passed when rendering the template.
Boost.Mustache can take a Boost.JSON object as the context against which data references are resolved, but it can also take arbitrary values that can be converted to boost::json::value by using boost::json::value_from.
This allows, for instance, described classes (structs and classes annotated with Boost.Describe) to be passed as the data context, such that references to e.g. {{title}} in the template are resolved to the corresponding `title` member of the class.
A simple usage example demonstrating the above is:
``` #include <boost/mustache.hpp> #include <boost/describe.hpp> #include <iostream>
struct item { std::string title; std::string author; std::string link; };
BOOST_DESCRIBE_STRUCT(item, (), (title, author, link))
struct reference { std::string heading; std::vector<item> items; };
BOOST_DESCRIBE_STRUCT(reference, (), (heading, items))
int main() { reference ref = { "Reference", { { "Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer", "David Stafford", " https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html" }, { "Stronger, better, morer, Moremur; a better Murmur3-type mixer", "Pelle Evensen", " https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be... " }, { "Improved mx3 and the RRC test", "Jon Maiga", "http://jonkagstrom.com/mx3/mx3_rev2.html" } } };
std::string tmpl = R"(<html> <body> <h1>{{heading}}</h1> <ul> {{#items}} <li> <strong>{{title}}</strong><br> <em>{{author}}</em><br> <a href="{{link}}">{{link}}</a> {{/items}} </ul> </body> </html>)";
boost::mustache::render( tmpl, std::cout, ref, {} ); } ```
The resulting output is
<html> <body> <h1>Reference</h1> <ul> <li> <strong>Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer</strong><br> <em>David Stafford</em><br> <a href=" https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html"> https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html </a> <li> <strong>Stronger, better, morer, Moremur; a better Murmur3-type mixer</strong><br> <em>Pelle Evensen</em><br> <a href=" https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be... "> https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be... </a> <li> <strong>Improved mx3 and the RRC test</strong><br> <em>Jon Maiga</em><br> <a href="http://jonkagstrom.com/mx3/mx3_rev2.html"> http://jonkagstrom.com/mx3/mx3_rev2.html</a> </ul> </body> </html>
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
The repository is https://github.com/pdimov/mustache.
And the documentation (so far) can be seen at https://github.com/pdimov/mustache/blob/develop/doc/mustache/overview.adoc https://github.com/pdimov/mustache/blob/develop/doc/mustache/reference.adoc (Github renders it fairly well.)
Thank you for that, Peter. I endorse this library. Em qui., 29 de dez. de 2022 às 21:30, Peter Dimov via Boost < boost@lists.boost.org> escreveu:
The repository is https://github.com/pdimov/mustache.
And the documentation (so far) can be seen at
https://github.com/pdimov/mustache/blob/develop/doc/mustache/overview.adoc https://github.com/pdimov/mustache/blob/develop/doc/mustache/reference.adoc
(Github renders it fairly well.)
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- Alan Freitas https://alandefreitas.github.io/alandefreitas/ <https://github.com/alandefreitas>
Utility is everything. Endorsed. On Fri, 30 Dec 2022 at 01:23, Peter Dimov via Boost <boost@lists.boost.org> wrote:
I'm looking for endorsements and a review manager volunteer for a new library, Boost.Mustache. It's an implementation of Mustache templates (http://mustache.github.io/) in C++11 and at the moment supports the mandatory portions of the Mustache spec (https://github.com/mustache/spec).
The repository is https://github.com/pdimov/mustache.
Mustache is a simple templating language in which tags of the form {{something}} are replaced with the value of the entity `something`, which typically means with the member "something" of the JSON object passed when rendering the template.
Boost.Mustache can take a Boost.JSON object as the context against which data references are resolved, but it can also take arbitrary values that can be converted to boost::json::value by using boost::json::value_from.
This allows, for instance, described classes (structs and classes annotated with Boost.Describe) to be passed as the data context, such that references to e.g. {{title}} in the template are resolved to the corresponding `title` member of the class.
A simple usage example demonstrating the above is:
``` #include <boost/mustache.hpp> #include <boost/describe.hpp> #include <iostream>
struct item { std::string title; std::string author; std::string link; };
BOOST_DESCRIBE_STRUCT(item, (), (title, author, link))
struct reference { std::string heading; std::vector<item> items; };
BOOST_DESCRIBE_STRUCT(reference, (), (heading, items))
int main() { reference ref = { "Reference", { { "Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer", "David Stafford", " https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html" }, { "Stronger, better, morer, Moremur; a better Murmur3-type mixer", "Pelle Evensen", " https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be... " }, { "Improved mx3 and the RRC test", "Jon Maiga", "http://jonkagstrom.com/mx3/mx3_rev2.html" } } };
std::string tmpl = R"(<html> <body> <h1>{{heading}}</h1> <ul> {{#items}} <li> <strong>{{title}}</strong><br> <em>{{author}}</em><br> <a href="{{link}}">{{link}}</a> {{/items}} </ul> </body> </html>)";
boost::mustache::render( tmpl, std::cout, ref, {} ); } ```
The resulting output is
<html> <body> <h1>Reference</h1> <ul> <li> <strong>Better Bit Mixing - Improving on MurmurHash3's 64-bit Finalizer</strong><br> <em>David Stafford</em><br> <a href=" https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html"> https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html </a> <li> <strong>Stronger, better, morer, Moremur; a better Murmur3-type mixer</strong><br> <em>Pelle Evensen</em><br> <a href=" https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be... "> https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-be... </a> <li> <strong>Improved mx3 and the RRC test</strong><br> <em>Jon Maiga</em><br> <a href="http://jonkagstrom.com/mx3/mx3_rev2.html"> http://jonkagstrom.com/mx3/mx3_rev2.html</a> </ul> </body> </html>
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
On 30.12.22 01:23, Peter Dimov via Boost wrote:
I'm looking for endorsements and a review manager volunteer for a new library, Boost.Mustache. It's an implementation of Mustache templates (http://mustache.github.io/) in C++11 and at the moment supports the mandatory portions of the Mustache spec (https://github.com/mustache/spec). I'm actually currently looking for a good text templating engine for C++, and this proposed library looks like a very strong contender.
Endorsed! -- Rainer Deyke (rainerd@eldwood.com)
participants (5)
-
Alan de Freitas
-
Klemens Morgenstern
-
Peter Dimov
-
Rainer Deyke
-
Richard Hodges