Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | 5837f1f | 2015-03-21 18:06:14 +0100 | [diff] [blame] | 2 | " Language: Intel HEX |
| 3 | " Maintainer: Markus Heidelberg <markus.heidelberg@web.de> |
| 4 | " Previous version: Sams Ricahrd <sams@ping.at> |
| 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. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 27 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 28 | " quit when a syntax file was already loaded |
| 29 | if exists("b:current_syntax") |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 30 | finish |
| 31 | endif |
| 32 | |
Bram Moolenaar | 5837f1f | 2015-03-21 18:06:14 +0100 | [diff] [blame] | 33 | syn match hexRecStart "^:" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 34 | |
Bram Moolenaar | 5837f1f | 2015-03-21 18:06:14 +0100 | [diff] [blame] | 35 | syn match hexDataByteCount "^:[0-9a-fA-F]\{2}" contains=hexRecStart nextgroup=hexAddress |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 36 | |
Bram Moolenaar | 5837f1f | 2015-03-21 18:06:14 +0100 | [diff] [blame] | 37 | syn 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. |
| 40 | syn match hexAddressFieldUnknown "^:[0-9a-fA-F]\{8}" contains=hexDataByteCount nextgroup=hexDataFieldUnknown,hexChecksum |
| 41 | syn match hexDataAddress "^:[0-9a-fA-F]\{6}00" contains=hexDataByteCount nextgroup=hexDataOdd,hexChecksum |
| 42 | syn match hexNoAddress "^:[0-9a-fA-F]\{6}01" contains=hexDataByteCount nextgroup=hexDataUnexpected,hexChecksum |
| 43 | syn match hexNoAddress "^:[0-9a-fA-F]\{6}0[24]" contains=hexDataByteCount nextgroup=hexExtendedAddress |
| 44 | syn match hexNoAddress "^:[0-9a-fA-F]\{6}0[35]" contains=hexDataByteCount nextgroup=hexStartAddress |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 45 | |
Bram Moolenaar | 5837f1f | 2015-03-21 18:06:14 +0100 | [diff] [blame] | 46 | syn match hexRecTypeUnknown "[0-9a-fA-F]\{2}" contained |
| 47 | syn match hexRecType "0[0-5]" contained |
| 48 | |
| 49 | syn match hexDataFieldUnknown "[0-9a-fA-F]\{2}" contained nextgroup=hexDataFieldUnknown,hexChecksum |
| 50 | " alternating highlight per byte for easier reading |
| 51 | syn match hexDataOdd "[0-9a-fA-F]\{2}" contained nextgroup=hexDataEven,hexChecksum |
| 52 | syn match hexDataEven "[0-9a-fA-F]\{2}" contained nextgroup=hexDataOdd,hexChecksum |
| 53 | " data bytes which should not exist |
| 54 | syn 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 |
| 59 | syn match hexExtendedAddress "[0-9a-fA-F]\{4}" contained nextgroup=hexDataUnexpected,hexChecksum |
| 60 | syn match hexStartAddress "[0-9a-fA-F]\{8}" contained nextgroup=hexDataUnexpected,hexChecksum |
| 61 | |
| 62 | syn match hexChecksum "[0-9a-fA-F]\{2}$" contained |
| 63 | |
| 64 | " Folding Data Records below an Extended Segment/Linear Address Record |
| 65 | syn region hexExtAdrBlock start="^:[0-9a-fA-F]\{7}[24]" skip="^:[0-9a-fA-F]\{7}0" end="^:"me=s-1 fold transparent |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 66 | |
| 67 | " Define the default highlighting. |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 68 | " Only when an item doesn't have highlighting yet |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 69 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 70 | " The default methods for highlighting. Can be overridden later |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 71 | hi def link hexRecStart hexRecType |
| 72 | hi def link hexDataByteCount Constant |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 73 | hi def hexAddressFieldUnknown term=italic cterm=italic gui=italic |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 74 | hi def link hexDataAddress Comment |
| 75 | hi def link hexNoAddress DiffAdd |
| 76 | hi def link hexRecTypeUnknown hexRecType |
| 77 | hi def link hexRecType WarningMsg |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 78 | hi def hexDataFieldUnknown term=italic cterm=italic gui=italic |
| 79 | hi def hexDataOdd term=bold cterm=bold gui=bold |
| 80 | hi def hexDataEven term=NONE cterm=NONE gui=NONE |
Bram Moolenaar | f37506f | 2016-08-31 22:22:10 +0200 | [diff] [blame] | 81 | hi def link hexDataUnexpected Error |
| 82 | hi def link hexExtendedAddress hexDataAddress |
| 83 | hi def link hexStartAddress hexDataAddress |
| 84 | hi def link hexChecksum DiffChange |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 85 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 86 | |
| 87 | let b:current_syntax = "hex" |
| 88 | |
| 89 | " vim: ts=8 |