UVLDoc: Rendering optimizations and CSS style
[project/luci.git] / libs / uvldoc / luasrc / uvldoc / renderer.lua
index 5fce5ec..d005ba3 100644 (file)
@@ -20,14 +20,15 @@ local util = require "luci.util"
 local ltn12 = require "luci.ltn12"
 local template = require "luci.template"
 
-local ipairs = ipairs
+local ipairs, getfenv, pairs, require, unpack = ipairs, getfenv, pairs, require, unpack
+local luci = luci
 
 module "luci.uvldoc.renderer"
 
 
 Generator = util.class()
 
-function Generator.__init__(self, schemes, output)
+function Generator.__init__(self, schemes, output, uvlpath)
        self.names   = schemes
        self.output  = output or "doc"
        self.schemes = {}
@@ -47,16 +48,27 @@ function Generator.make(self)
        fs.mkdir(self.output)
 
        for i, file in ipairs(self.additionals) do
-               fs.copy(self.sourcedir .. file, self.output)
+               fs.copy(self.sourcedir .. file, self.output .. "/" .. file)
        end
 
        template.compiler_mode = "memory"
        template.viewdir = self.sourcedir
+       template.context.viewns = {
+               include = function(name) template.Template(name):render(getfenv(2)) end,
+               pairs = pairs,
+               ipairs = ipairs,
+               unpack = unpack,
+               luci = luci,
+               require = require
+       }
 
        self:_make_index()
 
-       for scheme, file in util.kspairs(self.schemes) do
+       for scheme, package in pairs(self.schemes) do
                self:_make_package(scheme)
+               for type, section in pairs(package.sections) do
+                       self:_make_section(scheme, type)
+               end
        end
 end
 
@@ -78,6 +90,18 @@ function Generator._make_package(self, scheme)
        sink()
 end
 
+function Generator._make_section(self, scheme, section)
+       local t = template.Template("section.xml")
+       local sink = ltn12.sink.file(
+               io.open(self.output .. "/" .. self:_section_filename(scheme, section), "w")
+       )
+       local pkg = self.schemes[scheme]
+       t:render({self = self, package = pkg,
+               scheme = scheme, type=section, section=pkg.sections[section],
+               write = sink})
+       sink()
+end
+
 function Generator._index_filename(self)
        return "index%s" % self.extension
 end
@@ -85,3 +109,16 @@ end
 function Generator._scheme_filename(self, scheme)
        return "scheme.%s%s" % {scheme, self.extension}
 end
+
+function Generator._section_filename(self, scheme, section)
+       if self.schemes[scheme] and self.schemes[scheme].sections[section] then
+               return "section.%s.%s%s" % {scheme, section, self.extension}
+       end
+end
+
+function Generator._variable_target(self, scheme, section, variable)
+       if self.schemes[scheme] and self.schemes[scheme].variables[section] and
+        self.schemes[scheme].variables[section][variable] then
+               return "section.%s.%s%s#variable.%s" % {scheme, section, self.extension, variable}
+       end
+end
\ No newline at end of file