aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--parser.cpp1
-rw-r--r--search.cpp14
-rw-r--r--search.h18
3 files changed, 27 insertions, 6 deletions
diff --git a/parser.cpp b/parser.cpp
index 3f59e16..10c0ea3 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -1015,6 +1015,7 @@ StateStart::custom(gchar chr) throw (Error)
StateFCommand::StateFCommand() : State()
{
transitions['\0'] = this;
+ transitions['D'] = &States::searchdelete;
transitions['S'] = &States::replace;
transitions['R'] = &States::replacedefault;
}
diff --git a/search.cpp b/search.cpp
index ceb8e54..ea0613a 100644
--- a/search.cpp
+++ b/search.cpp
@@ -13,6 +13,7 @@
namespace States {
StateSearch search;
StateSearchAll searchall;
+ StateSearchDelete searchdelete;
StateReplace replace;
StateReplace_insert replace_insert;
StateReplaceDefault replacedefault;
@@ -494,9 +495,9 @@ StateSearchAll::done(const gchar *str) throw (Error)
}
State *
-StateReplace::done(const gchar *str) throw (Error)
+StateSearchDelete::done(const gchar *str) throw (Error)
{
- BEGIN_EXEC(&States::replace_insert);
+ BEGIN_EXEC(&States::start);
StateSearch::done(str);
@@ -507,13 +508,20 @@ StateReplace::done(const gchar *str) throw (Error)
undo.push_msg(SCI_UNDO);
+ return &States::start;
+}
+
+State *
+StateReplace::done(const gchar *str) throw (Error)
+{
+ StateSearchDelete::done(str);
return &States::replace_insert;
}
State *
StateReplaceDefault::done(const gchar *str) throw (Error)
{
- StateReplace::done(str);
+ StateSearchDelete::done(str);
return &States::replacedefault_insert;
}
diff --git a/search.h b/search.h
index beb20d4..8a23ac6 100644
--- a/search.h
+++ b/search.h
@@ -48,20 +48,31 @@ private:
State *done(const gchar *str) throw (Error);
};
-class StateReplace : public StateSearch {
+class StateSearchDelete : public StateSearch {
public:
- StateReplace() : StateSearch(false) {}
+ StateSearchDelete(bool last = true) : StateSearch(last) {}
protected:
State *done(const gchar *str) throw (Error);
};
+class StateReplace : public StateSearchDelete {
+public:
+ StateReplace() : StateSearchDelete(false) {}
+
+private:
+ State *done(const gchar *str) throw (Error);
+};
+
class StateReplace_insert : public StateInsert {
private:
void initial(void) throw (Error) {}
};
-class StateReplaceDefault : public StateReplace {
+class StateReplaceDefault : public StateSearchDelete {
+public:
+ StateReplaceDefault() : StateSearchDelete(false) {}
+
private:
State *done(const gchar *str) throw (Error);
};
@@ -75,6 +86,7 @@ private:
namespace States {
extern StateSearch search;
extern StateSearchAll searchall;
+ extern StateSearchDelete searchdelete;
extern StateReplace replace;
extern StateReplace_insert replace_insert;
extern StateReplaceDefault replacedefault;