diff options
author | pommicket <pommicket@gmail.com> | 2023-05-11 11:36:23 -0400 |
---|---|---|
committer | pommicket <pommicket@gmail.com> | 2023-05-11 11:36:23 -0400 |
commit | 79724dc47d0fe9b6ceaa21cd3af1052bdcaea653 (patch) | |
tree | 1fa8b5f0c9fd7575b80f405bb83aee0aadf1871f /syntax.c | |
parent | 2794f396484bc8f1fb29190478c668cda22ce22d (diff) |
improve number syntax highligting
Diffstat (limited to 'syntax.c')
-rw-r--r-- | syntax.c | 34 |
1 files changed, 30 insertions, 4 deletions
@@ -3,9 +3,6 @@ #include "ted.h" #include "keywords.h" -// all characters that can appear in a number -#define SYNTAX_DIGITS "0123456789.xXoObBlLuUiIabcdefABCDEF_" - // ---- syntax state constants ---- // syntax state is explained in development.md @@ -208,8 +205,37 @@ static bool syntax_number_continues(Language lang, const char32_t *line, u32 lin } } + // for simplicity, we don't actually recognize integer suffixes. + // we just treat any letter in any suffix as a digit. + // so 1lllllllllbablalbal will be highlighted as a number in C, + // but that's not legal C anyways so it doesn't really matter. + const char *digits; + switch (lang) { + case LANG_RUST: + // note: the sz is for 1usize + digits = "0123456789.xXoObBuUiIszabcdefABCDEF_"; + break; + case LANG_C: + case LANG_CPP: + digits = "0123456789.xXbBlLuUiIabcdefABCDEFpP'"; + break; + case LANG_GLSL: + digits = "0123456789.xXbBlLuUabcdefABCDEF_"; + break; + case LANG_GO: + digits = "0123456789.xXoObBabcdefABCDEFpPi_"; + break; + case LANG_JAVASCRIPT: + case LANG_TYPESCRIPT: + digits = "0123456789.xXoObBabcdefABCDEFn_"; + break; + default: + digits = "0123456789.xXoObBabcdefABCDEF_"; + break; + } + return (line[i] < CHAR_MAX && - (strchr(SYNTAX_DIGITS, (char)line[i]) + (strchr(digits, (char)line[i]) || (i && line[i-1] == 'e' && (line[i] == '+' || line[i] == '-')))); } |