vim-polyglot/syntax/nim.vim

202 lines
8.0 KiB
VimL
Raw Normal View History

2016-01-22 03:08:30 -05:00
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nim') == -1
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" Keep user-supplied options
if !exists("nim_highlight_numbers")
let nim_highlight_numbers = 1
endif
if !exists("nim_highlight_builtins")
let nim_highlight_builtins = 1
endif
if !exists("nim_highlight_exceptions")
let nim_highlight_exceptions = 1
endif
if !exists("nim_highlight_space_errors")
let nim_highlight_space_errors = 1
endif
2016-05-30 19:53:12 -04:00
if !exists("nim_highlight_special_vars")
let nim_highlight_special_vars = 1
endif
2016-01-22 03:08:30 -05:00
if exists("nim_highlight_all")
let nim_highlight_numbers = 1
let nim_highlight_builtins = 1
let nim_highlight_exceptions = 1
let nim_highlight_space_errors = 1
2016-05-30 19:53:12 -04:00
let nim_highlight_special_vars = 1
2016-01-22 03:08:30 -05:00
endif
syn region nimBrackets contained extend keepend matchgroup=Bold start=+\(\\\)\@<!\[+ end=+]\|$+ skip=+\\\s*$\|\(\\\)\@<!\\]+ contains=@tclCommandCluster
syn keyword nimKeyword addr and as asm atomic
syn keyword nimKeyword bind block break
2016-05-30 19:53:12 -04:00
syn keyword nimKeyword case cast concept const continue converter
syn keyword nimKeyword defer discard distinct div do
2016-01-22 03:08:30 -05:00
syn keyword nimKeyword elif else end enum except export
2016-05-30 19:53:12 -04:00
syn keyword nimKeyword finally for from func
2016-01-22 03:08:30 -05:00
syn keyword nimKeyword generic
syn keyword nimKeyword if import in include interface is isnot iterator
2016-05-30 19:53:12 -04:00
syn keyword nimKeyword let
2016-01-22 03:08:30 -05:00
syn keyword nimKeyword mixin using mod
syn keyword nimKeyword nil not notin
syn keyword nimKeyword object of or out
syn keyword nimKeyword proc method macro template nextgroup=nimFunction skipwhite
syn keyword nimKeyword ptr
syn keyword nimKeyword raise ref return
syn keyword nimKeyword shared shl shr static
syn keyword nimKeyword try tuple type
syn keyword nimKeyword var
syn keyword nimKeyword when while with without
syn keyword nimKeyword xor
syn keyword nimKeyword yield
syn match nimFunction "[a-zA-Z_][a-zA-Z0-9_]*" contained
syn match nimClass "[a-zA-Z_][a-zA-Z0-9_]*" contained
syn keyword nimRepeat for while
syn keyword nimConditional if elif else case of
syn keyword nimOperator and in is not or xor shl shr div
syn match nimComment "#.*$" contains=nimTodo,@Spell
2016-05-30 19:53:12 -04:00
syn region nimComment start="#\[" end="\]#" contains=nimTodo,@Spell
2016-01-22 03:08:30 -05:00
syn keyword nimTodo TODO FIXME XXX contained
syn keyword nimBoolean true false
" Strings
syn region nimString start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=nimEscape,nimEscapeError,@Spell
syn region nimString start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=nimEscape,nimEscapeError,@Spell
syn region nimString start=+"""+ end=+"""+ keepend contains=nimEscape,nimEscapeError,@Spell
syn region nimRawString matchgroup=Normal start=+[rR]"+ end=+"+ skip=+\\\\\|\\"+ contains=@Spell
syn match nimEscape +\\[abfnrtv'"\\]+ contained
syn match nimEscape "\\\o\{1,3}" contained
syn match nimEscape "\\x\x\{2}" contained
syn match nimEscape "\(\\u\x\{4}\|\\U\x\{8}\)" contained
syn match nimEscape "\\$"
syn match nimEscapeError "\\x\x\=\X" display contained
if nim_highlight_numbers == 1
" numbers (including longs and complex)
syn match nimNumber "\v<0x\x+(\'(i|I|f|F|u|U)(8|16|32|64))?>"
syn match nimNumber "\v<[0-9_]+(\'(i|I|f|F|u|U)(8|16|32|64))?>"
syn match nimNumber "\v[0-9]\.[0-9_]+([eE][+-]=[0-9_]+)=>"
syn match nimNumber "\v<[0-9_]+(\.[0-9_]+)?([eE][+-]?[0-9_]+)?(\'(f|F)(32|64))?>"
endif
if nim_highlight_builtins == 1
" builtin functions, types and objects, not really part of the syntax
syn keyword nimBuiltin int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool
syn keyword nimBuiltin char string cstring pointer range array openarray seq
2016-05-30 19:53:12 -04:00
syn keyword nimBuiltin set Byte Natural Positive Conversion
2016-01-22 03:08:30 -05:00
syn keyword nimBuiltin BiggestInt BiggestFloat cchar cschar cshort cint csize cuchar cushort
syn keyword nimBuiltin clong clonglong cfloat cdouble clongdouble cuint culong culonglong cchar
syn keyword nimBuiltin CompileDate CompileTime nimVersion nimMajor
syn keyword nimBuiltin nimMinor nimPatch cpuEndian hostOS hostCPU inf
syn keyword nimBuiltin neginf nan QuitSuccess QuitFailure dbgLineHook stdin
syn keyword nimBuiltin stdout stderr defined new high low sizeof succ pred
syn keyword nimBuiltin inc dec newSeq len incl excl card ord chr ze ze64
syn keyword nimBuiltin toU8 toU16 toU32 abs min max add repr
syn match nimBuiltin "\<contains\>"
syn keyword nimBuiltin toFloat toBiggestFloat toInt toBiggestInt addQuitProc
syn keyword nimBuiltin copy setLen newString zeroMem copyMem moveMem
syn keyword nimBuiltin equalMem alloc alloc0 realloc dealloc setLen assert
syn keyword nimBuiltin swap getRefcount getCurrentException Msg
syn keyword nimBuiltin getOccupiedMem getFreeMem getTotalMem isNil seqToPtr
syn keyword nimBuiltin find pop GC_disable GC_enable GC_fullCollect
2016-05-30 19:53:12 -04:00
syn keyword nimBuiltin GC_setStrategy GC_enableMarkAndSweep GC_Strategy
2016-01-22 03:08:30 -05:00
syn keyword nimBuiltin GC_disableMarkAnd Sweep GC_getStatistics GC_ref
syn keyword nimBuiltin GC_ref GC_ref GC_unref GC_unref GC_unref quit
syn keyword nimBuiltin OpenFile OpenFile CloseFile EndOfFile readChar
syn keyword nimBuiltin FlushFile readFile write readLine writeln writeln
syn keyword nimBuiltin getFileSize ReadBytes ReadChars readBuffer writeBytes
syn keyword nimBuiltin writeChars writeBuffer setFilePos getFilePos
syn keyword nimBuiltin fileHandle countdown countup items lines
2016-05-30 19:53:12 -04:00
syn keyword nimBuiltin FileMode File RootObj FileHandle ByteAddress Endianness
2016-01-22 03:08:30 -05:00
endif
if nim_highlight_exceptions == 1
" builtin exceptions and warnings
syn keyword nimException E_Base EAsynch ESynch ESystem EIO EOS
syn keyword nimException ERessourceExhausted EArithmetic EDivByZero
syn keyword nimException EOverflow EAccessViolation EAssertionFailed
syn keyword nimException EControlC EInvalidValue EOutOfMemory EInvalidIndex
syn keyword nimException EInvalidField EOutOfRange EStackOverflow
syn keyword nimException ENoExceptionToReraise EInvalidObjectAssignment
syn keyword nimException EInvalidObject EInvalidLibrary EInvalidKey
syn keyword nimException EInvalidObjectConversion EFloatingPoint
syn keyword nimException EFloatInvalidOp EFloatDivByZero EFloatOverflow
syn keyword nimException EFloatInexact EDeadThread EResourceExhausted
syn keyword nimException EFloatUnderflow
endif
if nim_highlight_space_errors == 1
" trailing whitespace
syn match nimSpaceError display excludenl "\S\s\+$"ms=s+1
" any tabs are illegal in nim
syn match nimSpaceError display "\t"
endif
2016-05-30 19:53:12 -04:00
if nim_highlight_special_vars
syn keyword nimSpecialVar result
endif
2016-01-22 03:08:30 -05:00
syn sync match nimSync grouphere NONE "):$"
syn sync maxlines=200
syn sync minlines=2000
if version >= 508 || !exists("did_nim_syn_inits")
if version <= 508
let did_nim_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
" The default methods for highlighting. Can be overridden later
HiLink nimBrackets Operator
HiLink nimKeyword Keyword
HiLink nimFunction Function
HiLink nimConditional Conditional
HiLink nimRepeat Repeat
HiLink nimString String
HiLink nimRawString String
HiLink nimBoolean Boolean
HiLink nimEscape Special
HiLink nimOperator Operator
HiLink nimPreCondit PreCondit
HiLink nimComment Comment
HiLink nimTodo Todo
HiLink nimDecorator Define
2016-05-30 19:53:12 -04:00
HiLink nimSpecialVar Identifier
2016-01-22 03:08:30 -05:00
if nim_highlight_numbers == 1
HiLink nimNumber Number
endif
if nim_highlight_builtins == 1
HiLink nimBuiltin Number
endif
if nim_highlight_exceptions == 1
HiLink nimException Exception
endif
if nim_highlight_space_errors == 1
HiLink nimSpaceError Error
endif
delcommand HiLink
endif
let b:current_syntax = "nim"
endif