lua-CodeGen is a "safe" template engine.
+lua-CodeGen enforces a strict Model-View separation.
+Only 4 primitives are supplied : attribute reference,
+template include, conditional include and
+template application (i.e., map operation).
+
+
+lua-CodeGen allows to split template in small chunk,
+and encourages the reuse of them by inheritance.
+
+
+lua-CodeGen is not dedicated to HTML,
+it could generate any kind of textual code.
+
+
This library is licensed under the terms of the MIT/X11 license, like Lua itself.
+This library is licensed under the terms of the MIT/X11 license,
+like Lua itself.
From 8fa02f57b7d3c59f556f6af1acd788d3914084ba Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Sat, 21 Aug 2010 19:59:38 +0200
Subject: [PATCH 09/21] refactor inheritance
---
codegen.html | 55 +++++++++++++++++++++++++++++-----------------------
1 file changed, 31 insertions(+), 24 deletions(-)
diff --git a/codegen.html b/codegen.html
index d636991..b16303d 100644
--- a/codegen.html
+++ b/codegen.html
@@ -8,7 +8,7 @@
-
+
@@ -77,20 +77,21 @@ For the impatient
The instanciation
The instanciation of a template is done by the call of CodeGen
-with an optional parameter. This parameter is a table. The hash part of this
-table uses only string as key and could contains 3 kinds of value :
+with optional parameters. This first parameter is a table. This table uses
+only string as key and could contains 3 kinds of value :
- chunk of template which is a string and could contains primitives ie. ${...}
+ chunk of template which is a string and could contains primitives i.e. ${...}
data which gives access to the data model
formatter which is a function which accepts a string as parameter and
- returns it after a transformation. The typical usage is for escape sequence.
+ returns it after a transformation.
+ The typical usage is for escape sequence.
-The array part is used for inheritance from other templates.
+The other parameters allow inheritance (ie. access to field) from other templates or simple tables.
-A common pattern is to put this part in an external file.
+
A common pattern is to put this step in an external file.
@@ -119,15 +120,16 @@ The interpolation
which is the keyname of the entry point template.
-The interpolation returns a string and an optional string which contains some error messages.
+
The interpolation returns a string as result and an optional string which
+contains some error messages.
-The 4 primitives
+The 4 primitives in template
The data could be in the form of foo.bar.baz.
-Attribute reference
+1. Attribute reference
The syntax is ${data[ ; separator='sep'][ ; format=name] }.
@@ -139,8 +141,8 @@ Attribute reference
The default is the standard Lua function tostring.
-When data is a table, the option separator is used as
-parameter of table.concat(data, sep).
+
When data is a table, the option separator
+is used as parameter of table.concat(data, sep).
@@ -155,16 +157,17 @@ Attribute reference
print(output) --> print(1, 2, 3);
-Template include
+2. Template include
-The syntax is ${name ()} where name is the keyname of a chunk template.
+
The syntax is ${name ()} where name
+is the keyname of a chunk template.
-If name is not the keyname of a valid chunk, there are no substitution
-and an error is reported.
+
If name is not the keyname of a valid chunk,
+there are no substitution and an error is reported.
-Conditional include
+3. Conditional include
The if syntax is ${data ?name1 ()}
and the if/else syntax is ${data ?name1 ():name2 ()}
@@ -172,13 +175,17 @@
Conditional include
and data is evaluated as a boolean.
-Template application
+4. Template application
The syntax is ${data :name ()}
where data must be a table.
The template name is called for each item of the array data,
and the result is concatened.
+The template has a direct access in the item,
+and inherits access from the caller.
+If the item is not a table, it is accessible via the key it.
+
Examples
@@ -228,10 +235,10 @@ Examples
-- file: my_rockspec.tmpl
-local rs = dofile 'rockspec.tmpl'
+local parent = dofile 'rockspec.tmpl'
-return CodeGen {
- rs;
+return CodeGen({
+ parent;
lower = string.lower,
_tarball = "${name; format=lower}-${version}.tar.gz",
_url = "'http://cloud.github.com/downloads/fperrad/${name}/${_tarball()}'",
@@ -241,15 +248,15 @@ Examples
maintainer = "Francois Perrad",
license = "MIT/X11",
},
-}
+}, parent)
-And now for this project.
+And finally, an use for this project.
require 'CodeGen'
-rs = dofile 'my_rockspec.tmpl'
+local rs = dofile 'my_rockspec.tmpl'
rs.name = 'lua-CodeGen'
rs.version = '0.1.0'
rs.revision = 1
From fef101b3395fa336913cc73c39144b5479f024d4 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Sat, 21 Aug 2010 20:31:38 +0200
Subject: [PATCH 10/21] list item
---
index.html | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/index.html b/index.html
index 44e5f73..9147715 100644
--- a/index.html
+++ b/index.html
@@ -63,10 +63,14 @@ Overview
lua-CodeGen is a "safe" template engine.
lua-CodeGen enforces a strict Model-View separation.
-Only 4 primitives are supplied : attribute reference,
-template include, conditional include and
-template application (i.e., map operation).
+Only 4 primitives are supplied :
+
+ attribute reference,
+ template include,
+ conditional include,
+ and template application (i.e., map operation).
+
lua-CodeGen allows to split template in small chunk,
and encourages the reuse of them by inheritance.
From 3e99019ed9d5ced5ec3ab9ea1c45e3819ba58aa8 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Tue, 24 Aug 2010 11:04:18 +0200
Subject: [PATCH 11/21] update
---
codegen.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/codegen.html b/codegen.html
index b16303d..1c20f04 100644
--- a/codegen.html
+++ b/codegen.html
@@ -170,17 +170,17 @@ 2. Template include
3. Conditional include
The if syntax is ${data ?name1 ()}
-and the if/else syntax is ${data ?name1 ():name2 ()}
+and the if/else syntax is ${data ?name1 ()!name2 ()}
where name1 and name2 are the keyname of a chunk template
and data is evaluated as a boolean.
4. Template application
-The syntax is ${data :name ()}
+
The syntax is ${data :name ()[ ; separator='sep'] }
where data must be a table.
The template name is called for each item of the array data,
-and the result is concatened.
+and the result is concatened with an optional separator.
The template has a direct access in the item,
and inherits access from the caller.
From 2679e804d6d39b4f322edceb4ffeef4171d91bc9 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Thu, 26 Aug 2010 09:29:18 +0200
Subject: [PATCH 12/21] add CodeGen.Graph
---
.gitignore | 2 +
Makefile | 7 ++++
codegen.html | 10 ++++-
graph.html | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++
graph.png | Bin 0 -> 8968 bytes
index.html | 8 +++-
6 files changed, 130 insertions(+), 3 deletions(-)
create mode 100644 .gitignore
create mode 100644 graph.html
create mode 100644 graph.png
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f4fd33f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+
+*.dot
diff --git a/Makefile b/Makefile
index f0bc6fa..c9887c2 100644
--- a/Makefile
+++ b/Makefile
@@ -2,4 +2,11 @@
check:
xmllint --noout --valid index.html
xmllint --noout --valid codegen.html
+ xmllint --noout --valid graph.html
+graph:
+ lua -l CodeGen.Graph -e "print(CodeGen.Graph.to_dot(CodeGen.Graph.template))" > graph.dot
+ dot -T png -o graph.png graph.dot
+
+clean:
+ rm -f *.dot *.png
diff --git a/codegen.html b/codegen.html
index 1c20f04..ab9186a 100644
--- a/codegen.html
+++ b/codegen.html
@@ -28,7 +28,7 @@
-
Test.More
+
CodeGen
Home
@@ -41,12 +41,18 @@ Test.More
License
- The module CodeGen
+ module CodeGen
+ module C.Graph
+
+
Project
Git
diff --git a/graph.html b/graph.html
new file mode 100644
index 0000000..c88d5d3
--- /dev/null
+++ b/graph.html
@@ -0,0 +1,106 @@
+
+
+
+ Module CodeGen.Graph
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
lua-CodeGen
+
a template engine
+
+
+
+
+
+
+
+
+
Reference
+
+
Functions
+
+
CodeGen.Graph.to_dot( tmpl )
+
+
Returns a string in DOT format.
+
+
Examples
+
+
+$ lua -l CodeGen.Graph -e "print(CodeGen.Graph.to_dot(CodeGen.Graph.template))" > graph.dot
+$ dot -T png -o graph.png graph.dot
+
+
+
+$ cat graph.dot
+digraph {
+ _node;
+ TOP;
+ _edge;
+
+ TOP -> _node;
+ TOP -> _edge;
+}
+
+
+
graph.png
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/graph.png b/graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..6bba24e9a17303fa259bb8d5c94db2aa3938cd0c
GIT binary patch
literal 8968
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
License
- The module CodeGen
+ module CodeGen
+ module C.Graph
+
+
Project
Git
From dad897fb6f157796d7dc8f58d55ea3c514b51782 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Mon, 30 Aug 2010 10:21:14 +0200
Subject: [PATCH 13/21] status -> beta
---
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.html b/index.html
index 76963d4..3c942d5 100644
--- a/index.html
+++ b/index.html
@@ -102,7 +102,7 @@ References
Status
-lua-CodeGen is in alpha stage.
+lua-CodeGen is in beta stage.
It's developed for Lua 5.1.
From 4082ecdceec22444683fa13da73eb3d6b6ae310b Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Wed, 1 Sep 2010 21:54:03 +0200
Subject: [PATCH 14/21] about simplicity
---
index.html | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/index.html b/index.html
index 3c942d5..4d15be7 100644
--- a/index.html
+++ b/index.html
@@ -64,6 +64,12 @@ lua-CodeGen
+
+ Perfection is achieved, not when there is nothing more to add,
+ but when there is nothing left to take away.
+ — Antoine de Saint-Exupéry
+
+
Overview
lua-CodeGen is a "safe" template engine.
From 2f7e503702f50ae05f6dfea23922daba98713d3e Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Fri, 3 Sep 2010 20:29:02 +0200
Subject: [PATCH 15/21] escape sequence
---
codegen.html | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/codegen.html b/codegen.html
index ab9186a..e215db7 100644
--- a/codegen.html
+++ b/codegen.html
@@ -149,6 +149,10 @@ 1. Attribute reference
When data is a table, the option separator
is used as parameter of table.concat(data, sep).
+This parameter could be simple quoted or double quoted,
+and it handles escape sequence like Lua.
+The characters { and } are forbidden,
+there must be represented by a decimal escape sequence \ddd .
From be111a572d8736c73922f262dd098e3b45a5b9f5 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Fri, 3 Sep 2010 20:30:01 +0200
Subject: [PATCH 16/21] without ellipse
---
graph.html | 6 ++++++
graph.png | Bin 8968 -> 4059 bytes
2 files changed, 6 insertions(+)
diff --git a/graph.html b/graph.html
index c88d5d3..eea42b0 100644
--- a/graph.html
+++ b/graph.html
@@ -66,6 +66,10 @@ CodeGen.Graph
Reference
+This module produces the call tree between chunks of a template.
+
+It is useful to find orphan chunk.
+
Functions
CodeGen.Graph.to_dot( tmpl )
@@ -82,6 +86,8 @@ Examples
$ cat graph.dot
digraph {
+ node [ shape = none ];
+
_node;
TOP;
_edge;
diff --git a/graph.png b/graph.png
index 6bba24e9a17303fa259bb8d5c94db2aa3938cd0c..ed23975f6ee07eac59a223216174eed26b40eae9 100644
GIT binary patch
literal 4059
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
literal 8968
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
Date: Thu, 9 Sep 2010 14:33:06 +0200
Subject: [PATCH 17/21] modify the syntax of template application
---
codegen.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/codegen.html b/codegen.html
index e215db7..2e3bad3 100644
--- a/codegen.html
+++ b/codegen.html
@@ -187,7 +187,7 @@ 3. Conditional include
4. Template application
-The syntax is ${data :name ()[ ; separator='sep'] }
+
The syntax is ${data /name ()[ ; separator='sep'] }
where data must be a table.
The template name is called for each item of the array data,
and the result is concatened with an optional separator.
@@ -232,7 +232,7 @@
Examples
_license = 'license = "${desc.license}",',
_dependencies = [[
dependencies = {
-${dependencies:_depend()}
+${dependencies/_depend()}
}
]],
_depend = [[
From 1153e7533d1fe173dc75a206be0ad58b1d915aae Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Sun, 26 Sep 2010 10:27:49 +0200
Subject: [PATCH 18/21] s/paper/article/
---
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/index.html b/index.html
index 4d15be7..9ac3f62 100644
--- a/index.html
+++ b/index.html
@@ -98,7 +98,7 @@ Overview
References
-the Terence Parr's papers :
+the Terence Parr's articles :
Enforcing Strict Model-View Separation in Template Engines
From 8cf2f694a0897a2578aea073fefac5ef16046c8f Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Tue, 9 Nov 2010 11:48:49 +0100
Subject: [PATCH 19/21] prep Lua 5.2
---
codegen.html | 6 +++---
graph.html | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/codegen.html b/codegen.html
index 2e3bad3..e71a314 100644
--- a/codegen.html
+++ b/codegen.html
@@ -69,7 +69,7 @@ Manual
For the impatient
-require 'CodeGen'
+local CodeGen = require 'CodeGen'
tmpl = CodeGen { -- instanciation
tarball = "${name}-${version}.tar.gz",
@@ -156,7 +156,7 @@ 1. Attribute reference
-require 'CodeGen'
+local CodeGen = require 'CodeGen'
tmpl = CodeGen {
call = "${name}(${parameters; separator=', '});",
@@ -264,7 +264,7 @@ Examples
And finally, an use for this project.
-require 'CodeGen'
+CodeGen = require 'CodeGen'
local rs = dofile 'my_rockspec.tmpl'
rs.name = 'lua-CodeGen'
diff --git a/graph.html b/graph.html
index eea42b0..79a56ff 100644
--- a/graph.html
+++ b/graph.html
@@ -79,7 +79,7 @@ CodeGen.Graph.to_dot( tmpl )
Examples
-$ lua -l CodeGen.Graph -e "print(CodeGen.Graph.to_dot(CodeGen.Graph.template))" > graph.dot
+$ lua -e "print(require 'CodeGen.Graph'.to_dot(require 'CodeGen.Graph'.template))" > graph.dot
$ dot -T png -o graph.png graph.dot
From e732de31fdd6eec58560649aa8ddcc4eb20dc348 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Thu, 11 Nov 2010 10:41:06 +0100
Subject: [PATCH 20/21] prep Lua 5.2
---
graph.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/graph.html b/graph.html
index 79a56ff..a1c8e55 100644
--- a/graph.html
+++ b/graph.html
@@ -72,7 +72,7 @@ Reference
Functions
-CodeGen.Graph.to_dot( tmpl )
+to_dot( tmpl )
Returns a string in DOT format.
From 34004a13d9692136c31130cf70c70775c46d93a1 Mon Sep 17 00:00:00 2001
From: Francois Perrad
Date: Fri, 4 Mar 2011 17:14:58 +0100
Subject: [PATCH 21/21] fix doc (inheritance example)
---
codegen.html | 1 -
1 file changed, 1 deletion(-)
diff --git a/codegen.html b/codegen.html
index e71a314..540df40 100644
--- a/codegen.html
+++ b/codegen.html
@@ -248,7 +248,6 @@ Examples
local parent = dofile 'rockspec.tmpl'
return CodeGen({
- parent;
lower = string.lower,
_tarball = "${name; format=lower}-${version}.tar.gz",
_url = "'http://cloud.github.com/downloads/fperrad/${name}/${_tarball()}'",