forked from aniani/vim
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file
 | ||
| " Language:     WebAssembly
 | ||
| " Maintainer:   rhysd <lin90162@yahoo.co.jp>
 | ||
| " Last Change:  Jul 29, 2018
 | ||
| " For bugs, patches and license go to https://github.com/rhysd/vim-wasm
 | ||
| 
 | ||
| if exists("b:current_syntax")
 | ||
|     finish
 | ||
| endif
 | ||
| 
 | ||
| let s:cpo_save = &cpo
 | ||
| set cpo&vim
 | ||
| 
 | ||
| syn cluster wastCluster       contains=wastModule,wastInstWithType,wastInstGeneral,wastParamInst,wastControlInst,wastString,wastNamedVar,wastUnnamedVar,wastFloat,wastNumber,wastComment,wastList,wastType
 | ||
| 
 | ||
| " Instructions
 | ||
| " https://webassembly.github.io/spec/core/text/instructions.html
 | ||
| " Note: memarg (align=,offset=) can be added to memory instructions
 | ||
| syn match   wastInstWithType  "\%((\s*\)\@<=\<\%(i32\|i64\|f32\|f64\|memory\)\.[[:alnum:]_]\+\%(/\%(i32\|i64\|f32\|f64\)\)\=\>\%(\s\+\%(align\|offset\)=\)\=" contained display
 | ||
| syn match   wastInstGeneral   "\%((\s*\)\@<=\<[[:alnum:]_]\+\>" contained display
 | ||
| " https://webassembly.github.io/spec/core/text/instructions.html#control-instructions
 | ||
| syn match   wastControlInst   "\%((\s*\)\@<=\<\%(block\|end\|loop\|if\|else\|unreachable\|nop\|br\|br_if\|br_table\|return\|call\|call_indirect\)\>" contained display
 | ||
| " https://webassembly.github.io/spec/core/text/instructions.html#parametric-instructions
 | ||
| syn match   wastParamInst     "\%((\s*\)\@<=\<\%(drop\|select\)\>" contained display
 | ||
| 
 | ||
| " Identifiers
 | ||
| " https://webassembly.github.io/spec/core/text/values.html#text-id
 | ||
| syn match   wastNamedVar      "$\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]*" contained display
 | ||
| syn match   wastUnnamedVar    "$\+\d\+[[:alnum:]!#$%&'∗./:=><?@\\^_`~+-]\@!" contained display
 | ||
| 
 | ||
| " String literals
 | ||
| " https://webassembly.github.io/spec/core/text/values.html#strings
 | ||
| syn region  wastString        start=+"+ skip=+\\\\\|\\"+ end=+"+ contained contains=wastStringSpecial
 | ||
| syn match   wastStringSpecial "\\\x\x\|\\[tnr'\\\"]\|\\u\x\+" contained containedin=wastString
 | ||
| 
 | ||
| " Float literals
 | ||
| " https://webassembly.github.io/spec/core/text/values.html#floating-point
 | ||
| syn match   wastFloat         "\<-\=\d\%(_\=\d\)*\%(\.\d\%(_\=\d\)*\)\=\%([eE][-+]\=\d\%(_\=\d\)*\)\=" display contained
 | ||
| syn match   wastFloat         "\<-\=0x\x\%(_\=\d\)*\%(\.\x\%(_\=\x\)*\)\=\%([pP][-+]\=\d\%(_\=\d\)*\)\=" display contained
 | ||
| syn keyword wastFloat         inf nan contained
 | ||
| 
 | ||
| " Integer literals
 | ||
| " https://webassembly.github.io/spec/core/text/values.html#integers
 | ||
| syn match   wastNumber        "\<-\=\d\%(_\=\d\)*\>" display contained
 | ||
| syn match   wastNumber        "\<-\=0x\x\%(_\=\x\)*\>" display contained
 | ||
| 
 | ||
| " Comments
 | ||
| " https://webassembly.github.io/spec/core/text/lexical.html#comments
 | ||
| syn region  wastComment       start=";;" end="$" display
 | ||
| syn region  wastComment       start="(;;\@!" end=";)"
 | ||
| 
 | ||
| syn region  wastList          matchgroup=wastListDelimiter start="(;\@!" matchgroup=wastListDelimiter end=";\@<!)" contains=@wastCluster
 | ||
| 
 | ||
| " Types
 | ||
| " https://webassembly.github.io/spec/core/text/types.html
 | ||
| syn keyword wastType          i64 i32 f64 f32 param result anyfunc mut contained
 | ||
| syn match   wastType          "\%((\_s*\)\@<=func\%(\_s*[()]\)\@=" display contained
 | ||
| 
 | ||
| " Modules
 | ||
| " https://webassembly.github.io/spec/core/text/modules.html
 | ||
| syn keyword wastModule        module type export import table memory global data elem contained
 | ||
| syn match   wastModule        "\%((\_s*\)\@<=func\%(\_s\+\$\)\@=" display contained
 | ||
| 
 | ||
| syn sync lines=100
 | ||
| 
 | ||
| hi def link wastModule        PreProc
 | ||
| hi def link wastListDelimiter Delimiter
 | ||
| hi def link wastInstWithType  Operator
 | ||
| hi def link wastInstGeneral   Operator
 | ||
| hi def link wastControlInst   Statement
 | ||
| hi def link wastParamInst     Conditional
 | ||
| hi def link wastString        String
 | ||
| hi def link wastStringSpecial Special
 | ||
| hi def link wastNamedVar      Identifier
 | ||
| hi def link wastUnnamedVar    PreProc
 | ||
| hi def link wastFloat         Float
 | ||
| hi def link wastNumber        Number
 | ||
| hi def link wastComment       Comment
 | ||
| hi def link wastType          Type
 | ||
| 
 | ||
| let b:current_syntax = "wast"
 | ||
| 
 | ||
| let &cpo = s:cpo_save
 | ||
| unlet s:cpo_save
 |