blob: 7e1a2513e2a849e16b7dce03d37cd3cb59c1588f [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
Bram Moolenaar0daafaa2022-09-04 17:45:43 +01005" Website: https://github.com/habamax/vim-gdscript
Bram Moolenaar9b03d3e2022-08-30 20:26:34 +01006
7if exists("b:current_syntax")
8 finish
9endif
10
Bram Moolenaar0daafaa2022-09-04 17:45:43 +010011let s:keepcpo = &cpo
Bram Moolenaar9b03d3e2022-08-30 20:26:34 +010012set cpo&vim
13
14syn match gdResourceNumber "\<0x\%(_\=\x\)\+\>"
15syn match gdResourceNumber "\<0b\%(_\=[01]\)\+\>"
16syn match gdResourceNumber "\<\d\%(_\=\d\)*\>"
17syn match gdResourceNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
18syn match gdResourceNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@="
19syn match gdResourceNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
20
21syn keyword gdResourceKeyword true false
22
23syn region gdResourceString
24 \ start=+[uU]\="+ end='"' skip='\\\\\|\\"'
25 \ contains=@Spell keepend
26
27" Section
28syn region gdResourceSection matchgroup=gdResourceSectionDelimiter
29 \ start='^\[' end=']\s*$'
30 \ oneline keepend
31 \ contains=gdResourceSectionName,gdResourceSectionAttribute
32
33syn match gdResourceSectionName '\[\@<=\S\+' contained skipwhite
34syn match gdResourceSectionAttribute '\S\+\s*=\s*\S\+'
35 \ skipwhite keepend contained
36 \ contains=gdResourceSectionAttributeName,gdResourceSectionAttributeValue
37syn match gdResourceSectionAttributeName '\S\+\ze\(\s*=\)' skipwhite contained
38syn match gdResourceSectionAttributeValue '\(=\s*\)\zs\S\+\ze' skipwhite
39 \ contained
40 \ contains=gdResourceString,gdResourceNumber,gdResourceKeyword
41
42
43" Section body
44syn match gdResourceAttribute '^\s*\S\+\s*=.*$'
45 \ skipwhite keepend
46 \ contains=gdResourceAttributeName,gdResourceAttributeValue
47
48syn match gdResourceAttributeName '\S\+\ze\(\s*=\)' skipwhite contained
49syn match gdResourceAttributeValue '\(=\s*\)\zs.*$' skipwhite
50 \ contained
51 \ contains=gdResourceString,gdResourceNumber,gdResourceKeyword
52
53
54hi def link gdResourceNumber Constant
55hi def link gdResourceKeyword Constant
56hi def link gdResourceSectionName Statement
57hi def link gdResourceSectionDelimiter Delimiter
58hi def link gdResourceSectionAttributeName Type
59hi def link gdResourceAttributeName Identifier
60hi def link gdResourceString String
61
62let b:current_syntax = "gdresource"
63
64let &cpo = s:keepcpo
65unlet s:keepcpo