webmcp
annotate framework/env/param/_get_parser.lua @ 3:795b764629ca
Version 1.0.3
Important bugfix related to internal forwards (Bug was introduced by the restriction of views with underscore prefix in Version 1.0.2)
Important bugfix related to internal forwards (Bug was introduced by the restriction of views with underscore prefix in Version 1.0.2)
author | jbe |
---|---|
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 |