On Thu, 18 May 2017 15:33:42 -0400, Steven Schveighoffer wrote:
Is there a way to compile diet templates that contain no actual dynamic
code to html? I'm writing some static html pages, and finding I miss the
terse diet format. Maybe there's an external tool that does this?Would be cool to have a runtime diet parser that does this and just
errors when finding dynamic data.-Steve
I did this ugly workaround, which is only tested with the diet template below:
- Create a Dub project with
diet-ng
as a dependency. - Create a new file called
src/html.d
with this content: https://raw.githubusercontent.com/rejectedsoftware/diet-ng/master/source/diet/html.d - Do the following change:
--- a/source/html.d
+++ b/source/html.d
@@ -1,6 +1,6 @@
/** HTML output generator implementation.
*/
-module diet.html;
+module html;
import diet.defs;
import diet.dom;
@@ -187,8 +187,7 @@ string getHTMLMixin(in Document doc, string range_name = dietOutputRangeName, HT
CTX ctx;
ctx.pretty = style == HTMLOutputStyle.pretty;
ctx.rangeName = range_name;
- string ret = "import diet.internal.html : htmlEscape, htmlAttribEscape;\n";
- ret ~= "import std.format : formattedWrite;\n";
+ string ret;
foreach (i, n; doc.nodes)
ret ~= ctx.getHTMLMixin(n, false);
ret ~= ctx.flushRawText();
@@ -545,7 +544,6 @@ private struct CTX {
{
string ret;
if (!this.inRawText) {
- ret = this.rangeName ~ ".put(\"";
this.inRawText = true;
}
ret ~= outputPendingNewline();
@@ -558,7 +556,7 @@ private struct CTX {
{
if (this.inRawText) {
this.inRawText = false;
- return "\");\n";
+ return "";
}
return null;
}
- Add the following code to
src/app.d
:
import std.stdio;
import diet.parser;
import diet.dom;
import html;
void main()
{
auto diet = "
doctype html
html
head
title D statement test
body
this is the body
";
auto doc = parseDiet(diet);
auto content = doc.getHTMLMixin();
writeln(content);
}
To me it seems it would be fairly simple to make a few changes to diet-ng to have this working out of the box.
/Jacob Carlborg