2 LuCI - Lua Configuration Interface
4 Copyright 2008 Steven Barth <steven@midlink.org>
5 Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
11 http://www.apache.org/licenses/LICENSE-2.0
16 local io = require "io"
17 local fs = require "luci.fs"
18 local uvl = require "luci.uvl"
19 local util = require "luci.util"
20 local ltn12 = require "luci.ltn12"
21 local template = require "luci.template"
23 local ipairs, getfenv, pairs, require = ipairs, getfenv, pairs, require
26 module "luci.uvldoc.renderer"
29 Generator = util.class()
31 function Generator.__init__(self, schemes, output)
33 self.output = output or "doc"
37 self.extension = ".xml"
38 self.additionals = {"uvldoc.css"}
39 self.sourcedir = util.libpath() .. "/uvldoc/proto/xhtml/"
43 function Generator.make(self)
44 for i, scheme in ipairs(self.names) do
45 self.schemes[scheme] = self.uvl:get_scheme(scheme)
50 for i, file in ipairs(self.additionals) do
51 fs.copy(self.sourcedir .. file, self.output)
54 template.compiler_mode = "memory"
55 template.viewdir = self.sourcedir
56 template.context.viewns = {
57 include = function(name) template.Template(name):render(getfenv(2)) end,
64 for scheme, package in pairs(self.schemes) do
65 self:_make_package(scheme)
66 for type, section in pairs(package.sections) do
67 self:_make_section(scheme, type)
72 function Generator._make_index(self)
73 local t = template.Template("index.xml")
74 local sink = ltn12.sink.file(
75 io.open(self.output .. "/" .. self:_index_filename(), "w")
77 t:render({self = self, write = sink})
81 function Generator._make_package(self, scheme)
82 local t = template.Template("scheme.xml")
83 local sink = ltn12.sink.file(
84 io.open(self.output .. "/" .. self:_scheme_filename(scheme), "w")
86 t:render({self = self, package = self.schemes[scheme], scheme = scheme, write = sink})
90 function Generator._make_section(self, scheme, section)
91 local t = template.Template("section.xml")
92 local sink = ltn12.sink.file(
93 io.open(self.output .. "/" .. self:_section_filename(scheme, section), "w")
95 local pkg = self.schemes[scheme]
96 t:render({self = self, package = pkg,
97 scheme = scheme, type=section, section=pkg.sections[section],
102 function Generator._index_filename(self)
103 return "index%s" % self.extension
106 function Generator._scheme_filename(self, scheme)
107 return "scheme.%s%s" % {scheme, self.extension}
110 function Generator._section_filename(self, scheme, section)
111 return "section.%s.%s%s" % {scheme, section, self.extension}