diff runtime/syntax/hex.vim @ 6697:12155a47f6c2

Update runtime files.
author Bram Moolenaar <bram@vim.org>
date Sat, 21 Mar 2015 18:06:14 +0100
parents 3fc0f57ecb91
children 43efa4f5a8ea
line wrap: on
line diff
--- a/runtime/syntax/hex.vim
+++ b/runtime/syntax/hex.vim
@@ -1,7 +1,29 @@
 " Vim syntax file
-" Language:	Intel hex MCS51
-" Maintainer:	Sams Ricahrd <sams@ping.at>
-" Last Change:	2003 Apr 25
+" Language:	Intel HEX
+" Maintainer:	Markus Heidelberg <markus.heidelberg@web.de>
+" Previous version:	Sams Ricahrd <sams@ping.at>
+" Last Change:	2015 Feb 24
+
+" Each record (line) is built as follows:
+"
+"    field       digits          states
+"
+"  +----------+
+"  | start    |  1 (':')         hexRecStart
+"  +----------+
+"  | count    |  2               hexDataByteCount
+"  +----------+
+"  | address  |  4               hexNoAddress, hexDataAddress, (hexAddressFieldUnknown)
+"  +----------+
+"  | type     |  2               hexRecType, (hexRecTypeUnknown)
+"  +----------+
+"  | data     |  0..510          hexDataOdd, hexDataEven, hexExtendedAddress, hexStartAddress, (hexDataFieldUnknown, hexDataUnexpected)
+"  +----------+
+"  | checksum |  2               hexChecksum
+"  +----------+
+"
+" States in parentheses in the upper format description indicate that they
+" should not appear in a valid file.
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,21 +33,39 @@ elseif exists("b:current_syntax")
   finish
 endif
 
-syn case ignore
+syn match hexRecStart "^:"
+
+syn match hexDataByteCount "^:[0-9a-fA-F]\{2}" contains=hexRecStart nextgroup=hexAddress
 
-" storage types
+syn match hexAddress "[0-9a-fA-F]\{4}" transparent contained nextgroup=hexRecTypeUnknown,hexRecType
+" The address field groups include the record type field in the last 2
+" characters, the proper match for highlighting follows below.
+syn match hexAddressFieldUnknown "^:[0-9a-fA-F]\{8}"      contains=hexDataByteCount nextgroup=hexDataFieldUnknown,hexChecksum
+syn match hexDataAddress         "^:[0-9a-fA-F]\{6}00"    contains=hexDataByteCount nextgroup=hexDataOdd,hexChecksum
+syn match hexNoAddress           "^:[0-9a-fA-F]\{6}01"    contains=hexDataByteCount nextgroup=hexDataUnexpected,hexChecksum
+syn match hexNoAddress           "^:[0-9a-fA-F]\{6}0[24]" contains=hexDataByteCount nextgroup=hexExtendedAddress
+syn match hexNoAddress           "^:[0-9a-fA-F]\{6}0[35]" contains=hexDataByteCount nextgroup=hexStartAddress
+
+syn match hexRecTypeUnknown "[0-9a-fA-F]\{2}" contained
+syn match hexRecType        "0[0-5]"          contained
 
-syn match hexChecksum	"[0-9a-fA-F]\{2}$"
-syn match hexAdress  "^:[0-9a-fA-F]\{6}" contains=hexDataByteCount
-syn match hexRecType  "^:[0-9a-fA-F]\{8}" contains=hexAdress
-syn match hexDataByteCount  contained "^:[0-9a-fA-F]\{2}" contains=hexStart
-syn match hexStart contained "^:"
-syn match hexExtAdrRec "^:02000002[0-9a-fA-F]\{4}" contains=hexSpecRec
-syn match hexExtLinAdrRec "^:02000004[0-9a-fA-F]\{4}" contains=hexSpecRec
-syn match hexSpecRec contained "^:0[02]00000[124]" contains=hexStart
-syn match hexEOF "^:00000001" contains=hexStart
+syn match hexDataFieldUnknown "[0-9a-fA-F]\{2}" contained nextgroup=hexDataFieldUnknown,hexChecksum
+" alternating highlight per byte for easier reading
+syn match hexDataOdd          "[0-9a-fA-F]\{2}" contained nextgroup=hexDataEven,hexChecksum
+syn match hexDataEven         "[0-9a-fA-F]\{2}" contained nextgroup=hexDataOdd,hexChecksum
+" data bytes which should not exist
+syn match hexDataUnexpected   "[0-9a-fA-F]\{2}" contained nextgroup=hexDataUnexpected,hexChecksum
+" Data digit pair regex usage also results in only highlighting the checksum
+" if the number of data characters is even.
 
-syn case match
+" special data fields
+syn match hexExtendedAddress "[0-9a-fA-F]\{4}" contained nextgroup=hexDataUnexpected,hexChecksum
+syn match hexStartAddress    "[0-9a-fA-F]\{8}" contained nextgroup=hexDataUnexpected,hexChecksum
+
+syn match hexChecksum "[0-9a-fA-F]\{2}$" contained
+
+" Folding Data Records below an Extended Segment/Linear Address Record
+syn region hexExtAdrBlock start="^:[0-9a-fA-F]\{7}[24]" skip="^:[0-9a-fA-F]\{7}0" end="^:"me=s-1 fold transparent
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -38,16 +78,21 @@ if version >= 508 || !exists("did_hex_sy
     command -nargs=+ HiLink hi def link <args>
   endif
 
-  " The default methods for highlighting.  Can be overridden later
-  HiLink hexStart		SpecialKey
-  HiLink hexDataByteCount	Constant
-  HiLink hexAdress		Comment
-  HiLink hexRecType		WarningMsg
-  HiLink hexChecksum		Search
-  HiLink hexExtAdrRec		hexAdress
-  HiLink hexEOF			hexSpecRec
-  HiLink hexExtLinAdrRec	hexAdress
-  HiLink hexSpecRec		DiffAdd
+  " The default methods for highlighting. Can be overridden later
+  HiLink hexRecStart            hexRecType
+  HiLink hexDataByteCount       Constant
+  hi def hexAddressFieldUnknown term=italic cterm=italic gui=italic
+  HiLink hexDataAddress         Comment
+  HiLink hexNoAddress           DiffAdd
+  HiLink hexRecTypeUnknown      hexRecType
+  HiLink hexRecType             WarningMsg
+  hi def hexDataFieldUnknown    term=italic cterm=italic gui=italic
+  hi def hexDataOdd             term=bold cterm=bold gui=bold
+  hi def hexDataEven            term=NONE cterm=NONE gui=NONE
+  HiLink hexDataUnexpected      Error
+  HiLink hexExtendedAddress     hexDataAddress
+  HiLink hexStartAddress        hexDataAddress
+  HiLink hexChecksum            DiffChange
 
   delcommand HiLink
 endif