@@ -9,9 +9,53 @@ if !exists('b:did_r7rs_syntax')
99 finish
1010endif
1111
12+ " Options {{{1
13+
14+ " If (b|g):r7rs_strict is true, the following options are set to obey strict R7RS.
15+ if r7rs#GetOption (' strict' , 0 )
16+ let s: brackets_as_parens = 0
17+ let s: braces_as_parens = 0
18+ else
19+ let s: more_parens = r7rs#GetOption (' more_parens' , ' ]' )
20+ let s: brackets_as_parens = match (s: more_parens , ' [\[\]]' ) > -1
21+ let s: braces_as_parens = match (s: more_parens , ' [{}]' ) > -1
22+ unlet s: more_parens
23+ endif
24+
25+ " }}}
26+
1227" SRFI 2 {{{1
1328syn keyword r7rsSyntax and- let*
1429
30+ " SRFI-7 {{{1
31+ syn region r7rsProgram matchgroup =r7rsDelimiter start =/ (\z e[[:space:]\n ]*program/ end =/ )/ contains =r7rsError,@r7rsComments,r7rsProgramSyntax,r7rsProgramClause
32+ syn keyword r7rsProgramSyntax contained program and or not
33+ syn keyword r7rsProgramSyntaxA contained requires files code feature- cond
34+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ (\z e[[:space:]\n ]*requires/ end =/ )/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsCEFeatureId
35+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ (\z e[[:space:]\n ]*files/ end =/ )/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsString
36+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ (\z e[[:space:]\n ]*code/ end =/ )/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,@r7rsExpressions
37+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ (\z e[[:space:]\n ]*feature-cond/ end =/ )/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsProgramFCClause
38+ syn region r7rsProgramFCClause matchgroup =r7rsDelimiter start =/ (/ end =/ )/ contained contains =r7rsError,@r7rsComments,@r7rsProgramFCRequirements,r7rsProgramClause
39+ syn cluster r7rsProgramFCRequirements contains =r7rsCEFeatureId,r7rsProgramFCRequirementsAON,r7rsFCRequirementsElse
40+ syn region r7rsProgramFCRequirementsAON matchgroup =r7rsDelimiter start =/ (\z e[[:space:]\n ]*\% (and\| or\| not\) / end =/ )/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntax,@r7rsProgramFCRequirements
41+ syn keyword r7rsProgramFCRequirementsElse contained else
42+ if s: brackets_as_parens
43+ syn region r7rsProgram matchgroup =r7rsDelimiter start =/ \[\z e[[:space:]\n ]*program/ end =/ \] / contains =r7rsError,@r7rsComments,r7rsProgramSyntax,r7rsProgramClause
44+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ \[\z e[[:space:]\n ]*requires/ end =/ \] / contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsCEFeatureId
45+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ \[\z e[[:space:]\n ]*files/ end =/ \] / contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsString
46+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ \[\z e[[:space:]\n ]*code/ end =/ \] / contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,@r7rsExpressions
47+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ \[\z e[[:space:]\n ]*feature-cond/ end =/ \] / contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsProgramFCClause
48+ syn region r7rsProgramFCClause matchgroup =r7rsDelimiter start =/ \[ / end =/ \] / contained contains =r7rsError,@r7rsComments,@r7rsProgramFCRequirements,r7rsProgramClause
49+ endif
50+ if s: braces_as_parens
51+ syn region r7rsProgram matchgroup =r7rsDelimiter start =/ {\z e[[:space:]\n ]*program/ end =/ }/ contains =r7rsError,@r7rsComments,r7rsProgramSyntax,r7rsProgramClause
52+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ {\z e[[:space:]\n ]*requires/ end =/ }/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsCEFeatureId
53+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ {\z e[[:space:]\n ]*files/ end =/ }/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsString
54+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ {\z e[[:space:]\n ]*code/ end =/ }/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,@r7rsExpressions
55+ syn region r7rsProgramClause matchgroup =r7rsDelimiter start =/ {\z e[[:space:]\n ]*feature-cond/ end =/ }/ contained contains =r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsProgramFCClause
56+ syn region r7rsProgramFCClause matchgroup =r7rsDelimiter start =/ {/ end =/ }/ contained contains =r7rsError,@r7rsComments,@r7rsProgramFCRequirements,r7rsProgramClause
57+ endif
58+
1559" SRFI 8 {{{1
1660syn keyword r7rsSyntax receive
1761
@@ -95,6 +139,9 @@ syn keyword r7rsFunction string-replicate string-segment string-split
95139" Highlights {{{1
96140
97141hi def link r7rsShebang r7rsComment
142+ hi def link r7rsProgramSyntax r7rsLibrarySyntax
143+ hi def link r7rsProgramSyntaxA r7rsLibrarySyntaxA
144+ hi def link r7rsProgramFCRequirementsElse r7rsProgramSyntaxA
98145
99146" }}}
100147
0 commit comments