-
Notifications
You must be signed in to change notification settings - Fork 138
/
pir_vim.in
113 lines (95 loc) · 4.54 KB
/
pir_vim.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
" Vim syntax file
" Language: Parrot IMCC
" Maintainer: Luke Palmer <fibonaci@babylonia.flatirons.org>
" Modified: Joshua Isom
" Last Change: Jan 6 2006
" For installation please read:
" :he filetypes
" :he syntax
"
" 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
syntax clear
syn include @Pod syntax/pod.vim
syn region pirPod start="^=[a-z]" end="^=cut" keepend contains=@Pod fold
syn keyword pirType int float num string pmc
syn match pirPMC /\.\(Compiler\|Continuation\|Coroutine\|CSub\|NCI\|Eval\|Sub\|Scratchpad\)/
syn match pirPMC /\.\(BigInt\|Boolean\|Complex\|Float\|Integer\|PMC\|String\|Hash\)/
syn match pirPMC /\.\(Fixed\|Resizable\)\(Boolean\|Float\|Integer\|PMC\|String\)Array/
syn match pirPMC /\.\(IntList\|Iterator\|Key\|ManagedStruct\|UnManagedStruct\|Pointer\)/
syn match pirPMC /\.\(FloatVal\|Multi\|S\|String\)\?Array/
syn match pirPMC /\.Perl\(Array\|Env\|Hash\|Int\|Num\|Scalar\|String\|Undef\)/
syn match pirPMC /\.Parrot\(Class\|Interpreter\|IO\|Library\|Object\|Thread\)/
syn keyword pirPMC self
syn keyword pirOp goto if unless global addr
syn match pirDirectiveSub /\.\(sub\|end\s*$\)/
syn match pirDirectiveMacro /\.\(macro\|endm\)/
syn match pirDirective /\.\(pcc_sub\|emit\|eom\)/
syn match pirDirective /\.\(local\|sym\|const\|lex\|global\|globalconst\)/
syn match pirDirective /\.\(endnamespace\|namespace\)/
syn match pirDirective /\.\(param\|arg\|return\|yield\)/
syn match pirDirective /\.\(pragma\|HLL\|include\|loadlib\)/
syn match pirDirective /\.\(pcc_begin\|pcc_call\|pcc_end\|invocant\|meth_call\|nci_call\)/
syn match pirDirective /\.\(pcc_begin_return\|pcc_end_return\)/
syn match pirDirective /\.\(pcc_begin_yield\|pcc_end_yield\)/
syn match pirDirective /:\(main\|method\|load\|init\|anon\|multi\|immediate\|outer\|lex\|vtable|nsentry\|subid\)/
syn match pirDirective /:\(flat\|slurpy\|optional\|opt_flag\|named\)/
" Macro invocation
syn match pirDirective /\.\I\i*(/he=e-1
" pirWord before pirRegister
" FIXME :: in identifiers and labels
syn match pirWord /[A-Za-z_][A-Za-z0-9_]*/
syn match pirComment /#.*/
syn match pirLabel /[A-Za-z0-9_]\+:/he=e-1
syn match pirRegister /[INPS]\([12][0-9]\|3[01]\|[0-9]\)/
syn match pirDollarRegister /\$[INPS][0-9]\+/
syn match pirNumber /[+-]\?[0-9]\+\(\.[0-9]*\([Ee][+-]\?[0-9]\+\)\?\)\?/
syn match pirNumber /0[xX][0-9a-fA-F]\+/
syn match pirNumber /0[oO][0-7]\+/
syn match pirNumber /0[bB][01]\+/
syn region pirString start=/"/ skip=/\\"/ end=/"/ contains=pirStringSpecial
syn region pirString start=/<<"\z(\I\i*\)"/ end=/^\z1$/ contains=pirStringSpecial
syn region pirString start=/<<'\z(\I\i*\)'/ end=/^\z1$/
syn region pirString start=/'/ end=/'/
syn match pirStringSpecial "\\\([abtnvfre\\"]\|\o\{1,3\}\|x{\x\{1,8\}}\|x\x\{1,2\}\|u\x\{4\}\|U\x\{8\}\|c[A-Z]\)" contained
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_pasm_syntax_inits")
if version < 508
let did_pasm_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink pirPod Comment
HiLink pirWord Normal
HiLink pirComment Comment
HiLink pirLabel Label
HiLink pirRegister Identifier
HiLink pirDollarRegister Identifier
HiLink pirType Type
HiLink pirPMC Type
HiLink pirString String
HiLink pirStringSpecial Special
HiLink pirNumber Number
HiLink pirDirective Macro
HiLink pirDirectiveSub Macro
HiLink pirDirectiveMacro Macro
HiLink pirOp Conditional
delcommand HiLink
endif
let b:current_syntax = "pir"
" Folding rules
syn region foldManual start=/^\s*#.*{{{/ end=/^\s*#.*}}}/ contains=ALL keepend fold
syn region foldMakro start=/\.macro/ end=/^\s*\.endm/ contains=ALLBUT,pirDirectiveMacro keepend fold
syn region foldSub start=/\.sub/ end=/^\s*\.end/ contains=ALLBUT,pirDirectiveSub,pirDirectiveMacro keepend fold
syn region foldIf start=/^\s*if.*goto\s*\z(\I\i*\)\s*$/ end=/^\s*\z1:\s*$/ contains=ALLBUT,pirDirectiveSub,pirDirectiveMacro keepend fold
syn region foldUnless start=/^\s*unless.*goto\s*\z(\I\i*\)\s*$/ end=/^\s*\z1:\s*$/ contains=ALLBUT,pirDirectiveSub,pirDirectiveMacro keepend fold
" Ops -- dynamically generated from ops2vim.pl