| 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 |