Whitespace should not be part of a token match - this causes issues because the next token expects to start with whitespace, which was consumed by the previous token and is therefore not highlighted.
I changed instances of \s to lookaheads or lookbehinds which don't consume characters. There's probably a few more places where this needs to be done, but I don't want any unintended side effects.
IS was moved from logical operators to regular keywords to prevent IS INITIAL and similar from having different colors.
All short keywords were moved to regular keywords because:
They don't require special rules, so this is just an extra place to maintain the beginning/end part of the regex
Keyword.control.short is not a standard scope name, meaning they will be colored the same anyway
DATA(abc) = abap_false.
DATA(sum) = 2 + 3.
DATA(db_row) = SELECT * FROM itab.
IF abc IS BOUND.
IF abap_true = abap_false.
DATA: var1 type abap_bool value abap_true,
var2 type abap_bool value abap_false.
ENDIF.
ENDIF.
Whitespace should not be part of a token match - this causes issues because the next token expects to start with whitespace, which was consumed by the previous token and is therefore not highlighted. I changed instances of \s to lookaheads or lookbehinds which don't consume characters. There's probably a few more places where this needs to be done, but I don't want any unintended side effects.
IS
was moved from logical operators to regular keywords to preventIS INITIAL
and similar from having different colors.All short keywords were moved to regular keywords because:
This should resolve the remaining issues in #3.