27
28
29
30
31
32
33
34
35
36
37
38
39
40
..
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
..
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
local segs = {}
local constlen = 0
-- strip out all irrelevant whitespace to tidy things up
-- TODO: find way to exclude <pre> tags?
str = str:gsub('[\n^]%s+','')
str = str:gsub('%s+[\n$]','')
str = str:gsub('\n','')
for start, key, stop in string.gmatch(str,'()'..tplchar..'(%w+)()') do
if string.sub(str,start-1,start-1) ~= '\\' then
segs[#segs+1] = string.sub(str,last,start-1)
fields[#segs] = key
last = stop
end
end
................................................................................
[runningtally] = [runningtally] + lib.str.sz([symself].[key])*fac
end
end
end
local copiers = {}
local senders = {}
local symtxt = symbol(lib.mem.ptr(int8))
local cpypos = symbol(&opaque)
local destcon = symbol(&lib.net.mg_connection)
for idx, seg in ipairs(segs) do
copiers[#copiers+1] = quote [cpypos] = lib.mem.cpy([cpypos], [&opaque]([seg]), [#seg]) end
senders[#senders+1] = quote lib.net.mg_send([destcon], [seg], [#seg]) end
if fields[idx] then
copiers[#copiers+1] = quote
[cpypos] = lib.mem.cpy([cpypos],
[&opaque](symself.[fields[idx]]),
lib.str.sz(symself.[fields[idx]]))
end
senders[#senders+1] = quote
................................................................................
lib.dbg(['compiling template ' .. tid])
[tallyup]
var [symtxt] = lib.mem.heapa(int8, [runningtally])
var [cpypos] = [&opaque](symtxt.ptr)
[copiers]
@[&int8](cpypos) = 0
return symtxt
end
rec.methods.send = terra([symself], [destcon], code: uint16, hd: lib.mem.ptr(lib.http.header))
lib.dbg(['transmitting template ' .. tid])
[tallyup]
lib.net.mg_printf([destcon], 'HTTP/1.1 %s', lib.http.codestr(code))
for i = 0, hd.ct do
lib.net.mg_printf([destcon], '%s: %s\r\n', hd.ptr[i].key, hd.ptr[i].value)
|
|
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
..
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
..
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
local segs = {}
local constlen = 0
-- strip out all irrelevant whitespace to tidy things up
-- TODO: find way to exclude <pre> tags?
str = str:gsub('[\n^]%s+','')
str = str:gsub('%s+[\n$]','')
str = str:gsub('\n','')
str = str:gsub('</a><a ','</a> <a ') -- keep nav links from getting smooshed
for start, key, stop in string.gmatch(str,'()'..tplchar..'(%w+)()') do
if string.sub(str,start-1,start-1) ~= '\\' then
segs[#segs+1] = string.sub(str,last,start-1)
fields[#segs] = key
last = stop
end
end
................................................................................
[runningtally] = [runningtally] + lib.str.sz([symself].[key])*fac
end
end
end
local copiers = {}
local senders = {}
local appenders = {}
local symtxt = symbol(lib.mem.ptr(int8))
local cpypos = symbol(&opaque)
local accumulator = symbol(&lib.str.acc)
local destcon = symbol(&lib.net.mg_connection)
for idx, seg in ipairs(segs) do
copiers[#copiers+1] = quote [cpypos] = lib.mem.cpy([cpypos], [&opaque]([seg]), [#seg]) end
senders[#senders+1] = quote lib.net.mg_send([destcon], [seg], [#seg]) end
appenders[#appenders+1] = quote [accumulator]:push([seg], [#seg]) end
if fields[idx] then
copiers[#copiers+1] = quote
[cpypos] = lib.mem.cpy([cpypos],
[&opaque](symself.[fields[idx]]),
lib.str.sz(symself.[fields[idx]]))
end
senders[#senders+1] = quote
................................................................................
lib.dbg(['compiling template ' .. tid])
[tallyup]
var [symtxt] = lib.mem.heapa(int8, [runningtally])
var [cpypos] = [&opaque](symtxt.ptr)
[copiers]
@[&int8](cpypos) = 0
return symtxt
end
rec.methods.append = terra([symself], [accumulator])
lib.dbg(['appending template ' .. tid])
[tallyup]
accumulator:cue([runningtally])
[appenders]
return accumulator
end
rec.methods.send = terra([symself], [destcon], code: uint16, hd: lib.mem.ptr(lib.http.header))
lib.dbg(['transmitting template ' .. tid])
[tallyup]
lib.net.mg_printf([destcon], 'HTTP/1.1 %s', lib.http.codestr(code))
for i = 0, hd.ct do
lib.net.mg_printf([destcon], '%s: %s\r\n', hd.ptr[i].key, hd.ptr[i].value)
|