aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qregisters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qregisters.cpp')
-rw-r--r--src/qregisters.cpp38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/qregisters.cpp b/src/qregisters.cpp
index 6ca7990..23d7fc4 100644
--- a/src/qregisters.cpp
+++ b/src/qregisters.cpp
@@ -990,9 +990,16 @@ QRegSpecMachine::input(gchar chr, QRegister *&result)
MICROSTATE_START;
switch (chr) {
- case '.': undo.push_var(is_local) = true; break;
- case '#': set(&&StateFirstChar); break;
- case '[': set(&&StateString); break;
+ case '.':
+ undo.push_var(is_local) = true;
+ break;
+ case '#':
+ set(&&StateFirstChar);
+ break;
+ case '[':
+ set(&&StateString);
+ undo.push_var(nesting)++;
+ break;
default:
undo.push_str(name) = String::chrdup(String::toupper(chr));
goto done;
@@ -1003,6 +1010,7 @@ MICROSTATE_START;
StateFirstChar:
undo.push_str(name) = (gchar *)g_malloc(3);
name[0] = String::toupper(chr);
+ name[1] = '\0';
set(&&StateSecondChar);
return false;
@@ -1017,9 +1025,9 @@ StateString:
undo.push_var(nesting)++;
break;
case ']':
+ undo.push_var(nesting)--;
if (!nesting)
goto done;
- undo.push_var(nesting)--;
break;
}
@@ -1071,6 +1079,28 @@ done:
return true;
}
+gchar *
+QRegSpecMachine::auto_complete(void)
+{
+ gsize restrict_len = 0;
+
+ if (string_machine.qregspec_machine)
+ /* nested Q-Reg definition */
+ return string_machine.qregspec_machine->auto_complete();
+
+ if (state == StateStart)
+ /* single-letter Q-Reg */
+ restrict_len = 1;
+ else if (!nesting)
+ /* two-letter Q-Reg */
+ restrict_len = 2;
+
+ QRegisterTable &table = is_local ? *QRegisters::locals
+ : QRegisters::globals;
+ return table.auto_complete(name, nesting == 1 ? ']' : '\0',
+ restrict_len);
+}
+
/*
* Command states
*/