summaryrefslogtreecommitdiff
path: root/ar/.config/mpv/script-modules/utf8/begins/compiletime/vanilla.lua
blob: bcafa17a1e7d09240b164bfd38ea7e15aa0582dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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