summaryrefslogtreecommitdiffhomepage
path: root/build/cbi2uvl.lua
blob: 83d3b4cb614a1207bc0fcb08bc7fdf2d33208c3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/lua
local cbi = require "luci.cbi"
local i18n = require "luci.i18n"
local util = require "luci.util"

if not arg[1] then
 	util.perror("Usage %s path/to/cbi/model.lua [i18nfilename]" % arg[0])
 	os.exit(1)
end

i18n.load("default", "en")
i18n.load("admin-core", "en")
i18n.load("wifi", "en")

if arg[2] then
	i18n.load(arg[2], "en")
end

local map = cbi.load(arg[1])[1]
assert(map)

print ("package "..map.config)
print ("\nconfig package")

if #map.title > 0 then
	print ("	option title '%s'" % util.striptags(map.title))
end

if #map.description > 0 then
	print ("	option description '%s'" % util.striptags(map.description))
end

for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.TypedSection) then
	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.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.anonymous then
		print ("	option named true")
	end
	
	if sec.dynamic then
		print ("	option dynamic true")
	end
	
	for j, opt in ipairs(sec.children) do
	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
		
		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 util.instanceof(opt, cbi.Flag) then
			print ("	option datatype boolean")
		elseif util.instanceof(opt, cbi.DynamicList) then
			print ("	option type list")
		elseif util.instanceof(opt, cbi.ListValue) then
			print ("	option type enum")
			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}
				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")
				print ("	option variable '%s.%s.%s'" % {map.config, sec.sectiontype, opt.option})
				print ("	option value '%s'" % key)
				if opt.vallist[k] and opt.vallist[k] ~= opt.keylist[k] then
					print ("	option title '%s'" % util.striptags(opt.vallist[k]))
				end
			end
		end
	end
	end
end end