@@ -9,59 +9,68 @@ local valid_post_marker_chars =
99local 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 ,
424456
425457local 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