diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-12-11 03:46:01 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-12-11 03:46:01 +0000 |
commit | 865f314dd5ed55508f45a32973b709b79a541e36 (patch) | |
tree | dc1a3a884bb2fc10a89a3c46313897d22c5771eb /kate/part/katesearch.cpp | |
parent | ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (diff) | |
download | tdelibs-865f314dd5ed55508f45a32973b709b79a541e36.tar.gz tdelibs-865f314dd5ed55508f45a32973b709b79a541e36.zip |
kdelibs update to Trinity v3.5.11
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1061230 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kate/part/katesearch.cpp')
-rw-r--r-- | kate/part/katesearch.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
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() ); } } |