A simple and concise templating engine that takes advantage of elegant Lua syntax.
LTML utilizes Lua's tables and optional parentheses around table and string literals to allow for a simple template syntax that can be easily rendered as HTML. LTML is portable enough to run in any typical Lua environment, given you can use setfenv
(<5.1) or load
(5.2+). It is even possible to run LTML in the browser.
def "cool_message" ( data.message:reverse() ),
def "groceries" { "Milk", "Eggs", "Bread" },
def "item" ( function(name) return li { name } end ),
doctype "html",
comment "This page was rendered with <3 by LTML",
html {
head {
title "LTML Example"
},
body {
h1 "LTML Example",
p { data.message },
p { cool_message },
br,
a { href = "https://justyn.is", "Check out my blog!" },
a { href = "https://github.com/tmpim/ltml" } "LTML is awesome!",
img { src = data.img },
h2 "Grocery list:",
ul {
map (groceries, item)
}
}
}
This renders to (prettified for readability):
<!DOCTYPE html>
<!-- This page was rendered with <3 by LTML -->
<html>
<head>
<title>LTML Example</title>
</head>
<body>
<h1>LTML Example</h1>
<p>This page was created using only Lua (no HTML, JS) with LTML!</p>
<p>!LMTL htiw )SSC ,SJ ,LMTH on( auL ylno gnisu detaerc saw egap sihT</p>
<br />
<a href="https://justyn.is">Check out my blog!</a>
<a href="https://github.com/tmpim/ltml">LTML is awesome!</a>
<img src="http://www.lua.org/manual/5.3/logo.gif" />
<h2>Grocery list:</h2>
<ul>
<li>Milk</li>
<li>Eggs</li>
<li>Bread</li>
</ul>
</body>
</html>
A more explanatory version of this template (and LTML as a whole) can be found in ltml/example/example.ltml.lua
Example code for executing and rendering templates can be found in ltml/example/example.lua
LTML is a very immature library, things are subject to change, and it is very much in testing, so utilize it with caution.
Standard Lua style conventions should be followed when pushing to this repository.