aboutsummaryrefslogtreecommitdiffhomepage
path: root/parser.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-19 21:02:23 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-11-20 06:07:33 +0100
commit3db5b1a40bf6b503b26827355f40033b1047a123 (patch)
treeb0689d9f880b85c79485a2632b5a2e0c19284cbe /parser.cpp
parent6403c951636a24f31368e91da2439c4fb47ff4c3 (diff)
downloadsciteco-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.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/parser.cpp b/parser.cpp
index 4ba029b..b75e3bf 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -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);