Sun, 10 Oct 2010 01:34:27 +0100
squish.gzip.lua: Escape \026 in gzipped output to prevent Windows from interpreting it as EOF (thanks to Vadim Peretokin for his persistence!)
19
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 | local vio = {}; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 | vio.__index = vio; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 | function vio.open(string) |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 | return setmetatable({ pos = 1, data = string }, vio); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 | function vio:read(format, ...) |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 | if self.pos >= #self.data then return; end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 | if format == "*a" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 | local oldpos = self.pos; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 | self.pos = #self.data; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 | return self.data:sub(oldpos, self.pos); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 | elseif format == "*l" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 | local data; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 | data, self.pos = self.data:match("([^\r\n]*)\r?\n?()", self.pos) |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 | return data; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 | elseif format == "*n" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 | local data; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 | data, self.pos = self.data:match("(%d+)()", self.pos) |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 | return tonumber(data); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 | elseif type(format) == "number" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 | local oldpos = self.pos; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 | self.pos = self.pos + format; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 | return self.data:sub(oldpos, self.pos-1); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 | function vio:seek(whence, offset) |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 | if type(whence) == "number" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 | whence, offset = "cur", whence; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 | offset = offset or 0; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 | if whence == "cur" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 | self.pos = self.pos + offset; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 | elseif whence == "set" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 | self.pos = offset + 1; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 | elseif whence == "end" then |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 | self.pos = #self.data - offset; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 | return self.pos; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 | local function _readline(f) return f:read("*l"); end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 | function vio:lines() |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 | return _readline, self; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 | function vio:write(...) |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 | for i=1,select('#', ...) do |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 | local dat = tostring(select(i, ...)); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 | self.data = self.data:sub(1, self.pos-1)..dat..self.data:sub(self.pos+#dat, -1); |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 | |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 | function vio:close() |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 | self.pos, self.data = nil, nil; |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 | end |
f72a0f535301
Add virtual io support for accessing resources
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 |