rev |
line source |
jbe/bsw@0
|
1 function param._get_parser(format_info, param_type)
|
jbe/bsw@0
|
2 if format_info == nil or format_info == "" then
|
jbe/bsw@0
|
3 return function(str)
|
jbe/bsw@0
|
4 return param_type:load(str)
|
jbe/bsw@0
|
5 end
|
jbe/bsw@0
|
6 else
|
jbe/bsw@0
|
7 local format_options = {}
|
jbe/bsw@0
|
8 local format_type, rest = string.match(
|
jbe/bsw@0
|
9 format_info,
|
jbe/bsw@0
|
10 "^([A-Za-z][A-Za-z0-9_]*)(.*)$"
|
jbe/bsw@0
|
11 )
|
jbe/bsw@0
|
12 if format_type then
|
jbe/bsw@0
|
13 rest = string.gsub(rest, "\\\\", "\\e")
|
jbe/bsw@0
|
14 rest = string.gsub(rest, "\\'", "\\q")
|
jbe/bsw@0
|
15 if
|
jbe/bsw@0
|
16 string.find(rest, "\\$") or
|
jbe/bsw@0
|
17 string.find(rest, "\\[^eq]")
|
jbe/bsw@0
|
18 then
|
jbe/bsw@0
|
19 format_type = nil
|
jbe/bsw@0
|
20 else
|
jbe/bsw@0
|
21 while rest ~= "" do
|
jbe/bsw@0
|
22 local key, value, new_rest
|
jbe/bsw@0
|
23 key, value, new_rest = string.match(
|
jbe/bsw@0
|
24 rest,
|
jbe/bsw@0
|
25 "^-([A-Za-z][A-Za-z0-9_]*)-'([^']*)'(.*)$"
|
jbe/bsw@0
|
26 )
|
jbe/bsw@0
|
27 if value then
|
jbe/bsw@0
|
28 value = string.gsub(value, "\\q", "'")
|
jbe/bsw@0
|
29 value = string.gsub(value, "\\e", "\\")
|
jbe/bsw@0
|
30 format_options[key] = value
|
jbe/bsw@0
|
31 else
|
jbe/bsw@0
|
32 key, value, new_rest = string.match(
|
jbe/bsw@0
|
33 rest,
|
jbe/bsw@0
|
34 "^-([A-Za-z][A-Za-z0-9_]*)-([^-]*)(.*)$"
|
jbe/bsw@0
|
35 )
|
jbe/bsw@0
|
36 if value then
|
jbe/bsw@0
|
37 if string.find(value, "^[0-9.Ee+-]+$") then
|
jbe/bsw@0
|
38 local num = tonumber(value)
|
jbe/bsw@0
|
39 if not num then
|
jbe/bsw@0
|
40 format_type = nil
|
jbe/bsw@0
|
41 break
|
jbe/bsw@0
|
42 end
|
jbe/bsw@0
|
43 format_options[key] = num
|
jbe/bsw@0
|
44 elseif value == "t" then
|
jbe/bsw@0
|
45 format_options[key] = true
|
jbe/bsw@0
|
46 elseif value == "f" then
|
jbe/bsw@0
|
47 format_options[key] = false
|
jbe/bsw@0
|
48 else
|
jbe/bsw@0
|
49 format_type = nil
|
jbe/bsw@0
|
50 break
|
jbe/bsw@0
|
51 end
|
jbe/bsw@0
|
52 else
|
jbe/bsw@0
|
53 format_type = nil
|
jbe/bsw@0
|
54 break
|
jbe/bsw@0
|
55 end
|
jbe/bsw@0
|
56 end
|
jbe/bsw@0
|
57 rest = new_rest
|
jbe/bsw@0
|
58 end
|
jbe/bsw@0
|
59 end
|
jbe/bsw@0
|
60 end
|
jbe/bsw@0
|
61 if not format_type then
|
jbe/bsw@0
|
62 error("Illegal format string in GET/POST parameters found.")
|
jbe/bsw@0
|
63 end
|
jbe/bsw@0
|
64 local parse_func = parse[format_type]
|
jbe/bsw@0
|
65 if not parse_func then
|
jbe/bsw@0
|
66 error("Unknown format identifier in GET/POST parameters encountered.")
|
jbe/bsw@0
|
67 end
|
jbe/bsw@0
|
68 return function(str)
|
jbe/bsw@0
|
69 return parse_func(str, param_type, format_options)
|
jbe/bsw@0
|
70 end
|
jbe/bsw@0
|
71 end
|
jbe/bsw@0
|
72 end
|