From 90baf34034af9363ee4cfa1654a8cc72dfc8c62e Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sat, 25 Mar 2017 06:47:10 +0100 Subject: 0,8ED: Automatic case-folding of commands * when enabled, it will automatically upper-case all one or two letter commands (which are case insensitive). * also affects the up-carret control commands, so they when inserted they look more like real control commands. * specifically does not affect case-insensitive Q-Register specifications * the result are command lines that are better readable and conform to the coding style used in SciTECO's standard library. This eases reusing command lines as well. * Consequently, string-building and pattern match characters should be case-folded as well, but they aren't currently since State::process_edit_cmd() does not have sufficient insight into the MicroStateMachines. Also, it could not be delegated to the MicroStateMachines. Perhaps they should be abandoned in favour of embeddedable regular state machines; or regular state machines with a stack of return states? --- src/parser.h | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/parser.h') diff --git a/src/parser.h b/src/parser.h index 56e58c4..f61d335 100644 --- a/src/parser.h +++ b/src/parser.h @@ -124,6 +124,18 @@ public: } }; +/** + * Base class of states with case-insenstive input. + * + * This is meant for states accepting command characters + * that can possibly be case-folded. + */ +class StateCaseInsensitive : public State { +protected: + /* in cmdline.cpp */ + void process_edit_cmd(gchar key); +}; + template class MicroStateMachine : public Object { protected: @@ -252,7 +264,7 @@ protected: void process_edit_cmd(gchar key); }; -class StateStart : public State { +class StateStart : public StateCaseInsensitive { public: StateStart(); @@ -276,7 +288,7 @@ private: } }; -class StateControl : public State { +class StateControl : public StateCaseInsensitive { public: StateControl(); @@ -292,7 +304,7 @@ private: State *custom(gchar chr); }; -class StateEscape : public State { +class StateEscape : public StateCaseInsensitive { public: StateEscape(); @@ -312,7 +324,7 @@ private: } }; -class StateFCommand : public State { +class StateFCommand : public StateCaseInsensitive { public: StateFCommand(); @@ -344,7 +356,7 @@ private: State *got_file(const gchar *filename); }; -class StateCondCommand : public State { +class StateCondCommand : public StateCaseInsensitive { public: StateCondCommand(); @@ -352,7 +364,7 @@ private: State *custom(gchar chr); }; -class StateECommand : public State { +class StateECommand : public StateCaseInsensitive { public: StateECommand(); -- cgit v1.2.3