Lemplate
view release on metacpan or search on metacpan
lib/Lemplate.pm view on Meta::CPAN
s = gsub(s, "<", '<', "jo");
s = gsub(s, ">", '>', "jo");
s = gsub(s, '"', '"', "jo"); -- " end quote for emacs
return s
end,
lower = function (s, args)
return string.lower(s)
end,
upper = function (s, args)
return string.upper(s)
end,
}
function _M.process(file, params)
local stash = params
local context = {
stash = stash,
filter = function (bits, name, params)
local s = concat(bits)
local f = _M.filters[name]
if f then
return f(s, params)
end
return error("filter '" .. name .. "' not found")
end
}
context = setmetatable(context, context_meta)
local f = template_map[file]
if not f then
return error("file error - " .. file .. ": not found")
end
return f(context)
end
...
}
1;
__END__
=encoding utf8
=head1 Name
Lemplate - OpenResty/Lua template framework implementing Perl's TT2 templating language
=head1 Status
This is still under early development. Check back often.
=head1 Synopsis
From the command-line:
lemplate --compile path/to/lemplate/directory/ > myapp/templates.lua
From OpenResty Lua code:
local templates = require "myapp.templates"
ngx.print(templates.process("homepage.tt2", { var1 = 32, var2 = "foo" }))
From the command-line:
lemplate --compile path/to/lemplate/directory/ > myapp/templates.lua
=head1 Description
Lemplate is a templating framework for OpenResty/Lua that is built over
Perl's Template Toolkit (TT2).
Lemplate parses TT2 templates using the TT2 Perl framework, but with a twist.
Instead of compiling the templates into Perl code, it compiles them into Lua
that can run on OpenResty.
Lemplate then provides a Lua runtime module for processing the template code.
Presto, we have full featured Lua templating language!
Combined with OpenResty, Lemplate provides a really simple and powerful way to
do web stuff.
=head1 HowTo
Lemplate comes with a command line tool call C<lemplate> that you use to
precompile your templates into a Lua module file. For example if you have a
template directory called F<templates> that contains:
$ ls templates/
body.tt2
footer.tt2
header.tt2
You might run this command:
$ lemplate --compile template/* > myapp/templates.lua
This will compile all the templates into one Lua module file which can be loaded in your
main OpenResty/Lua application as the module C<myapp.templates>.
Now all you need to do is load the Lua module file in your OpenResty app:
local templates = require "myapp.templates"
and do the HTML page rendering:
local results = templates.process("some-page.tt2",
{ var1 = val1, var2 = val2, ...})
Now you have Lemplate support for these templates in your OpenResty application.
=head1 Public API
The Lemplate Lua runtime module has the following API method:
=over
=item process(template-name, data)
The C<template-name> is a string like C<'body.tt2'> that is the name of
the top level template that you wish to process.
The optional C<data> specifies the data object to be used by the
templates. It can be an object, a function or a url. If it is an object,
it is used directly. If it is a function, the function is called and the
returned object is used.
=back
=head1 Current Support
The goal of Lemplate is to support all of the Template Toolkit features
that can possibly be supported.
Lemplate now supports almost all the TT directives, including:
* Plain text
* [% [GET] variable %]
* [% [SET] variable = value %]
* [% DEFAULT variable = value ... %]
* [% INCLUDE [arguments] %]
* [% PROCESS [arguments] %]
* [% BLOCK name %]
* [% IF condition %]
* [% ELSIF condition %]
* [% ELSE %]
* [% FOR x = y %]
* [% FOR x IN y %]
* [% WHILE expression %]
* [% NEXT %]
* [% LAST %]
* [%# this is a comment %]
ALL of the string virtual functions are supported.
ALL of the array virtual functions are supported:
ALL of the hash virtual functions are supported:
MANY of the standard filters are implemented.
The remaining features will be added very soon. See the DESIGN document
in the distro for a list of all features and their progress.
( run in 0.630 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )