libs/core: always use internal network ids for admin links to wifi networks (#172)
[project/luci.git] / build / cbi2uvl.lua
1 #!/usr/bin/lua
2 --[[
3 LuCI - Lua Configuration Interface
4
5 Copyright 2008 Steven Barth <steven@midlink.org>
6 Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
7
8 Licensed under the Apache License, Version 2.0 (the "License");
9 you may not use this file except in compliance with the License.
10 You may obtain a copy of the License at
11
12 http://www.apache.org/licenses/LICENSE-2.0
13
14 $Id: index.lua 3548 2008-10-09 20:28:07Z Cyrus $
15 ]]--
16
17 local cbi = require "luci.cbi"
18 local i18n = require "luci.i18n"
19 local util = require "luci.util"
20
21 if not arg[1] then
22 util.perror("Usage %s path/to/cbi/model.lua [i18nfilename]" % arg[0])
23 os.exit(1)
24 end
25
26 i18n.load("base", "en")
27
28 if arg[2] then
29 i18n.load(arg[2], "en")
30 end
31
32 if arg[3] then
33 pcall(function()
34 require "uci"
35 require "luci.model.uci".cursor = function(config, save)
36 return uci.cursor(config or arg[3] .. "/etc/config", save or arg[3] .. "/tmp/.uci")
37 end
38 end)
39 end
40
41 local map = cbi.load(arg[1])[1]
42 assert(map)
43
44 print ("package "..map.config)
45 print ("\nconfig package")
46
47 if #map.title > 0 then
48 print (" option title '%s'" % util.striptags(map.title))
49 end
50
51 if #map.description > 0 then
52 print (" option description '%s'" % util.striptags(map.description))
53 end
54
55 for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.AbstractSection) then
56 print ("\nconfig section")
57 print (" option name '%s'" % sec.sectiontype)
58 print (" option package '%s'" % map.config)
59
60 if #sec.title > 0 then
61 print (" option title '%s'" % util.striptags(sec.title))
62 end
63
64 if #sec.description > 0 then
65 print (" option description '%s'" % util.striptags(sec.description))
66 end
67
68 if not sec.addremove then
69 print (" option unique true")
70 print (" option required true")
71 end
72
73 if not sec.anonymous then
74 print (" option named true")
75 end
76
77 if sec.dynamic then
78 print (" option dynamic true")
79 end
80
81 for j, opt in ipairs(sec.children) do
82 if opt.option:sub(1,1) ~= "_" or util.instanceof(opt, cbi.Value) then
83 print ("\nconfig variable")
84 print (" option name '%s'" % opt.option)
85 print (" option section '%s.%s'" % {map.config, sec.sectiontype})
86 if #opt.title > 0 then
87 print (" option title '%s'" % util.striptags(opt.title))
88 end
89
90 if #opt.description > 0 then
91 print (" option description '%s'" % util.striptags(opt.description))
92 end
93
94 if not opt.rmempty and not opt.optional then
95 print (" option required true")
96 end
97
98 if util.instanceof(opt, cbi.Flag) then
99 print (" option datatype boolean")
100 elseif util.instanceof(opt, cbi.DynamicList) then
101 print (" option type list")
102 elseif util.instanceof(opt, cbi.ListValue) then
103 print (" option type enum")
104 util.perror("*** Warning: Please verify '%s.%s.%s' ***" %
105 {map.config, sec.sectiontype, opt.option} )
106 end
107
108 for i, dep in ipairs(opt.deps) do
109 if not dep.add or dep.add == "" then
110 local depstring
111 for k, v in pairs(dep.deps) do
112 depstring = (depstring and depstring .. "," or "") .. "%s=%s" % {k, v}
113 end
114 print (" list depends '%s'" % depstring)
115 else
116 util.perror("*** Warning: Unable to decode dependency '%s' in '%s.%s.%s[%s]' ***" %
117 {util.serialize_data(dep.deps), map.config, sec.sectiontype, opt.option, dep.add})
118 end
119 end
120
121 if util.instanceof(opt, cbi.ListValue) then
122 for k, key in ipairs(opt.keylist) do
123 print ("\nconfig enum")
124 print (" option variable '%s.%s.%s'" % {map.config, sec.sectiontype, opt.option})
125 print (" option value '%s'" % key)
126 if opt.vallist[k] and opt.vallist[k] ~= opt.keylist[k] then
127 print (" option title '%s'" % util.striptags(opt.vallist[k]))
128 end
129 end
130 end
131 end
132 end
133 end end