aboutsummaryrefslogtreecommitdiff
path: root/src/url.lua
diff options
context:
space:
mode:
authormoteus <mimir@newmail.ru>2013-05-27 12:45:09 +0400
committermoteus <mimir@newmail.ru>2013-05-27 12:45:09 +0400
commit920bc9762954454468d056a61391635cbd849406 (patch)
tree048c112f95fa578d239ae3e35b2aec0a482f0c23 /src/url.lua
parentbd51d8c1a5bb30e6a358dee6e85963f777edfff4 (diff)
downloadluasocket-920bc9762954454468d056a61391635cbd849406.tar.gz
luasocket-920bc9762954454468d056a61391635cbd849406.tar.bz2
luasocket-920bc9762954454468d056a61391635cbd849406.zip
Build with Lua 5.2 without LUA_COMPAT_MODULE flag.
LUASOCKET_USE_GLOBAL flag enable create global variables when load socket/mime modules.
Diffstat (limited to 'src/url.lua')
-rw-r--r--src/url.lua37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/url.lua b/src/url.lua
index 6ca6d68..3c4f85d 100644
--- a/src/url.lua
+++ b/src/url.lua
@@ -10,12 +10,15 @@
10local string = require("string") 10local string = require("string")
11local base = _G 11local base = _G
12local table = require("table") 12local table = require("table")
13module("socket.url") 13local socket = require("socket")
14
15socket.url = {}
16local _M = socket.url
14 17
15----------------------------------------------------------------------------- 18-----------------------------------------------------------------------------
16-- Module version 19-- Module version
17----------------------------------------------------------------------------- 20-----------------------------------------------------------------------------
18_VERSION = "URL 1.0.2" 21_M._VERSION = "URL 1.0.2"
19 22
20----------------------------------------------------------------------------- 23-----------------------------------------------------------------------------
21-- Encodes a string into its escaped hexadecimal representation 24-- Encodes a string into its escaped hexadecimal representation
@@ -24,7 +27,7 @@ _VERSION = "URL 1.0.2"
24-- Returns 27-- Returns
25-- escaped representation of string binary 28-- escaped representation of string binary
26----------------------------------------------------------------------------- 29-----------------------------------------------------------------------------
27function escape(s) 30function _M.escape(s)
28 return (string.gsub(s, "([^A-Za-z0-9_])", function(c) 31 return (string.gsub(s, "([^A-Za-z0-9_])", function(c)
29 return string.format("%%%02x", string.byte(c)) 32 return string.format("%%%02x", string.byte(c))
30 end)) 33 end))
@@ -67,7 +70,7 @@ end
67-- Returns 70-- Returns
68-- escaped representation of string binary 71-- escaped representation of string binary
69----------------------------------------------------------------------------- 72-----------------------------------------------------------------------------
70function unescape(s) 73function _M.unescape(s)
71 return (string.gsub(s, "%%(%x%x)", function(hex) 74 return (string.gsub(s, "%%(%x%x)", function(hex)
72 return string.char(base.tonumber(hex, 16)) 75 return string.char(base.tonumber(hex, 16))
73 end)) 76 end))
@@ -120,7 +123,7 @@ end
120-- Obs: 123-- Obs:
121-- the leading '/' in {/<path>} is considered part of <path> 124-- the leading '/' in {/<path>} is considered part of <path>
122----------------------------------------------------------------------------- 125-----------------------------------------------------------------------------
123function parse(url, default) 126function _M.parse(url, default)
124 -- initialize default parameters 127 -- initialize default parameters
125 local parsed = {} 128 local parsed = {}
126 for i,v in base.pairs(default or parsed) do parsed[i] = v end 129 for i,v in base.pairs(default or parsed) do parsed[i] = v end
@@ -179,9 +182,9 @@ end
179-- Returns 182-- Returns
180-- a stringing with the corresponding URL 183-- a stringing with the corresponding URL
181----------------------------------------------------------------------------- 184-----------------------------------------------------------------------------
182function build(parsed) 185function _M.build(parsed)
183 local ppath = parse_path(parsed.path or "") 186 local ppath = _M.parse_path(parsed.path or "")
184 local url = build_path(ppath) 187 local url = _M.build_path(ppath)
185 if parsed.params then url = url .. ";" .. parsed.params end 188 if parsed.params then url = url .. ";" .. parsed.params end
186 if parsed.query then url = url .. "?" .. parsed.query end 189 if parsed.query then url = url .. "?" .. parsed.query end
187 local authority = parsed.authority 190 local authority = parsed.authority
@@ -215,14 +218,14 @@ end
215-- Returns 218-- Returns
216-- corresponding absolute url 219-- corresponding absolute url
217----------------------------------------------------------------------------- 220-----------------------------------------------------------------------------
218function absolute(base_url, relative_url) 221function _M.absolute(base_url, relative_url)
219 if base.type(base_url) == "table" then 222 if base.type(base_url) == "table" then
220 base_parsed = base_url 223 base_parsed = base_url
221 base_url = build(base_parsed) 224 base_url = _M.build(base_parsed)
222 else 225 else
223 base_parsed = parse(base_url) 226 base_parsed = _M.parse(base_url)
224 end 227 end
225 local relative_parsed = parse(relative_url) 228 local relative_parsed = _M.parse(relative_url)
226 if not base_parsed then return relative_url 229 if not base_parsed then return relative_url
227 elseif not relative_parsed then return base_url 230 elseif not relative_parsed then return base_url
228 elseif relative_parsed.scheme then return relative_url 231 elseif relative_parsed.scheme then return relative_url
@@ -243,7 +246,7 @@ function absolute(base_url, relative_url)
243 relative_parsed.path) 246 relative_parsed.path)
244 end 247 end
245 end 248 end
246 return build(relative_parsed) 249 return _M.build(relative_parsed)
247 end 250 end
248end 251end
249 252
@@ -254,13 +257,13 @@ end
254-- Returns 257-- Returns
255-- segment: a table with one entry per segment 258-- segment: a table with one entry per segment
256----------------------------------------------------------------------------- 259-----------------------------------------------------------------------------
257function parse_path(path) 260function _M.parse_path(path)
258 local parsed = {} 261 local parsed = {}
259 path = path or "" 262 path = path or ""
260 --path = string.gsub(path, "%s", "") 263 --path = string.gsub(path, "%s", "")
261 string.gsub(path, "([^/]+)", function (s) table.insert(parsed, s) end) 264 string.gsub(path, "([^/]+)", function (s) table.insert(parsed, s) end)
262 for i = 1, #parsed do 265 for i = 1, #parsed do
263 parsed[i] = unescape(parsed[i]) 266 parsed[i] = _M.unescape(parsed[i])
264 end 267 end
265 if string.sub(path, 1, 1) == "/" then parsed.is_absolute = 1 end 268 if string.sub(path, 1, 1) == "/" then parsed.is_absolute = 1 end
266 if string.sub(path, -1, -1) == "/" then parsed.is_directory = 1 end 269 if string.sub(path, -1, -1) == "/" then parsed.is_directory = 1 end
@@ -275,7 +278,7 @@ end
275-- Returns 278-- Returns
276-- path: corresponding path stringing 279-- path: corresponding path stringing
277----------------------------------------------------------------------------- 280-----------------------------------------------------------------------------
278function build_path(parsed, unsafe) 281function _M.build_path(parsed, unsafe)
279 local path = "" 282 local path = ""
280 local n = #parsed 283 local n = #parsed
281 if unsafe then 284 if unsafe then
@@ -300,3 +303,5 @@ function build_path(parsed, unsafe)
300 if parsed.is_absolute then path = "/" .. path end 303 if parsed.is_absolute then path = "/" .. path end
301 return path 304 return path
302end 305end
306
307return _M \ No newline at end of file