diff --git a/src/Makefile_Elua.am b/src/Makefile_Elua.am index e62e7a8c81..26cbba225f 100644 --- a/src/Makefile_Elua.am +++ b/src/Makefile_Elua.am @@ -67,7 +67,9 @@ eluadocgendir = $(datadir)/elua/apps/docgen eluadocgen_DATA = \ scripts/elua/apps/docgen/mappings.lua \ - scripts/elua/apps/docgen/stats.lua + scripts/elua/apps/docgen/stats.lua \ + scripts/elua/apps/docgen/util.lua \ + scripts/elua/apps/docgen/writer.lua EXTRA_DIST2 += $(eluadocgen_DATA) diff --git a/src/scripts/elua/apps/docgen/mappings.lua b/src/scripts/elua/apps/docgen/mappings.lua index 10966f0f24..486f724951 100644 --- a/src/scripts/elua/apps/docgen/mappings.lua +++ b/src/scripts/elua/apps/docgen/mappings.lua @@ -156,4 +156,4 @@ M.gen_nsp_ref = function(str, root) return ret end -return M \ No newline at end of file +return M diff --git a/src/scripts/elua/apps/docgen/stats.lua b/src/scripts/elua/apps/docgen/stats.lua index 4c9770aaa3..ca0efc2ba5 100644 --- a/src/scripts/elua/apps/docgen/stats.lua +++ b/src/scripts/elua/apps/docgen/stats.lua @@ -275,4 +275,4 @@ M.init = function(verbose) is_verbose = verbose end -return M \ No newline at end of file +return M diff --git a/src/scripts/elua/apps/docgen/util.lua b/src/scripts/elua/apps/docgen/util.lua new file mode 100644 index 0000000000..95c3c504c7 --- /dev/null +++ b/src/scripts/elua/apps/docgen/util.lua @@ -0,0 +1,65 @@ +local cutil = require("cutil") +local ffi = require("ffi") + +local M = {} + +local doc_root + +local path_sep, rep_sep = "/", "\\" +if ffi.os == "Windows" then + path_sep, rep_sep = rep_sep, path_sep +end + +M.path_join = function(...) + return table.concat({ ... }, path_sep):gsub(rep_sep, path_sep) +end + +M.path_to_nspace = function(p) + return p:gsub(rep_sep, ":"):gsub(path_sep, ":"):lower() +end + +M.nspace_to_path = function(ns) + return ns:gsub(":", path_sep):gsub(rep_sep, path_sep):lower() +end + +M.make_page = function(path) + return M.path_join(doc_root, path .. ".txt") +end + +M.mkdir_r = function(dirn) + assert(cutil.file_mkpath(dirn and M.path_join(doc_root, dirn) or doc_root)) +end + +M.mkdir_p = function(path) + M.mkdir_r(path:match("(.+)" .. path_sep .. "([^" .. path_sep .. "]+)")) +end + +M.rm_root = function() + cutil.file_rmrf(doc_root) +end + +M.str_split = function(str, delim) + if not str then + return nil + end + local s, e = str:find(delim, 1, true) + if not s then + return { str } + end + local t = {} + while s do + t[#t + 1] = str:sub(1, s - 1) + str = str:sub(e + 1) + s, e = str:find(delim, 1, true) + if not s then + t[#t + 1] = str + end + end + return t +end + +M.init = function(root) + doc_root = root:gsub(rep_sep, path_sep) +end + +return M diff --git a/src/scripts/elua/apps/docgen/writer.lua b/src/scripts/elua/apps/docgen/writer.lua new file mode 100644 index 0000000000..3ba6e39a7c --- /dev/null +++ b/src/scripts/elua/apps/docgen/writer.lua @@ -0,0 +1,331 @@ +local util = require("util") + +local eomap = require("docgen.mappings") +local dutil = require("docgen.util") + +local M = {} + +local root_nspace, use_notes + +M.Writer = util.Object:clone { + __ctor = function(self, path) + local subs + if type(path) == "table" then + subs = dutil.path_join(unpack(path)) + else + subs = dutil.nspace_to_path(path) + end + dutil.mkdir_p(subs) + self.file = assert(io.open(dutil.make_page(subs), "w")) + end, + + write_raw = function(self, ...) + self.file:write(...) + return self + end, + + write_nl = function(self, n) + self:write_raw(("\n"):rep(n or 1)) + return self + end, + + write_h = function(self, heading, level, nonl) + local s = ("="):rep(7 - level) + self:write_raw(s, " ", heading, " ", s, "\n") + if not nonl then + self:write_nl() + end + return self + end, + + write_fmt = function(self, fmt1, fmt2, ...) + self:write_raw(fmt1, ...) + self:write_raw(fmt2) + return self + end, + + write_b = function(self, ...) + self:write_fmt("**", "**", ...) + return self + end, + + write_i = function(self, ...) + self:write_fmt("//", "//", ...) + return self + end, + + write_u = function(self, ...) + self:write_fmt("__", "__", ...) + return self + end, + + write_s = function(self, ...) + self:write_fmt("", "", ...) + return self + end, + + write_m = function(self, ...) + self:write_fmt("''", "''", ...) + return self + end, + + write_sub = function(self, ...) + self:write_fmt("", "", ...) + return self + end, + + write_sup = function(self, ...) + self:write_fmt("", "", ...) + return self + end, + + write_br = function(self, nl) + self:write_raw("\\\\", nl and "\n" or " ") + return self + end, + + write_pre_inline = function(self, ...) + self:write_fmt("%%", "%%", ...) + return self + end, + + write_pre = function(self, ...) + self:write_fmt("\n", "\n", ...) + return self + end, + + write_code = function(self, str, lang) + lang = lang and (" " .. lang) or "" + self:write_raw("\n", str, "\n\n") + end, + + write_link = function(self, target, title) + if type(target) == "table" then + if target[#target] == true then + target[#target] = nil + target = ":" .. root_nspace .. ":" + .. table.concat(target, ":") + else + target = table.concat(target, ":") + end + end + if not title then + self:write_raw("[[", target:lower(), "|", target, "]]") + return + end + target = target:lower() + if type(title) == "string" then + self:write_raw("[[", target, "|", title, "]]") + return self + end + self:write_raw("[[", target, "|") + title(self) + self:write_raw("]]") + return self + end, + + write_graph = function(self, tbl) + self:write_raw("\n") + self:write_raw("digraph ", tbl.type, " {\n") + + for k, v in pairs(tbl.attrs or {}) do + self:write_raw(" ", k, " = \"", v, "\"\n") + end + + local write_node = function(nname, attrs) + self:write_raw(" ", nname, " [") + local first = true + for k, v in pairs(attrs) do + if not first then + self:write_raw(", ") + end + self:write_raw(k, " = \"", v, "\"") + first = false + end + self:write_raw("]\n") + end + + if tbl.node then + self:write_nl() + write_node("node", tbl.node) + end + if tbl.edge then + if not tbl.node then self:write_nl() end + write_node("edge", tbl.edge) + end + + self:write_nl() + for i, v in ipairs(tbl.nodes) do + local nname = v.name + v.name = nil + write_node(nname, v) + end + + self:write_nl() + for i, v in ipairs(tbl.connections) do + local from, to, sep = v[1], v[2], (v[3] or "->") + if type(from) == "table" then + self:write_raw(" {", table.concat(from, ", "), "}") + else + self:write_raw(" ", from) + end + self:write_raw(" ", sep, " ") + if type(to) == "table" then + self:write_raw("{", table.concat(to, ", "), "}") + else + self:write_raw(to) + end + self:write_nl() + end + + self:write_raw("}\n") + end, + + write_table = function(self, titles, tbl) + self:write_raw("^ ", table.concat(titles, " ^ "), " ^\n") + for i, v in ipairs(tbl) do + self:write_raw("| ", table.concat(v, " | "), " |\n") + end + return self + end, + + write_list = function(self, tbl, ord) + local prec = ord and "-" or "*" + for i, v in ipairs(tbl) do + local lvl, str = 1, v + if type(v) == "table" then + lvl, str = v[1] + 1, v[2] + end + local pbeg, pend = str:match("([^\n]+)\n(.+)") + if not pbeg then + pbeg = str + end + self:write_raw((" "):rep(lvl), prec, " ", str, "\n") + if pend then + self:write_raw(pend, "\n") + end + end + return self + end, + + write_par_markup = function(self, str) + self:write_raw("%%") + local f = str:gmatch(".") + local c = f() + while c do + if c == "\\" then + c = f() + if c ~= "@" and c ~= "$" then + self:write_raw("\\") + end + self:write_raw(c) + c = f() + elseif c == "$" then + c = f() + if c and c:match("[a-zA-Z_]") then + local wbuf = { c } + c = f() + while c and c:match("[a-zA-Z0-9_]") do + wbuf[#wbuf + 1] = c + c = f() + end + self:write_raw("%%''" .. table.concat(wbuf) .. "''%%") + else + self:write_raw("$") + end + elseif c == "@" then + c = f() + if c and c:match("[a-zA-Z_]") then + local rbuf = { c } + c = f() + while c and c:match("[a-zA-Z0-9_.]") do + rbuf[#rbuf + 1] = c + c = f() + end + local ldot = false + if rbuf[#rbuf] == "." then + ldot = true + rbuf[#rbuf] = nil + end + local title = table.concat(rbuf) + self:write_raw("%%") + self:write_link(eomap.gen_nsp_ref(title, true), title) + self:write_raw("%%") + if ldot then + self:write_raw(".") + end + else + self:write_raw("@") + end + elseif c == "%" then + c = f() + if c == "%" then + c = f() + self:write_raw("%%%%%%") + else + self:write_raw("%") + end + else + self:write_raw(c) + c = f() + end + end + self:write_raw("%%") + return self + end, + + write_par = function(self, str) + local notetypes = use_notes and { + ["Note: "] = "\n", + ["Warning: "] = "\n", + ["Remark: "] = "\n", + ["TODO: "] = "\n**TODO:** " + } or {} + local tag + for k, v in pairs(notetypes) do + if str:match("^" .. k) then + tag = v + str = str:sub(#k + 1) + break + end + end + if tag then + self:write_raw(tag) + self:write_par_markup(str) + self:write_raw("\n") + else + self:write_par_markup(str) + end + return self + end, + + finish = function(self) + self.file:close() + end +} + +M.Buffer = M.Writer:clone { + __ctor = function(self) + self.buf = {} + end, + + write_raw = function(self, ...) + for i, v in ipairs({ ... }) do + self.buf[#self.buf + 1] = v + end + return self + end, + + finish = function(self) + self.result = table.concat(self.buf) + self.buf = {} + return self.result + end +} + +M.init = function(root_ns, notes) + root_nspace = root_ns + use_notes = notes +end + +return M diff --git a/src/scripts/elua/apps/gendoc.lua b/src/scripts/elua/apps/gendoc.lua index 75fa9e82fe..b8caa7a9ea 100644 --- a/src/scripts/elua/apps/gendoc.lua +++ b/src/scripts/elua/apps/gendoc.lua @@ -1,383 +1,12 @@ local eolian = require("eolian") local getopt = require("getopt") -local cutil = require("cutil") -local util = require("util") -local ffi = require("ffi") local eomap = require("docgen.mappings") local stats = require("docgen.stats") +local dutil = require("docgen.util") +local writer = require("docgen.writer") -local global_opts = {} - --- utils - -local path_sep, rep_sep = "/", "\\" -if ffi.os == "Windows" then - path_sep, rep_sep = rep_sep, path_sep -end - -local path_join = function(...) - return table.concat({ ... }, path_sep):gsub(rep_sep, path_sep) -end - -local path_to_nspace = function(p) - return p:gsub(rep_sep, ":"):gsub(path_sep, ":"):lower() -end - -local nspace_to_path = function(ns) - return ns:gsub(":", path_sep):gsub(rep_sep, path_sep):lower() -end - -local make_page = function(path) - return path_join(global_opts.doc_root, path .. ".txt") -end - -local mkdir_r = function(dirn) - local dr = global_opts.doc_root - assert(cutil.file_mkpath(dirn and path_join(dr, dirn) or dr)) -end - -local mkdir_p = function(path) - mkdir_r(path:match("(.+)" .. path_sep .. "([^" .. path_sep .. "]+)")) -end - -local str_split = function(str, delim) - if not str then - return nil - end - local s, e = str:find(delim, 1, true) - if not s then - return { str } - end - local t = {} - while s do - t[#t + 1] = str:sub(1, s - 1) - str = str:sub(e + 1) - s, e = str:find(delim, 1, true) - if not s then - t[#t + 1] = str - end - end - return t -end - --- generator - -local Writer = util.Object:clone { - __ctor = function(self, path) - local subs - if type(path) == "table" then - subs = path_join(unpack(path)) - else - subs = nspace_to_path(path) - end - mkdir_p(subs) - self.file = assert(io.open(make_page(subs), "w")) - end, - - write_raw = function(self, ...) - self.file:write(...) - return self - end, - - write_nl = function(self, n) - self:write_raw(("\n"):rep(n or 1)) - return self - end, - - write_h = function(self, heading, level, nonl) - local s = ("="):rep(7 - level) - self:write_raw(s, " ", heading, " ", s, "\n") - if not nonl then - self:write_nl() - end - return self - end, - - write_fmt = function(self, fmt1, fmt2, ...) - self:write_raw(fmt1, ...) - self:write_raw(fmt2) - return self - end, - - write_b = function(self, ...) - self:write_fmt("**", "**", ...) - return self - end, - - write_i = function(self, ...) - self:write_fmt("//", "//", ...) - return self - end, - - write_u = function(self, ...) - self:write_fmt("__", "__", ...) - return self - end, - - write_s = function(self, ...) - self:write_fmt("", "", ...) - return self - end, - - write_m = function(self, ...) - self:write_fmt("''", "''", ...) - return self - end, - - write_sub = function(self, ...) - self:write_fmt("", "", ...) - return self - end, - - write_sup = function(self, ...) - self:write_fmt("", "", ...) - return self - end, - - write_br = function(self, nl) - self:write_raw("\\\\", nl and "\n" or " ") - return self - end, - - write_pre_inline = function(self, ...) - self:write_fmt("%%", "%%", ...) - return self - end, - - write_pre = function(self, ...) - self:write_fmt("\n", "\n", ...) - return self - end, - - write_code = function(self, str, lang) - lang = lang and (" " .. lang) or "" - self:write_raw("\n", str, "\n\n") - end, - - write_link = function(self, target, title) - if type(target) == "table" then - if target[#target] == true then - target[#target] = nil - target = ":" .. global_opts.root_nspace .. ":" - .. table.concat(target, ":") - else - target = table.concat(target, ":") - end - end - if not title then - self:write_raw("[[", target:lower(), "|", target, "]]") - return - end - target = target:lower() - if type(title) == "string" then - self:write_raw("[[", target, "|", title, "]]") - return self - end - self:write_raw("[[", target, "|") - title(self) - self:write_raw("]]") - return self - end, - - write_graph = function(self, tbl) - self:write_raw("\n") - self:write_raw("digraph ", tbl.type, " {\n") - - for k, v in pairs(tbl.attrs or {}) do - self:write_raw(" ", k, " = \"", v, "\"\n") - end - - local write_node = function(nname, attrs) - self:write_raw(" ", nname, " [") - local first = true - for k, v in pairs(attrs) do - if not first then - self:write_raw(", ") - end - self:write_raw(k, " = \"", v, "\"") - first = false - end - self:write_raw("]\n") - end - - if tbl.node then - self:write_nl() - write_node("node", tbl.node) - end - if tbl.edge then - if not tbl.node then self:write_nl() end - write_node("edge", tbl.edge) - end - - self:write_nl() - for i, v in ipairs(tbl.nodes) do - local nname = v.name - v.name = nil - write_node(nname, v) - end - - self:write_nl() - for i, v in ipairs(tbl.connections) do - local from, to, sep = v[1], v[2], (v[3] or "->") - if type(from) == "table" then - self:write_raw(" {", table.concat(from, ", "), "}") - else - self:write_raw(" ", from) - end - self:write_raw(" ", sep, " ") - if type(to) == "table" then - self:write_raw("{", table.concat(to, ", "), "}") - else - self:write_raw(to) - end - self:write_nl() - end - - self:write_raw("}\n") - end, - - write_table = function(self, titles, tbl) - self:write_raw("^ ", table.concat(titles, " ^ "), " ^\n") - for i, v in ipairs(tbl) do - self:write_raw("| ", table.concat(v, " | "), " |\n") - end - return self - end, - - write_list = function(self, tbl, ord) - local prec = ord and "-" or "*" - for i, v in ipairs(tbl) do - local lvl, str = 1, v - if type(v) == "table" then - lvl, str = v[1] + 1, v[2] - end - local pbeg, pend = str:match("([^\n]+)\n(.+)") - if not pbeg then - pbeg = str - end - self:write_raw((" "):rep(lvl), prec, " ", str, "\n") - if pend then - self:write_raw(pend, "\n") - end - end - return self - end, - - write_par_markup = function(self, str) - self:write_raw("%%") - local f = str:gmatch(".") - local c = f() - while c do - if c == "\\" then - c = f() - if c ~= "@" and c ~= "$" then - self:write_raw("\\") - end - self:write_raw(c) - c = f() - elseif c == "$" then - c = f() - if c and c:match("[a-zA-Z_]") then - local wbuf = { c } - c = f() - while c and c:match("[a-zA-Z0-9_]") do - wbuf[#wbuf + 1] = c - c = f() - end - self:write_raw("%%''" .. table.concat(wbuf) .. "''%%") - else - self:write_raw("$") - end - elseif c == "@" then - c = f() - if c and c:match("[a-zA-Z_]") then - local rbuf = { c } - c = f() - while c and c:match("[a-zA-Z0-9_.]") do - rbuf[#rbuf + 1] = c - c = f() - end - local ldot = false - if rbuf[#rbuf] == "." then - ldot = true - rbuf[#rbuf] = nil - end - local title = table.concat(rbuf) - self:write_raw("%%") - self:write_link(eomap.gen_nsp_ref(title, true), title) - self:write_raw("%%") - if ldot then - self:write_raw(".") - end - else - self:write_raw("@") - end - elseif c == "%" then - c = f() - if c == "%" then - c = f() - self:write_raw("%%%%%%") - else - self:write_raw("%") - end - else - self:write_raw(c) - c = f() - end - end - self:write_raw("%%") - return self - end, - - write_par = function(self, str) - local notetypes = global_opts.use_notes and { - ["Note: "] = "\n", - ["Warning: "] = "\n", - ["Remark: "] = "\n", - ["TODO: "] = "\n**TODO:** " - } or {} - local tag - for k, v in pairs(notetypes) do - if str:match("^" .. k) then - tag = v - str = str:sub(#k + 1) - break - end - end - if tag then - self:write_raw(tag) - self:write_par_markup(str) - self:write_raw("\n") - else - self:write_par_markup(str) - end - return self - end, - - finish = function(self) - self.file:close() - end -} - -local Buffer = Writer:clone { - __ctor = function(self) - self.buf = {} - end, - - write_raw = function(self, ...) - for i, v in ipairs({ ... }) do - self.buf[#self.buf + 1] = v - end - return self - end, - - finish = function(self) - self.result = table.concat(self.buf) - self.buf = {} - return self.result - end -} +local use_dot -- keyword reference @@ -394,7 +23,7 @@ end local build_reflist = function() for lang, rfs in pairs(key_refs) do - local f = Writer({ "ref", lang, "keyword-list" }) + local f = writer.Writer({ "ref", lang, "keyword-list" }) local arr = {} for refn, v in pairs(rfs) do arr[#arr + 1] = refn @@ -625,9 +254,9 @@ local gen_doc_refd = function(str) if not str then return nil end - local pars = str_split(str, "\n\n") + local pars = dutil.str_split(str, "\n\n") for i = 1, #pars do - pars[i] = Buffer():write_par(pars[i]):finish() + pars[i] = writer.Buffer():write_par(pars[i]):finish() end return table.concat(pars, "\n\n") end @@ -1000,7 +629,7 @@ local build_reftable = function(f, title, ctitle, ctype, t) local nt = {} for i, v in ipairs(t) do nt[#nt + 1] = { - Buffer():write_link(eomap.gen_nsp_eo(v, ctype, true), + writer.Buffer():write_link(eomap.gen_nsp_eo(v, ctype, true), v:full_name_get()):finish(), get_brief_doc(v:documentation_get()) } @@ -1018,7 +647,7 @@ local build_functable = function(f, title, ctitle, cl, tp) f:write_h(title, 3) local nt = {} for i, v in ipairs(t) do - local lbuf = Buffer() + local lbuf = writer.Buffer() lbuf:write_link(eomap.gen_nsp_func(v, cl, true), v:name_get()) local pt = propt_to_type[v:type_get()] if pt then @@ -1040,7 +669,7 @@ local build_functable = function(f, title, ctitle, cl, tp) end local build_ref = function() - local f = Writer("reference") + local f = writer.Writer("reference") f:write_h("EFL Reference", 2) local classes = {} @@ -1108,7 +737,7 @@ local build_inherits build_inherits = function(cl, t, lvl) t = t or {} lvl = lvl or 0 - local lbuf = Buffer() + local lbuf = writer.Buffer() lbuf:write_link(eomap.gen_nsp_class(cl, true), cl:full_name_get()) lbuf:write_raw(" ") lbuf:write_i("(" .. eomap.classt_to_str[cl:type_get()] .. ")") @@ -1193,7 +822,7 @@ local build_igraph = function(cl) end local build_class = function(cl) - local f = Writer(eomap.gen_nsp_class(cl)) + local f = writer.Writer(eomap.gen_nsp_class(cl)) stats.check_class(cl) f:write_h(cl:full_name_get(), 2) @@ -1202,7 +831,7 @@ local build_class = function(cl) f:write_h("Inheritance hierarchy", 3) f:write_list(build_inherits(cl)) f:write_nl() - if global_opts.use_dot then + if use_dot then f:write_graph(build_igraph(cl)) f:write_nl(2) end @@ -1222,7 +851,7 @@ local build_class = function(cl) else local nt = {} for i, ev in ipairs(evs) do - local lbuf = Buffer() + local lbuf = writer.Buffer() lbuf:write_link(eomap.gen_nsp_ev(ev, cl, true), ev:name_get()) nt[#nt + 1] = { lbuf:finish(), get_brief_doc(ev:documentation_get()) @@ -1259,7 +888,7 @@ local write_tsigs = function(f, tp) end local build_alias = function(tp) - local f = Writer(eomap.gen_nsp_eo(tp, "alias")) + local f = writer.Writer(eomap.gen_nsp_eo(tp, "alias")) stats.check_alias(tp) write_tsigs(f, tp) @@ -1272,7 +901,7 @@ local build_alias = function(tp) end local build_struct = function(tp) - local f = Writer(eomap.gen_nsp_eo(tp, "struct")) + local f = writer.Writer(eomap.gen_nsp_eo(tp, "struct")) stats.check_struct(tp) write_tsigs(f, tp) @@ -1285,7 +914,7 @@ local build_struct = function(tp) local arr = {} for fl in tp:struct_fields_get() do - local buf = Buffer() + local buf = writer.Buffer() buf:write_b(fl:name_get()) buf:write_raw(" - ", get_full_doc(fl:documentation_get())) arr[#arr + 1] = buf:finish() @@ -1297,7 +926,7 @@ local build_struct = function(tp) end local build_enum = function(tp) - local f = Writer(eomap.gen_nsp_eo(tp, "enum")) + local f = writer.Writer(eomap.gen_nsp_eo(tp, "enum")) stats.check_enum(tp) write_tsigs(f, tp) @@ -1310,7 +939,7 @@ local build_enum = function(tp) local arr = {} for fl in tp:enum_fields_get() do - local buf = Buffer() + local buf = writer.Buffer() buf:write_b(fl:name_get()) buf:write_raw(" - ", get_full_doc(fl:documentation_get())) arr[#arr + 1] = buf:finish() @@ -1322,7 +951,7 @@ local build_enum = function(tp) end local build_variable = function(v, constant) - local f = Writer(eomap.gen_nsp_eo(v, constant and "constant" or "global")) + local f = writer.Writer(eomap.gen_nsp_eo(v, constant and "constant" or "global")) if constant then stats.check_constant(v) else @@ -1359,7 +988,7 @@ end local build_parlist = function(f, pl, nodir) local params = {} for i, p in ipairs(pl) do - local buf = Buffer() + local buf = writer.Buffer() buf:write_b(p:name_get()) if not nodir then buf:write_raw(" ") @@ -1400,7 +1029,7 @@ local build_vallist = function(f, pg, ps, title) end build_method = function(fn, cl) - local f = Writer(eomap.gen_nsp_func(fn, cl)) + local f = writer.Writer(eomap.gen_nsp_func(fn, cl)) stats.check_method(fn, cl) f:write_h(cl:full_name_get() .. "." .. fn:name_get(), 2) @@ -1428,7 +1057,7 @@ build_method = function(fn, cl) end build_property = function(fn, cl) - local f = Writer(eomap.gen_nsp_func(fn, cl)) + local f = writer.Writer(eomap.gen_nsp_func(fn, cl)) local fts = eolian.function_type local ft = fn:type_get() @@ -1503,7 +1132,7 @@ build_property = function(fn, cl) end build_event = function(ev, cl) - local f = Writer(eomap.gen_nsp_ev(ev, cl)) + local f = writer.Writer(eomap.gen_nsp_ev(ev, cl)) f:write_h(cl:full_name_get() .. ": " .. ev:name_get(), 2) @@ -1572,16 +1201,17 @@ getopt.parse { if opts["h"] then return end - global_opts.verbose = not not opts["v"] - global_opts.use_dot = not opts["disable-graphviz"] - global_opts.use_notes = not opts["disable-notes"] - global_opts.root_nspace = (not opts["n"] or opts["n"] == "") + use_dot = not opts["disable-graphviz"] + local rootns = (not opts["n"] or opts["n"] == "") and "efl" or opts["n"] + local dr if not opts["r"] or opts["r"] == "" then - opts["r"] = "dokuwiki/data/pages" + dr = "dokuwiki/data/pages" + else + dr = opts["r"] end - global_opts.doc_root = path_join(opts["r"], - nspace_to_path(global_opts.root_nspace)) + dr = dutil.path_join(dr, dutil.nspace_to_path(rootns)) + dutil.init(dr) if #args == 0 then if not eolian.system_directory_scan() then error("failed scanning system directory") @@ -1599,9 +1229,10 @@ getopt.parse { if not eolian.all_eo_files_parse() then error("failed parsing eo files") end - stats.init(global_opts.verbose) - cutil.file_rmrf(path_join(global_opts.doc_root)) - mkdir_r(nil) + stats.init(not not opts["v"]) + writer.init(rootns, not opts["disable-notes"]) + dutil.rm_root() + dutil.mkdir_r(nil) build_ref() build_classes() build_typedecls() @@ -1611,4 +1242,4 @@ getopt.parse { end } -return true \ No newline at end of file +return true