diff options
| -rw-r--r-- | lib/lexers/sciteco.tes | bin | 774 -> 809 bytes | |||
| -rw-r--r-- | src/core-commands.h | 1 | ||||
| -rw-r--r-- | src/lexer.c | 17 | ||||
| -rw-r--r-- | src/lexer.h | 14 |
4 files changed, 21 insertions, 11 deletions
diff --git a/lib/lexers/sciteco.tes b/lib/lexers/sciteco.tes Binary files differindex ae9b281..0e7db64 100644 --- a/lib/lexers/sciteco.tes +++ b/lib/lexers/sciteco.tes diff --git a/src/core-commands.h b/src/core-commands.h index cb28dce..4cc8747 100644 --- a/src/core-commands.h +++ b/src/core-commands.h @@ -125,6 +125,7 @@ TECO_DECLARE_STATE(teco_state_insert_indent); teco_state_t *teco_state_start_input(teco_machine_main_t *ctx, gunichar chr, GError **error); TECO_DECLARE_STATE(teco_state_start); +TECO_DECLARE_STATE(teco_state_control); TECO_DECLARE_STATE(teco_state_escape); TECO_DECLARE_STATE(teco_state_ctlc); TECO_DECLARE_STATE(teco_state_ctlc_control); diff --git a/src/lexer.c b/src/lexer.c index 02a6636..787fe89 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -26,6 +26,7 @@ #include "sciteco.h" #include "view.h" #include "parser.h" +#include "core-commands.h" #include "lexer.h" static teco_style_t @@ -37,16 +38,21 @@ teco_lexer_getstyle(teco_view_t *view, teco_machine_main_t *machine, /* * FIXME: At least this special workaround for numbers might be * unnecessary once we get a special parser state for parsing numbers. - * - * FIXME: What about ^* and ^/? - * They are currently highlighted as commands. */ if (machine->parent.current->keymacro_mask & TECO_KEYMACRO_MASK_START && chr <= 0xFF) { if (g_ascii_isdigit(chr)) style = SCE_SCITECO_NUMBER; - else if (strchr(",+-*/#&", chr)) + else if (strchr(",+-*/#&()", chr)) style = SCE_SCITECO_OPERATOR; + } else if (machine->parent.current == &teco_state_control) { + /* + * Two-character operators must always begin with caret + * They get a separate style, so we can extend it back to + * the caret in teco_lexter_step. + */ + if (strchr("*/#", chr)) + style = SCE_SCITECO_OPERATOR2; } /* @@ -174,8 +180,9 @@ teco_lexer_step(teco_view_t *view, teco_machine_main_t *machine, /* * True comments begin with `!*` or `!!`, but only the second character gets * the correct style by default, so we extend it backwards. + * The same is true for two-letter operators. */ - if (style == SCE_SCITECO_COMMENT) + if (style == SCE_SCITECO_COMMENT || style == SCE_SCITECO_OPERATOR2) old_pc--; teco_view_ssm(view, SCI_STARTSTYLING, start+old_pc, 0); diff --git a/src/lexer.h b/src/lexer.h index 2b011be..e91cdd1 100644 --- a/src/lexer.h +++ b/src/lexer.h @@ -25,12 +25,14 @@ typedef enum { SCE_SCITECO_DEFAULT = 0, SCE_SCITECO_COMMAND = 1, SCE_SCITECO_OPERATOR = 2, - SCE_SCITECO_QREG = 3, - SCE_SCITECO_STRING = 4, - SCE_SCITECO_NUMBER = 5, - SCE_SCITECO_LABEL = 6, - SCE_SCITECO_COMMENT = 7, - SCE_SCITECO_INVALID = 8 + /** two-character operators */ + SCE_SCITECO_OPERATOR2 = 3, + SCE_SCITECO_QREG = 4, + SCE_SCITECO_STRING = 5, + SCE_SCITECO_NUMBER = 6, + SCE_SCITECO_LABEL = 7, + SCE_SCITECO_COMMENT = 8, + SCE_SCITECO_INVALID = 9 } teco_style_t; void teco_lexer_style(teco_view_t *view, gsize end); |
