LoveFrames/loveframes/third-party/utf8/begins/compiletime/vanilla.lua
2020-08-04 11:28:04 +01:00

61 lines
1.1 KiB
Lua

return function(utf8)
local matchers = {
sliding = function()
return [[
add(function(ctx) -- sliding
while ctx.pos <= ctx.len do
local clone = ctx:clone()
-- debug('starting from', clone, "start_pos", clone.pos)
clone.result.start = clone.pos
clone:next_function()
clone:get_function()(clone)
ctx:next_char()
end
ctx:terminate()
end)
]]
end,
fromstart = function(ctx)
return [[
add(function(ctx) -- fromstart
if ctx.byte_pos > ctx.len then
return
end
ctx.result.start = ctx.pos
ctx:next_function()
ctx:get_function()(ctx)
ctx:terminate()
end)
]]
end,
}
local function default()
return matchers.sliding()
end
local function parse(regex, c, bs, ctx)
if bs ~= 1 then return end
local functions
local skip = 0
if c == '^' then
functions = matchers.fromstart()
skip = 1
else
functions = matchers.sliding()
end
return functions, skip
end
return {
parse = parse,
default = default,
}
end