Skip to content

Commit 65bf1c6

Browse files
committed
[WIP] Add SRFI-7 syntax
1 parent bed74a9 commit 65bf1c6

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

syntax/srfi.vim

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
" Vim syntax file
22
" Language: Scheme
3-
" Last Change: 2021-07-04
3+
" Last Change: 2021-07-09
44
" Author: Mitsuhiro Nakamura <m.nacamura@gmail.com>
55
" URL: https://github.com/mnacamura/vim-r7rs-syntax
66
" License: MIT
@@ -9,9 +9,53 @@ if !exists('b:did_r7rs_syntax')
99
finish
1010
endif
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
1328
syn keyword r7rsSyntax and-let*
1429

30+
" SRFI-7 {{{1
31+
syn region r7rsProgram matchgroup=r7rsDelimiter start=/(\ze[[: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=/(\ze[[:space:]\n]*requires\>/ end=/)/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsCEFeatureId
35+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/(\ze[[:space:]\n]*files\>/ end=/)/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsString
36+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/(\ze[[:space:]\n]*code\>/ end=/)/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,@r7rsData,@r7rsExpressions
37+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/(\ze[[:space:]\n]*feature-cond\>/ end=/)/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsProgramFCClause,r7rsProgramClause
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=/(\ze[[: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=/\[\ze[[:space:]\n]*program/ end=/\]/ contains=r7rsError,@r7rsComments,r7rsProgramSyntax,r7rsProgramClause
44+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/\[\ze[[:space:]\n]*requires/ end=/\]/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsCEFeatureId
45+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/\[\ze[[:space:]\n]*files/ end=/\]/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsString
46+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/\[\ze[[:space:]\n]*code/ end=/\]/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,@r7rsExpressions
47+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/\[\ze[[: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=/{\ze[[:space:]\n]*program/ end=/}/ contains=r7rsError,@r7rsComments,r7rsProgramSyntax,r7rsProgramClause
52+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/{\ze[[:space:]\n]*requires/ end=/}/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsCEFeatureId
53+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/{\ze[[:space:]\n]*files/ end=/}/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,r7rsString
54+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/{\ze[[:space:]\n]*code/ end=/}/ contained contains=r7rsError,@r7rsComments,r7rsProgramSyntaxA,@r7rsExpressions
55+
syn region r7rsProgramClause matchgroup=r7rsDelimiter start=/{\ze[[: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
1660
syn keyword r7rsSyntax receive
1761

@@ -95,6 +139,9 @@ syn keyword r7rsFunction string-replicate string-segment string-split
95139
" Highlights {{{1
96140

97141
hi 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

Comments
 (0)