This commit is contained in:
Cat /dev/Nulo 2022-05-03 19:16:41 -03:00
commit 05d6865aec
5 changed files with 317 additions and 0 deletions

58
Menú artístico.0.2.lua Executable file
View file

@ -0,0 +1,58 @@
#!/usr/bin/env lua5.1
local m = 1
local f = 2
local tipos = {
{"Un collage", m},
{"Una intervención contrapublicitaria o contrapropaganda", f},
{"Una cerámica", f},
{"Un comic", m},
}
local temas = {
"destrucción ambiental",
"una canción",
"otra obra artística",
"el mercado inmobiliario",
"redes sociales",
}
local adjetivos = {
{"", ""},
{"feo", "fea"},
}
local random_i = 1
local function random(list)
math.randomseed((''..os.time()):reverse() + random_i)
random_i = random_i + 5
return list[math.random(#list)]
end
require'html'
print(render{
h2({}, {"Algunas obras generadas aleatoriamente"}),
ol({}, map({1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, function(key, value)
local tipo = random(tipos)
local tema = random(temas)
local adjetivo = random(adjetivos)[tipo[2]]
return li({}, {tipo[1]," ",adjetivo," sobre ",tema})
end)),
h2({}, {"Tipos de obra"}),
ol({}, map(tipos, function(key, tipo)
return li({}, {tipo[1]})
end)),
h2({}, {"Algunas características (opcional)"}),
ol({}, map({unpack(adjetivos, 2)}, function(key, adjetivo)
return li({}, {adjetivo[1],"/",adjetivo[2]})
end)),
h2({}, {"Temas para la obra"}),
ol({}, map(temas, function(key, tema)
return li({}, {tema})
end)),
p({}, {
a({ href = "https://gitea.nulo.in/Nulo/sitio/src/branch/ANTIFASCISTA/Men%C3%BA%20art%C3%ADstico.gen" }, {"Código"}),
}),
})

57
Menú artístico.lua Executable file
View file

@ -0,0 +1,57 @@
#!/usr/bin/env lua5.1
local m = 1
local f = 2
local tipos = {
{"Un collage", m},
{"Una intervención contrapublicitaria o contrapropaganda", f},
{"Una cerámica", f},
{"Un comic", m},
}
local temas = {
"destrucción ambiental",
"una canción",
"otra obra artística",
"el mercado inmobiliario",
"redes sociales",
}
local adjetivos = {
{"", ""},
{"feo", "fea"},
}
local random_i = 1
local function random(list)
math.randomseed((''..os.time()):reverse() + random_i)
random_i = random_i + 5
return list[math.random(#list)]
end
require'html'
print(render{
h2{"Algunas obras generadas aleatoriamente"},
ol(map({1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, function(key, value)
local tipo = random(tipos)
local tema = random(temas)
local adjetivo = random(adjetivos)[tipo[2]]
return li{tipo[1]," ",adjetivo," sobre ",tema}
end)),
h2{"Tipos de obra"},
ol(map(tipos, function(tipo) return li{tipo[1]} end)),
h2{"Algunas características (opcional)"},
ol(map({unpack(adjetivos, 2)}, function(adjetivo)
return li{adjetivo[1],"/",adjetivo[2]}
end)),
h2{"Temas para la obra"},
ol(map(temas, function(tema) return li{tema} end)),
p{
a{
href = "https://gitea.nulo.in/Nulo/sitio/src/branch/ANTIFASCISTA/Men%C3%BA%20art%C3%ADstico.gen",
"Código"
},
},
})

34
html.0.1.lua Normal file
View file

@ -0,0 +1,34 @@
local function map(list, func)
local new_list = {}
for key, value in pairs(list) do
new_list[key] = func(key, value)
end
return new_list
end
local function join(list)
local string = ""
for key, value in pairs(list) do
string = string .. value
end
return string
end
local function basic_element(name)
return function(params, children)
return "<"..name
..join(map(params, function(key, value)
return " "..key.."='"..value.."'"
end))
..">"
..join(children)
.."</"..name..">"
end
end
local function a(params, children)
if not params.href then
print("WARNING: Link `"..join(children).."` doesn't have a href.")
end
return basic_element("a")(params, children)
end
print(a({ href = "https://nulo.in" }, {"Hola, soy html.lua"}))

83
html.0.2.lua Normal file
View file

@ -0,0 +1,83 @@
function map(list, func)
local new_list = {}
for key, value in pairs(list) do
new_list[key] = func(key, value)
end
return new_list
end
function join(list)
local string = ""
for key, value in pairs(list) do
string = string .. value
end
return string
end
function render(element)
if type(element) == "string" then
-- TODO: escape
return element
end
if element[1] then
return join(map(element, function(key, value)
return render(value)
end))
end
local close_tag = "</"..element.type..">"
local self_closing = element.type == "meta"
if self_closing then
close_tag = ""
end
return "<"..element.type
..join(map(element.parameters, function(key, value)
-- TODO: escape
return " "..key.."='"..value.."'"
end))
..">"
..join(map(element.children, function(key, value)
return render(value)
end))
..close_tag
end
local function basic_element(name)
return function(params, children)
return { type = name, parameters = params, children = children }
end
end
function a(params, children)
if not params.href then
print("WARNING: Link `"..join(children).."` doesn't have a href.")
end
return basic_element("a")(params, children)
end
head = basic_element("head")
body = basic_element("body")
title = basic_element("title")
h1 = basic_element("h1")
h2 = basic_element("h2")
h3 = basic_element("h3")
h4 = basic_element("h4")
h5 = basic_element("h5")
h6 = basic_element("h6")
ul = basic_element("ul")
ol = basic_element("ol")
li = basic_element("li")
p = basic_element("p")
meta = basic_element("meta")
local link = a({ href = "https://nulo.in" }, {"Hola, soy html.lua"})
local head_block = head({}, {
meta({charset = "utf-8"}, {}),
title({}, {"Hello world"}),
})
local body_block = body({}, {
link
})
--print(render(head_block)..render(body_block))

85
html.lua Normal file
View file

@ -0,0 +1,85 @@
function _map(_pairs, list, func)
local new_list = {}
for key, value in _pairs(list) do
new_list[key] = func(value, key)
end
return new_list
end
function map(list, func) return _map(pairs, list, func) end
function imap(list, func) return _map(ipairs, list, func) end
function _join(_pairs, list)
local string = ""
for key, value in _pairs(list) do
string = string .. value
end
return string
end
function join(list) return _join(pairs, list) end
function ijoin(list) return _join(ipairs, list) end
function render(element)
if type(element) == "string" then
-- TODO: escape
return element
end
if element[1] then
return join(map(element, render))
end
local close_tag = "</"..element.type..">"
local self_closing = element.type == "meta"
if self_closing then
close_tag = ""
end
return "<"..element.type
..join(map(element.things, function(value, key)
if type(key) == "number" then return "" end
-- TODO: escape
return " "..key.."='"..value.."'"
end))
..">"
..join(imap(element.things, render))
..close_tag
end
local function basic_element(name)
return function(things)
return { type = name, things = things }
end
end
function a(things)
if not things.href then
print("WARNING: Link `"..ijoin(things).."` doesn't have a href.")
end
return basic_element("a")(things)
end
head = basic_element("head")
body = basic_element("body")
title = basic_element("title")
h1 = basic_element("h1")
h2 = basic_element("h2")
h3 = basic_element("h3")
h4 = basic_element("h4")
h5 = basic_element("h5")
h6 = basic_element("h6")
ul = basic_element("ul")
ol = basic_element("ol")
li = basic_element("li")
p = basic_element("p")
meta = basic_element("meta")
local link = a{href = "https://nulo.in",
"Hola, soy html.lua"}
local head_block = head{
meta{charset = "utf-8"},
title{"Hello world"},
}
local body_block = body{
link,
}
print(render{head_block, body_block})