Skip to content

Commit 6b9cfb8

Browse files
committed
improve odoc syntax following Github PR ocaml#106
1 parent 09cf05e commit 6b9cfb8

File tree

2 files changed

+45
-19
lines changed

2 files changed

+45
-19
lines changed

syntax/ocaml.vim

+6-4
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ syn region ocamlNone transparent matchgroup=ocamlEncl start="\[|" matchgroup=o
9090
" Comments and documentation
9191
syn keyword ocamlTodo contained TODO FIXME XXX NOTE
9292

93-
syn cluster ocamlCommentLike contains=ocamlComment,ocamlCommentInDoc,ocamlDocumentation,ocamlEmptyDocumentation
93+
syn cluster ocamlCommentLike contains=ocamlComment,ocamlCommentInDoc,ocamlDocumentation,ocamlStopComment
9494

9595
if !exists('odoc_syntax_loading')
9696
" Load odoc syntax only when we are not in a *.mld file
9797
syn region ocamlComment start="(\*" end="\*)" contains=@Spell,ocamlComment,ocamlTodo
9898
syn include @ocamlOdoc syntax/odoc.vim
99-
syn region ocamlDocumentation matchgroup=ocamlComment start="(\*\*" end="\*)" contains=@ocamlOdoc
100-
syn match ocamlEmptyDocumentation "(\*\*)"
99+
syn region ocamlDocumentation matchgroup=ocamlDocEncl start="(\*\*[*)]\@!" end="\*)" contains=@Spell,@ocamlOdoc,ocamlCommentInDoc,ocamlTodo
100+
syn match ocamlStopComment "(\*\*/\*\*)"
101101
else
102102
syn region ocamlCommentInDoc start="(\*" end="\*)" contains=@Spell,ocamlTodo,ocamlCommentInDoc
103103
endif
@@ -333,7 +333,7 @@ syn cluster ocamlTypeExpr add=ocamlTypeParen
333333
syn region ocamlTypeParen contained transparent
334334
\ matchgroup=ocamlEncl start="(\*\@!"
335335
\ matchgroup=ocamlEncl end=")"
336-
\ contains=@ocamlTypeExpr,ocamlComment,ocamlPpx
336+
\ contains=@ocamlTypeExpr,@ocamlCommentLike,ocamlPpx
337337

338338
syn cluster ocamlTypeExpr add=ocamlTypeKeyChar,ocamlTypeAs
339339
syn match ocamlTypeKeyChar contained "->"
@@ -588,6 +588,8 @@ hi def link ocamlErr Error
588588

589589
hi def link ocamlComment Comment
590590
hi def link ocamlCommentInDoc ocamlComment
591+
hi def link ocamlDocEncl ocamlComment
592+
hi def link ocamlStopComment PreProc
591593
hi def link ocamlShebang ocamlComment
592594

593595
hi def link ocamlModPath Include

syntax/odoc.vim

+39-15
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,23 @@ syn case match
2323
syn include @odocSyntaxOCaml syntax/ocaml.vim
2424
unlet b:current_syntax
2525

26-
syn cluster odocInline contains=odocBold,odocItalic,odocEmphasis,odocMiscInline,odocList,odocLink,odocCode,odocCrossref,odocCodeBlock,odocVerbatim,odocTargetSpecific,odocTag
26+
syn spell toplevel
27+
28+
syn cluster odocInline contains=odocBold,odocItalic,odocEmphasis,odocMiscInline,odocList,odocLinkText,odocUrl,odocCrossref,odocCode,odocCodeBlock,odocVerbatim,odocTargetSpecific,odocTag,odocEscaped,odocEscapedError,odocBraceError,odocTagError
29+
30+
syn match odocBraceError "[{}]"
31+
32+
syn region odocLinkText transparent matchgroup=odocMarker start="{\%({[!:]\)\@=" end="}" contains=odocUrl,odocCrossref,@Spell,@odocInline
33+
syn region odocUrl matchgroup=odocUrlMarker start="{:\_s*" end="\_s*}"
2734

28-
syn region odocLink matchgroup=odocLinkMarker start="{" end="}" contains=odocCrossref
2935
syn region odocBold matchgroup=odocMarker start="{b\>" end="}" contains=@Spell,@odocInline
3036
syn region odocEmphasis matchgroup=odocMarker start="{e\>" end="}" contains=@Spell,@odocInline
3137
syn region odocItalic matchgroup=odocMarker start="{i\>" end="}" contains=@Spell,@odocInline
3238
syn region odocMiscInline matchgroup=odocMarker start="{[CLR^_]" end="}" contains=@Spell,@odocInline
3339
syn region odocVerbatim matchgroup=odocMarker start="{v\>" end="\<v}"
3440

41+
syn region odocTargetSpecific matchgroup=odocUnknownTarget start="{%.\{-}:\|{%" end="%}"
42+
3543
if get(g:,'odoc_html_support',0)
3644
syn include @odocHtml syntax/html.vim
3745
unlet b:current_syntax
@@ -40,34 +48,50 @@ else
4048
syn region odocTargetSpecific matchgroup=odocMarker start="{%html:" end="%}" contains=@Spell
4149
endif
4250

43-
syn region odocDyckWord contained start="{" end="}" contains=odocDyckWord
51+
syn region odocDyckWord contained transparent start="{" end="}" contains=odocDyckWord
4452
syn region odocTargetSpecific matchgroup=odocMarker start="{m\%(ath\)\?\>" end="}" contains=odocDyckWord
4553
syn region odocTargetSpecific matchgroup=odocMarker start="{%\%(latex\|texi\|man\):" end="%}" contains=@Spell
46-
syn region odocHeading start="{[0-5]" end="}" contains=@Spell
47-
syn region odocTable matchgroup=odocMarker start="{t\>" end="}" contains=@Spell,@odocInline
48-
syn region odocTable matchgroup=odocMarker start="{table\>" end="}" contains=odocTableRow
49-
syn region odocTableRow matchgroup=odocMarker start="{tr\>" end="}" contains=odocTableEntry
50-
syn region odocTableEntry matchgroup=odocMarker start="{t[dh]\>" end="}" contains=@Spell,@odocInline
51-
syn region odocCode matchgroup=odocMarker start="\[" end="\]"
54+
syn region odocHeading start="{[0-5]\%(\s\|$\|:\)\@=" end="}" contains=@Spell,odocHeadingLabel
55+
syn match odocHeadingLabel contained "\%({[0-5]\)\@<=:[^ \t:]*"
56+
syn region odocTable transparent matchgroup=odocMarker start="{t\>" end="}" contains=@Spell,@odocInline
57+
syn region odocTable transparent matchgroup=odocMarker start="{table\>" end="}" contains=odocTableRow
58+
syn region odocTableRow transparent matchgroup=odocMarker start="{tr\>" end="}" contains=odocTableEntry
59+
syn region odocTableEntry transparent matchgroup=odocMarker start="{t[dh]\>" end="}" contains=@Spell,@odocInline
60+
syn match odocEscapedBracket contained "\\[][]"
61+
syn region odocBalancedBracket contained transparent start="\[" end="]"
62+
syn region odocCode matchgroup=odocMarker start="\[" end="\]" contains=odocBalancedBracket,odocEscapedBracket
5263
syn region odocCodeBlock matchgroup=odocMarker start="{@[^\[]\+\[" end="\]}"
5364
syn region odocCodeBlock matchgroup=odocMarker start="{\%(@ocaml\%(\s[^\[]*\)\?\)\?\[" end="\]}" contains=@odocSyntaxOCaml
5465
syn match odocListMarker "^\s*[-+]\s"
55-
syn region odocListItem contained matchgroup=odocListMarker start="{\%(-\|li\>\)" end="}" contains=@Spell,@odocInline
56-
syn region odocList matchgroup=odocListMarker start="{[ou]l\>" end="}" contains=odocListItem
66+
syn region odocListItem contained transparent matchgroup=odocListMarker start="{\%(-\|li\>\)" end="}" contains=@Spell,@odocInline
67+
syn region odocList transparent matchgroup=odocListMarker start="{[ou]l\>" end="}" contains=odocListItem
5768
" a bit leniant with ":"
5869
syn match odocCrossrefKw contained "\<\%(module\%(-type\)\?\|class\%(-type\)\?\|val\|type\|exception\|method\|constructor\|extension\|field\|instance-variable\|section\|page\)[-:]"
59-
syn region odocCrossref start="{!" end="}" contains=odocCrossrefKw
60-
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 "\\[][{}@\\]"
6176

6277
" Shamelessly borrowed from HTML syntax
6378
hi def odocBold term=bold cterm=bold gui=bold
6479
hi def odocEmphasis term=bold,underline cterm=bold,underline gui=bold,underline
6580
hi def odocItalic term=italic cterm=italic gui=italic
6681

67-
hi def link odocCrossref Float
82+
hi def link odocBraceError Error
83+
hi def link odocUnknownTarget Error
84+
hi def link odocTagError Error
85+
hi def link odocEscapedError Error
86+
hi def link odocEscaped SpecialChar
87+
hi def link odocEscapedBracket odocEscaped
88+
hi def link odocCrossref Label
6889
hi def link odocCrossrefKw Keyword
6990
hi def link odocHeading Title
70-
hi def link odocLink Underlined
91+
hi def link odocHeadingLabel Label
92+
hi def link odocUrl Underlined
93+
hi def link odocUrlMarker odocMarker
94+
hi def link odocCrossrefMarker odocCrossref " or odocMarker
7195
hi def link odocListMarker Operator
7296
hi def link odocMarker Delimiter
7397
hi def link odocTag Keyword

0 commit comments

Comments
 (0)