add vim syntax

This commit is contained in:
SimonFJ20 2024-12-12 13:35:05 +01:00
parent 51685ddd97
commit 72cbf727d0
4 changed files with 72 additions and 0 deletions

View File

@ -0,0 +1,2 @@
autocmd BufNewFile,BufRead *.slg setfiletype slige
autocmd BufNewFile,BufRead *.slgbc setfiletype json

View File

@ -0,0 +1 @@
setlocal commentstring=//%s

View File

@ -0,0 +1,23 @@
setlocal indentexpr=SligeIndent()
function! SligeIndent()
let line = getline(v:lnum)
let previousNum = prevnonblank(v:lnum - 1)
let previous = getline(previousNum)
if previous =~ "(" && previous !~ ")" && (line !~ ")" || line !~ "%)")
return indent(previousNum) + &shiftwidth
elseif (line =~ ")" || line =~ "%)") && line !~ "("
return indent(previousNum) - &shiftwidth
elif previous =~ "{" && previous !~ "}" && (line !~ "}" || line !~ "%}")
return indent(previousNum) + &shiftwidth
elseif (line =~ "}" || line =~ "%}") && line !~ "{"
return indent(previousNum) - &shiftwidth
elif previous =~ "[" && previous !~ "]" && (line !~ "]" || line !~ "%]")
return indent(previousNum) + &shiftwidth
elseif (line =~ "]" || line =~ "%]") && line !~ "["
return indent(previousNum) - &shiftwidth
else
return indent(previousNum)
endif
endfunction

View File

@ -0,0 +1,46 @@
" Vim syntax file
" Language: Slige
" Maintainer: SFJ
" Latest Revision: 1 January 1984
if exists("b:current_syntax")
finish
endif
syn keyword Keyword break return let fn loop if else struct import or and not
syn keyword Special null
syn keyword Type int string
syn keyword Boolean true false
syn match Operator '+'
syn match Operator '-'
syn match Operator '\*'
syn match Operator '/'
syn match Operator '='
syn match Operator '=='
syn match Operator '!='
syn match Operator '<'
syn match Operator '>'
syn match Operator '<='
syn match Operator '>='
syn match Operator '\.'
syn match Operator ':'
syn match Operator '->'
syn match Number '0'
syn match Number '[1-9][0-9]*'
syn match Number '0[0-7]\+'
syn match Number '0x[0-9a-fA-F]\+'
syn match Number '0b[01]\+'
syn region String start=+"+ skip=+\\"+ end=+"+
syn keyword Todo contained TODO FIXME XXX NOTE
syn match Comment "/\*.*\*/" contains=Todo
syn match Comment "//.*$" contains=Todo
syn match Function '[a-zA-Z_]\w*\ze('
syn region sligeBlock start="{" end="}" transparent fold
let b:current_syntax = "slige"