summaryrefslogtreecommitdiffstats
path: root/kate/part
diff options
context:
space:
mode:
Diffstat (limited to 'kate/part')
-rw-r--r--kate/part/Makefile.am2
-rw-r--r--kate/part/katesearch.cpp32
2 files changed, 23 insertions, 11 deletions
diff --git a/kate/part/Makefile.am b/kate/part/Makefile.am
index 4a182452e..9be7a9e6d 100644
--- a/kate/part/Makefile.am
+++ b/kate/part/Makefile.am
@@ -16,7 +16,7 @@ libkate_la_SOURCES = katesearch.cpp katebuffer.cpp katecmds.cpp \
libkatepart_la_SOURCES = dummy.cpp
-libkatepart_la_LIBADD = libkate.la ../interfaces/libkatepartinterfaces.la $(top_builddir)/kdeprint/libkdeprint.la $(top_builddir)/kutils/libkutils.la $(top_builddir)/kjs/libkjs.la $(LUA_LIBS)
+libkatepart_la_LIBADD = libkate.la ../interfaces/libkatepartinterfaces.la $(LIB_KDEPRINT) $(top_builddir)/kutils/libkutils.la $(top_builddir)/kjs/libkjs.la $(LUA_LIBS) $(LIB_QT) $(LIB_KDEUI) $(LIB_KDECORE) $(LIB_KPARTS) $(top_builddir)/interfaces/ktexteditor/libktexteditor.la $(LIB_KFILE) $(top_builddir)/dcop/libDCOP.la
libkatepart_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN)
diff --git a/kate/part/katesearch.cpp b/kate/part/katesearch.cpp
index 8f4911137..96f5128b0 100644
--- a/kate/part/katesearch.cpp
+++ b/kate/part/katesearch.cpp
@@ -377,23 +377,35 @@ void KateSearch::replaceOne()
{
QString replaceWith = m_replacement;
if ( s.flags.regExp && s.flags.useBackRefs ) {
- // replace each "(?!\)\d+" with the corresponding capture
- QRegExp br("\\\\(\\d+)");
+ // Replace each "\0"..."\9" with the corresponding capture,
+ // "\n" and "\t" with newline and tab,
+ // "\\" with "\",
+ // and remove the "\" for any other sequence.
+ QRegExp br("\\\\(.)");
int pos = br.search( replaceWith );
int ncaps = m_re.numCaptures();
while ( pos >= 0 ) {
- QString sc;
- if ( !pos || replaceWith.at( pos-1) != '\\' ) {
- int ccap = br.cap(1).toInt();
+ QString substitute;
+ QChar argument = br.cap(1).at(0);
+ if ( argument.isDigit() ) {
+ // the second character is a digit, this is a backreference
+ int ccap = argument.digitValue();
if (ccap <= ncaps ) {
- sc = m_re.cap( ccap );
- replaceWith.replace( pos, br.matchedLength(), sc );
- }
- else {
+ substitute = m_re.cap( ccap );
+ } else {
kdDebug()<<"KateSearch::replaceOne(): you don't have "<<ccap<<" backreferences in regexp '"<<m_re.pattern()<<"'"<<endl;
+ break;
}
+ } else if ( argument == 'n' ) {
+ substitute = '\n';
+ } else if ( argument == 't' ) {
+ substitute = '\t';
+ } else {
+ // handle a validly escaped backslash, or an invalid escape.
+ substitute = argument;
}
- pos = br.search( replaceWith, pos + (int)sc.length() );
+ replaceWith.replace( pos, br.matchedLength(), substitute );
+ pos = br.search( replaceWith, pos + substitute.length() );
}
}