Skip to content

Commit de26d82

Browse files
authored
feat: allow TS users to highlight marker delimiters (#623)
1 parent 47b2978 commit de26d82

File tree

1 file changed

+47
-12
lines changed

1 file changed

+47
-12
lines changed

lua/orgmode/colors/markup_highlighter.lua

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,68 @@ local valid_post_marker_chars =
99
local markers = {
1010
['*'] = {
1111
hl_name = 'org_bold',
12-
hl_cmd = 'hi def org_bold term=bold cterm=bold gui=bold',
12+
hl_cmd = 'hi def %s term=bold cterm=bold gui=bold',
13+
delimiter_hl = true,
1314
nestable = true,
1415
type = 'text',
1516
},
1617
['/'] = {
1718
hl_name = 'org_italic',
18-
hl_cmd = 'hi def org_italic term=italic cterm=italic gui=italic',
19+
hl_cmd = 'hi def %s term=italic cterm=italic gui=italic',
20+
delimiter_hl = true,
1921
nestable = true,
2022
type = 'text',
2123
},
2224
['_'] = {
2325
hl_name = 'org_underline',
24-
hl_cmd = 'hi def org_underline term=underline cterm=underline gui=underline',
26+
hl_cmd = 'hi def %s term=underline cterm=underline gui=underline',
27+
delimiter_hl = true,
2528
nestable = true,
2629
type = 'text',
2730
},
2831
['+'] = {
2932
hl_name = 'org_strikethrough',
30-
hl_cmd = 'hi def org_strikethrough term=strikethrough cterm=strikethrough gui=strikethrough',
33+
hl_cmd = 'hi def %s term=strikethrough cterm=strikethrough gui=strikethrough',
34+
delimiter_hl = true,
3135
nestable = true,
3236
type = 'text',
3337
},
3438
['~'] = {
3539
hl_name = 'org_code',
36-
hl_cmd = 'hi def link org_code String',
40+
hl_cmd = 'hi def link %s String',
41+
delimiter_hl = true,
3742
nestable = false,
3843
spell = false,
3944
type = 'text',
4045
},
4146
['='] = {
4247
hl_name = 'org_verbatim',
43-
hl_cmd = 'hi def link org_verbatim String',
48+
hl_cmd = 'hi def link %s String',
49+
delimiter_hl = true,
4450
nestable = false,
4551
spell = false,
4652
type = 'text',
4753
},
4854
['\\('] = {
4955
hl_name = 'org_latex',
50-
hl_cmd = 'hi def link org_latex OrgTSLatex',
56+
hl_cmd = 'hi def link %s OrgTSLatex',
5157
nestable = false,
5258
spell = false,
59+
delimiter_hl = false,
5360
type = 'latex',
5461
},
5562
['\\{'] = {
5663
hl_name = 'org_latex',
57-
hl_cmd = 'hi def link org_latex OrgTSLatex',
64+
hl_cmd = 'hi def link %s OrgTSLatex',
5865
nestable = false,
66+
delimiter_hl = false,
5967
type = 'latex',
6068
},
6169
['\\s'] = {
6270
hl_name = 'org_latex',
63-
hl_cmd = 'hi def link org_latex OrgTSLatex',
71+
hl_cmd = 'hi def link %s OrgTSLatex',
6472
nestable = false,
73+
delimiter_hl = false,
6574
type = 'latex',
6675
},
6776
}
@@ -357,9 +366,32 @@ local function apply(namespace, bufnr, line_index)
357366
local hide_markers = config.org_hide_emphasis_markers
358367

359368
for _, range in ipairs(result.ranges) do
360-
vim.api.nvim_buf_set_extmark(bufnr, namespace, range.from.start.line, range.from.start.character, {
369+
local hl_offset = 0
370+
if markers[range.type].delimiter_hl then
371+
hl_offset = 1
372+
-- Leading delimiter
373+
vim.api.nvim_buf_set_extmark(bufnr, namespace, range.from.start.line, range.from.start.character, {
374+
ephemeral = true,
375+
end_col = range.from.start.character + hl_offset,
376+
hl_group = markers[range.type].hl_name .. '_delimiter',
377+
spell = markers[range.type].spell,
378+
priority = 110 + range.from.start.character,
379+
})
380+
381+
-- Closing delimiter
382+
vim.api.nvim_buf_set_extmark(bufnr, namespace, range.from.start.line, range.to['end'].character - hl_offset, {
383+
ephemeral = true,
384+
end_col = range.to['end'].character,
385+
hl_group = markers[range.type].hl_name .. '_delimiter',
386+
spell = markers[range.type].spell,
387+
priority = 110 + range.from.start.character,
388+
})
389+
end
390+
391+
-- Main body highlight
392+
vim.api.nvim_buf_set_extmark(bufnr, namespace, range.from.start.line, range.from.start.character + hl_offset, {
361393
ephemeral = true,
362-
end_col = range.to['end'].character,
394+
end_col = range.to['end'].character - hl_offset,
363395
hl_group = markers[range.type].hl_name,
364396
spell = markers[range.type].spell,
365397
priority = 110 + range.from.start.character,
@@ -424,7 +456,10 @@ end
424456

425457
local function setup()
426458
for _, marker in pairs(markers) do
427-
vim.cmd(marker.hl_cmd)
459+
vim.cmd(string.format(marker.hl_cmd, marker.hl_name))
460+
if marker.delimiter_hl then
461+
vim.cmd(string.format(marker.hl_cmd, marker.hl_name .. '_delimiter'))
462+
end
428463
end
429464
vim.cmd('hi def link org_hyperlink Underlined')
430465
load_deps()

0 commit comments

Comments
 (0)