diff options
Diffstat (limited to 'src/url.lua')
-rw-r--r-- | src/url.lua | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/url.lua b/src/url.lua index efe7254..08081f0 100644 --- a/src/url.lua +++ b/src/url.lua | |||
@@ -8,7 +8,10 @@ | |||
8 | ----------------------------------------------------------------------------- | 8 | ----------------------------------------------------------------------------- |
9 | -- Declare module | 9 | -- Declare module |
10 | ----------------------------------------------------------------------------- | 10 | ----------------------------------------------------------------------------- |
11 | module("socket.url") | 11 | local string = require("string") |
12 | local base = require("base") | ||
13 | local table = require("table") | ||
14 | local url = module("socket.url") | ||
12 | 15 | ||
13 | ----------------------------------------------------------------------------- | 16 | ----------------------------------------------------------------------------- |
14 | -- Encodes a string into its escaped hexadecimal representation | 17 | -- Encodes a string into its escaped hexadecimal representation |
@@ -18,7 +21,7 @@ module("socket.url") | |||
18 | -- escaped representation of string binary | 21 | -- escaped representation of string binary |
19 | ----------------------------------------------------------------------------- | 22 | ----------------------------------------------------------------------------- |
20 | function escape(s) | 23 | function escape(s) |
21 | return string.gsub(s, "(.)", function(c) | 24 | return string.gsub(s, "([^A-Za-z0-9_])", function(c) |
22 | return string.format("%%%02x", string.byte(c)) | 25 | return string.format("%%%02x", string.byte(c)) |
23 | end) | 26 | end) |
24 | end | 27 | end |
@@ -33,7 +36,7 @@ end | |||
33 | ----------------------------------------------------------------------------- | 36 | ----------------------------------------------------------------------------- |
34 | local function make_set(t) | 37 | local function make_set(t) |
35 | local s = {} | 38 | local s = {} |
36 | for i = 1, table.getn(t) do | 39 | for i,v in base.ipairs(t) do |
37 | s[t[i]] = 1 | 40 | s[t[i]] = 1 |
38 | end | 41 | end |
39 | return s | 42 | return s |
@@ -62,7 +65,7 @@ end | |||
62 | ----------------------------------------------------------------------------- | 65 | ----------------------------------------------------------------------------- |
63 | function unescape(s) | 66 | function unescape(s) |
64 | return string.gsub(s, "%%(%x%x)", function(hex) | 67 | return string.gsub(s, "%%(%x%x)", function(hex) |
65 | return string.char(tonumber(hex, 16)) | 68 | return string.char(base.tonumber(hex, 16)) |
66 | end) | 69 | end) |
67 | end | 70 | end |
68 | 71 | ||
@@ -191,7 +194,7 @@ end | |||
191 | -- corresponding absolute url | 194 | -- corresponding absolute url |
192 | ----------------------------------------------------------------------------- | 195 | ----------------------------------------------------------------------------- |
193 | function absolute(base_url, relative_url) | 196 | function absolute(base_url, relative_url) |
194 | local base = type(base_url) == "table" and base_url or parse(base_url) | 197 | local base = base.type(base_url) == "table" and base_url or parse(base_url) |
195 | local relative = parse(relative_url) | 198 | local relative = parse(relative_url) |
196 | if not base then return relative_url | 199 | if not base then return relative_url |
197 | elseif not relative then return base_url | 200 | elseif not relative then return base_url |
@@ -269,3 +272,5 @@ function build_path(parsed, unsafe) | |||
269 | if parsed.is_absolute then path = "/" .. path end | 272 | if parsed.is_absolute then path = "/" .. path end |
270 | return path | 273 | return path |
271 | end | 274 | end |
275 | |||
276 | base.setmetatable(url, nil) | ||