diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-19 21:02:23 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-20 06:07:33 +0100 |
commit | 3db5b1a40bf6b503b26827355f40033b1047a123 (patch) | |
tree | b0689d9f880b85c79485a2632b5a2e0c19284cbe /parser.cpp | |
parent | 6403c951636a24f31368e91da2439c4fb47ff4c3 (diff) | |
download | sciteco-3db5b1a40bf6b503b26827355f40033b1047a123.tar.gz |
disable ^U string building characters (by default)
some method to reenable it will be developed in the future (perhaps using a separate command, or a special modifier which reverses a string commands default handling of building character)
Diffstat (limited to 'parser.cpp')
-rw-r--r-- | parser.cpp | 30 |
1 files changed, 17 insertions, 13 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); |