@@ -9,59 +9,68 @@ local valid_post_marker_chars =
9
9
local markers = {
10
10
[' *' ] = {
11
11
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 ,
13
14
nestable = true ,
14
15
type = ' text' ,
15
16
},
16
17
[' /' ] = {
17
18
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 ,
19
21
nestable = true ,
20
22
type = ' text' ,
21
23
},
22
24
[' _' ] = {
23
25
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 ,
25
28
nestable = true ,
26
29
type = ' text' ,
27
30
},
28
31
[' +' ] = {
29
32
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 ,
31
35
nestable = true ,
32
36
type = ' text' ,
33
37
},
34
38
[' ~' ] = {
35
39
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 ,
37
42
nestable = false ,
38
43
spell = false ,
39
44
type = ' text' ,
40
45
},
41
46
[' =' ] = {
42
47
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 ,
44
50
nestable = false ,
45
51
spell = false ,
46
52
type = ' text' ,
47
53
},
48
54
[' \\ (' ] = {
49
55
hl_name = ' org_latex' ,
50
- hl_cmd = ' hi def link org_latex OrgTSLatex' ,
56
+ hl_cmd = ' hi def link %s OrgTSLatex' ,
51
57
nestable = false ,
52
58
spell = false ,
59
+ delimiter_hl = false ,
53
60
type = ' latex' ,
54
61
},
55
62
[' \\ {' ] = {
56
63
hl_name = ' org_latex' ,
57
- hl_cmd = ' hi def link org_latex OrgTSLatex' ,
64
+ hl_cmd = ' hi def link %s OrgTSLatex' ,
58
65
nestable = false ,
66
+ delimiter_hl = false ,
59
67
type = ' latex' ,
60
68
},
61
69
[' \\ s' ] = {
62
70
hl_name = ' org_latex' ,
63
- hl_cmd = ' hi def link org_latex OrgTSLatex' ,
71
+ hl_cmd = ' hi def link %s OrgTSLatex' ,
64
72
nestable = false ,
73
+ delimiter_hl = false ,
65
74
type = ' latex' ,
66
75
},
67
76
}
@@ -357,9 +366,32 @@ local function apply(namespace, bufnr, line_index)
357
366
local hide_markers = config .org_hide_emphasis_markers
358
367
359
368
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 , {
361
393
ephemeral = true ,
362
- end_col = range .to [' end' ].character ,
394
+ end_col = range .to [' end' ].character - hl_offset ,
363
395
hl_group = markers [range .type ].hl_name ,
364
396
spell = markers [range .type ].spell ,
365
397
priority = 110 + range .from .start .character ,
424
456
425
457
local function setup ()
426
458
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
428
463
end
429
464
vim .cmd (' hi def link org_hyperlink Underlined' )
430
465
load_deps ()
0 commit comments