Tune cbi2uvl
[project/luci.git] / build / cbi2uvl.lua
index 83d3b4c..e1d0c15 100755 (executable)
@@ -1,4 +1,19 @@
 #!/usr/bin/lua
 #!/usr/bin/lua
+--[[
+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: index.lua 3548 2008-10-09 20:28:07Z Cyrus $
+]]--
+
 local cbi = require "luci.cbi"
 local i18n = require "luci.i18n"
 local util = require "luci.util"
 local cbi = require "luci.cbi"
 local i18n = require "luci.i18n"
 local util = require "luci.util"
@@ -16,6 +31,15 @@ if arg[2] then
        i18n.load(arg[2], "en")
 end
 
        i18n.load(arg[2], "en")
 end
 
+if arg[3] then
+       pcall(function()
+               require "uci"
+               require "luci.model.uci".cursor = function(config, save)
+                       return uci.cursor(config or arg[3] .. "/etc/config", save or arg[3] .. "/tmp/.uci")
+               end
+       end)
+end
+
 local map = cbi.load(arg[1])[1]
 assert(map)
 
 local map = cbi.load(arg[1])[1]
 assert(map)
 
@@ -30,49 +54,49 @@ if #map.description > 0 then
        print ("        option description '%s'" % util.striptags(map.description))
 end
 
        print ("        option description '%s'" % util.striptags(map.description))
 end
 
-for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.TypedSection) then
+for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.AbstractSection) then
        print ("\nconfig section")
        print ("        option name '%s'" % sec.sectiontype)
        print ("        option package '%s'" % map.config)
        print ("\nconfig section")
        print ("        option name '%s'" % sec.sectiontype)
        print ("        option package '%s'" % map.config)
-       
+
        if #sec.title > 0 then
                print ("        option title '%s'" % util.striptags(sec.title))
        end
        if #sec.title > 0 then
                print ("        option title '%s'" % util.striptags(sec.title))
        end
-       
+
        if #sec.description > 0 then
                print ("        option description '%s'" % util.striptags(sec.description))
        end
        if #sec.description > 0 then
                print ("        option description '%s'" % util.striptags(sec.description))
        end
-       
+
        if not sec.addremove then
                print ("        option unique true")
                print ("        option required true")
        end
        if not sec.addremove then
                print ("        option unique true")
                print ("        option required true")
        end
-       
+
        if not sec.anonymous then
                print ("        option named true")
        end
        if not sec.anonymous then
                print ("        option named true")
        end
-       
+
        if sec.dynamic then
                print ("        option dynamic true")
        end
        if sec.dynamic then
                print ("        option dynamic true")
        end
-       
+
        for j, opt in ipairs(sec.children) do
        for j, opt in ipairs(sec.children) do
-       if opt.option:sub(1,1) ~= "_" or util.instanceof(opt, cbi.Value) then 
+       if opt.option:sub(1,1) ~= "_" or util.instanceof(opt, cbi.Value) then
                print ("\nconfig variable")
                print ("        option name '%s'" % opt.option)
                print ("        option section '%s.%s'" % {map.config, sec.sectiontype})
                if #opt.title > 0 then
                        print ("        option title '%s'" % util.striptags(opt.title))
                end
                print ("\nconfig variable")
                print ("        option name '%s'" % opt.option)
                print ("        option section '%s.%s'" % {map.config, sec.sectiontype})
                if #opt.title > 0 then
                        print ("        option title '%s'" % util.striptags(opt.title))
                end
-               
+
                if #opt.description > 0 then
                        print ("        option description '%s'" % util.striptags(opt.description))
                end
                if #opt.description > 0 then
                        print ("        option description '%s'" % util.striptags(opt.description))
                end
-               
+
                if not opt.rmempty and not opt.optional then
                        print ("        option required true")
                end
                if not opt.rmempty and not opt.optional then
                        print ("        option required true")
                end
-               
+
                if util.instanceof(opt, cbi.Flag) then
                        print ("        option datatype boolean")
                elseif util.instanceof(opt, cbi.DynamicList) then
                if util.instanceof(opt, cbi.Flag) then
                        print ("        option datatype boolean")
                elseif util.instanceof(opt, cbi.DynamicList) then
@@ -82,20 +106,20 @@ for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.TypedSection) t
                        util.perror("*** Warning: Please verify '%s.%s.%s' ***" %
                                {map.config, sec.sectiontype, opt.option} )
                end
                        util.perror("*** Warning: Please verify '%s.%s.%s' ***" %
                                {map.config, sec.sectiontype, opt.option} )
                end
-               
+
                for i, dep in ipairs(opt.deps) do
                        if not dep.add or dep.add == "" then
                                local depstring
                                for k, v in pairs(dep.deps) do
                                        depstring = (depstring and depstring .. "," or "") .. "%s=%s" % {k, v}
                for i, dep in ipairs(opt.deps) do
                        if not dep.add or dep.add == "" then
                                local depstring
                                for k, v in pairs(dep.deps) do
                                        depstring = (depstring and depstring .. "," or "") .. "%s=%s" % {k, v}
-                               end 
+                               end
                                print ("        list depends '%s'" % depstring)
                        else
                                util.perror("*** Warning: Unable to decode dependency '%s' in '%s.%s.%s[%s]' ***" %
                                        {util.serialize_data(dep.deps), map.config, sec.sectiontype, opt.option, dep.add})
                        end
                end
                                print ("        list depends '%s'" % depstring)
                        else
                                util.perror("*** Warning: Unable to decode dependency '%s' in '%s.%s.%s[%s]' ***" %
                                        {util.serialize_data(dep.deps), map.config, sec.sectiontype, opt.option, dep.add})
                        end
                end
-               
+
                if util.instanceof(opt, cbi.ListValue) then
                        for k, key in ipairs(opt.keylist) do
                                print ("\nconfig enum")
                if util.instanceof(opt, cbi.ListValue) then
                        for k, key in ipairs(opt.keylist) do
                                print ("\nconfig enum")