diff options
-rw-r--r-- | parser.cpp | 30 | ||||
-rw-r--r-- | parser.h | 5 | ||||
-rw-r--r-- | qbuffers.h | 2 | ||||
-rwxr-xr-x | teco.ini | 10 |
4 files changed, 28 insertions, 19 deletions
@@ -247,7 +247,7 @@ original: State * StateExpectString::custom(gchar chr) throw (Error) { - gchar *insert, *new_str; + gchar *insert; if (chr == '\0') { BEGIN_EXEC(this); @@ -275,13 +275,15 @@ StateExpectString::custom(gchar chr) throw (Error) State *next = done(string ? : ""); g_free(string); - undo.push_var<gchar>(escape_char); + undo.push_var(escape_char); escape_char = '\x1B'; - undo.push_var<Machine>(machine); - machine.state = Machine::STATE_START; - machine.mode = Machine::MODE_NORMAL; - machine.toctl = false; + if (string_building) { + undo.push_var(machine); + machine.state = Machine::STATE_START; + machine.mode = Machine::MODE_NORMAL; + machine.toctl = false; + } return next; } @@ -291,18 +293,20 @@ StateExpectString::custom(gchar chr) throw (Error) /* * String building characters */ - undo.push_var<Machine>(machine); - insert = machine_input(chr); - if (!insert) - return this; + if (string_building) { + undo.push_var(machine); + insert = machine_input(chr); + if (!insert) + return this; + } else { + insert = g_strdup((gchar []){chr, '\0'}); + } /* * String accumulation */ undo.push_str(strings[0]); - new_str = g_strconcat(strings[0] ? : "", insert, NULL); - g_free(strings[0]); - strings[0] = new_str; + String::append(strings[0], insert); process(strings[0], strlen(insert)); g_free(insert); @@ -110,8 +110,11 @@ class StateExpectString : public State { mode(MODE_NORMAL), toctl(false) {} } machine; + bool string_building; + public: - StateExpectString() : State() {} + StateExpectString(bool _building = true) + : State(), string_building(_building) {} private: gchar *machine_input(gchar key) throw (Error); @@ -411,6 +411,8 @@ private: }; class StateSetQRegString : public StateExpectString { +public: + StateSetQRegString() : StateExpectString(false) {} private: State *done(const gchar *str) throw (Error); }; @@ -6,13 +6,13 @@ Oadd,edit,close,quit !add! [f[r[0[1[2 - f^QQ* EQf + EQ* HXf EQf r U2U1U0 (Q0*256 + Q1)*256 + Q2 - ZJ -:S.^Q[cpp,c,h]"S Z-."= - EB^QQf + ZJ -:S.[cpp,c,h]"S Z-."= + EBQf 3,4001ES 0,4005ESbreak case continue default do else for goto if return switch while 0,255,0Mr,0,2051ES @@ -23,13 +23,13 @@ '' ZJ -:Smakefile"S Z-."= - EB^QQf + EBQf 11,4001ES 0,255,0Mr,1,2051ES Oadd.end '' - EB^QQf + EBQf !add.end! ]2]1]0]r]f Oend |