libs: drop uvl and uvldoc
authorJo-Philipp Wich <jow@openwrt.org>
Sun, 2 Jan 2011 19:26:37 +0000 (19:26 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sun, 2 Jan 2011 19:26:37 +0000 (19:26 +0000)
18 files changed:
libs/uvl/Makefile [deleted file]
libs/uvl/luasrc/uvl.lua [deleted file]
libs/uvl/luasrc/uvl/datatypes.lua [deleted file]
libs/uvl/luasrc/uvl/dependencies.lua [deleted file]
libs/uvl/luasrc/uvl/errors.lua [deleted file]
libs/uvl/luasrc/uvl/validation.lua [deleted file]
libs/uvl/root/lib/uci/schema/meta/schema [deleted file]
libs/uvl/root/usr/bin/uvl [deleted file]
libs/uvl/root/usr/bin/uvlc [deleted file]
libs/uvldoc/Makefile [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/footer.xml [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/header.xml [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/index.xml [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/menu.xml [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/scheme.xml [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/section.xml [deleted file]
libs/uvldoc/luasrc/uvldoc/proto/xhtml/uvldoc.css [deleted file]
libs/uvldoc/luasrc/uvldoc/renderer.lua [deleted file]

diff --git a/libs/uvl/Makefile b/libs/uvl/Makefile
deleted file mode 100644 (file)
index f7fac77..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-include ../../build/config.mk
-include ../../build/module.mk
diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua
deleted file mode 100644 (file)
index d2ea4bd..0000000
+++ /dev/null
@@ -1,1213 +0,0 @@
---[[
-
-UCI Validation Layer - Main Library
-(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-(c) 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-               http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
-]]--
-
-
---- UVL - UCI Validation Layer
--- @class      module
--- @cstyle     instance
-
-local fs = require "nixio.fs"
-local uci = require "luci.model.uci"
-local util = require "luci.util"
-local nutil = require "nixio.util"
-local table = require "table"
-local string = require "string"
-
-local require, pcall, ipairs, pairs = require, pcall, ipairs, pairs
-local type, error, tonumber, tostring = type, error, tonumber, tostring
-local unpack, loadfile, collectgarbage = unpack, loadfile, collectgarbage
-
-module "luci.uvl"
-
-local ERR = require "luci.uvl.errors".error
-local datatypes = require "luci.uvl.datatypes"
-local validation = require "luci.uvl.validation"
-local dependencies = require "luci.uvl.dependencies"
-
-local TYPE_SCHEME   = 0x00
-local TYPE_CONFIG   = 0x01
-local TYPE_SECTION  = 0x02
-local TYPE_OPTION   = 0x03
-local TYPE_ENUM     = 0x04
-
-local PAT_EXPR1                = "^%$?[%w_]+$"
-local PAT_EXPR2                = "^%$?[%w_]+%.%$?[%w_]+$"
-local PAT_EXPR3                = "^%$?[%w_]+%.%$?[%w_]+%.%$?[%w_]+$"
-
---- Boolean; default true;
--- treat sections found in config but not in scheme as error
-STRICT_UNKNOWN_SECTIONS    = true
-
---- Boolean; default true;
--- treat options found in config but not in scheme as error
-STRICT_UNKNOWN_OPTIONS     = true
-
---- Boolean; default true;
--- treat failed external validators as error
-STRICT_EXTERNAL_VALIDATORS = true
-
---- Boolean; default true;
--- treat list values stored as options like errors
-STRICT_LIST_TYPE           = true
-
-
-local default_schemedir = "/lib/uci/schema"
-local default_savedir = "/tmp/.uvl"
-
-
---- Object constructor
--- @class                      function
--- @name                       UVL
--- @param schemedir    Path to the scheme directory (optional)
--- @param configdir    Override config directory (optional)
--- @return                     Instance object
-UVL = util.class()
-
-function UVL.__init__( self, schemedir, configdir )
-       self.schemedir  = schemedir or default_schemedir
-       self.configdir  = configdir
-       self.packages   = { }
-       self.beenthere  = { }
-       self.depseen    = { }
-       self.uci                = uci
-       self.err                = ERR
-       self.dep                = dependencies
-       self.datatypes  = datatypes
-end
-
-
---- Parse given scheme and return the scheme tree.
--- @param scheme       Name of the scheme to parse
--- @return                     Table containing the parsed scheme or nil on error
--- @return                     String containing the reason for errors (if any)
-function UVL.get_scheme( self, scheme )
-       if not self.packages[scheme] then
-               local ok, err = self:read_scheme( scheme )
-               if not ok then
-                       return nil, err
-               end
-       end
-       return self.packages[scheme], nil
-end
-
---- Validate given configuration, section or option.
--- @param config       Name of the configuration to validate
--- @param section      Name of the section to validate (optional)
--- @param option       Name of the option to validate (optional)
--- @return                     Boolean indicating whether the given config validates
--- @return                     String containing the reason for errors (if any)
-function UVL.validate( self, config, section, option )
-       if config and section and option then
-               return self:validate_option( config, section, option )
-       elseif config and section then
-               return self:validate_section( config, section )
-       elseif config then
-               return self:validate_config( config )
-       end
-end
-
---- Validate given configuration.
--- @param cfg  Name of the configuration to validate
--- @return                     Boolean indicating whether the given config validates
--- @return                     String containing the reason for errors (if any)
-function UVL.validate_config( self, cfg, uci )
-
-       if not self.packages[cfg] then
-               local ok, err = self:read_scheme(cfg)
-               if not ok then
-                       return false, err
-               end
-       end
-
-       local co = config( self, uci or cfg, uci and cfg )
-       local sc = { }
-
-       self.beenthere = { }
-       self.depseen   = { }
-
-       if not co:config() then
-               return false, co:errors()
-       end
-
-       local function _uci_foreach( type, func )
-               for k, v in pairs(co:config()) do
-                       if v['.type'] == type then
-                               sc[type] = sc[type] + 1
-                               local ok, err = func( k, v )
-                               if not ok then co:error(err) end
-                       end
-               end
-       end
-
-       for k, v in pairs( self.packages[cfg].sections ) do
-               sc[k] = 0
-               _uci_foreach( k,
-                       function(s)
-                               return self:_validate_section( co:section(s) )
-                       end
-               )
-       end
-
-       if STRICT_UNKNOWN_SECTIONS then
-               for k, v in pairs(co:config()) do
-                       local so = co:section(k)
-                       if not self.beenthere[so:cid()] then
-                               co:error(ERR('SECT_UNKNOWN', so))
-                       end
-               end
-       end
-
-       for _, k in ipairs(util.keys(sc)) do
-               local so = co:section(k)
-               if so:scheme('required') and sc[k] == 0 then
-                       co:error(ERR('SECT_REQUIRED', so))
-               elseif so:scheme('unique') and sc[k] > 1 then
-                       co:error(ERR('SECT_UNIQUE', so))
-               end
-       end
-
-       return co:ok(), co:errors()
-end
-
---- Validate given config section.
--- @param config       Name of the configuration to validate
--- @param section      Name of the section to validate
--- @return                     Boolean indicating whether the given config validates
--- @return                     String containing the reason for errors (if any)
-function UVL.validate_section( self, cfg, section, uci )
-
-       if not self.packages[cfg] then
-               local ok, err = self:read_scheme( cfg )
-               if not ok then
-                       return false, err
-               end
-       end
-
-       local co = config( self, uci or cfg, uci and cfg )
-       local so = co:section( section )
-
-       self.beenthere = { }
-       self.depseen   = { }
-
-       if not co:config() then
-               return false, co:errors()
-       end
-
-       if so:config() then
-               return self:_validate_section( so )
-       else
-               return false, ERR('SECT_NOTFOUND', so)
-       end
-end
-
---- Validate given config option.
--- @param config       Name of the configuration to validate
--- @param section      Name of the section to validate
--- @param option       Name of the option to validate
--- @return                     Boolean indicating whether the given config validates
--- @return                     String containing the reason for errors (if any)
-function UVL.validate_option( self, cfg, section, option, uci )
-
-       if not self.packages[cfg] then
-               local ok, err = self:read_scheme( cfg )
-               if not ok then
-                       return false, err
-               end
-       end
-
-       local co = config( self, uci or cfg, uci and cfg )
-       local so = co:section( section )
-       local oo = so:option( option )
-
-       if not co:config() then
-               return false, co:errors()
-       end
-
-       if so:config() and oo:config() then
-               return self:_validate_option( oo )
-       else
-               return false, ERR('OPT_NOTFOUND', oo)
-       end
-end
-
-
-function UVL._validate_section( self, section )
-
-       self.beenthere[section:cid()] = true
-
-       if section:config() then
-               if section:scheme('named') == true and
-                  section:config('.anonymous') == true
-               then
-                       return false, ERR('SECT_NAMED', section)
-               end
-
-               for _, v in ipairs(section:variables()) do
-                       local ok, err = self:_validate_option( v )
-                       if not ok and (
-                               v:scheme('required') or v:scheme('type') == "enum" or (
-                                       not err:is('DEP_NOTEQUAL') and
-                                       not err:is('DEP_NOVALUE')
-                               )
-                       ) then
-                               section:error(err)
-                       end
-               end
-
-               local ok, err = dependencies.check( self, section )
-               if not ok then
-                       section:error(err)
-               end
-       else
-               return false, ERR('SECT_NOTFOUND', section)
-       end
-
-       if STRICT_UNKNOWN_OPTIONS and not section:scheme('dynamic') then
-               for k, v in pairs(section:config()) do
-                       local oo = section:option(k)
-                       if k:byte(1) == 46 and not self.beenthere[oo:cid()] then
-                               section:error(ERR('OPT_UNKNOWN', oo))
-                       end
-               end
-       end
-
-       return section:ok(), section:errors()
-end
-
-function UVL._validate_option( self, option, nodeps )
-
-       self.beenthere[option:cid()] = true
-
-       if not option:scheme() and not option:parent():scheme('dynamic') then
-               if STRICT_UNKNOWN_OPTIONS then
-                       return false, option:error(ERR('OPT_UNKNOWN', option))
-               else
-                       return true
-               end
-
-       elseif option:scheme() then
-               if not nodeps then
-                       local ok, err = dependencies.check( self, option )
-                       if not ok then
-                               if not err:is_all(
-                                       'OPT_REQUIRED',
-                                       'DEP_NOTEQUAL',
-                                       'DEP_NOVALUE'
-                               ) then
-                                       option:error(err)
-                                       return false, option:errors()
-                               else
-                                       return true
-                               end
-                       end
-               end
-
-               if option:scheme('required') and not option:value() then
-                       return false, option:error(ERR('OPT_REQUIRED', option))
-
-               elseif option:value() then
-                       local val = option:value()
-
-                       if option:scheme('type') == "reference" or
-                          option:scheme('type') == "enum"
-                       then
-                               local scheme_values = option:scheme('values') or { }
-                               local config_values = ( type(val) == "table" and val or { val } )
-                               for _, v in ipairs(config_values) do
-                                       if not scheme_values[v] then
-                                               return false, option:error( ERR(
-                                                       'OPT_BADVALUE',
-                                                       option, { v, util.serialize_data(
-                                                               util.keys(scheme_values)
-                                                       ) }
-                                               ) )
-                                       end
-                               end
-                       elseif option:scheme('type') == "list" then
-                               if type(val) ~= "table" and STRICT_LIST_TYPE then
-                                       return false, option:error(ERR('OPT_NOTLIST', option))
-                               end
-                       end
-
-                       if option:scheme('datatype') then
-                               local dt = option:scheme('datatype')
-
-                               if self.datatypes[dt] then
-                                       val = ( type(val) == "table" and val or { val } )
-                                       for i, v in ipairs(val) do
-                                               if not self.datatypes[dt]( v ) then
-                                                       return false, option:error(
-                                                               ERR('OPT_INVVALUE', option, { v, dt })
-                                                       )
-                                               end
-                                       end
-                               else
-                                       return false, option:error(ERR('OPT_DATATYPE', option, dt))
-                               end
-                       end
-
-                       val = ( type(val) == "table" and val or { val } )
-                       for _, v in ipairs(val) do
-                               if option:scheme('minlength') then
-                                       if #v < option:scheme('minlength') then
-                                               return false, option:error(ERR('OPT_RANGE', option))
-                                       end
-                               end
-
-                               if option:scheme('maxlength') then
-                                       if #v > option:scheme('maxlength') then
-                                               return false, option:error(ERR('OPT_RANGE', option))
-                                       end
-                               end
-
-                               local w = tonumber(v)
-
-                               if option:scheme('minimum') then
-                                       if not w or w < option:scheme('minimum') then
-                                               return false, option:error(ERR('OPT_RANGE', option))
-                                       end
-                               end
-
-                               if option:scheme('maximum') then
-                                       if not w or w > option:scheme('maximum') then
-                                               return false, option:error(ERR('OPT_RANGE', option))
-                                       end
-                               end
-                       end
-               end
-
-               local ok, err = validation.check( self, option )
-               if not ok and STRICT_EXTERNAL_VALIDATORS then
-                       return false, option:error(err)
-               end
-       end
-
-       return option:ok(), option:errors()
-end
-
---- Find all parts of given scheme and construct validation tree.
--- This is normally done on demand, so you don't have to call this function
--- by yourself.
--- @param shm  Name of the scheme to parse
--- @param alias                Create an alias for the loaded scheme
-function UVL.read_scheme( self, shm, alias )
-
-       local so = scheme( self, shm )
-       local bc = "%s/bytecode/%s.lua" %{ self.schemedir, shm }
-
-       if not fs.access(bc) then
-               local files = nutil.consume((fs.glob(self.schemedir .. '/*/' .. shm)))
-
-               if #files > 0 then
-                       local ok, err
-                       for _, file in ipairs(files) do
-                               if not fs.access(file) then
-                                       return false, so:error(ERR('SME_READ', so,file))
-                               end
-
-                               local uci = uci.cursor( fs.dirname(file), default_savedir )
-
-                               local sname = fs.basename(file)
-                               local sd, err = uci:load( sname )
-
-                               if not sd then
-                                       return false, ERR('UCILOAD', so, err)
-                               end
-
-                               ok, err = pcall(function()
-                                       uci:foreach(sname, "package", function(s)
-                                               self:_parse_package(so, s[".name"], s)
-                                       end)
-                                       uci:foreach(sname, "section", function(s)
-                                               self:_parse_section(so, s[".name"], s)
-                                       end)
-                                       uci:foreach(sname, "variable", function(s)
-                                               self:_parse_var(so, s[".name"], s)
-                                       end)
-                                       uci:foreach(sname, "enum", function(s)
-                                               self:_parse_enum(so, s[".name"], s)
-                                       end)
-
-                               end)
-                       end
-
-                       if ok and alias then self.packages[alias] = self.packages[shm] end
-                       return ok and self, err
-               else
-                       return false, so:error(ERR('SME_FIND', so, self.schemedir))
-               end
-       else
-               local sc = loadfile(bc)
-               if sc then
-                       self.packages[shm] = sc()
-                       return true
-               else
-                       return false, so:error(ERR('SME_READ',so,bc))
-               end
-       end
-end
-
--- helper function to check for required fields
-local function _req( t, n, c, r )
-       for i, v in ipairs(r) do
-               if not c[v] then
-                       local p, o = scheme:sid(), nil
-
-                       if t == TYPE_SECTION then
-                               o = section( scheme, nil, p, n )
-                       elseif t == TYPE_OPTION then
-                               o = option( scheme, nil, p, '(nil)', n )
-                       elseif t == TYPE_ENUM then
-                               o = enum( scheme, nil, p, '(nil)', '(nil)', n )
-                       end
-
-                       return false, ERR('SME_REQFLD',o,v)
-               end
-       end
-       return true
-end
-
--- helper function to validate references
-local function _ref( c, t )
-       local r, k, n = {}
-       if c == TYPE_SECTION then
-               k = "package"
-               n = 1
-       elseif c == TYPE_OPTION then
-               k = "section"
-               n = 2
-       elseif c == TYPE_ENUM then
-               k = "variable"
-               n = 3
-       end
-
-       for o in t[k]:gmatch("[^.]+") do
-               r[#r+1] = o
-       end
-       r[1] = ( #r[1] > 0 and r[1] or scheme:sid() )
-
-       if #r ~= n then
-               return false, ERR('SME_BADREF', scheme, k)
-       end
-
-       return r
-end
-
--- helper function to read bools
-local function _bool( v )
-       return ( v == "true" or v == "yes" or v == "on" or v == "1" )
-end
-
--- Step 0: get package meta information
-function UVL._parse_package(self, scheme, k, v)
-       local sid = scheme:sid()
-       local pkg = self.packages[sid] or {
-               ["name"]      = sid;
-               ["sections"]  = { };
-               ["variables"] = { };
-       }
-
-       pkg.title = v.title
-       pkg.description = v.description
-
-       self.packages[sid] = pkg
-end
-
--- Step 1: get all sections
-function UVL._parse_section(self, scheme, k, v)
-       local ok, err = _req( TYPE_SECTION, k, v, { "name", "package" } )
-       if err then error(scheme:error(err)) end
-
-       local r, err = _ref( TYPE_SECTION, v )
-       if err then error(scheme:error(err)) end
-
-       local p = self.packages[r[1]] or {
-               ["name"]      = r[1];
-               ["sections"]  = { };
-               ["variables"] = { };
-       }
-       p.sections[v.name]  = p.sections[v.name]  or { }
-       p.variables[v.name] = p.variables[v.name] or { }
-       self.packages[r[1]] = p
-
-       local s  = p.sections[v.name]
-       local so = scheme:section(v.name)
-
-       for k, v2 in pairs(v) do
-               if k ~= "name" and k ~= "package" and k:byte(1) == 46 then
-                       if k == "depends" then
-                               s.depends = self:_read_dependency( v2, s.depends )
-                               if not s.depends then
-                                       return false, scheme:error(
-                                               ERR('SME_BADDEP', so, util.serialize_data(s.depends))
-                                       )
-                               end
-                       elseif k == "dynamic" or k == "unique" or
-                              k == "required" or k == "named"
-                       then
-                               s[k] = _bool(v2)
-                       else
-                               s[k] = v2
-                       end
-               end
-       end
-
-       s.dynamic  = s.dynamic  or false
-       s.unique   = s.unique   or false
-       s.required = s.required or false
-       s.named    = s.named    or false
-end
-
--- Step 2: get all variables
-function UVL._parse_var(self, scheme, k, v)
-       local ok, err = _req( TYPE_OPTION, k, v, { "name", "section" } )
-       if err then error(scheme:error(err)) end
-
-       local r, err = _ref( TYPE_OPTION, v )
-       if err then error(scheme:error(err)) end
-
-       local p = self.packages[r[1]]
-       if not p then
-               error(scheme:error(
-                       ERR('SME_VBADPACK', {scheme:sid(), '', v.name}, r[1])
-               ))
-       end
-
-       local s = p.variables[r[2]]
-       if not s then
-               error(scheme:error(
-                       ERR('SME_VBADSECT', {scheme:sid(), '', v.name}, r[2])
-               ))
-       end
-
-       s[v.name] = s[v.name] or { }
-
-       local t  = s[v.name]
-       local so = scheme:section(r[2])
-       local to = so:option(v.name)
-
-       for k, v2 in pairs(v) do
-               if k ~= "name" and k ~= "section" and k:byte(1) == 46 then
-                       if k == "depends" then
-                               t.depends = self:_read_dependency( v2, t.depends )
-                               if not t.depends then
-                                       error(scheme:error(so:error(
-                                               ERR('SME_BADDEP', to, util.serialize_data(v2))
-                                       )))
-                               end
-                       elseif k == "validator" then
-                               t.validators = self:_read_validator( v2, t.validators )
-                               if not t.validators then
-                                       error(scheme:error(so:error(
-                                               ERR('SME_BADVAL', to, util.serialize_data(v2))
-                                       )))
-                               end
-                       elseif k == "valueof" then
-                               local values, err = self:_read_reference( v2 )
-                               if err then
-                                       error(scheme:error(so:error(
-                                               ERR('REFERENCE', to, util.serialize_data(v2)):child(err)
-                                       )))
-                               end
-                               t.type   = "reference"
-                               t.values = values
-                               t.valueof = type(v2) == "table" and v2 or {v2}
-                       elseif k == "required" then
-                               t[k] = _bool(v2)
-                       elseif k == "minlength" or k == "maxlength" or
-                   k == "minimum" or k == "maximum"
-            then
-                               t[k] = tonumber(v2)
-                       else
-                               t[k] = t[k] or v2
-                       end
-               end
-       end
-
-       t.type     = t.type     or "variable"
-       t.datatype = t.datatype or "string"
-       t.required = t.required or false
-end
-
--- Step 3: get all enums
-function UVL._parse_enum(self, scheme, k, v)
-       local ok, err = _req( TYPE_ENUM, k, v, { "value", "variable" } )
-       if err then error(scheme:error(err)) end
-
-       local r, err = _ref( TYPE_ENUM, v )
-       if err then error(scheme:error(err)) end
-
-       local p = self.packages[r[1]]
-       if not p then
-               error(scheme:error(
-                       ERR('SME_EBADPACK', {scheme:sid(), '', '', v.value}, r[1])
-               ))
-       end
-
-       local s = p.variables[r[2]]
-       if not s then
-               error(scheme:error(
-                       ERR('SME_EBADSECT', {scheme:sid(), '', '', v.value}, r[2])
-               ))
-       end
-
-       local t = s[r[3]]
-       if not t then
-               error(scheme:error(
-                       ERR('SME_EBADOPT', {scheme:sid(), '', '', v.value}, r[3])
-               ))
-       end
-
-
-       local so = scheme:section(r[2])
-       local oo = so:option(r[3])
-       local eo = oo:enum(v.value)
-
-       if t.type ~= "enum" and t.type ~= "reference" then
-               error(scheme:error(ERR('SME_EBADTYPE', eo)))
-       end
-
-       if not t.values then
-               t.values = { [v.value] = v.title or v.value }
-               t.valuelist = { {value = v.value, title = v.title} }
-       else
-               t.values[v.value] = v.title or v.value
-               t.valuelist[#t.valuelist + 1] = {value = v.value, title = v.title}
-       end
-
-       if not t.enum_depends then
-               t.enum_depends = { }
-       end
-
-       if v.default then
-               if t.default then
-                       error(scheme:error(ERR('SME_EBADDEF', eo)))
-               end
-               t.default = v.value
-       end
-
-       if v.depends then
-               t.enum_depends[v.value] = self:_read_dependency(
-                       v.depends, t.enum_depends[v.value]
-               )
-
-               if not t.enum_depends[v.value] then
-                       error(scheme:error(so:error(oo:error(
-                               ERR('SME_BADDEP', eo, util.serialize_data(v.depends))
-                       ))))
-               end
-       end
-end
-
--- Read a dependency specification
-function UVL._read_dependency( self, values, deps )
-       local expr = "%$?[%w_]+"
-       if values then
-               values = ( type(values) == "table" and values or { values } )
-               for _, value in ipairs(values) do
-                       local condition = { }
-                       for val in value:gmatch("[^,]+") do
-                               local k, e, v = val:match("%s*([%w$_.]+)%s*(=?)%s*(.*)")
-
-                               if k and (
-                                       k:match(PAT_EXPR1) or k:match(PAT_EXPR2) or k:match(PAT_EXPR3)
-                               ) then
-                                       condition[k] = (e == '=') and v or true
-                               else
-                                       return nil
-                               end
-                       end
-
-                       if not deps then
-                               deps = { condition }
-                       else
-                               deps[#deps+1] = condition
-                       end
-               end
-       end
-
-       return deps
-end
-
--- Read a validator specification
-function UVL._read_validator( self, values, validators )
-       if values then
-               values = ( type(values) == "table" and values or { values } )
-               for _, value in ipairs(values) do
-                       local validator
-
-                       if value:match("^exec:") then
-                               validator = value:gsub("^exec:","")
-                       elseif value:match("^lua:") then
-                               validator = self:_resolve_function( (value:gsub("^lua:","") ) )
-                       elseif value:match("^regexp:") then
-                               local pattern = value:gsub("^regexp:","")
-                               validator = function( type, dtype, pack, sect, optn, arg1, arg2, arg3, arg4, arg5 )
-                                       local values = { arg1, arg2, arg3, arg4, arg5 }
-                                       for _, v in ipairs(values) do
-                                               local ok, match =
-                                                       pcall( string.match, v, pattern )
-
-                                               if not ok then
-                                                       return false, match
-                                               elseif not match then
-                                                       return false,
-                                                               'Value "%s" does not match pattern "%s"' % {
-                                                                       v, pattern
-                                                               }
-                                               end
-                                       end
-                                       return true
-                               end
-                       end
-
-                       if validator then
-                               if not validators then
-                                       validators = { validator }
-                               else
-                                       validators[#validators+1] = validator
-                               end
-                       else
-                               return nil
-                       end
-               end
-
-               return validators
-       end
-end
-
--- Read a reference specification (XXX: We should validate external configs too...)
-function UVL._read_reference( self, values )
-       local val = { }
-       values = ( type(values) == "table" and values or { values } )
-
-       for _, value in ipairs(values) do
-               local ref = util.split(value, ".")
-
-               if #ref == 2 or #ref == 3 then
-                       local co = config( self, ref[1] )
-                       if not co:config() then return false, co:errors() end
-
-                       for k, v in pairs(co:config()) do
-                               if v['.type'] == ref[2] then
-                                       if #ref == 2 then
-                                               if v['.anonymous'] == true then
-                                                       return false, ERR('SME_INVREF', '', value)
-                                               end
-                                               val[k] = k      -- XXX: title/description would be nice
-                                       elseif v[ref[3]] then
-                                               val[v[ref[3]]] = v[ref[3]]  -- XXX: dito
-                                       end
-                               end
-                       end
-               else
-                       return false, ERR('SME_BADREF', '', value)
-               end
-       end
-
-       return val, nil
-end
-
--- Resolve given path
-function UVL._resolve_function( self, value )
-       local path = util.split(value, ".")
-
-       for i=1, #path-1 do
-               local stat, mod = pcall(
-                       require, table.concat(path, ".", 1, i)
-               )
-
-               if stat and mod then
-                       for j=i+1, #path-1 do
-                               if not type(mod) == "table" then
-                                       break
-                               end
-                               mod = mod[path[j]]
-                               if not mod then
-                                       break
-                               end
-                       end
-                       mod = type(mod) == "table" and mod[path[#path]] or nil
-                       if type(mod) == "function" then
-                               return mod
-                       end
-               end
-       end
-end
-
-
---- Object representation of an uvl item - base class.
-uvlitem = util.class()
-
-function uvlitem.cid(self)
-       if #self.cref == 1 then
-               return self.cref[1]
-       else
-               local r = { unpack(self.cref) }
-               local c = self.c
-               if c and c[r[2]] and c[r[2]]['.anonymous'] and c[r[2]]['.index'] then
-                       r[2] = '@' .. c[r[2]]['.type'] ..
-                                  '[' .. tostring(c[r[2]]['.index']) .. ']'
-               end
-               return table.concat( r, '.' )
-       end
-end
-
-function uvlitem.sid(self)
-       return table.concat( self.sref, '.' )
-end
-
-function uvlitem.scheme(self, opt)
-       local s = self.s and self.s.packages
-       s = s      and s[self.sref[1]]
-       if #self.sref == 4 or #self.sref == 3 then
-               s = s      and s.variables
-               s = s      and s[self.sref[2]]
-               s = s      and s[self.sref[3]]
-       elseif #self.sref == 2 then
-               s = s      and s.sections
-               s = s      and s[self.sref[2]]
-       end
-
-       if s and opt then
-               return s[opt]
-       elseif s then
-               return s
-       end
-end
-
-function uvlitem.config(self, opt)
-       local c = self.c
-
-       if #self.cref >= 2 and #self.cref <= 4 then
-               c = c and self.c[self.cref[2]] or nil
-               if #self.cref >= 3 then
-                       c = c and c[self.cref[3]] or nil
-               end
-       end
-
-       if c and opt then
-               return c[opt]
-       elseif c then
-               return c
-       end
-end
-
-function uvlitem.title(self)
-       return self:scheme() and self:scheme('title') or
-               self.cref[3] or self.cref[2] or self.cref[1]
-end
-
-function uvlitem.type(self)
-       if self.t == TYPE_CONFIG then
-               return 'config'
-       elseif self.t == TYPE_SECTION then
-               return 'section'
-       elseif self.t == TYPE_OPTION then
-               return 'option'
-       elseif self.t == TYPE_ENUM then
-               return 'enum'
-       end
-end
-
-function uvlitem.error(self, arg1, arg2, arg3, arg4, arg5)
-       if not self.e then
-               local errconst = { 'CONFIG', 'SECTION', 'OPTION', 'OPTION' }
-               self.e = ERR( errconst[#self.cref], self )
-       end
-
-       return self.e:child( arg1, arg2, arg3, arg4, arg5 )
-end
-
-function uvlitem.errors(self)
-       return self.e
-end
-
-function uvlitem.ok(self)
-       return not self:errors()
-end
-
-function uvlitem.parent(self)
-       if self.p then
-               return self.p
-       elseif #self.cref == 3 or #self.cref == 4 then
-               return section( self.s, self.c, self.cref[1], self.cref[2] )
-       elseif #self.cref == 2 then
-               return config( self.s, self.c, self.cref[1] )
-       else
-               return nil
-       end
-end
-
-function uvlitem._loadconf(self, co, c, configdir)
-       co = co or self._configcache
-       if not co then
-               local err
-               co, err = uci.cursor(configdir):get_all(c)
-
-               if err then
-                       self:error(ERR('UCILOAD', self, err))
-               end
-
-               self._configcache = co
-       end
-       return co
-end
-
-
---- Object representation of a scheme.
--- @class      scheme
--- @cstyle     instance
--- @name       luci.uvl.scheme
-
---- Scheme instance constructor.
--- @class                      function
--- @name                       scheme
--- @param scheme       Scheme instance
--- @param co           Configuration data
--- @param c                    Configuration name
--- @return                     Config instance
-scheme = util.class(uvlitem)
-
-function scheme.__init__(self, scheme, co, c)
-       if not c then
-               c, co = co, nil
-       end
-
-       self.cref = { c }
-       self.sref = { c }
-       self.c    = self:_loadconf(co, c, scheme.configdir)
-       self.s    = scheme
-       self.t    = TYPE_SCHEME
-end
-
---- Add an error to scheme.
--- @return     Scheme error context
-function scheme.error(self, arg1, arg2, arg3, arg4, arg5)
-       if not self.e then self.e = ERR( 'SCHEME', self ) end
-       return self.e:child( arg1, arg2, arg3, arg4, arg5 )
-end
-
---- Get an associated config object.
--- @return     Config instance
-function scheme.config(self)
-       local co = config( self.s, self.cref[1] )
-             co.p = self
-
-       return co
-end
-
---- Get all section objects associated with this scheme.
--- @return     Table containing all associated luci.uvl.section instances
-function scheme.sections(self)
-       local v = { }
-       if self.s.packages[self.sref[1]].sections then
-               for o, _ in pairs( self.s.packages[self.sref[1]].sections ) do
-                       v[#v+1] = option(
-                               self.s, self.c, self.cref[1], self.cref[2], o
-                       )
-               end
-       end
-       return v
-end
-
---- Get an associated section object.
--- @param s    Section to select
--- @return     Section instance
-function scheme.section(self, s)
-       local so = section( self.s, self.c, self.cref[1], s )
-             so.p = self
-
-       return so
-end
-
-
---- Object representation of a config.
--- @class      config
--- @cstyle     instance
--- @name       luci.uvl.config
-
---- Config instance constructor.
--- @class                      function
--- @name                       config
--- @param scheme       Scheme instance
--- @param co           Configuration data
--- @param c                    Configuration name
--- @return                     Config instance
-config = util.class(uvlitem)
-
-function config.__init__(self, scheme, co, c)
-       if not c then
-               c, co = co, nil
-       end
-       self.cref = { c }
-       self.sref = { c }
-       self.c    = self:_loadconf(co, c, scheme.configdir)
-       self.s    = scheme
-       self.t    = TYPE_CONFIG
-end
-
---- Get all section objects associated with this config.
--- @return     Table containing all associated luci.uvl.section instances
-function config.sections(self)
-       local v = { }
-       if self.s.packages[self.sref[1]].sections then
-               for o, _ in pairs( self.s.packages[self.sref[1]].sections ) do
-                       v[#v+1] = option(
-                               self.s, self.c, self.cref[1], self.cref[2], o
-                       )
-               end
-       end
-       return v
-end
-
---- Get an associated section object.
--- @param s    Section to select
--- @return     Section instance
-function config.section(self, s)
-       local so = section( self.s, self.c, self.cref[1], s )
-             so.p = self
-
-       return so
-end
-
-
---- Object representation of a scheme/config section.
--- @class      module
--- @cstyle     instance
--- @name       luci.uvl.section
-
---- Section instance constructor.
--- @class                      function
--- @name                       section
--- @param scheme       Scheme instance
--- @param co           Configuration data
--- @param c                    Configuration name
--- @param s                    Section name
--- @return                     Section instance
-section = util.class(uvlitem)
-
-function section.__init__(self, scheme, co, c, s)
-       self.cref = { c, s }
-       self.sref = { c, co and co[s] and co[s]['.type'] or s }
-       self.c    = self:_loadconf(co, c, scheme.configdir)
-       self.s    = scheme
-       self.t    = TYPE_SECTION
-end
-
---- Get all option objects associated with this section.
--- @return     Table containing all associated luci.uvl.option instances
-function section.variables(self)
-       local v = { }
-       if self.s.packages[self.sref[1]].variables[self.sref[2]] then
-               for o, _ in pairs(
-                       self.s.packages[self.sref[1]].variables[self.sref[2]]
-               ) do
-                       v[#v+1] = option(
-                               self.s, self.c, self.cref[1], self.cref[2], o
-                       )
-               end
-       end
-       return v
-end
-
---- Get an associated option object.
--- @param o    Option to select
--- @return     Option instance
-function section.option(self, o)
-       local oo = option( self.s, self.c, self.cref[1], self.cref[2], o )
-             oo.p = self
-
-       return oo
-end
-
-
---- Object representation of a scheme/config option.
--- @class      module
--- @cstyle     instance
--- @name       luci.uvl.option
-
---- Section instance constructor.
--- @class                      function
--- @name                       option
--- @param scheme       Scheme instance
--- @param co           Configuration data
--- @param c                    Configuration name
--- @param s                    Section name
--- @param o                    Option name
--- @return                     Option instance
-option = util.class(uvlitem)
-
-function option.__init__(self, scheme, co, c, s, o)
-       self.cref = { c, s, o }
-       self.sref = { c, co and co[s] and co[s]['.type'] or s, o }
-       self.c    = self:_loadconf(co, c, scheme.configdir)
-       self.s    = scheme
-       self.t    = TYPE_OPTION
-end
-
---- Get the value of this option.
--- @return     The associated configuration value
-function option.value(self)
-       local v = self:config() or self:scheme('default')
-       if v and self:scheme('multival') then
-               v = util.split( v, "%s+", nil, true )
-       end
-       return v
-end
-
---- Get the associated section information in scheme.
--- @return     Table containing the scheme properties
-function option.section(self)
-       return self.s.packages[self.sref[1]].sections[self.sref[2]]
-end
-
---- Construct an enum object instance from given or default value.
--- @param v    Value to select
--- @return     Enum instance for selected value
-function option.enum(self, val)
-       return enum(
-               self.s, self.c,
-               self.cref[1], self.cref[2], self.cref[3],
-               val or self:value()
-       )
-end
-
-
---- Object representation of a enum value.
--- @class      module
--- @cstyle     instance
--- @name       luci.uvl.enum
-
---- Section instance constructor.
--- @class                      function
--- @name                       enum
--- @param scheme       Scheme instance
--- @param co           Configuration data
--- @param c                    Configuration name
--- @param s                    Section name
--- @param o                    Enum name
--- @param v                    Enum value
--- @return                     Enum value instance
-enum = util.class(option)
-
-function enum.__init__(self, scheme, co, c, s, o, v)
-       self.cref = { c, s, o, v }
-       self.sref = { c, co and co[s] and co[s]['.type'] or s, o, v }
-       self.c    = self:_loadconf(co, c, scheme.configdir)
-       self.s    = scheme
-       self.t    = TYPE_ENUM
-end
diff --git a/libs/uvl/luasrc/uvl/datatypes.lua b/libs/uvl/luasrc/uvl/datatypes.lua
deleted file mode 100644 (file)
index c6a5de3..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
---[[
-
-UCI Validation Layer - Datatype Tests
-(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-(c) 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
-]]--
-
-local fs = require "nixio.fs"
-local ip = require "luci.ip"
-local math = require "math"
-local util = require "luci.util"
-
-local tonumber = tonumber
-
-module "luci.uvl.datatypes"
-
-
-function boolean( val )
-       if val == "1" or val == "yes" or val == "on" or val == "true" then
-               return true
-       elseif val == "0" or val == "no" or val == "off" or val == "false" then
-               return true
-       elseif val == "" or val == nil then
-               return true
-       end
-
-       return false
-end
-
-function uint( val )
-       local n = tonumber(val)
-       if n ~= nil and math.floor(n) == n and n >= 0 then
-               return true
-       end
-
-       return false
-end
-
-function integer( val )
-       local n = tonumber(val)
-       if n ~= nil and math.floor(n) == n then
-               return true
-       end
-
-       return false
-end
-
-function float( val )
-       return ( tonumber(val) ~= nil )
-end
-
-function ipaddr( val )
-       return ip4addr(val) or ip6addr(val)
-end
-
-function ip4addr( val )
-       if val then
-               return ip.IPv4(val) and true or false
-       end
-
-       return false
-end
-
-function ip4prefix( val )
-       val = tonumber(val)
-       return ( val and val >= 0 and val <= 32 )
-end
-
-function ip6addr( val )
-       if val then
-               return ip.IPv6(val) and true or false
-       end
-
-       return false
-end
-
-function ip6prefix( val )
-       val = tonumber(val)
-       return ( val and val >= 0 and val <= 128 )
-end
-
-function port( val )
-       val = tonumber(val)
-       return ( val and val >= 1 and val <= 65535 )
-end
-
-function portrange( val )
-       local p1, p2 = val:match("^(%d+)%-(%d+)$")
-       if p1 and p2 and port(p1) and port(p2) then
-               return true
-       else
-               return port(val)
-       end
-end
-
-function macaddr( val )
-       if val and val:match(
-               "^[a-fA-F0-9]+:[a-fA-F0-9]+:[a-fA-F0-9]+:" ..
-                "[a-fA-F0-9]+:[a-fA-F0-9]+:[a-fA-F0-9]+$"
-       ) then
-               local parts = util.split( val, ":" )
-
-               for i = 1,6 do
-                       parts[i] = tonumber( parts[i], 16 )
-                       if parts[i] < 0 or parts[i] > 255 then
-                               return false
-                       end
-               end
-
-               return true
-       end
-
-       return false
-end
-
-function hostname( val )
-       if val and val:match("[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*") then
-               return true     -- XXX: ToDo: need better solution
-       end
-
-       return false
-end
-
-function host( val )
-       return hostname(val) or ipaddr(val)
-end
-
-function string( val )
-       return true             -- Everything qualifies as valid string
-end
-
-function directory( val, seen )
-       local s = fs.stat( val )
-       seen = seen or { }
-
-       if s and not seen[s.ino] then
-               seen[s.ino] = true
-               if s.type == "dir" then
-                       return true
-               elseif s.type == "lnk" then
-                       return directory( fs.readlink(val), seen )
-               end
-       end
-
-       return false
-end
-
-function file( val, seen )
-       local s = fs.stat( val )
-       seen = seen or { }
-
-       if s and not seen[s.ino] then
-               seen[s.ino] = true
-               if s.type == "reg" then
-                       return true
-               elseif s.type == "lnk" then
-                       return file( fs.readlink(val), seen )
-               end
-       end
-
-       return false
-end
-
-function device( val, seen )
-       local s = fs.stat( val )
-       seen = seen or { }
-
-       if s and not seen[s.ino] then
-               seen[s.ino] = true
-               if s.type == "chr" or s.type == "blk" then
-                       return true
-               elseif s.type == "lnk" then
-                       return device( fs.readlink(val), seen )
-               end
-       end
-
-       return false
-end
diff --git a/libs/uvl/luasrc/uvl/dependencies.lua b/libs/uvl/luasrc/uvl/dependencies.lua
deleted file mode 100644 (file)
index 33f2fad..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
---[[
-
-UCI Validation Layer - Dependency helper
-(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-(c) 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
-]]--
-
-local uvl = require "luci.uvl"
-local ERR = require "luci.uvl.errors".error
-local util = require "luci.util"
-local table = require "table"
-
-local type, unpack = type, unpack
-local ipairs, pairs = ipairs, pairs
-
-module "luci.uvl.dependencies"
-
-
-
-function _parse_reference( r, c, s, o )
-       local ref  = { }
-       local vars = {
-               config  = c,
-               section = s,
-               option  = o
-       }
-
-       for v in r:gmatch("[^.]+") do
-               ref[#ref+1] = (v:gsub( "%$(.+)", vars ))
-       end
-       
-       if #ref < 2 then
-               table.insert(ref, 1, s or '$section')
-       end
-       if #ref < 3 then
-               table.insert(ref, 1, c or '$config')
-       end
-
-       return ref
-end
-
-function _serialize_dependency( dep, v )
-       local str
-
-       for k, v in util.spairs( dep,
-               function(a,b)
-                       a = ( type(dep[a]) ~= "boolean" and "_" or "" ) .. a
-                       b = ( type(dep[b]) ~= "boolean" and "_" or "" ) .. b
-                       return a < b
-               end
-       ) do
-               str = ( str and str .. " and " or "" ) .. k ..
-                       ( type(v) ~= "boolean" and "=" .. v or "" )
-       end
-
-       return str
-end
-
-function check( self, object, nodeps )
-
-       local derr = ERR('DEPENDENCY', object)
-
-       if not self.depseen[object:cid()] then
-               self.depseen[object:cid()] = true
-       else
-               return false, derr:child(ERR('DEP_RECURSIVE', object))
-       end
-
-       if object:scheme('depends') then
-               local ok    = true
-               local valid = false
-
-               for _, dep in ipairs(object:scheme('depends')) do
-                       local subcondition = true
-                       for k, v in pairs(dep) do
-                               -- XXX: better error
-                               local ref = _parse_reference( k, unpack(object.cref) )
-
-                               if not ref then
-                                       return false, derr:child(ERR('SME_BADDEP',object,k))
-                               end
-
-                               local option = uvl.option( self, object.c, unpack(ref) )
-
-                               valid, err = self:_validate_option( option, true )
-                               if valid then
-                                       if not (
-                                               ( type(v) == "boolean" and option:value() ) or
-                                               ( ref[3] and option:value() ) == v
-                                       ) then
-                                               subcondition = false
-
-                                               local depstr = _serialize_dependency( dep, v )
-                                               derr:child(
-                                                       type(v) == "boolean"
-                                                               and ERR('DEP_NOVALUE', option, depstr)
-                                                               or  ERR('DEP_NOTEQUAL', option, {depstr, v})
-                                               )
-
-                                               break
-                                       end
-                               else
-                                       subcondition = false
-
-                                       local depstr = _serialize_dependency( dep, v )
-                                       derr:child(ERR('DEP_NOTVALID', option, depstr):child(err))
-
-                                       break
-                               end
-                       end
-
-                       if subcondition then
-                               ok = true
-                               break
-                       else
-                               ok = false
-                       end
-               end
-
-               if not ok then
-                       return false, derr
-               end
-       else
-               return true
-       end
-
-       if object:scheme("type") == "enum" and
-          object:scheme("enum_depends")[object:value()]
-       then
-               local ok    = true
-               local valid = false
-               local enum  = object:enum()
-               local eerr  = ERR('DEP_BADENUM', enum)
-
-               for _, dep in ipairs(enum:scheme('enum_depends')[object:value()]) do
-                       local subcondition = true
-                       for k, v in pairs(dep) do
-                               -- XXX: better error
-                               local ref = _parse_reference( k, unpack(object.cref) )
-
-                               if not ref then
-                                       return false, derr:child(eerr:child(ERR('SME_BADDEP',enum,k)))
-                               end
-
-                               local option = luci.uvl.option( self, object.c, unpack(ref) )
-
-                               valid, err = self:_validate_option( option, true )
-                               if valid then
-                                       if not (
-                                               ( type(v) == "boolean" and object.config[ref[2]][ref[3]] ) or
-                                               ( ref[3] and object:config() ) == v
-                                       ) then
-                                               subcondition = false
-
-                                               local depstr = _serialize_dependency( dep, v )
-                                               eerr:child(
-                                                       type(v) == "boolean"
-                                                               and ERR('DEP_NOVALUE', option, depstr)
-                                                               or  ERR('DEP_NOTEQUAL', option, {depstr, v})
-                                               )
-
-                                               break
-                                       end
-                               else
-                                       subcondition = false
-
-                                       local depstr = _serialize_dependency( dep, v )
-                                       eerr:child(ERR('DEP_NOTVALID', option, depstr):child(err))
-
-                                       break
-                               end
-                       end
-
-                       if subcondition then
-                               return true
-                       else
-                               ok = false
-                       end
-               end
-
-               if not ok then
-                       return false, derr:child(eerr)
-               end
-       end
-
-       return true
-end
diff --git a/libs/uvl/luasrc/uvl/errors.lua b/libs/uvl/luasrc/uvl/errors.lua
deleted file mode 100644 (file)
index 45f331f..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
---[[
-
-UCI Validation Layer - Error handling
-(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-(c) 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
-]]--
-
-local uci = require "luci.model.uci"
-local uvl = require "luci.uvl"
-local util = require "luci.util"
-local string = require "string"
-
-local luci, tonumber, unpack, ipairs, type =
-       luci, tonumber, unpack, ipairs, type
-
-module "luci.uvl.errors"
-
-ERRCODES = {
-       UCILOAD                 = 'Unable to load config "%p": %1',
-
-       SCHEME                  = 'Error in scheme "%p":\n%c',
-       CONFIG                  = 'Error in config "%p":\n%c',
-       SECTION                 = 'Error in section "%i" (%I):\n%c',
-       OPTION                  = 'Error in option "%i" (%I):\n%c',
-       REFERENCE               = 'Option "%i" has invalid reference specification %1:\n%c',
-       DEPENDENCY              = 'In dependency check for %t "%i":\n%c',
-
-       SME_FIND                = 'Can not find scheme "%p" in "%1"',
-       SME_READ                = 'Can not access file "%1"',
-       SME_REQFLD              = 'Missing required scheme field "%1" in "%i"',
-       SME_INVREF              = 'Illegal reference "%1" to an anonymous section',
-       SME_BADREF              = 'Malformed reference in "%1"',
-       SME_BADDEP              = 'Malformed dependency specification "%1" in "%i"',
-       SME_BADVAL              = 'Malformed validator specification "%1" in "%i"',
-       SME_ERRVAL              = 'External validator "%1" failed: %2',
-       SME_VBADPACK    = 'Variable "%o" in scheme "%p" references unknown package "%1"',
-       SME_VBADSECT    = 'Variable "%o" in scheme "%p" references unknown section "%1"',
-       SME_EBADPACK    = 'Enum "%v" in scheme "%p" references unknown package "%1"',
-       SME_EBADSECT    = 'Enum "%v" in scheme "%p" references unknown section "%1"',
-       SME_EBADOPT             = 'Enum "%v" in scheme "%p" references unknown option "%1"',
-       SME_EBADTYPE    = 'Enum "%v" in scheme "%p" references non-enum option "%I"',
-       SME_EBADDEF             = 'Enum "%v" in scheme "%p" redeclares the default value of "%I"',
-
-       SECT_UNKNOWN    = 'Section "%i" (%I) not found in scheme',
-       SECT_REQUIRED   = 'Required section "%p.%S" not found in config',
-       SECT_UNIQUE             = 'Unique section "%p.%S" occurs multiple times in config',
-       SECT_NAMED              = 'The section of type "%p.%S" is stored anonymously in config but must be named',
-       SECT_NOTFOUND   = 'Section "%p.%s" not found in config',
-
-       OPT_UNKNOWN             = 'Option "%i" (%I) not found in scheme',
-       OPT_REQUIRED    = 'Required option "%i" has no value',
-       OPT_BADVALUE    = 'Value "%1" of option "%i" is not defined in enum %2',
-       OPT_INVVALUE    = 'Value "%1" of option "%i" does not validate as datatype "%2"',
-       OPT_NOTLIST             = 'Option "%i" is defined as list but stored as plain value',
-       OPT_DATATYPE    = 'Option "%i" has unknown datatype "%1"',
-       OPT_NOTFOUND    = 'Option "%p.%s.%o" not found in config',
-       OPT_RANGE               = 'Option "%p.%s.%o" is not within the specified range',
-
-       DEP_NOTEQUAL    = 'Dependency (%1) failed:\nOption "%i" is not eqal "%2"',
-       DEP_NOVALUE             = 'Dependency (%1) failed:\nOption "%i" has no value',
-       DEP_NOTVALID    = 'Dependency (%1) failed:\n%c',
-       DEP_RECURSIVE   = 'Recursive dependency for option "%i" detected',
-       DEP_BADENUM             = 'In dependency check for enum value "%i":\n%c'
-}
-
-function i18n(key)
-       if luci.i18n then
-               return luci.i18n.translate(key)
-       else
-               return key
-       end
-end
-
-
-error = util.class()
-
-function error.__init__(self, code, pso, args)
-
-       self.code = code
-       self.args = ( type(args) == "table" and args or { args } )
-
-       if util.instanceof( pso, uvl.uvlitem ) then
-               self.stype = pso.sref[2]
-               self.package, self.section, self.option, self.value = unpack(pso.cref)
-               self.object = pso
-               self.value  = self.value or ( pso.value and pso:value() )
-       else
-               pso = ( type(pso) == "table" and pso or { pso } )
-
-               if pso[2] then
-                       local uci = uci.cursor()
-                       self.stype = uci:get(pso[1], pso[2]) or pso[2]
-               end
-
-               self.package, self.section, self.option, self.value = unpack(pso)
-       end
-end
-
-function error.child(self, err)
-       if not self.childs then
-               self.childs = { err }
-       else
-               self.childs[#self.childs+1] = err
-       end
-       return self
-end
-
-function error.string(self,pad)
-       pad = pad or "  "
-
-       local str = i18n(ERRCODES[self.code] or self.code)
-               :gsub("\n", "\n"..pad)
-               :gsub("%%i", self:cid())
-               :gsub("%%I", self:sid())
-               :gsub("%%p", self.package or '(nil)')
-               :gsub("%%s", self.section or '(nil)')
-               :gsub("%%S", self.stype   or '(nil)')
-               :gsub("%%o", self.option  or '(nil)')
-               :gsub("%%v", self.value   or '(nil)')
-               :gsub("%%t", self.object and self.object:type()  or '(nil)' )
-               :gsub("%%T", self.object and self.object:title() or '(nil)' )
-               :gsub("%%([1-9])", function(n) return self.args[tonumber(n)] or '(nil)' end)
-               :gsub("%%c",
-                       function()
-                               local s = ""
-                               for _, err in ipairs(self.childs or {}) do
-                                       s = s .. err:string(pad.."  ") .. "\n" .. pad
-                               end
-                               return s
-                       end
-               )
-
-       return (str:gsub("%s+$",""))
-end
-
-function error.cid(self)
-       return self.object and self.object:cid() or self.package ..
-               ( self.section and '.' .. self.section or '' ) ..
-               ( self.option  and '.' .. self.option  or '' ) ..
-               ( self.value   and '.' .. self.value   or '' )
-end
-
-function error.sid(self)
-       return self.object and self.object:sid() or self.package ..
-               ( self.stype   and '.' .. self.stype   or '' ) ..
-               ( self.option  and '.' .. self.option  or '' ) ..
-               ( self.value   and '.' .. self.value   or '' )
-end
-
-function error.is(self, code)
-       if self.code == code then
-               return true
-       elseif self.childs then
-               for _, c in ipairs(self.childs) do
-                       if c:is(code) then
-                               return true
-                       end
-               end
-       end
-       return false
-end
-
-function error.is_all(self, ...)
-       local codes = { ... }
-
-       if util.contains(codes, self.code) then
-               return true
-       else
-               local equal = false
-               for _, c in ipairs(self.childs) do
-                       if c.childs then
-                               equal = c:is_all(...)
-                       else
-                               equal = util.contains(codes, c.code)
-                       end
-               end
-               return equal
-       end
-end
diff --git a/libs/uvl/luasrc/uvl/validation.lua b/libs/uvl/luasrc/uvl/validation.lua
deleted file mode 100644 (file)
index 25ac6dc..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
---[[
-
-UCI Validation Layer - Validation helper
-(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-(c) 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
-]]--
-
-local os = require "os"
-local fs = require "nixio.fs"
-local sys = require "luci.sys"
-local ERR = require "luci.uvl.errors".error
-
-local ipairs, unpack, type, tostring = ipairs, unpack, type, tostring
-
-module "luci.uvl.validation"
-
-function _exec( bin, args )
-       local cmd, output = "", nil
-
-       for _, v in ipairs({ bin, unpack(args) }) do
-               cmd = cmd .. ("%q " % v):gsub("([%$`])","\\%1")
-       end
-
-       local tmpfile = "/tmp/uvl" .. sys.uniqueid(8)
-       local retval  = os.execute( cmd .. " 1>" .. tmpfile .. " 2>" .. tmpfile )
-
-       if fs.access(tmpfile) then
-               output = fs.readfile(tmpfile)
-               fs.unlink(tmpfile)
-       end
-
-       return retval, output
-end
-
-function check( self, object )
-       if object:scheme('validators') then
-               for _, val in ipairs(object:scheme('validators')) do
-                       local ok, err = false, nil
-
-                       local values = object:value()
-                             values = type(values) == "table" and values or { values }
-
-                       local args = {
-                               object:scheme('type'), object:scheme('datatype'),
-                               object.cref[1], object.cref[2], object.cref[3] or '',
-                               unpack(values)
-                       }
-
-                       if type(val) == "function" then
-                               ok, err = val(unpack(args))
-                       else
-                               ok, err = _exec( val, args )
-                               ok = ( ok == 0 )
-                       end
-
-                       if not ok then
-                               return false, ERR('SME_ERRVAL', object, {tostring(val), err})
-                       end
-               end
-       end
-
-       return true, nil
-end
diff --git a/libs/uvl/root/lib/uci/schema/meta/schema b/libs/uvl/root/lib/uci/schema/meta/schema
deleted file mode 100644 (file)
index a4fed42..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-# UVL - Reference-Spec
-# This is a meta scheme defining the format of uci schemes.
-# $Id$
-
-package schema
-
-#-------------------------------------------------------------------------------
-# Central package definition
-#
-#      config package
-#              option ...
-#-------------------------------------------------------------------------------
-
-# Section definition (schema.@package)
-config section
-       option name             'package'
-       option title    'Definition of uci package'
-       option package  'schema'
-       option required false
-       option named    false
-       option unique   true
-       option dynamic  false
-
-# Section title (schema.@package.title)
-config variable
-       option name             'title'
-       option title    'Title of the defined package'
-       option section  'schema.package'
-       option type             'variable'
-       option datatype 'string'
-       option required false
-
-# Section description (schema.@package.description)
-config variable
-       option name             'description'
-       option title    'Description of the defined package'
-       option section  'schema.package'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-
-#-------------------------------------------------------------------------------
-# Central section definition
-#
-#      config section
-#              option ...
-#-------------------------------------------------------------------------------
-
-# Section definition (schema.@section)
-config section
-       option name             'section'
-       option title    'Definition of uci section'
-       option package  'schema'
-       option required false
-       option named    false
-       option unique   false
-       option dynamic  false
-
-# Section name (schema.@section.name)
-config variable
-       option name             'name'
-       option title    'Name of the defined section'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'string'
-       option required true
-
-# Section package (schema.@section.package)
-config variable
-       option name             'package'
-       option title    'Parent package of the defined section'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'string'
-       option required true
-
-# Section title (schema.@section.title)
-config variable
-       option name             'title'
-       option title    'Title of the defined section'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'string'
-       option required false
-
-# Section description (schema.@section.description)
-config variable
-       option name             'description'
-       option title    'Description of the defined section'
-       option section  'schema.section'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Section dependencies (schema.@section.depends)
-config variable
-       option name             'depends'
-       option title    'List of dependencies within and between defined sections'
-       option section  'schema.section'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Section required flag (schema.@section.required)
-config variable
-       option name             'required'
-       option title    'Specify whether at least one instance of this section type must be defined in config'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
-
-# Section unique flag (schema.@section.unique)
-config variable
-       option name             'unique'
-       option title    'Specify whether only one instance of this section type is allowed in config'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
-
-# Section named flag (schema.@section.named)
-config variable
-       option name             'named'
-       option title    'Specify whether sections of this type must have a name set (are not anonymous)'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
-
-# Section dynamic flag (schema.@section.dynamic)
-config variable
-       option name             'dynamic'
-       option title    'Specify whether sections of this type may contain arbitary, not specified options'
-       option section  'schema.section'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
-
-
-#-------------------------------------------------------------------------------
-# Central variable definition
-#
-#      config variable
-#              option ...
-#-------------------------------------------------------------------------------
-
-# Variable definition (schema.@variable)
-config section
-       option name             'variable'
-       option title    'Definition of uci variable'
-       option package  'schema'
-       option required false
-       option named    false
-       option unique   false
-       option dynamic  false
-
-# Variable name (schema.@variable.name)
-config variable
-       option name             'name'
-       option title    'Name of the defined variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'string'
-       option required true
-
-# Variable section (schema.@variable.section)
-config variable
-       option name             'section'
-       option title    'Parent section of the defined variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'string'
-       option required true
-
-# Variable title (schema.@variable.title)
-config variable
-       option name             'title'
-       option title    'Title of the defined variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'string'
-       option required false
-
-# Variable description (schema.@variable.description)
-config variable
-       option name             'description'
-       option title    'Description of the defined variable'
-       option section  'schema.variable'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Variable dependencies (schema.@variable.depends)
-config variable
-       option name             'depends'
-       option title    'List of dependencies between defined variables'
-       option section  'schema.variable'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Variable required flag (schema.@variable.required)
-config variable
-       option name             'required'
-       option title    'Specify whether this variable must be set in config'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
-
-# Variable multiple values flag (schema.@variable.multival)
-config variable
-       option name             'multival'
-       option title    'Specify whether this variable may contain multiple values separated by space'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
-
-# Variable type (schema.@variable.type)
-config variable
-       option name             'type'
-       option title    'Type of this variable'
-       option section  'schema.variable'
-       option type             'enum'
-       option datatype 'string'
-       option required false
-
-# Plain variable type (schema.@variable.type=variable)
-config enum
-       option value    'variable'
-       option title    'This is a plain variable'
-       option variable 'schema.variable.type'
-
-# Enum variable type (schema.@variable.type=enum)
-config enum
-       option value    'enum'
-       option title    'This is a enum variable'
-       option variable 'schema.variable.type'
-
-# List variable type (schema.@variable.type=list)
-config enum
-       option value    'list'
-       option title    'This is a list variable'
-       option variable 'schema.variable.type'
-
-# List-or-Option variable type (schema.@variable.type=lazylist)
-config enum
-       option value    'lazylist'
-       option title    'This is a list or option variable'
-       option variable 'schema.variable.type'
-
-# Reference variable type (schema.@variable.type=reference)
-config enum
-       option value    'reference'
-       option title    'This is a reference (valueof) variable'
-       option variable 'schema.variable.type'
-
-# Variable datatype (schema.@variable.datatype)
-config variable
-       option name             'datatype'
-       option title    'Datatype of this variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'string'
-       option required false
-
-# Variable default value (schema.@variable.default)
-config variable
-       option name             'default'
-       option title    'Default value of this variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'string'
-       option required false
-       
-# Variable minimum length (schema.@variable.minlength)
-config variable
-       option name             'minlength'
-       option title    'Minimum length of this variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'uint'
-       option required false
-       
-# Variable maximum length (schema.@variable.minlength)
-config variable
-       option name             'maxlength'
-       option title    'Maximum length of this variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'uint'
-       option required false
-       
-# Variable minimum value (schema.@variable.minlength)
-config variable
-       option name             'minimum'
-       option title    'Minimum value of this variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'integer'
-       option required false
-       
-# Variable maximum value (schema.@variable.minlength)
-config variable
-       option name             'maximum'
-       option title    'Maximum value of this variable'
-       option section  'schema.variable'
-       option type             'variable'
-       option datatype 'integer'
-       option required false
-
-# Variable validators (schema.@variable.validator)
-config variable
-       option name             'validator'
-       option title    'Datatype of this variable'
-       option section  'schema.variable'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Variable value references (schema.@variable.valueof)
-config variable
-       option name             'valueof'
-       option title    'Reference to section or option to read values from'
-       option section  'schema.variable'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-
-#-------------------------------------------------------------------------------
-# Central enum definition
-#
-#      config enum
-#              option ...
-#-------------------------------------------------------------------------------
-
-# Enum definition (schema.@enum)
-config section
-       option name             'enum'
-       option title    'Definition of uci enum value'
-       option package  'schema'
-       option required false
-       option named    false
-       option unique   false
-       option dynamic  false
-
-# Enum value (schema.@enum.value)
-config variable
-       option name             'value'
-       option title    'Value of the defined enum value'
-       option section  'schema.enum'
-       option type             'variable'
-       option datatype 'string'
-       option required true
-
-# Enum variable (schema.@enum.variable)
-config variable
-       option name             'variable'
-       option title    'Parent variable of the defined enum value'
-       option section  'schema.enum'
-       option type             'variable'
-       option datatype 'string'
-       option required true
-
-# Enum value title (schema.@enum.title)
-config variable
-       option name             'title'
-       option title    'Title of the defined enum value'
-       option section  'schema.enum'
-       option type             'variable'
-       option datatype 'string'
-       option required false
-
-# Enum value description (schema.@enum.description)
-config variable
-       option name             'description'
-       option title    'Description of the defined enum value'
-       option section  'schema.enum'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Enum value dependencies (schema.@enum.depends)
-config variable
-       option name             'depends'
-       option title    'List of dependencies on defined variables'
-       option section  'schema.enum'
-       option type             'lazylist'
-       option datatype 'string'
-       option required false
-
-# Enum value default flag (schema.@enum.default)
-config variable
-       option name             'default'
-       option title    'Specify whether this value is the default value of the parent enum'
-       option section  'schema.enum'
-       option type             'variable'
-       option datatype 'boolean'
-       option required false
diff --git a/libs/uvl/root/usr/bin/uvl b/libs/uvl/root/usr/bin/uvl
deleted file mode 100755 (executable)
index e5db5c3..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/lua
---[[
-
-UCI Validation Layer - Command Line Utility
-(c) 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-(c) 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-
-]]--
-
-require("luci.uvl")
-require("luci.util")
-
-
-function getopt( arg, options )
-       options = options or ""
-       local tab = {}
-       local args = {}
-       for k, v in ipairs(arg) do
-               if v:sub(1, 2) == "--" then
-                       local x = v:find( "=", 1, true )
-                       if x then
-                               tab[ v:sub( 3, x-1 ) ] = v:sub( x+1 )
-                       else
-                           tab[ v:sub( 3 ) ] = true
-                       end
-               elseif v:sub( 1, 1 ) == "-" then
-                       local y = 2
-                       local l = #v
-                       local jopt
-                       while ( y <= l ) do
-                               jopt = v:sub( y, y )
-                               if options:find( jopt, 1, true ) then
-                                       if y < l then
-                                               tab[ jopt ] = v:sub( y+1 )
-                                               y = l
-                                       else
-                                               tab[ jopt ] = arg[ k + 1 ]
-                                               arg[ k + 1 ] = ""
-                                       end
-                               else
-                                       tab[ jopt ] = true
-                               end
-                               y = y + 1
-                       end
-           elseif #v > 0 then
-               table.insert(args, v)
-           end
-       end
-       return tab, args
-end
-
-function genspec(conf)
-       require("luci.model.uci")
-       require("luci.uvl.datatypes")
-
-       local uci     = luci.model.uci.cursor()
-       local ok, err = uci:load(conf)
-
-       if not ok then
-               print("Can not load config:", err)
-               os.exit(1)
-       else
-               local function _guess_datatype(v)
-                       if type(v) == "table" then v = v[1] end
-
-                       for _, type in ipairs({
-                               "boolean", "integer", "float", "ip4addr", "ip6addr",
-                               "macaddr", "directory", "file"
-                       }) do
-                               if luci.uvl.datatypes[type](v) then
-                                       return type
-                               end
-                       end
-                       return "string"
-               end
-
-
-               local co = uci:get_all(conf)
-               local ct = { }
-               local ca = { }
-               local so = { }
-               local to = { }
-
-               -- count section types
-               for _, section in pairs(co) do
-                       ct[section['.type']] = ( ct[section['.type']] or 0 ) + 1
-                       ca[section['.type']] = section['.anonymous']
-                       so[section['.type']] = so[section['.type']] or { }
-                       to[section['.type']] = to[section['.type']] or { }
-
-                       for option, value in pairs(section) do
-                               if option:sub(1,1) ~= "." then
-                                       so[section['.type']][option] = _guess_datatype(value)
-                                       to[section['.type']][option] = ( type(value) == "table" and "list" or "variable" )
-                               end
-                       end
-               end
-
-               -- package name
-               print( "package %s" % conf )
-
-               -- write section schemes
-               for type, count in luci.util.kspairs(ct) do
-                       print( "\nconfig section" )
-                       print( "\toption name   '%s'" % type )
-                       print( "\toption title  'Section %s'" % type )
-                       print( "\toption package        '%s'"% conf )
-                       print( "\toption named  %s" % ( ca[type] and 'false' or 'true' ) )
-                       print( "\toption unique %s" % ( ct[type] > 1 and 'false' or ( ca[type] and 'false' or 'true' ) ) )
-                       print( "\toption dynamic        false" )
-                       print( "\toption required       false" )
-
-                       -- write option schemes
-                       for opt, val in luci.util.kspairs(so[type]) do
-                               print( "\nconfig variable" )
-                               print( "\toption name   '%s'" % opt )
-                               print( "\toption title  'Option %s'" % opt )
-                               print( "\toption section        '%s.%s'" %{ conf, type } )
-                               print( "\toption datatype       '%s'" % so[type][opt] )
-
-                               if to[type][opt] ~= "variable" then
-                                       print( "\toption type   '%s'" % to[type][opt] )
-                               end
-                       end
-
-                       print("")
-               end
-
-       end
-end
-
-
-local options, arguments = getopt( arg )
-
-if #arguments ~= 2 or options.help then
-       print([=[
-
-uvl - UCI Validation Layer
-$Id$
-(c) 2008 Jo-Philipp Wich, Steven Barth
-
-Usage:
-       uvl --help
-       uvl [--silent] [--schemedir=DIR] [--configdir=DIR] [--no-strict-sections] \
-               [--no-strict-options] [--no-strict-validators] [--no-strict-lists] \
-               {verify|verify-scheme|genspec} config[.section[.option]]
-
-Options:
-       --help
-               Display this help message.
-
-       --silent
-               Don't produce any output.
-
-       --schemedir=DIR
-               Use DIR as scheme directory.
-
-       --configdir=DIR
-               Use DIR as config directory.
-
-       --no-strict-sections
-               Don't treat sections found in config but not in scheme as error.
-
-       --no-strict-options
-               Don't treat options found in config but not in scheme as error.
-
-       --no-strict-validators
-               Don't invalidate config if an external validator fails.
-
-       --no-strict-lists
-               Don't invalidate lists that are stored options.
-
-Actions:
-       verify
-               Validate given configuration, section or option.
-
-       verify-scheme
-               Validate given scheme against the reference meta scheme.
-
-       genspec
-               Generate a scheme skeleton from given configuration.
-       ]=])
-       os.exit(255)
-elseif arguments[1] == "verify" or arguments[1] == "verify-scheme" then
-       luci.uvl.STRICT_UNKNOWN_SECTIONS =
-               ( not options['no-strict-sections'] and true or false )
-       luci.uvl.STRICT_UNKNOWN_OPTIONS =
-               ( not options['no-strict-options'] and true or false )
-       luci.uvl.STRICT_EXTERNAL_VALIDATORS =
-               ( not options['no-strict-validators'] and true or false )
-       luci.uvl.STRICT_LIST_TYPE =
-               ( not options['no-strict-lists'] and true or false )
-
-       local uvl = luci.uvl.UVL(
-               type(options.schemedir) == "string" and options.schemedir,
-               type(options.configdir) == "string" and options.configdir
-       )
-
-       local cso = luci.util.split( arguments[2], "." )
-       local ok, err
-
-       if arguments[1] == "verify-scheme" then
-               uvl:read_scheme( 'schema', cso[1] )
-
-               local uci = uvl.uci.cursor(
-                       type(options.configdir) == "string"
-                               and options.configdir or uvl.schemedir .. '/default'
-               )
-
-               ok, err = uvl:validate_config( cso[1], uci:get_all(cso[1]) )
-               if err then err.code = luci.uvl.errors.ERR_SCHEME end
-       else
-               ok, err = uvl:validate( unpack(cso) )
-       end
-
-       if ok then
-               if not options.silent then
-                       print( string.format(
-                               '%s "%s" validates fine!',
-                                       ( arguments[1] == "verify-scheme" and "Scheme" or
-                                               ( #cso == 1 and "Config" or
-                                                       ( #cso == 2 and "Section" or "Option" ) ) ),
-                                       table.concat(cso, ".")
-                       ) )
-               end
-               os.exit( 0 )
-       else
-               if not options.silent then print( err and err:string() or "Unknown error" ) end
-               os.exit( 1 )
-       end
-else
-       genspec( arguments[2] )
-end
diff --git a/libs/uvl/root/usr/bin/uvlc b/libs/uvl/root/usr/bin/uvlc
deleted file mode 100755 (executable)
index caaeb2a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/lua
-
-if arg[1] then
-       require("luci.util")
-       require("luci.uvl")
-       require("nixio.fs")
-
-       local uvl = luci.uvl.UVL()
-       local scheme, err = uvl:get_scheme( arg[1] )
-
-       if scheme then
-               nixio.fs.writefile(
-                       "%s/bytecode/%s.lua" %{ uvl.schemedir, arg[1] },
-                       luci.util.get_bytecode(scheme)
-               )
-       elseif err then
-               print("Error:", err:string())
-       else
-               print("Error: Can not find scheme:", arg[1])
-       end
-else
-       print( "Usage: uvlc <scheme>" )
-end
diff --git a/libs/uvldoc/Makefile b/libs/uvldoc/Makefile
deleted file mode 100644 (file)
index 81a96f6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-include ../../build/config.mk
-include ../../build/module.mk
\ No newline at end of file
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/footer.xml b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/footer.xml
deleted file mode 100644 (file)
index 4b97469..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-<div id="copy">
-<hr />
-generated on <%=require "os".date("%c")%> with <a href="http://luci.freifunk-halle.net"><abbr title="Lua Configuration Interface">LuCI</abbr> UVLDoc</a> - written by Steven Barth and Jo-Philipp Wich
-</div>
-
-</div>
-<div class="clear">&nbsp;</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/header.xml b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/header.xml
deleted file mode 100644 (file)
index f4a89b5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-       <link rel="stylesheet" type="text/css" href="uvldoc.css" />
-       <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
-       <title><% if title then %><%=title%> - <% end %>LuCI UVLDoc</title>
-</head>
-<body>
-
-<div id="menu">
-<%+menu.xml%>
-</div>
-
-<div id="content">
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/index.xml b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/index.xml
deleted file mode 100644 (file)
index a905004..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<%+header.xml%>
-<h1 class="index-title">UCI Documentation</h1>
-<h3 class="index-subtitle">Schemes</h3>
-<table class="index">
-<% for k, v in luci.util.kspairs(self.schemes) do %>
-<tr>
-       <th><a href="<%=self:_scheme_filename(k)%>"><%=k%></a></th>
-       <td><%=self.schemes[k].title%></td>
-</tr>
-<% end %>
-</table>
-<%+footer.xml%>
\ No newline at end of file
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/menu.xml b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/menu.xml
deleted file mode 100644 (file)
index c0ad3da..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<div class="menu-title">LuCI UVLDoc</div>
-<ul class="menu-index">
-<li<%-if not scheme then%> class="menu-active"<%-end-%>>
-       <a href="<%=self:_index_filename()%>">Index</a>
-</li>
-</ul>
-
-<div class="menu-title">Schemes</div>
-<ul class="menu-index">
-<% for k, v in luci.util.kspairs(self.schemes) do %>
-<li<%-if scheme == k then%> class="menu-active"<%-end-%>>
-       <a href="<%=self:_scheme_filename(k)%>"><%=k%></a>
-       <%-if scheme == k then-%>
-       <ul>
-               <%-for k2, v2 in luci.util.kspairs(v.sections) do%>
-               <li<%-if k2 == section then%> class="menu-active"<%-end-%>><a href="<%=self:_section_filename(k, k2)%>"><%=k2%></a></li>
-               <%end-%>
-       </ul>
-       <%-end%>
-</li>
-<%-end%>
-</ul>
\ No newline at end of file
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/scheme.xml b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/scheme.xml
deleted file mode 100644 (file)
index f4fe22e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<%- title = scheme -%>
-<%+header.xml%>
-<h1 class="section-title"><%=scheme-%>
-<%-if package.title then%><dfn> - <%=package.title%></dfn><%end%></h1>
-<div class="scheme-description"><%=package.description%></div>
-
-<h3 class="scheme-title">Sections:</h3>
-<table class="scheme-index">
-<% for k, v in luci.util.kspairs(package.sections) do %>
-<tr>
-       <th><a href="<%=self:_section_filename(scheme, k)%>"><%=k%></a></th>
-       <td><%=v.title%></td>
-</tr>
-<% end %>
-</table>
-<%+footer.xml%>
\ No newline at end of file
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/section.xml b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/section.xml
deleted file mode 100644 (file)
index 691fde4..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-<%- title = scheme .. "." .. type -%> 
-<%+header.xml%>
-<%
-local table = require "table"
-
-types = {
-       list = "List",
-       variable = "Variable",
-       lazylist = "Mixed",
-       enum = "Enumerator",
-       reference = "Reference"
-}
-
-datatypes = {
-       boolean = "Boolean",
-       string = "String",
-       uint = "Unsigned Integer",
-       integer = "Integer",
-       float = "Real Number",
-       ipaddr = "IP-Address",
-       ip4addr = "IPv4-Address",
-       ip6addr = "IPv6-Address",
-       ip4prefix = "IPv4-Prefix",
-       ip6prefix = "IPv6-Prefix",
-       hostname = "Hostname",
-       host = "Host (Hostname or IP-Address)",
-       directory = "Filesystem path (to directory)",
-       file = "Filesystem path (to file)",
-       macaddr = "MAC-Address",
-       port = "Port",
-       portrange = "Single Port or Portrange (First-Last)"
-}
-
-function _parse_ref( r )
-       local k, v, h = r:match("([^.]+)%.([^.]+)%.([^.]+)")
-       if not k then
-               k, v = r:match("([^.]+)%.([^.]+)")
-       end
-       if k then
-               if h then
-                       return self:_variable_target(k, v, h), true
-               else
-                       return self:_section_filename(k, v)
-               end
-       end
-end 
-
-function _parse_dep( r, c, s, o )
-       local ref  = { }
-       local vars = {
-               config  = c,
-               section = s,
-               option  = o
-       }
-
-       for v in r:gmatch("[^.]+") do
-               ref[#ref+1] = (v:gsub( "%$(.+)", vars ))
-       end
-       
-       if #ref < 2 then
-               table.insert(ref, 1, s or '$section')
-       end
-       if #ref < 3 then
-               table.insert(ref, 1, c or '$config')
-       end
-
-       return self:_variable_target(unpack(ref))
-end
-
-%>
-<a name="top"></a>
-<h1 class="section-title"><%=scheme-%>
-<%-if package.title then%><dfn> - <%=package.title%></dfn><%end%></h1>
-<h2 class="section-subtitle"><%=type-%>
-<%-if section.title then%><dfn> - <%=section.title%></dfn><%end%></h2>
-<div class="section-description"><%=section.description%></div>
-
-<h3 class="section-attributes">Attributes:</h3>
-<ul class="section-attributes-index">
-<%- 
-if section.required then %>
-       <li class="section-attributes-required">required: <dfn>A section of this type is required.</dfn></li>
-<% end
-if section.unique then %>
-       <li class="section-attributes-unique">unique: <dfn>There can be only one section of this type.</dfn></li>
-<%- else -%>
-       <li class="section-attributes-multiple">multiple: <dfn>There can be more than one section of this type.</dfn></li>
-<% end
-if section.dynamic then %> 
-       <li class="section-attributes-dynamic">dynamic: <dfn>Sections of this type may contain user-defined options.</dfn></li>
-<% end 
-if section.named then %> 
-       <li class="section-attributes-named">named: <dfn>Sections of this type require a name.</dfn></li>
-<% end -%>
-</ul>
-
-<% if section.depends then %>
-       <h3 class="section-depends">Requirements (one of):</h3>
-       <ul class="section-depends-index">
-               <% for i, d in ipairs(section.depends) do 
-                       local nf = false%>
-               <li>
-               <% for k2, v in luci.util.kspairs(d) do
-                       local t = _parse_dep(k2, scheme, type)
-               %>
-                       <% if nf then %>and<% end %>
-                       <%if t then%><a href="<%=t%>"><%end%><%=k2%><%if t then%></a><%end%><%if v~=true then%>=<%=v%><%end%>
-               <% nf = true
-                       end %>
-               </li>
-               <% end %>
-       </ul>
-<% end %>
-
-<h3 class="section-variables">Variable Overview:</h3>
-<table class="section-variables-index">
-<% for k, v in luci.util.kspairs(package.variables[type]) do 
-if v.required then%>
-<tr class="section-variable-required">
-       <th><a href="#variable.<%=k%>"><%=k%></a></th>
-       <td><%=v.title%></td>
-</tr>
-<% end end
-for k, v in luci.util.kspairs(package.variables[type]) do 
-if not v.required then%>
-<tr class="section-variable-mixed">
-       <th><a href="#variable.<%=k%>"><%=k%></a></th>
-       <td><%=v.title%></td>
-</tr>
-<% end end %>
-</table>
-
-<h3 class="section-variables">Options:</h3>
-<%-
-for i=0, 1 do
-for k, v in luci.util.kspairs(package.variables[type]) do
-if (i==0) == v.required then
-%>
-<hr />
-<div class="variable-documentation">
-       <a name="variable.<%=k%>"></a>
-       <h4 class="variable-title"><%=k-%>
-       <%-if v.title then%><dfn> - <%=v.title%></dfn><%end%></h4>
-       <div class="variable-declaration">
-       <div class="variable-description"><%=v.description%></div>
-       <h5 class="variable-attributes">Attributes:</h5>
-       <ul class="varaible-attributes-index">
-       <% if v.required then %>
-               <li class="variable-attribute-required"><strong>required</strong></li>
-       <% end %>
-               <li class="variable-attribute-type"><strong>Type:</strong> <%=types[v.type] or v.type%></li>
-               <li class="variable-attribute-datatype"><strong>Datatype:</strong> <%=datatypes[v.datatype] or v.datatype%></li>
-       <% if v.multival then %>
-               <li class="variable-attribute-multiple"><strong>multiple values:</strong> space-separated</li>
-       <% end %>
-       </ul>
-       <% if v.depends then %>
-               <h5 class="variable-depends">Dependencies (one of):</h5>
-               <ul class="variable-depends-index">
-                       <% for i, d in ipairs(v.depends) do 
-                               local nf = false %>
-                       <li>
-                       <% for k2, v in luci.util.kspairs(d) do
-                               local t = _parse_dep(k2, scheme, type, k)
-                       %>
-                               <% if nf then %>and<% end %>
-                               <%if t then%><a href="<%=t%>"><%end%><%=k2%><%if t then%></a><%end%><%if v~=true then%>=<%=v%><%end%>
-                       <% nf = true
-                       end %>
-                       </li>
-                       <% end %>
-               </ul>
-       <% end %>
-       <% if v.type == "enum" then %>
-               <h5 class="variable-values">Possible Values:</h5>
-               <ul class="variable-values-index">
-                       <% for k, d in pairs(v.values) do %> 
-                       <li><strong><%=k%></strong><%if d then%> (<%=d%>)<%end%></li>
-                       <% end %>
-               </ul>
-       <% elseif v.type == "reference" then %>
-               <h5 class="variable-reference">Value references:</h5>
-               <ul class="variable-reference-index">
-                       <% for k, d in ipairs(v.valueof) do %> 
-                       <li>
-                       <% local t, x = _parse_ref(d)
-                       if t then %><%=x and "Value of" or "Section of type"%> <a href="<%=t%>"><% end %>
-                       <%=d%>
-                       <% if t then%></a><% end %>
-                       </li>
-                       <% end %>
-               </ul>
-       <% end %>
-       </div>
-       <a href="#top">&#8657;</a>
-</div>
-<% end end end -%>
-<%+footer.xml%>
\ No newline at end of file
diff --git a/libs/uvldoc/luasrc/uvldoc/proto/xhtml/uvldoc.css b/libs/uvldoc/luasrc/uvldoc/proto/xhtml/uvldoc.css
deleted file mode 100644 (file)
index 32a5e96..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-body {
-       font-family: sans-serif;
-       font-size: 0.85em;
-       color: #101010;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       margin-top: 0;
-       font-weight: bold;      
-}
-
-h1 {
-       font-size: 1.5em;
-}
-
-h2 {
-       font-size: 1.4em;       
-}
-
-h3 {
-       font-size: 1.2em;       
-}
-
-h4 {
-       font-size: 1.1em;       
-}
-
-h5 {
-       font-size: 1.0em;       
-}
-
-dfn {
-       font-weight: normal;    
-       font-size: 0.9em;
-}
-
-table {
-       border-collapse: collapse;
-}
-
-tr, td, th {
-       border: 1px solid #e0e0ff;
-       padding: 3px;
-}
-
-th {
-       background-color: #f0f0ff;
-       text-align: left;
-}
-
-
-hr {
-       border: none;
-       background-color: #cccccc;
-       height: 1px;
-}
-
-ul, li {
-       margin-top: 0;
-}
-
-div.clear {
-       clear: both;
-}
-
-div.variable-declaration {
-       padding-left: 2em;      
-}
-
-div.variable-description {
-       margin-bottom: 1em;     
-}
-
-h3.section-variables {
-       margin-top: 2em;        
-}
-
-h4.variable-title {
-       margin-bottom: 0;       
-}
-
-div#menu {
-       float: left;
-       background-color: #f0f0ff;
-       margin: 0;
-       padding: 0;
-       border: 1px solid #e0e0ff;
-       width: 11.5em;
-}
-
-#menu ul {
-       list-style-type: none;
-       margin-bottom: 0.5em;
-       padding-left: 1em;
-}
-#menu ul li {
-       margin-left: 0;
-       
-}
-
-div.menu-title {
-       background-color: #e0e0ff;
-       color: #000000;
-       font-weight: bold;
-       padding: 2px;
-}
-
-div#content {
-       margin-top: 0;
-       padding-top: 0;
-       margin-left: 12.5em;
-}
-
-div#copy {
-       margin-top: 2.5em;
-       font-size: 0.7em;
-       text-align: center;
-       font-size: bold;
-}
-
-a:link { 
-       font-weight: bold;
-       color: #004080;
-       text-decoration: none; 
-}
-
-a:visited {
-       font-weight:bold;
-       color: #006699;
-       text-decoration: none;
-}
-
-a:hover {
-       text-decoration:underline;
-}
diff --git a/libs/uvldoc/luasrc/uvldoc/renderer.lua b/libs/uvldoc/luasrc/uvldoc/renderer.lua
deleted file mode 100644 (file)
index 79b6cdb..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
---[[
-LuCI - Lua Configuration Interface
-
-Copyright 2008 Steven Barth <steven@midlink.org>
-Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-$Id$
-]]--
-
-local io = require "io"
-local fs = require "nixio.fs"
-local uvl = require "luci.uvl"
-local util = require "luci.util"
-local ltn12 = require "luci.ltn12"
-local template = require "luci.template"
-
-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, uvlpath)
-       self.names   = schemes
-       self.output  = output or "doc"
-       self.schemes = {}
-       self.uvl     = uvl.UVL(uvlpath)
-       
-       self.extension = ".xml"
-       self.additionals = {"uvldoc.css"}
-       self.sourcedir = util.libpath() .. "/uvldoc/proto/xhtml/"
-end
-
-
-function Generator.make(self)
-       for i, scheme in ipairs(self.names) do
-               self.schemes[scheme] = self.uvl:get_scheme(scheme)
-       end
-
-       fs.mkdir(self.output)
-
-       for i, file in ipairs(self.additionals) do
-               fs.datacopy(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, 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
-
-function Generator._make_index(self)
-       local t = template.Template("index.xml")
-       local sink = ltn12.sink.file(
-               io.open(self.output .. "/" .. self:_index_filename(), "w")
-       )
-       t:render({self = self, write = sink})
-       sink()
-end
-
-function Generator._make_package(self, scheme)
-       local t = template.Template("scheme.xml")
-       local sink = ltn12.sink.file(
-               io.open(self.output .. "/" .. self:_scheme_filename(scheme), "w")
-       )
-       t:render({self = self, package = self.schemes[scheme], scheme = scheme, write = sink})
-       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
-
-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