Skip to content

Commit

Permalink
Handle scheme multi-line and datum comments
Browse files Browse the repository at this point in the history
  • Loading branch information
kovisoft committed Jun 27, 2020
1 parent b04b425 commit ed0a497
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 7 deletions.
30 changes: 27 additions & 3 deletions plugin/paredit.vim
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
" paredit.vim:
" Paredit mode for Slimv
" Version: 0.9.14
" Last Change: 18 Jun 2020
" Last Change: 27 Jun 2020
" Maintainer: Tamas Kovacs <kovisoft at gmail dot com>
" License: This file is placed in the public domain.
" No warranty, express or implied.
Expand Down Expand Up @@ -80,6 +80,12 @@ let s:yank_pos = []
" Filetypes with [] and {} pairs balanced as well
let s:fts_balancing_all_brackets = '.*\(clojure\|hy\|scheme\|racket\|shen\|lfe\|fennel\|janet\).*'

" Filetypes with multiline comment #| ... |#
let s:fts_multiline_comment = '.*\(scheme\|racket\).*'

" Filetypes with datum comment #;(...)
let s:fts_datum_comment = '.*\(scheme\).*'

" =====================================================================
" General utility functions
" =====================================================================
Expand Down Expand Up @@ -653,6 +659,7 @@ endfunction
function! s:GetMatchedChars( lines, start_in_string, start_in_comment )
let inside_string = a:start_in_string
let inside_comment = a:start_in_comment
let multiline_comment = 0
let matched = repeat( ' ', len( a:lines ) )
let i = 0
while i < len( a:lines )
Expand All @@ -665,8 +672,17 @@ function! s:GetMatchedChars( lines, start_in_string, start_in_comment )
endif
elseif inside_comment
" We are inside a comment, skip parens, wait for end of line
if a:lines[i] == "\n"
let inside_comment = 0
if multiline_comment > 0
if a:lines[i] == "#" && i > 0 && a:lines[i-1] == '|'
let multiline_comment = multiline_comment - 1
if multiline_comment == 0
let inside_comment = 0
endif
endif
else
if a:lines[i] == "\n"
let inside_comment = 0
endif
endif
elseif i > 0 && a:lines[i-1] == '\' && (i < 2 || a:lines[i-2] != '\')
" This is an escaped character, ignore it
Expand All @@ -678,6 +694,14 @@ function! s:GetMatchedChars( lines, start_in_string, start_in_comment )
endif
if a:lines[i] == ';'
let inside_comment = 1
if &ft =~ s:fts_datum_comment && i > 0 && a:lines[i-1] == '#'
" Datum comment: pretend that we are not inside comment
let inside_comment = 0
endif
endif
if &ft =~ s:fts_multiline_comment && a:lines[i] == "|" && i > 0 && a:lines[i-1] == '#'
let inside_comment = 1
let multiline_comment = multiline_comment + 1
endif
if a:lines[i] =~ b:any_openclose_char
let matched = strpart( matched, 0, i ) . a:lines[i] . strpart( matched, i+1 )
Expand Down
17 changes: 13 additions & 4 deletions syntax/scheme/slimv-syntax-scheme.vim
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
" slimv-syntax-scheme.vim:
" Scheme syntax plugin for Slimv
" Version: 0.9.9
" Last Change: 10 Nov 2012
" Version: 0.9.14
" Last Change: 27 Jun 2020
" Maintainer: Tamas Kovacs <kovisoft at gmail dot com>
" License: This file is placed in the public domain.
" No warranty, express or implied.
Expand All @@ -18,16 +18,25 @@ runtime syntax/**/scheme.vim

" Add lisp_rainbow handling

syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment
syn keyword schemeExtSyntax ->environment ->namestring
syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
syn match schemeAtomMark "'"
syn match schemeAtom "'[^ \t()\[\]{}]\+" contains=schemeAtomMark
syn cluster schemeListCluster contains=schemeSyntax,schemeFunc,schemeString,schemeCharacter,schemeNumber,schemeBoolean,schemeConstant,schemeComment,schemeMultilineComment,schemeQuoted,schemeUnquote,schemeStrucRestricted,schemeOther,schemeError,schemeExtSyntax,schemeExtFunc,schemeAtom,schemeDelimiter

try
" Check if using a more recent version of scheme.vim
" that defines multi-line and datum comments
silent syn list schemeDatumComment
syn cluster schemeListCluster contains=schemeSyntax,schemeFunc,schemeString,schemeCharacter,schemeNumber,schemeBoolean,schemeConstant,schemeComment,schemeMultilineComment,schemeDatumComment,schemeQuoted,schemeUnquote,schemeStrucRestricted,schemeOther,schemeError,schemeExtSyntax,schemeExtFunc,schemeAtom,schemeDelimiter
catch
syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment
syn cluster schemeListCluster contains=schemeSyntax,schemeFunc,schemeString,schemeCharacter,schemeNumber,schemeBoolean,schemeConstant,schemeComment,schemeMultilineComment,schemeQuoted,schemeUnquote,schemeStrucRestricted,schemeOther,schemeError,schemeExtSyntax,schemeExtFunc,schemeAtom,schemeDelimiter
endtry

hi def link schemeAtomMark Delimiter
hi def link schemeAtom Identifier


if exists("g:lisp_rainbow") && g:lisp_rainbow != 0
syn region schemeParen0 matchgroup=hlLevel0 start="`\=(" end=")" skip="|.\{-}|" contains=@schemeListCluster,schemeParen1
syn region schemeParen1 contained matchgroup=hlLevel1 start="`\=(" end=")" skip="|.\{-}|" contains=@schemeListCluster,schemeParen2
Expand Down

0 comments on commit ed0a497

Please sign in to comment.