Skip to content

Commit b223382

Browse files
committed
syntax/odoc: improve following review of ocaml#106
- support escaped characters (`odocEscaped, odocEscapedError`) - support escaped brackets and well-balanced brackets within `odocCode` - report erroneous @tags (`odocTagError`) - fix the regex for @tags so that it matches exact words, not prefixes - define the `odocCrossrefMarker` match group
1 parent bed49ad commit b223382

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

syntax/odoc.vim

+19-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ syn case match
2525
syn include @odocSyntaxOCaml syntax/ocaml.vim
2626
unlet b:current_syntax
2727

28-
syn cluster odocInline contains=odocBold,odocItalic,odocEmphasis,odocMiscInline,odocList,odocLinkText,odocUrl,odocBraceError,odocCode,odocCrossref,odocCodeBlock,odocVerbatim,odocTargetSpecific,odocTag
28+
syn cluster odocInline contains=odocBold,odocItalic,odocEmphasis,odocMiscInline,odocList,odocLinkText,odocUrl,odocCrossref,odocCode,odocCodeBlock,odocVerbatim,odocTargetSpecific,odocTag,odocEscaped,odocEscapedError,odocBraceError,odocTagError
2929

3030
syn match odocBraceError "[{}]"
3131

@@ -57,33 +57,45 @@ syn region odocTable matchgroup=odocMarker start="{t\>" end="}" contains=@Spell,
5757
syn region odocTable matchgroup=odocMarker start="{table\>" end="}" contains=odocTableRow
5858
syn region odocTableRow matchgroup=odocMarker start="{tr\>" end="}" contains=odocTableEntry
5959
syn region odocTableEntry matchgroup=odocMarker start="{t[dh]\>" end="}" contains=@Spell,@odocInline
60-
syn region odocCode matchgroup=odocMarker start="\[" end="\]"
60+
syn match odocEscapedBracket contained "\\[][]"
61+
syn region odocBalancedBracket contained start="\[" end="]"
62+
syn region odocCode matchgroup=odocMarker start="\[" end="\]" contains=odocBalancedBracket,odocEscapedBracket
6163
syn region odocCodeBlock matchgroup=odocMarker start="{@[^\[]\+\[" end="\]}"
6264
syn region odocCodeBlock matchgroup=odocMarker start="{\%(@ocaml\%(\s[^\[]*\)\?\)\?\[" end="\]}" contains=@odocSyntaxOCaml
6365
syn match odocListMarker "^\s*[-+]\s"
6466
syn region odocListItem contained matchgroup=odocListMarker start="{\%(-\|li\>\)" end="}" contains=@Spell,@odocInline
6567
syn region odocList matchgroup=odocListMarker start="{[ou]l\>" end="}" contains=odocListItem
6668
" a bit leniant with ":"
6769
syn match odocCrossrefKw contained "\<\%(module\%(-type\)\?\|class\%(-type\)\?\|val\|type\|exception\|method\|constructor\|extension\|field\|instance-variable\|section\|page\)[-:]"
68-
syn region odocCrossref start="{!" end="}" contains=odocCrossrefKw
69-
syn match odocTag "@\%(author\|deprecated\|param\|raise\|return\|see\|since\|before\|version\)"
70+
syn region odocCrossref matchgroup=odocCrossrefMarker start="{!" end="}" contains=odocCrossrefKw
71+
syn match odocTagError "@[a-zA-Z]*"
72+
syn match odocTag "@\%(author\|deprecated\|param\|raise\|return\|see\|since\|before\|version\)\>"
73+
74+
syn match odocEscapedError "\\."
75+
syn match odocEscaped "\\[][{}@\\]"
7076

7177
" Shamelessly borrowed from HTML syntax
7278
hi def odocBold term=bold cterm=bold gui=bold
7379
hi def odocEmphasis term=underline cterm=underline gui=underline
7480
hi def odocItalic term=italic cterm=italic gui=italic
7581

76-
hi def link odocCrossref Float
82+
hi def link odocUrlMarker odocMarker
83+
hi def link odocUrl Underlined
84+
hi def link odocCrossrefMarker odocCrossref " or odocMarker
85+
hi def link odocCrossref Label
7786
hi def link odocCrossrefKw Keyword
7887
hi def link odocHeading Title
7988
hi def link odocHeadingLabel Label
8089
hi def link odocListMarker Operator
8190
hi def link odocMarker Delimiter
8291
hi def link odocTag Keyword
92+
8393
hi def link odocBraceError Error
84-
hi def link odocUrlMarker odocMarker
85-
hi def link odocUrl Underlined
8694
hi def link odocUnknownTarget Error
95+
hi def link odocTagError Error
96+
hi def link odocEscapedError Error
97+
hi def link odocEscaped SpecialChar
98+
hi def link odocEscapedBracket odocEscaped
8799

88100
let b:current_syntax = "odoc"
89101

0 commit comments

Comments
 (0)