| " Copyright (C) 2021 Matthew T. Ihlenfield. |
| " |
| " This program is free software: you can redistribute it and/or modify |
| " it under the terms of the GNU General Public License as published by |
| " the Free Software Foundation, either version 3 of the License, or |
| " (at your option) any later version. |
| " |
| " This program is distributed in the hope that it will be useful, |
| " but WITHOUT ANY WARRANTY; without even the implied warranty of |
| " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| " GNU General Public License for more details. |
| " |
| " You should have received a copy of the GNU General Public License |
| " along with this program. If not, see <http://www.gnu.org/licenses/>. |
| " |
| " Vim syntax file |
| " Language: Poke |
| " Maintainer: Matt Ihlenfield <mtihlenfield@protonmail.com> |
| " Filenames: *.pk |
| " Latest Revision: 10 March 2021 |
| |
| if exists('b:current_syntax') |
| finish |
| endif |
| |
| " Poke statement |
| syn keyword pokeStatement assert break continue return |
| syn keyword pokeStatement type unit fun method nextgroup=pokeFunction skipwhite |
| syn keyword pokeStatement var nextgroup=pokeVar skipWhite |
| |
| " Identifiers |
| syn match pokeVar '\h\w*' display contained |
| |
| " User defined functions |
| syn match pokeFunction '\h\w*' display contained |
| |
| " Poke operators |
| syn keyword pokeOperator in sizeof as isa unmap |
| |
| " Conditionals |
| syn keyword pokeConditional if else where |
| |
| " Structures, unions, etc... |
| syn keyword pokeStructure struct union pinned |
| |
| " Loops |
| syn keyword pokeRepeat while for |
| |
| " Imports |
| syn keyword pokeLoad load |
| |
| " Exceptions |
| syn keyword pokeException try catch until raise |
| |
| " Exception types |
| syn keyword pokeExceptionType Exception E_generic E_out_of_bounds |
| syn keyword pokeExceptionType E_eof E_elem E_constraint |
| syn keyword pokeExceptionType E_conv E_map_bounds E_map |
| syn keyword pokeExceptionType E_div_by_zero E_no_ios E_no_return |
| syn keyword pokeExceptionType E_io E_io_flags E_assert E_overflow |
| |
| " Exception codes |
| syn keyword pokeExceptionCode EC_generic EC_out_of_bounds |
| syn keyword pokeExceptionCode EC_eof EC_elem EC_constraint |
| syn keyword pokeExceptionCode EC_conv EC_map_bounds EC_map |
| syn keyword pokeExceptionCode EC_div_by_zero EC_no_ios EC_no_return |
| syn keyword pokeExceptionCode EC_io EC_io_flags EC_assert EC_overflow |
| |
| " Poke builtin types |
| syn keyword pokeBuiltinType string void int uint bit nibble |
| syn keyword pokeBuiltinType byte char ushort short ulong long |
| syn keyword pokeBuiltinType uint8 uint16 uint32 uint64 |
| syn keyword pokeBuiltinType off64 uoff64 offset |
| syn keyword pokeBuiltinType Comparator POSIX_Time32 POSIX_Time64 |
| syn keyword pokeBuiltinType big little any |
| |
| " Poke constants |
| syn keyword pokeConstant ENDIAN_LITTLE ENDIAN_BIG |
| syn keyword pokeConstant IOS_F_READ IOS_F_WRITE IOS_F_TRUNCATE IOS_F_CREATE |
| syn keyword pokeConstant IOS_M_RDONLY IOS_M_WRONLY IOS_M_RDWR |
| syn keyword pokeConstant load_path NULL OFFSET |
| |
| " Poke std lib |
| syn keyword pokeBuiltinFunction print printf catos stoca atoi ltos reverse |
| syn keyword pokeBuiltinFunction ltrim rtrim strchr qsort crc32 alignto |
| syn keyword pokeBuiltinFunction open close flush get_ios set_ios iosize |
| syn keyword pokeBuiltinFunction rand get_endian set_endian strace exit |
| syn keyword pokeBuiltinFunction getenv |
| |
| " Formats |
| |
| " Special chars |
| syn match pokeSpecial "\\\([nt\\]\|\o\{1,3}\)" display contained |
| |
| " Chars |
| syn match pokeChar "'[^']*'" contains=pokeSpecial |
| |
| " Attributes |
| syn match pokeAttribute "\h\w*'\h\w" |
| |
| " Strings |
| syn region pokeString skip=+\\\\\|\\"+ start=+"+ end=+"+ contains=pokeSpecial |
| |
| " Integer literals |
| syn match pokeInteger "\<\d\+_*\d*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" |
| syn match pokeInteger "\<0[Xx]\x\+_*\x*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" |
| syn match pokeInteger "\<0[Oo]\o\+_*\o*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" |
| syn match pokeInteger "\<0[Bb][01]\+_*[01]*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" |
| |
| " Units |
| syn keyword pokeBuiltinUnit b M B |
| syn keyword pokeBuiltinUnit Kb KB Mb MB Gb GB |
| syn keyword pokeBuiltinUnit Kib KiB Mib MiB Gib GiB |
| |
| " Offsets |
| syn match pokeOffset "#\h\w*" contains=pokeBuiltinUnit |
| |
| " Comments |
| syn keyword pokeCommentTodo TODO FIXME XXX TBD contained |
| syn match pokeLineComment "\/\/.*" contains=pokeCommentTodo,@Spell extend |
| syn region pokeComment start="/\*" end="\*/" contains=pokeCommentTodo,@Spell fold extend |
| |
| " Allow folding of blocks |
| syn region pokeBlock start="{" end="}" transparent fold |
| |
| " Highlight groups |
| hi def link pokeBuiltinFunction Function |
| hi def link pokeBuiltinType Type |
| hi def link pokeBuiltinUnit Keyword |
| hi def link pokeChar Character |
| hi def link pokeComment Comment |
| hi def link pokeCommentTodo Todo |
| hi def link pokeConditional Conditional |
| hi def link pokeConstant Constant |
| hi def link pokeException Exception |
| hi def link pokeExceptionCode Constant |
| hi def link pokeExceptionType Type |
| hi def link pokeFunction Function |
| hi def link pokeInteger Number |
| hi def link pokeLineComment Comment |
| hi def link pokeLoad Include |
| hi def link pokeOffset StorageClass |
| hi def link pokeOperator Operator |
| hi def link pokeSpecial SpecialChar |
| hi def link pokeStatement Statement |
| hi def link pokeString String |
| hi def link pokeStructure Structure |
| hi def link pokeRepeat Repeat |
| hi def link pokeVar Identifier |
| |
| let b:current_syntax = 'poke' |