blob: eb500aa6c2f60fb3a69a26cf6c471a185a8d48c4 [file] [log] [blame]
Bram Moolenaar9b03d3e2022-08-30 20:26:34 +01001" Vim syntax file for Godot resource (scenes)
2" Language: gdresource
3" Maintainer: Maxim Kim <habamax@gmail.com>
4" Filenames: *.tscn, *.tres
5
6if exists("b:current_syntax")
7 finish
8endif
9
10let s:keepcpo= &cpo
11set cpo&vim
12
13syn match gdResourceNumber "\<0x\%(_\=\x\)\+\>"
14syn match gdResourceNumber "\<0b\%(_\=[01]\)\+\>"
15syn match gdResourceNumber "\<\d\%(_\=\d\)*\>"
16syn match gdResourceNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
17syn match gdResourceNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@="
18syn match gdResourceNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
19
20syn keyword gdResourceKeyword true false
21
22syn region gdResourceString
23 \ start=+[uU]\="+ end='"' skip='\\\\\|\\"'
24 \ contains=@Spell keepend
25
26" Section
27syn region gdResourceSection matchgroup=gdResourceSectionDelimiter
28 \ start='^\[' end=']\s*$'
29 \ oneline keepend
30 \ contains=gdResourceSectionName,gdResourceSectionAttribute
31
32syn match gdResourceSectionName '\[\@<=\S\+' contained skipwhite
33syn match gdResourceSectionAttribute '\S\+\s*=\s*\S\+'
34 \ skipwhite keepend contained
35 \ contains=gdResourceSectionAttributeName,gdResourceSectionAttributeValue
36syn match gdResourceSectionAttributeName '\S\+\ze\(\s*=\)' skipwhite contained
37syn match gdResourceSectionAttributeValue '\(=\s*\)\zs\S\+\ze' skipwhite
38 \ contained
39 \ contains=gdResourceString,gdResourceNumber,gdResourceKeyword
40
41
42" Section body
43syn match gdResourceAttribute '^\s*\S\+\s*=.*$'
44 \ skipwhite keepend
45 \ contains=gdResourceAttributeName,gdResourceAttributeValue
46
47syn match gdResourceAttributeName '\S\+\ze\(\s*=\)' skipwhite contained
48syn match gdResourceAttributeValue '\(=\s*\)\zs.*$' skipwhite
49 \ contained
50 \ contains=gdResourceString,gdResourceNumber,gdResourceKeyword
51
52
53hi def link gdResourceNumber Constant
54hi def link gdResourceKeyword Constant
55hi def link gdResourceSectionName Statement
56hi def link gdResourceSectionDelimiter Delimiter
57hi def link gdResourceSectionAttributeName Type
58hi def link gdResourceAttributeName Identifier
59hi def link gdResourceString String
60
61let b:current_syntax = "gdresource"
62
63let &cpo = s:keepcpo
64unlet s:keepcpo