24103
|
1 " Copyright (C) 2021 Matthew T. Ihlenfield.
|
|
2 "
|
|
3 " This program is free software: you can redistribute it and/or modify
|
|
4 " it under the terms of the GNU General Public License as published by
|
|
5 " the Free Software Foundation, either version 3 of the License, or
|
|
6 " (at your option) any later version.
|
|
7 "
|
|
8 " This program is distributed in the hope that it will be useful,
|
|
9 " but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10 " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11 " GNU General Public License for more details.
|
|
12 "
|
|
13 " You should have received a copy of the GNU General Public License
|
|
14 " along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
15 "
|
|
16 " Vim syntax file
|
|
17 " Language: Poke
|
|
18 " Maintainer: Matt Ihlenfield <mtihlenfield@protonmail.com>
|
|
19 " Filenames: *.pk
|
|
20 " Latest Revision: 10 March 2021
|
|
21
|
|
22 if exists('b:current_syntax')
|
|
23 finish
|
|
24 endif
|
|
25
|
|
26 " Poke statement
|
|
27 syn keyword pokeStatement assert break continue return
|
|
28 syn keyword pokeStatement type unit fun method nextgroup=pokeFunction skipwhite
|
|
29 syn keyword pokeStatement var nextgroup=pokeVar skipWhite
|
|
30
|
|
31 " Identifiers
|
|
32 syn match pokeVar '\h\w*' display contained
|
|
33
|
|
34 " User defined functions
|
|
35 syn match pokeFunction '\h\w*' display contained
|
|
36
|
|
37 " Poke operators
|
|
38 syn keyword pokeOperator in sizeof as isa unmap
|
|
39
|
|
40 " Conditionals
|
|
41 syn keyword pokeConditional if else where
|
|
42
|
|
43 " Structures, unions, etc...
|
|
44 syn keyword pokeStructure struct union pinned
|
|
45
|
|
46 " Loops
|
|
47 syn keyword pokeRepeat while for
|
|
48
|
|
49 " Imports
|
|
50 syn keyword pokeLoad load
|
|
51
|
|
52 " Exceptions
|
|
53 syn keyword pokeException try catch until raise
|
|
54
|
|
55 " Exception types
|
|
56 syn keyword pokeExceptionType Exception E_generic E_out_of_bounds
|
|
57 syn keyword pokeExceptionType E_eof E_elem E_constraint
|
|
58 syn keyword pokeExceptionType E_conv E_map_bounds E_map
|
|
59 syn keyword pokeExceptionType E_div_by_zero E_no_ios E_no_return
|
|
60 syn keyword pokeExceptionType E_io E_io_flags E_assert E_overflow
|
|
61
|
|
62 " Exception codes
|
|
63 syn keyword pokeExceptionCode EC_generic EC_out_of_bounds
|
|
64 syn keyword pokeExceptionCode EC_eof EC_elem EC_constraint
|
|
65 syn keyword pokeExceptionCode EC_conv EC_map_bounds EC_map
|
|
66 syn keyword pokeExceptionCode EC_div_by_zero EC_no_ios EC_no_return
|
|
67 syn keyword pokeExceptionCode EC_io EC_io_flags EC_assert EC_overflow
|
|
68
|
|
69 " Poke builtin types
|
|
70 syn keyword pokeBuiltinType string void int uint bit nibble
|
|
71 syn keyword pokeBuiltinType byte char ushort short ulong long
|
|
72 syn keyword pokeBuiltinType uint8 uint16 uint32 uint64
|
|
73 syn keyword pokeBuiltinType off64 uoff64 offset
|
|
74 syn keyword pokeBuiltinType Comparator POSIX_Time32 POSIX_Time64
|
|
75 syn keyword pokeBuiltinType big little any
|
|
76
|
|
77 " Poke constants
|
|
78 syn keyword pokeConstant ENDIAN_LITTLE ENDIAN_BIG
|
|
79 syn keyword pokeConstant IOS_F_READ IOS_F_WRITE IOS_F_TRUNCATE IOS_F_CREATE
|
|
80 syn keyword pokeConstant IOS_M_RDONLY IOS_M_WRONLY IOS_M_RDWR
|
|
81 syn keyword pokeConstant load_path NULL OFFSET
|
|
82
|
|
83 " Poke std lib
|
|
84 syn keyword pokeBuiltinFunction print printf catos stoca atoi ltos reverse
|
|
85 syn keyword pokeBuiltinFunction ltrim rtrim strchr qsort crc32 alignto
|
|
86 syn keyword pokeBuiltinFunction open close flush get_ios set_ios iosize
|
|
87 syn keyword pokeBuiltinFunction rand get_endian set_endian strace exit
|
|
88 syn keyword pokeBuiltinFunction getenv
|
|
89
|
|
90 " Formats
|
|
91
|
|
92 " Special chars
|
|
93 syn match pokeSpecial "\\\([nt\\]\|\o\{1,3}\)" display contained
|
|
94
|
|
95 " Chars
|
|
96 syn match pokeChar "'[^']*'" contains=pokeSpecial
|
|
97
|
|
98 " Attributes
|
|
99 syn match pokeAttribute "\h\w*'\h\w"
|
|
100
|
|
101 " Strings
|
|
102 syn region pokeString skip=+\\\\\|\\"+ start=+"+ end=+"+ contains=pokeSpecial
|
|
103
|
|
104 " Integer literals
|
|
105 syn match pokeInteger "\<\d\+_*\d*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>"
|
|
106 syn match pokeInteger "\<0[Xx]\x\+_*\x*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>"
|
|
107 syn match pokeInteger "\<0[Oo]\o\+_*\o*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>"
|
|
108 syn match pokeInteger "\<0[Bb][01]\+_*[01]*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>"
|
|
109
|
|
110 " Units
|
|
111 syn keyword pokeBuiltinUnit b M B
|
|
112 syn keyword pokeBuiltinUnit Kb KB Mb MB Gb GB
|
|
113 syn keyword pokeBuiltinUnit Kib KiB Mib MiB Gib GiB
|
|
114
|
|
115 " Offsets
|
|
116 syn match pokeOffset "#\h\w*" contains=pokeBuiltinUnit
|
|
117
|
|
118 " Comments
|
|
119 syn keyword pokeCommentTodo TODO FIXME XXX TBD contained
|
|
120 syn match pokeLineComment "\/\/.*" contains=pokeCommentTodo,@Spell extend
|
|
121 syn region pokeComment start="/\*" end="\*/" contains=pokeCommentTodo,@Spell fold extend
|
|
122
|
|
123 " Allow folding of blocks
|
|
124 syn region pokeBlock start="{" end="}" transparent fold
|
|
125
|
|
126 " Highlight groups
|
|
127 hi def link pokeBuiltinFunction Function
|
|
128 hi def link pokeBuiltinType Type
|
|
129 hi def link pokeBuiltinUnit Keyword
|
|
130 hi def link pokeChar Character
|
|
131 hi def link pokeComment Comment
|
|
132 hi def link pokeCommentTodo Todo
|
|
133 hi def link pokeConditional Conditional
|
|
134 hi def link pokeConstant Constant
|
|
135 hi def link pokeException Exception
|
|
136 hi def link pokeExceptionCode Constant
|
|
137 hi def link pokeExceptionType Type
|
|
138 hi def link pokeFunction Function
|
|
139 hi def link pokeInteger Number
|
|
140 hi def link pokeLineComment Comment
|
|
141 hi def link pokeLoad Include
|
|
142 hi def link pokeOffset StorageClass
|
|
143 hi def link pokeOperator Operator
|
|
144 hi def link pokeSpecial SpecialChar
|
|
145 hi def link pokeStatement Statement
|
|
146 hi def link pokeString String
|
|
147 hi def link pokeStructure Structure
|
|
148 hi def link pokeRepeat Repeat
|
|
149 hi def link pokeVar Identifier
|
|
150
|
|
151 let b:current_syntax = 'poke'
|