Tune cbi2uvl
[project/luci.git] / build / cbi2uvl.lua
index 9207bf8..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,51 +54,51 @@ 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
                if util.instanceof(opt, cbi.Flag) then
-                       print ("        option type boolean")
+                       print ("        option datatype boolean")
                elseif util.instanceof(opt, cbi.DynamicList) then
                        print ("        option type list")
                elseif util.instanceof(opt, cbi.ListValue) then
                elseif util.instanceof(opt, cbi.DynamicList) then
                        print ("        option type list")
                elseif util.instanceof(opt, cbi.ListValue) 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")
@@ -108,4 +132,4 @@ for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.TypedSection) t
                end
        end
        end
                end
        end
        end
-end end
\ No newline at end of file
+end end