Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 06, 2013 embd 0.1.0 - embedded D | ||||
---|---|---|---|---|
| ||||
Announcing the release of embd, a low-level (i.e. small) API for embedding D code into text: https://github.com/carlor/embd It's a bit of an inconvenient API, but it's customizable and gives the client control in what gets passed to the template. I hope some of you find it useful! NMS |
March 06, 2013 Re: embd 0.1.0 - embedded D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nathan M. Swan | Am 06.03.2013 10:08, schrieb Nathan M. Swan: > Announcing the release of embd, a low-level (i.e. small) API for > embedding D code into text: > > https://github.com/carlor/embd > > It's a bit of an inconvenient API, but it's customizable and gives the client control in what gets passed to the template. > > I hope some of you find it useful! > > NMS Great, finally something that works for plain text files! I guess a simple wrapper could make it work with a similar interface to vibe.d's Diet templates (slightly ugly with that struct because of the additional range template argument and not tested at all): struct renderEmbd(string FILE, ALIASES...) { class Context(R) : emdb.Context { R* _output; mixin(renderer); void write(string content, dchar evalCode){ if (evalCode == '=') filterHtmlEscape(*_output, content); else _output.put(content); } } static void opCall(R)(ref R output_range) { static Context!R ctx; if( !ctx ) ctx = new Context!R; ctx._output = &output_range; scope(exit) ctx._output = null; ctx.render!(import(FILE), `!=`, `<%`, `%>`)(); } } Usage: auto dst = appender!string(); renderEmbd!("userprofile.embd.html", username, title, biography)(dst); |
March 06, 2013 Re: embd 0.1.0 - embedded D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sönke Ludwig | > > struct renderEmbd(string FILE, ALIASES...) > { > class Context(R) : emdb.Context { mixin(vibe.templ.utils.localAliases!(0, ALIASES)); > R* _output; |
March 06, 2013 Re: embd 0.1.0 - embedded D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sönke Ludwig | On Wednesday, 6 March 2013 at 11:29:51 UTC, Sönke Ludwig wrote:
> Am 06.03.2013 10:08, schrieb Nathan M. Swan:
>> Announcing the release of embd, a low-level (i.e. small) API for
>> embedding D code into text:
>>
>> https://github.com/carlor/embd
>>
>> It's a bit of an inconvenient API, but it's customizable and gives the
>> client control in what gets passed to the template.
>>
>> I hope some of you find it useful!
>>
>> NMS
>
> Great, finally something that works for plain text files!
>
> I guess a simple wrapper could make it work with a similar interface to
> vibe.d's Diet templates (slightly ugly with that struct because of the
> additional range template argument and not tested at all):
>
> struct renderEmbd(string FILE, ALIASES...)
> {
> class Context(R) : emdb.Context {
> R* _output;
>
> mixin(renderer);
>
> void write(string content, dchar evalCode){
> if (evalCode == '=')
> filterHtmlEscape(*_output, content);
> else
> _output.put(content);
> }
> }
>
> static void opCall(R)(ref R output_range)
> {
> static Context!R ctx;
> if( !ctx ) ctx = new Context!R;
> ctx._output = &output_range;
> scope(exit) ctx._output = null;
> ctx.render!(import(FILE), `!=`, `<%`, `%>`)();
> }
> }
>
>
> Usage:
>
> auto dst = appender!string();
> renderEmbd!("userprofile.embd.html", username, title, biography)(dst);
Yes, my original intent was to use it in vibe.d projects.
Should I try to adopt it into vibe.d?
NMS
|
March 06, 2013 Re: embd 0.1.0 - embedded D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nathan M. Swan | Am 06.03.2013 19:08, schrieb Nathan M. Swan:
> On Wednesday, 6 March 2013 at 11:29:51 UTC, Sönke Ludwig wrote:
>> Am 06.03.2013 10:08, schrieb Nathan M. Swan:
>>> Announcing the release of embd, a low-level (i.e. small) API for
>>> embedding D code into text:
>>>
>>> https://github.com/carlor/embd
>>>
>>> It's a bit of an inconvenient API, but it's customizable and gives the client control in what gets passed to the template.
>>>
>>> I hope some of you find it useful!
>>>
>>> NMS
>>
>> Great, finally something that works for plain text files!
>>
>> I guess a simple wrapper could make it work with a similar interface to vibe.d's Diet templates (slightly ugly with that struct because of the additional range template argument and not tested at all):
>>
>> struct renderEmbd(string FILE, ALIASES...)
>> {
>> class Context(R) : emdb.Context {
>> R* _output;
>>
>> mixin(renderer);
>>
>> void write(string content, dchar evalCode){
>> if (evalCode == '=')
>> filterHtmlEscape(*_output, content);
>> else
>> _output.put(content);
>> }
>> }
>>
>> static void opCall(R)(ref R output_range)
>> {
>> static Context!R ctx;
>> if( !ctx ) ctx = new Context!R;
>> ctx._output = &output_range;
>> scope(exit) ctx._output = null;
>> ctx.render!(import(FILE), `!=`, `<%`, `%>`)();
>> }
>> }
>>
>>
>> Usage:
>>
>> auto dst = appender!string();
>> renderEmbd!("userprofile.embd.html", username, title, biography)(dst);
>
> Yes, my original intent was to use it in vibe.d projects.
>
> Should I try to adopt it into vibe.d?
>
> NMS
Actually I plan to start breaking up the vibe-d package into smaller functional blocks at some point and the Diet template compiler might also end up as a separate package, as it also really is a quite generic module. I think an output range based interface would be great to have, though.
One interesting option would be to add some *optional* vibe.d support. A version(Have_vibe_d){} block could be used to e.g. add a UFCS based possibility to directly render to a HttpServerResponse, similar to the res.render!() Diet render function. DUB automatically defines Have_* version identifiers for all packages that are used for the current project, so this would then automatically be available for vibe.d based projects without introducing a hard dependency.
|
March 06, 2013 Re: embd 0.1.0 - embedded D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sönke Ludwig | On Wednesday, 6 March 2013 at 19:17:56 UTC, Sönke Ludwig wrote:
(...)
> Actually I plan to start breaking up the vibe-d package into smaller
> functional blocks at some point (...)
Really looking forward to an std.event/async module :)
|
Copyright © 1999-2021 by the D Language Foundation