52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
...
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
local terra scanline_wordend(l: rawstring, max: intptr, n: rawstring, nc: intptr)
var sl = scanline(l,max,n,nc)
if sl == nil then return nil else sl = sl + nc end
if sl >= l+max or isws(@sl) then return sl-nc end
return nil
end
terra m.html(md: pstr)
if md.ct == 0 then md.ct = lib.str.sz(md.ptr) end
var styled: lib.str.acc styled:init(md.ct)
do var i = 0 while i < md.ct do
var wordstart = (i == 0 or isws(md.ptr[i-1]))
var wordend = (i == md.ct - 1 or isws(md.ptr[i+1]))
var here = md.ptr + i
................................................................................
goto skip
end
end
::fallback::styled:push(here,1) -- :/
i = i + 1
::skip::end end
-- we make two passes: the first detects and transforms inline elements,
-- the second carries out block-level organization
var html: lib.str.acc html:init(styled.sz)
var s = state {
segt = segt.none;
|
|
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
...
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
local terra scanline_wordend(l: rawstring, max: intptr, n: rawstring, nc: intptr)
var sl = scanline(l,max,n,nc)
if sl == nil then return nil else sl = sl + nc end
if sl >= l+max or isws(@sl) then return sl-nc end
return nil
end
terra m.html(input: pstr)
if input.ct == 0 then input.ct = lib.str.sz(input.ptr) end
var md = lib.html.sanitize(input,false)
var styled: lib.str.acc styled:init(md.ct)
do var i = 0 while i < md.ct do
var wordstart = (i == 0 or isws(md.ptr[i-1]))
var wordend = (i == md.ct - 1 or isws(md.ptr[i+1]))
var here = md.ptr + i
................................................................................
goto skip
end
end
::fallback::styled:push(here,1) -- :/
i = i + 1
::skip::end end
md:free()
-- we make two passes: the first detects and transforms inline elements,
-- the second carries out block-level organization
var html: lib.str.acc html:init(styled.sz)
var s = state {
segt = segt.none;
|