webmcp
annotate framework/env/param/_get_parser.lua @ 29:0b7e87f2dc91
add trace.debug_traceback() function
It inserts a traceback into the trace debug log. Usefull on development of unknown code.
It inserts a traceback into the trace debug log. Usefull on development of unknown code.
| author | Daniel Poelzleithner <poelzi@poelzi.org> | 
|---|---|
| date | Mon Sep 20 15:29:23 2010 +0200 (2010-09-20) | 
| 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 |