std.lua (3908B)
1 local M = {} 2 3 function M.element(tag, attrs, content) 4 local out = { "<", tag } 5 6 if attrs then 7 for k, v in pairs(attrs) do 8 if v ~= false and v ~= nil then 9 if v == true then 10 out[#out + 1] = " " .. k 11 else 12 out[#out + 1] = " " .. k .. "=\"" .. tostring(v) .. "\"" 13 end 14 end 15 end 16 end 17 18 if content == nil then 19 out[#out + 1] = " />" 20 return table.concat(out) 21 end 22 23 out[#out + 1] = ">" 24 out[#out + 1] = tostring(content) 25 out[#out + 1] = "</" 26 out[#out + 1] = tag 27 out[#out + 1] = ">" 28 29 return table.concat(out) 30 end 31 32 function M.a(link, str) 33 link = link or "https://example.com" 34 str = str or link 35 return M.element("a", { href = link }, str) 36 end 37 38 function M.download(link, str, downloadName) 39 link = link or "." 40 str = str or link 41 return M.element("a", { href = link, download = downloadName }, str) 42 end 43 44 function M.ha(link, str) 45 link = link or "https://example.com" 46 str = str or link 47 return M.element("a", { href = link, class = "hidden" }, str) 48 end 49 50 function M.external(link, str) 51 return M.element("a", { href = link, target = "_blank" }, str) 52 end 53 54 function M.note(str) 55 return M.element("div", { class = "note" }, str) 56 end 57 58 function M.muted(str) 59 return M.element("div", { class = "muted" }, str) 60 end 61 62 function M.callout(str) 63 return M.element("div", { class = "callout" }, str) 64 end 65 66 function M.h1(str) 67 return M.element("h1", nil, str or "") 68 end 69 70 function M.h2(str) 71 return M.element("h2", nil, str or "") 72 end 73 74 function M.h3(str) 75 return M.element("h3", nil, str or "") 76 end 77 78 function M.h4(str) 79 return M.element("h4", nil, str or "") 80 end 81 82 function M.h5(str) 83 return M.element("h5", nil, str or "") 84 end 85 86 function M.h6(str) 87 return M.element("h6", nil, str or "") 88 end 89 90 function M.p(str) 91 return M.element("p", nil, str or "") 92 end 93 94 function M.pre(str) 95 return M.element("pre", nil, str or "") 96 end 97 98 function M.code(str) 99 return M.element("pre", nil, M.element("code", nil, str or "")) 100 end 101 102 function M.ul(items) 103 items = items or {} 104 local out = {} 105 for _, item in ipairs(items) do 106 out[#out + 1] = M.element("li", nil, item) 107 end 108 return M.element("ul", nil, table.concat(out)) 109 end 110 111 function M.ol(items) 112 items = items or {} 113 local out = {} 114 for _, item in ipairs(items) do 115 out[#out + 1] = M.element("li", nil, item) 116 end 117 return M.element("ol", nil, table.concat(out)) 118 end 119 120 function M.tl(items) 121 items = items or {} 122 local out = {} 123 for _, item in ipairs(items) do 124 out[#out + 1] = M.element("li", nil, item) 125 end 126 return M.element("ul", { class = "tl" }, table.concat(out)) 127 end 128 129 function M.blockquote(str) 130 return M.element("blockquote", nil, str or "") 131 end 132 133 function M.hr() 134 return M.element("hr") 135 end 136 137 function M.img(src, alt) 138 return M.element("img", { src = src or "", alt = alt or "" }) 139 end 140 141 function M.strong(str) 142 return M.element("strong", nil, str or "") 143 end 144 145 function M.em(str) 146 return M.element("em", nil, str or "") 147 end 148 149 function M.br() 150 return M.element("br") 151 end 152 153 function M.div(content, class) 154 return M.element("div", class and { class = class } or nil, content or "") 155 end 156 157 function M.span(content, class) 158 return M.element("span", class and { class = class } or nil, content or "") 159 end 160 161 function M.escape(str) 162 str = tostring(str or "") 163 str = str:gsub("&", "&") 164 str = str:gsub("<", "<") 165 str = str:gsub(">", ">") 166 str = str:gsub('"', """) 167 str = str:gsub("'", "'") 168 return str 169 end 170 171 function M.highlight(str) 172 return M.element("span", { class = "highlight" }, str or "") 173 end 174 175 function M.banner(str) 176 return M.element("div", { class = "banner" }, str or "") 177 end 178 179 function M.center(str) 180 return M.element("div", { class = "center" }, str or "") 181 end 182 183 function M.nav(link, str) 184 link = link or "example.com" 185 str = str or link 186 return M.element("a", { href = link, class = "nav" }, str) 187 end 188 189 function M.rl(r, l) 190 return 191 M.element("span", { class = "left" }, r or "") .. 192 M.element("span", { class = "right" }, l or "") 193 end 194 195 return M