local M = {} M.__index = M function M.site_builder(header, footer) local config = {} local site_config = {} local fes_mod = package.loaded.fes if fes_mod and fes_mod.config then config = fes_mod.config if config.site then site_config = config.site end end local self = { version = site_config.version or "", header = header or [[
]], footer = footer or [[
]], parts = {} } return setmetatable(self, M) end function M:custom(str) table.insert(self.parts, str) return self end function M:g(str) self:custom(str) return self end function M:h1(str) str = str or "" self:custom("

" .. str .. "

") return self end function M:h2(str) str = str or "" self:custom("

" .. str .. "

") return self end function M:h3(str) str = str or "" self:custom("

" .. str .. "

") return self end function M:h4(str) str = str or "" self:custom("

" .. str .. "

") return self end function M:h5(str) str = str or "" self:custom("
" .. str .. "
") return self end function M:h6(str) str = str or "" self:custom("
" .. str .. "
") return self end function M:p(str) str = str or "" table.insert(self.parts, "

" .. str .. "

") return self end function M:note(content) content = content or "" self:custom('
' .. content .. '
') return self end function M:a(link, str) str = str or "" table.insert(self.parts, "" .. str .. "") return self end function M:version() return self.version end function M:build() return self.header .. table.concat(self.parts) .. self.footer end M.__tostring = function(self) return self:build() end return M