Skip to content

Commit 46b0d41

Browse files
chore: add helper method for finding all ranges of pattern in a string
1 parent d15a144 commit 46b0d41

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

lua/render-markdown/health.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ local state = require('render-markdown.state')
55
local M = {}
66

77
---@private
8-
M.version = '7.8.15'
8+
M.version = '7.8.16'
99

1010
function M.check()
1111
M.start('version')

lua/render-markdown/lib/str.lua

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,23 @@ function M.pad_to(target, s)
3939
return M.pad(M.width(target) - M.width(s))
4040
end
4141

42+
---@param s string
43+
---@param pattern string
44+
---@return Range2[]
45+
function M.find_all(s, pattern)
46+
local result = {}
47+
---@type integer?
48+
local index = 1
49+
while index ~= nil do
50+
local start_index, end_index = s:find(pattern, index)
51+
if start_index == nil or end_index == nil then
52+
index = nil
53+
else
54+
table.insert(result, { start_index, end_index })
55+
index = end_index + 1
56+
end
57+
end
58+
return result
59+
end
60+
4261
return M

lua/render-markdown/render/inline_highlight.lua

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,19 @@ function Render:setup()
1616
end
1717

1818
function Render:render()
19-
---@type integer|nil
20-
local index = 1
21-
while index ~= nil do
22-
local start_index, end_index = self.node.text:find('==[^=]+==', index)
23-
if start_index == nil or end_index == nil then
24-
index = nil
25-
else
26-
local start_row, start_col = self:row_col(start_index, 1)
27-
local end_row, end_col = self:row_col(end_index, 0)
28-
-- Hide first 2 equal signs
29-
self:hide_equals(start_row, start_col)
30-
-- Highlight contents
31-
self.marks:add(false, start_row, start_col, {
32-
end_row = end_row,
33-
end_col = end_col,
34-
hl_group = self.highlight.highlight,
35-
})
36-
-- Hide last 2 equal signs
37-
self:hide_equals(end_row, end_col - 2)
38-
index = end_index + 1
39-
end
19+
for _, range in ipairs(Str.find_all(self.node.text, '==[^=]+==')) do
20+
local start_row, start_col = self:row_col(range[1], 1)
21+
local end_row, end_col = self:row_col(range[2], 0)
22+
-- Hide first 2 equal signs
23+
self:hide_equals(start_row, start_col)
24+
-- Highlight contents
25+
self.marks:add(false, start_row, start_col, {
26+
end_row = end_row,
27+
end_col = end_col,
28+
hl_group = self.highlight.highlight,
29+
})
30+
-- Hide last 2 equal signs
31+
self:hide_equals(end_row, end_col - 2)
4032
end
4133
end
4234

0 commit comments

Comments
 (0)