docs: generate reference pages for codelink
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Fri, 19 Aug 2016 13:39:37 +0000 (14:39 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Fri, 19 Aug 2016 13:39:37 +0000 (14:39 +0100)
src/scripts/elua/apps/docgen/doctree.lua
src/scripts/elua/apps/docgen/keyref.lua
src/scripts/elua/apps/docgen/util.lua
src/scripts/elua/apps/docgen/writer.lua
src/scripts/elua/apps/gendoc.lua

index f10a819..17bac7c 100644 (file)
@@ -1008,7 +1008,7 @@ M.Typedecl = Node:clone {
         error("unhandled typedecl type: " .. tpt)
     end,
 
-    serialize_c = function(self)
+    serialize_c = function(self, ns)
         local tpt = self:type_get()
         if tpt == self.UNKNOWN then
             error("unknown typedecl: " .. self:full_name_get())
@@ -1016,7 +1016,7 @@ M.Typedecl = Node:clone {
                tpt == self.STRUCT_OPAQUE then
             local buf = { "typedef struct " }
             local fulln = self:full_name_get():gsub("%.", "_");
-            keyref.add(fulln, "c")
+            keyref.add(fulln, ns, "c")
             buf[#buf + 1] = "_" .. fulln;
             if tpt == self.STRUCT_OPAQUE then
                 buf[#buf + 1] = " " .. fulln .. ";"
@@ -1038,7 +1038,7 @@ M.Typedecl = Node:clone {
         elseif tpt == self.ENUM then
             local buf = { "typedef enum" }
             local fulln = self:full_name_get():gsub("%.", "_");
-            keyref.add(fulln, "c")
+            keyref.add(fulln, ns, "c")
             local fields = self:enum_fields_get()
             if #fields == 0 then
                 buf[#buf + 1] = " {} " .. fulln .. ";"
@@ -1049,7 +1049,7 @@ M.Typedecl = Node:clone {
                 buf[#buf + 1] = "    "
                 local cn = fld:c_name_get()
                 buf[#buf + 1] = cn
-                keyref.add(cn, "c")
+                keyref.add(cn, ns, "c")
                 local val = fld:value_get()
                 if val then
                     buf[#buf + 1] = " = "
@@ -1071,7 +1071,7 @@ M.Typedecl = Node:clone {
             return table.concat(buf)
         elseif tpt == self.ALIAS then
             local fulln = self:full_name_get():gsub("%.", "_");
-            keyref.add(fulln, "c")
+            keyref.add(fulln, ns, "c")
             return "typedef "
                 .. M.type_cstr_get(self:base_type_get(), fulln) .. ";"
         end
index c25e215..6a22ed0 100644 (file)
@@ -2,13 +2,13 @@ local M = {}
 
 local key_refs = {}
 
-M.add = function(key, lang)
+M.add = function(key, link, lang)
     local rfs = key_refs[lang]
     if not rfs then
         key_refs[lang] = {}
         rfs = key_refs[lang]
     end
-    rfs[key] = true
+    rfs[key] = link
 end
 
 M.build = function()
@@ -19,6 +19,9 @@ M.build = function()
         local arr = {}
         for refn, v in pairs(rfs) do
             arr[#arr + 1] = refn
+            local rf = writer.Writer({ "ref", lang, "key", refn })
+            v[#v + 1] = true
+            rf:write_include(rf.INCLUDE_PAGE, v)
         end
         table.sort(arr)
         f:write_raw(table.concat(arr, "\n"))
@@ -26,7 +29,8 @@ M.build = function()
         f:finish()
         local lf = writer.Writer({ "ref", lang, "keyword-link" })
         lf:write_raw("/", dutil.path_join(
-            dutil.get_root(), "ref", lang, "key", "{FNAME}"
+            dutil.nspace_to_path(dutil.get_root_ns()),
+            "ref", lang, "key", "{FNAME}"
         ))
         lf:write_nl()
         lf:finish()
index 1b2f9f2..b23afbc 100644 (file)
@@ -26,7 +26,7 @@ M.make_page = function(path)
     return M.path_join(doc_root, path .. ".txt")
 end
 
-M.get_root = function()
+M.get_root_ns = function()
     return root_ns
 end
 
@@ -64,7 +64,7 @@ end
 
 M.init = function(root, rns)
     doc_root = root:gsub(rep_sep, path_sep)
-    root_ns = rns:gsub(rep_sep, path_sep)
+    root_ns = rns
 end
 
 return M
index de69667..0bfacb7 100644 (file)
@@ -85,6 +85,15 @@ M.Writer = util.Object:clone {
             [self.INCLUDE_NAMESPACE] = "namespace",
             [self.INCLUDE_TAG] = "tagtopic"
         }
+        if type(name) == "table" then
+            if name[#name] == true then
+                name[#name] = nil
+                name = ":" .. root_nspace .. ":"
+                           .. table.concat(name, ":")
+            else
+                name = table.concat(name, ":")
+            end
+        end
         self:write_raw("{{", it_to_tp[tp], ">", name);
         if flags then
             if tp == self.INCLUDE_SECTION and flags.section then
index a0109af..44aea0b 100644 (file)
@@ -31,12 +31,12 @@ local get_func_csig_part = function(cn, tp)
     return dtree.type_cstr_get(tp, cn)
 end
 
-local gen_func_csig = function(f, ftype)
+local gen_func_csig = function(f, ns, ftype)
     ftype = ftype or f.METHOD
     assert(ftype ~= f.PROPERTY)
 
     local cn = f:full_c_name_get(ftype)
-    keyref.add(cn, "c")
+    keyref.add(cn, ns, "c")
     local rtype = f:return_type_get(ftype)
 
     local fparam = "Eo *obj"
@@ -688,11 +688,12 @@ local build_igraph = function(cl)
 end
 
 local build_class = function(cl)
-    local f = writer.Writer(cl:nspaces_get())
+    local cln = cl:nspaces_get()
+    local f = writer.Writer(cln)
     stats.check_class(cl)
 
     f:write_h(cl:full_name_get(), 2)
-    keyref.add(cl:full_name_get():gsub("%.", "_"), "c")
+    keyref.add(cl:full_name_get():gsub("%.", "_"), cln, "c")
 
     f:write_folded("Inheritance graph", function()
         f:write_graph(build_igraph(cl))
@@ -743,7 +744,7 @@ local build_classes = function()
     end
 end
 
-local write_tsigs = function(f, tp)
+local write_tsigs = function(f, tp, ns)
     f:write_h(tp:full_name_get(), 2)
 
     f:write_h("Signature", 3)
@@ -751,15 +752,16 @@ local write_tsigs = function(f, tp)
     f:write_nl()
 
     f:write_h("C signature", 3)
-    f:write_code(tp:serialize_c(), "c")
+    f:write_code(tp:serialize_c(ns), "c")
     f:write_nl()
 end
 
 local build_alias = function(tp)
-    local f = writer.Writer(dtree.Node.nspaces_get(tp, "alias"))
+    local ns = dtree.Node.nspaces_get(tp, "alias")
+    local f = writer.Writer(ns)
     stats.check_alias(tp)
 
-    write_tsigs(f, tp)
+    write_tsigs(f, tp, ns)
 
     f:write_h("Description", 3)
     f:write_raw(tp:doc_get():full_get(nil, true))
@@ -769,10 +771,11 @@ local build_alias = function(tp)
 end
 
 local build_struct = function(tp)
-    local f = writer.Writer(dtree.Node.nspaces_get(tp, "struct"))
+    local ns = dtree.Node.nspaces_get(tp, "struct")
+    local f = writer.Writer(ns)
     stats.check_struct(tp)
 
-    write_tsigs(f, tp)
+    write_tsigs(f, tp, ns)
 
     f:write_h("Description", 3)
     f:write_raw(tp:doc_get():full_get(nil, true))
@@ -794,10 +797,11 @@ local build_struct = function(tp)
 end
 
 local build_enum = function(tp)
-    local f = writer.Writer(dtree.Node.nspaces_get(tp, "enum"))
+    local ns = dtree.Node.nspaces_get(tp, "enum")
+    local f = writer.Writer(ns)
     stats.check_enum(tp)
 
-    write_tsigs(f, tp)
+    write_tsigs(f, tp, ns)
 
     f:write_h("Description", 3)
     f:write_raw(tp:doc_get():full_get(nil, true))
@@ -897,7 +901,8 @@ local build_vallist = function(f, pg, ps, title)
 end
 
 build_method = function(fn, cl)
-    local f = writer.Writer(fn:nspaces_get(cl))
+    local mns = fn:nspaces_get(cl)
+    local f = writer.Writer(mns)
     stats.check_method(fn, cl)
 
     f:write_h(cl:full_name_get() .. "." .. fn:name_get(), 2)
@@ -907,7 +912,7 @@ build_method = function(fn, cl)
     f:write_nl()
 
     f:write_h("C signature", 3)
-    f:write_code(gen_func_csig(fn), "c")
+    f:write_code(gen_func_csig(fn, mns), "c")
     f:write_nl()
 
     local pars = fn:parameters_get()
@@ -925,7 +930,8 @@ build_method = function(fn, cl)
 end
 
 build_property = function(fn, cl)
-    local f = writer.Writer(fn:nspaces_get(cl))
+    local pns = fn:nspaces_get(cl)
+    local f = writer.Writer(pns)
 
     local ft = fn:type_get()
     local isget = (ft == fn.PROP_GET or ft == fn.PROPERTY)
@@ -947,10 +953,10 @@ build_property = function(fn, cl)
     f:write_h("C signature", 3)
     local codes = {}
     if isget then
-        codes[#codes + 1] = gen_func_csig(fn, fn.PROP_GET)
+        codes[#codes + 1] = gen_func_csig(fn, pns, fn.PROP_GET)
     end
     if isset then
-        codes[#codes + 1] = gen_func_csig(fn, fn.PROP_SET)
+        codes[#codes + 1] = gen_func_csig(fn, pns, fn.PROP_SET)
     end
     f:write_code(table.concat(codes, "\n"), "c")
     f:write_nl()
@@ -999,7 +1005,8 @@ build_property = function(fn, cl)
 end
 
 build_event = function(ev, cl)
-    local f = writer.Writer(ev:nspaces_get(cl))
+    local evn = ev:nspaces_get(cl)
+    local f = writer.Writer(evn)
 
     f:write_h(cl:full_name_get() .. ": " .. ev:name_get(), 2)
 
@@ -1034,7 +1041,7 @@ build_event = function(ev, cl)
 
     f:write_h("C signature", 3)
     local cn = ev:c_name_get()
-    keyref.add(cn, "c")
+    keyref.add(cn, evn, "c")
     f:write_code(dtree.type_cstr_get(etp, cn) .. ";", "c")
     f:write_nl()
 
@@ -1085,9 +1092,8 @@ getopt.parse {
         else
             dr = opts["r"]
         end
-        local pns = dutil.nspace_to_path(rootns)
-        dr = dutil.path_join(dr, pns)
-        dutil.init(dr, pns)
+        dr = dutil.path_join(dr, dutil.nspace_to_path(rootns))
+        dutil.init(dr, rootns)
         if #args == 0 then
             dtree.scan_directory()
         else