diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-03-17 18:28:00 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-03-17 18:28:00 +0100 |
commit | 7b3204679bf53733ade52436723fc41858260d36 (patch) | |
tree | 0ad5d04eee28245dd86612d65b6a65ae7069881c /src/parser.cpp | |
parent | b376b24e6d475d90e3c8267e8340b13ec7a43121 (diff) | |
download | sciteco-7b3204679bf53733ade52436723fc41858260d36.tar.gz |
^E\ string building character to format number
* new Expressions::format()
* may be used format numbers as part of arrays (Q-Register names)
Diffstat (limited to 'src/parser.cpp')
-rw-r--r-- | src/parser.cpp | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 80bd3b5..c1cb42e 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -308,6 +308,10 @@ StateUpper: StateCtlE: switch (g_ascii_toupper(chr)) { + case '\\': + undo.push_obj(qregspec_machine) = new QRegSpecMachine; + set(&&StateCtlENum); + break; case 'Q': undo.push_obj(qregspec_machine) = new QRegSpecMachine; set(&&StateCtlEQ); @@ -323,6 +327,15 @@ StateCtlE: return NULL; +StateCtlENum: + reg = qregspec_machine->input(chr); + if (!reg) + return NULL; + + undo.push_obj(qregspec_machine) = NULL; + set(StateStart); + return g_strdup(expressions.format(reg->get_integer())); + StateCtlEU: reg = qregspec_machine->input(chr); if (!reg) @@ -460,22 +473,10 @@ StateStart::StateStart() : State() void StateStart::insert_integer(tecoInt v) { - gchar buf[sizeof(tecoInt)*8+1]; /* maximum length if radix = 2 */ - gchar *p = buf + sizeof(buf); + const gchar *str = expressions.format(v); - *--p = '\0'; interface.ssm(SCI_BEGINUNDOACTION); - if (v < 0) { - interface.ssm(SCI_ADDTEXT, 1, (sptr_t)"-"); - v *= -1; - } - do { - *--p = '0' + (v % expressions.radix); - if (*p > '9') - *p += 'A' - '9'; - } while ((v /= expressions.radix)); - interface.ssm(SCI_ADDTEXT, buf + sizeof(buf) - p - 1, - (sptr_t)p); + interface.ssm(SCI_ADDTEXT, strlen(str), (sptr_t)str); interface.ssm(SCI_SCROLLCARET); interface.ssm(SCI_ENDUNDOACTION); ring.dirtify(); |