From 5f1744c5b0f9761db402dfbca9cc85e1542ddb5f Mon Sep 17 00:00:00 2001 From: the lemons Date: Tue, 31 Aug 2021 23:22:36 -0500 Subject: create the --- example.lua | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 example.lua (limited to 'example.lua') diff --git a/example.lua b/example.lua new file mode 100644 index 0000000..042425e --- /dev/null +++ b/example.lua @@ -0,0 +1,105 @@ +local h = require "html" + +function code_example(source, output) + return h.div { + h.h3 "source", + h.code {h.pre{source}}, + h.h3 "output", + h.code {h.pre{output}} + } +end + + +print(h.html { + h.head { + h.meta{charset = "utf-8"}, + h.style{h.raw[[ + body { + max-width: 65ch; font-family: sans-serif; margin:auto; + } + ]]} + }, + h.body { + h.h1[[simple HTML DSL for lua 5.3]], + h.p[[ + this library returns a table which, when indexed with the name of + an HTML tag, provides a function which generates a data structure + representing an HTML element. when this data structure is converted + to a string, the corresponding HTML is generated. + ]], + h.code[[local h = require "html"]], + h.p[[ + calling a tag's function with no arguments produces a self-closing + tag. + ]], + code_example([[print(h.hr())]], [[
]]), + h.p[[ + calling a tag's function with a single array or value argument + produces a tag with the children provided in the array. non-table + values may appear in the list of children or in its stead. they are + converted to a string an escaped. + ]], + code_example( + [[print(h.section{h.h1"foo",h.p"bar"})]], + [[

foo

bar

]] + ), + h.p[[ + calling a tag's function with a single set of key/value pairs as + the argument produces a self-closing tag with attributes + corresponding to the key/value pairs + ]], + code_example( + [[print(h.meta{charset = "utf-8"})]], + [[]] + ), + h.p[[ + calling a tag's function with a set of key/value pairs and then an + array or value as the arguments produces a tag with attributes + corresponding to the key/value pairs. + ]], + code_example( + [[print(h.a({href = "https://example.com"}, "foobar"))]], + [[foobar]] + ), + h.p[[ + a table used in a list of children must either be generated from + the HTML functions or have a "tohtml" function or a "render" + function, returning HTML structures or HTML source respectively. a + table that is not a set of attributes or an array of element + children may not be used as arguments to an HTML function. + ]], + code_example( + [[ +local db_record = {name = "foobar", id = 256} +setmetatable(db_record, { + tohtml = function(x) + return h.a( + {href = "https://example.com/" .. x.id}, x.name) + end +}) + +print(h.p{"search result: ", db_record}) + ]], + '

search result: foobar

' + ), + h.p[[ + the `raw` function will insert text verbatim into the HTML, + unescaped. + ]], + code_example( + [[ +local html_source = "hello" +print(h.p{html_source}) +print(h.p{h.raw(html_source)}) + ]], + [[ +

<marquee>hello</marquee>

+

hello

+ ]] + ), + h.p[[ + included with this documentation is "example.lua" which produces + this documenation in HTML via the DSL. + ]] + } +}) -- cgit v1.2.3