webmcp
annotate framework/env/param/_get_parser.lua @ 2:72860d232f32
Version 1.0.2
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
author | jbe/bsw |
---|---|
date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
parents | 9fdfb27f8e67 |
children |
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 |