diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-12-04 04:06:45 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-12-04 04:06:45 +0100 |
commit | 575c9f45ec0f338e1d22032b98773d3ff3386bc9 (patch) | |
tree | db0362ce6f69d2a18ec6e94ad6889254050f1eae | |
parent | 457fe1498d5fe88e0447ddecd617281f7afd3304 (diff) | |
download | sciteco-575c9f45ec0f338e1d22032b98773d3ff3386bc9.tar.gz |
search-replace command with default replacement string (FR)
* based on FS command
* default replacement string is stored in global register "-"
-rw-r--r-- | main.cpp | 2 | ||||
-rw-r--r-- | parser.cpp | 1 | ||||
-rw-r--r-- | search.cpp | 38 | ||||
-rw-r--r-- | search.h | 23 |
4 files changed, 55 insertions, 9 deletions
@@ -169,6 +169,8 @@ main(int argc, char **argv) QRegisters::globals.initialize(); /* search string and status register */ QRegisters::globals.initialize("_"); + /* replacement string register */ + QRegisters::globals.initialize("-"); /* current buffer name and number ("*") */ QRegisters::globals.insert(new QRegisterBufferInfo()); @@ -1016,6 +1016,7 @@ StateFCommand::StateFCommand() : State() { transitions['\0'] = this; transitions['S'] = &States::replace; + transitions['R'] = &States::replacedefault; } State * @@ -1,3 +1,5 @@ +#include <string.h> + #include <glib.h> #include <glib/gprintf.h> @@ -9,10 +11,12 @@ #include "search.h" namespace States { - StateSearch search; - StateSearchAll searchall; - StateReplace replace; - StateReplace_insert replace_insert; + StateSearch search; + StateSearchAll searchall; + StateReplace replace; + StateReplace_insert replace_insert; + StateReplaceDefault replacedefault; + StateReplaceDefault_insert replacedefault_insert; } /* @@ -505,3 +509,29 @@ StateReplace::done(const gchar *str) throw (Error) return &States::replace_insert; } + +State * +StateReplaceDefault::done(const gchar *str) throw (Error) +{ + StateReplace::done(str); + return &States::replacedefault_insert; +} + +State * +StateReplaceDefault_insert::done(const gchar *str) throw (Error) +{ + BEGIN_EXEC(&States::start); + + QRegister *replace_reg = QRegisters::globals["-"]; + + if (*str) { + replace_reg->undo_set_string(); + replace_reg->set_string(str); + } else { + gchar *replace_str = replace_reg->get_string(); + StateInsert::process(replace_str, strlen(replace_str)); + g_free(replace_str); + } + + return &States::start; +} @@ -52,7 +52,7 @@ class StateReplace : public StateSearch { public: StateReplace() : StateSearch(false) {} -private: +protected: State *done(const gchar *str) throw (Error); }; @@ -61,11 +61,24 @@ private: void initial(void) throw (Error) {} }; +class StateReplaceDefault : public StateReplace { +private: + State *done(const gchar *str) throw (Error); +}; + +class StateReplaceDefault_insert : public StateInsert { +private: + void initial(void) throw (Error) {} + State *done(const gchar *str) throw (Error); +}; + namespace States { - extern StateSearch search; - extern StateSearchAll searchall; - extern StateReplace replace; - extern StateReplace_insert replace_insert; + extern StateSearch search; + extern StateSearchAll searchall; + extern StateReplace replace; + extern StateReplace_insert replace_insert; + extern StateReplaceDefault replacedefault; + extern StateReplaceDefault_insert replacedefault_insert; } #endif |