webmcp

annotate framework/env/param/_get_parser.lua @ 0:9fdfb27f8e67

Version 1.0.0
author jbe/bsw
date Sun Oct 25 12:00:00 2009 +0100 (2009-10-25)
parents
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

Impressum / About Us