1071d4279SBram Moolenaar" Vim syntax file 25837f1f4SBram Moolenaar" Language: Intel HEX 35837f1f4SBram Moolenaar" Maintainer: Markus Heidelberg <[email protected]> 45837f1f4SBram Moolenaar" Previous version: Sams Ricahrd <[email protected]> 55837f1f4SBram Moolenaar" Last Change: 2015 Feb 24 65837f1f4SBram Moolenaar 75837f1f4SBram Moolenaar" Each record (line) is built as follows: 85837f1f4SBram Moolenaar" 95837f1f4SBram Moolenaar" field digits states 105837f1f4SBram Moolenaar" 115837f1f4SBram Moolenaar" +----------+ 125837f1f4SBram Moolenaar" | start | 1 (':') hexRecStart 135837f1f4SBram Moolenaar" +----------+ 145837f1f4SBram Moolenaar" | count | 2 hexDataByteCount 155837f1f4SBram Moolenaar" +----------+ 165837f1f4SBram Moolenaar" | address | 4 hexNoAddress, hexDataAddress, (hexAddressFieldUnknown) 175837f1f4SBram Moolenaar" +----------+ 185837f1f4SBram Moolenaar" | type | 2 hexRecType, (hexRecTypeUnknown) 195837f1f4SBram Moolenaar" +----------+ 205837f1f4SBram Moolenaar" | data | 0..510 hexDataOdd, hexDataEven, hexExtendedAddress, hexStartAddress, (hexDataFieldUnknown, hexDataUnexpected) 215837f1f4SBram Moolenaar" +----------+ 225837f1f4SBram Moolenaar" | checksum | 2 hexChecksum 235837f1f4SBram Moolenaar" +----------+ 245837f1f4SBram Moolenaar" 255837f1f4SBram Moolenaar" States in parentheses in the upper format description indicate that they 265837f1f4SBram Moolenaar" should not appear in a valid file. 27071d4279SBram Moolenaar 2889bcfda6SBram Moolenaar" quit when a syntax file was already loaded 2989bcfda6SBram Moolenaarif exists("b:current_syntax") 30071d4279SBram Moolenaar finish 31071d4279SBram Moolenaarendif 32071d4279SBram Moolenaar 335837f1f4SBram Moolenaarsyn match hexRecStart "^:" 34071d4279SBram Moolenaar 355837f1f4SBram Moolenaarsyn match hexDataByteCount "^:[0-9a-fA-F]\{2}" contains=hexRecStart nextgroup=hexAddress 36071d4279SBram Moolenaar 375837f1f4SBram Moolenaarsyn match hexAddress "[0-9a-fA-F]\{4}" transparent contained nextgroup=hexRecTypeUnknown,hexRecType 385837f1f4SBram Moolenaar" The address field groups include the record type field in the last 2 395837f1f4SBram Moolenaar" characters, the proper match for highlighting follows below. 405837f1f4SBram Moolenaarsyn match hexAddressFieldUnknown "^:[0-9a-fA-F]\{8}" contains=hexDataByteCount nextgroup=hexDataFieldUnknown,hexChecksum 415837f1f4SBram Moolenaarsyn match hexDataAddress "^:[0-9a-fA-F]\{6}00" contains=hexDataByteCount nextgroup=hexDataOdd,hexChecksum 425837f1f4SBram Moolenaarsyn match hexNoAddress "^:[0-9a-fA-F]\{6}01" contains=hexDataByteCount nextgroup=hexDataUnexpected,hexChecksum 435837f1f4SBram Moolenaarsyn match hexNoAddress "^:[0-9a-fA-F]\{6}0[24]" contains=hexDataByteCount nextgroup=hexExtendedAddress 445837f1f4SBram Moolenaarsyn match hexNoAddress "^:[0-9a-fA-F]\{6}0[35]" contains=hexDataByteCount nextgroup=hexStartAddress 45071d4279SBram Moolenaar 465837f1f4SBram Moolenaarsyn match hexRecTypeUnknown "[0-9a-fA-F]\{2}" contained 475837f1f4SBram Moolenaarsyn match hexRecType "0[0-5]" contained 485837f1f4SBram Moolenaar 495837f1f4SBram Moolenaarsyn match hexDataFieldUnknown "[0-9a-fA-F]\{2}" contained nextgroup=hexDataFieldUnknown,hexChecksum 505837f1f4SBram Moolenaar" alternating highlight per byte for easier reading 515837f1f4SBram Moolenaarsyn match hexDataOdd "[0-9a-fA-F]\{2}" contained nextgroup=hexDataEven,hexChecksum 525837f1f4SBram Moolenaarsyn match hexDataEven "[0-9a-fA-F]\{2}" contained nextgroup=hexDataOdd,hexChecksum 535837f1f4SBram Moolenaar" data bytes which should not exist 545837f1f4SBram Moolenaarsyn match hexDataUnexpected "[0-9a-fA-F]\{2}" contained nextgroup=hexDataUnexpected,hexChecksum 555837f1f4SBram Moolenaar" Data digit pair regex usage also results in only highlighting the checksum 565837f1f4SBram Moolenaar" if the number of data characters is even. 575837f1f4SBram Moolenaar 585837f1f4SBram Moolenaar" special data fields 595837f1f4SBram Moolenaarsyn match hexExtendedAddress "[0-9a-fA-F]\{4}" contained nextgroup=hexDataUnexpected,hexChecksum 605837f1f4SBram Moolenaarsyn match hexStartAddress "[0-9a-fA-F]\{8}" contained nextgroup=hexDataUnexpected,hexChecksum 615837f1f4SBram Moolenaar 625837f1f4SBram Moolenaarsyn match hexChecksum "[0-9a-fA-F]\{2}$" contained 635837f1f4SBram Moolenaar 645837f1f4SBram Moolenaar" Folding Data Records below an Extended Segment/Linear Address Record 655837f1f4SBram Moolenaarsyn region hexExtAdrBlock start="^:[0-9a-fA-F]\{7}[24]" skip="^:[0-9a-fA-F]\{7}0" end="^:"me=s-1 fold transparent 66071d4279SBram Moolenaar 67071d4279SBram Moolenaar" Define the default highlighting. 6889bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet 69071d4279SBram Moolenaar 70071d4279SBram Moolenaar" The default methods for highlighting. Can be overridden later 71*f37506f6SBram Moolenaarhi def link hexRecStart hexRecType 72*f37506f6SBram Moolenaarhi def link hexDataByteCount Constant 735837f1f4SBram Moolenaarhi def hexAddressFieldUnknown term=italic cterm=italic gui=italic 74*f37506f6SBram Moolenaarhi def link hexDataAddress Comment 75*f37506f6SBram Moolenaarhi def link hexNoAddress DiffAdd 76*f37506f6SBram Moolenaarhi def link hexRecTypeUnknown hexRecType 77*f37506f6SBram Moolenaarhi def link hexRecType WarningMsg 785837f1f4SBram Moolenaarhi def hexDataFieldUnknown term=italic cterm=italic gui=italic 795837f1f4SBram Moolenaarhi def hexDataOdd term=bold cterm=bold gui=bold 805837f1f4SBram Moolenaarhi def hexDataEven term=NONE cterm=NONE gui=NONE 81*f37506f6SBram Moolenaarhi def link hexDataUnexpected Error 82*f37506f6SBram Moolenaarhi def link hexExtendedAddress hexDataAddress 83*f37506f6SBram Moolenaarhi def link hexStartAddress hexDataAddress 84*f37506f6SBram Moolenaarhi def link hexChecksum DiffChange 85071d4279SBram Moolenaar 86071d4279SBram Moolenaar 87071d4279SBram Moolenaarlet b:current_syntax = "hex" 88071d4279SBram Moolenaar 89071d4279SBram Moolenaar" vim: ts=8 90