xref: /vim-8.2.3635/runtime/syntax/hex.vim (revision 89bcfda6)
1" Vim syntax file
2" Language:	Intel HEX
3" Maintainer:	Markus Heidelberg <[email protected]>
4" Previous version:	Sams Ricahrd <[email protected]>
5" Last Change:	2015 Feb 24
6
7" Each record (line) is built as follows:
8"
9"    field       digits          states
10"
11"  +----------+
12"  | start    |  1 (':')         hexRecStart
13"  +----------+
14"  | count    |  2               hexDataByteCount
15"  +----------+
16"  | address  |  4               hexNoAddress, hexDataAddress, (hexAddressFieldUnknown)
17"  +----------+
18"  | type     |  2               hexRecType, (hexRecTypeUnknown)
19"  +----------+
20"  | data     |  0..510          hexDataOdd, hexDataEven, hexExtendedAddress, hexStartAddress, (hexDataFieldUnknown, hexDataUnexpected)
21"  +----------+
22"  | checksum |  2               hexChecksum
23"  +----------+
24"
25" States in parentheses in the upper format description indicate that they
26" should not appear in a valid file.
27
28" quit when a syntax file was already loaded
29if exists("b:current_syntax")
30  finish
31endif
32
33syn match hexRecStart "^:"
34
35syn match hexDataByteCount "^:[0-9a-fA-F]\{2}" contains=hexRecStart nextgroup=hexAddress
36
37syn match hexAddress "[0-9a-fA-F]\{4}" transparent contained nextgroup=hexRecTypeUnknown,hexRecType
38" The address field groups include the record type field in the last 2
39" characters, the proper match for highlighting follows below.
40syn match hexAddressFieldUnknown "^:[0-9a-fA-F]\{8}"      contains=hexDataByteCount nextgroup=hexDataFieldUnknown,hexChecksum
41syn match hexDataAddress         "^:[0-9a-fA-F]\{6}00"    contains=hexDataByteCount nextgroup=hexDataOdd,hexChecksum
42syn match hexNoAddress           "^:[0-9a-fA-F]\{6}01"    contains=hexDataByteCount nextgroup=hexDataUnexpected,hexChecksum
43syn match hexNoAddress           "^:[0-9a-fA-F]\{6}0[24]" contains=hexDataByteCount nextgroup=hexExtendedAddress
44syn match hexNoAddress           "^:[0-9a-fA-F]\{6}0[35]" contains=hexDataByteCount nextgroup=hexStartAddress
45
46syn match hexRecTypeUnknown "[0-9a-fA-F]\{2}" contained
47syn match hexRecType        "0[0-5]"          contained
48
49syn match hexDataFieldUnknown "[0-9a-fA-F]\{2}" contained nextgroup=hexDataFieldUnknown,hexChecksum
50" alternating highlight per byte for easier reading
51syn match hexDataOdd          "[0-9a-fA-F]\{2}" contained nextgroup=hexDataEven,hexChecksum
52syn match hexDataEven         "[0-9a-fA-F]\{2}" contained nextgroup=hexDataOdd,hexChecksum
53" data bytes which should not exist
54syn match hexDataUnexpected   "[0-9a-fA-F]\{2}" contained nextgroup=hexDataUnexpected,hexChecksum
55" Data digit pair regex usage also results in only highlighting the checksum
56" if the number of data characters is even.
57
58" special data fields
59syn match hexExtendedAddress "[0-9a-fA-F]\{4}" contained nextgroup=hexDataUnexpected,hexChecksum
60syn match hexStartAddress    "[0-9a-fA-F]\{8}" contained nextgroup=hexDataUnexpected,hexChecksum
61
62syn match hexChecksum "[0-9a-fA-F]\{2}$" contained
63
64" Folding Data Records below an Extended Segment/Linear Address Record
65syn region hexExtAdrBlock start="^:[0-9a-fA-F]\{7}[24]" skip="^:[0-9a-fA-F]\{7}0" end="^:"me=s-1 fold transparent
66
67" Define the default highlighting.
68" Only when an item doesn't have highlighting yet
69command -nargs=+ HiLink hi def link <args>
70
71" The default methods for highlighting. Can be overridden later
72HiLink hexRecStart            hexRecType
73HiLink hexDataByteCount       Constant
74hi def hexAddressFieldUnknown term=italic cterm=italic gui=italic
75HiLink hexDataAddress         Comment
76HiLink hexNoAddress           DiffAdd
77HiLink hexRecTypeUnknown      hexRecType
78HiLink hexRecType             WarningMsg
79hi def hexDataFieldUnknown    term=italic cterm=italic gui=italic
80hi def hexDataOdd             term=bold cterm=bold gui=bold
81hi def hexDataEven            term=NONE cterm=NONE gui=NONE
82HiLink hexDataUnexpected      Error
83HiLink hexExtendedAddress     hexDataAddress
84HiLink hexStartAddress        hexDataAddress
85HiLink hexChecksum            DiffChange
86
87delcommand HiLink
88
89let b:current_syntax = "hex"
90
91" vim: ts=8
92