diff options
Diffstat (limited to 'lexers/LexHex.cxx')
-rw-r--r-- | lexers/LexHex.cxx | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/lexers/LexHex.cxx b/lexers/LexHex.cxx index 9b35732f6..05cb7e636 100644 --- a/lexers/LexHex.cxx +++ b/lexers/LexHex.cxx @@ -22,9 +22,9 @@ * +----------+ * | count | 2 SCE_SREC_BYTECOUNT, SCE_SREC_BYTECOUNT_WRONG * +----------+ - * | address | 4/6/8 SCE_SREC_NOADDRESS, SCE_SREC_DATAADDRESS, SCE_SREC_RECCOUNT, SCE_SREC_STARTADDRESS + * | address | 4/6/8 SCE_SREC_NOADDRESS, SCE_SREC_DATAADDRESS, SCE_SREC_RECCOUNT, SCE_SREC_STARTADDRESS, (SCE_SREC_ADDRESSFIELD_UNKNOWN) * +----------+ - * | data | 0..500 SCE_SREC_DATA_ODD, SCE_SREC_DATA_EVEN + * | data | 0..500 SCE_SREC_DATA_ODD, SCE_SREC_DATA_EVEN, (SCE_SREC_DATA_UNKNOWN) * +----------+ * | checksum | 2 SCE_SREC_CHECKSUM, SCE_SREC_CHECKSUM_WRONG * +----------+ @@ -228,8 +228,8 @@ static int GetSrecAddressFieldType(unsigned int recStartPos, Accessor &styler) case '9': return SCE_SREC_STARTADDRESS; - default: - return SCE_SREC_DEFAULT; + default: // handle possible format extension in the future + return SCE_SREC_ADDRESSFIELD_UNKNOWN; } } @@ -307,25 +307,26 @@ static void ColouriseSrecDoc(unsigned int startPos, int length, int initStyle, W addrFieldSize = GetSrecAddressFieldSize(recStartPos, styler); addrFieldType = GetSrecAddressFieldType(recStartPos, styler); - if (addrFieldSize > 0) { - sc.SetState(addrFieldType); - ForwardWithinLine(sc, addrFieldSize * 2); - } else { - // malformed - sc.SetState(SCE_SREC_DEFAULT); - ForwardWithinLine(sc); - } + sc.SetState(addrFieldType); + ForwardWithinLine(sc, addrFieldSize * 2); break; case SCE_SREC_NOADDRESS: case SCE_SREC_DATAADDRESS: case SCE_SREC_RECCOUNT: case SCE_SREC_STARTADDRESS: + case SCE_SREC_ADDRESSFIELD_UNKNOWN: recStartPos = GetSrecRecStartPosition(sc.currentPos, styler); byteCount = GetSrecByteCount(recStartPos, styler); addrFieldSize = GetSrecAddressFieldSize(recStartPos, styler); dataFieldSize = byteCount - addrFieldSize - 1; // -1 for checksum field + if (sc.state == SCE_SREC_ADDRESSFIELD_UNKNOWN) { + sc.SetState(SCE_SREC_DATA_UNKNOWN); + ForwardWithinLine(sc, dataFieldSize * 2); + break; + } + sc.SetState(SCE_SREC_DATA_ODD); for (int i = 0; i < dataFieldSize * 2; i++) { @@ -343,6 +344,7 @@ static void ColouriseSrecDoc(unsigned int startPos, int length, int initStyle, W case SCE_SREC_DATA_ODD: case SCE_SREC_DATA_EVEN: + case SCE_SREC_DATA_UNKNOWN: recStartPos = GetSrecRecStartPosition(sc.currentPos, styler); cs1 = CalcSrecChecksum(recStartPos, styler); cs2 = GetSrecChecksum(recStartPos, styler); |