[Konversation-devel] [Bug 211632] Autoreplace doesn't handle multiple replacements in the same line properly
Travis McHenry
wordsizzle at gmail.com
Tue Dec 15 08:47:50 CET 2009
https://bugs.kde.org/show_bug.cgi?id=211632
Travis McHenry <wordsizzle at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
--- Comment #1 from Travis McHenry <wordsizzle gmail com> 2009-12-15 08:47:50 ---
commit a54b8543fa24de3bf6fe6993724b588a9e48a1b4
Author: Travis McHenry <wordsizzle at gmail.com>
Date: Tue Dec 15 00:44:23 2009 -0700
Fix an autoreplace bug and enable escaping
Make it so we can do multiple replaces in a single line again by
not replacing the content of the 'global' replace variable
BUG:211632
Make it so we can support %# in replacements without it getting
lost in regex land by allowing escaping (with %%#).If you're so
inclined please review the big comment explaining why we can't
just not remove the leftover %# to make sure I'm not shooting hot
air.
BUG:218332
diff --git a/src/application.cpp b/src/application.cpp
index cf61af5..79c7730 100644
--- a/src/application.cpp
+++ b/src/application.cpp
@@ -1007,18 +1007,27 @@ QString Application::doAutoreplace(const QString&
text,bool output)
{
// remember captured patterns
QStringList captures = needleReg.capturedTexts();
+ QString replaceWith = replacement;
- // replace %0 - %9 in regex groups
+ replaceWith.replace("%%","%\x01"); // escape double %
+ // replace %0-9 in regex groups
for (int capture=0;capture<captures.count();capture++)
{
-
replacement.replace(QString("%%1").arg(capture),captures[capture]);
+ QString search = QString("%%1").arg(capture);
+ replaceWith.replace(search, captures[capture]);
}
- replacement.remove(QRegExp("%[0-9]"));
+ //Explanation why this is important so we don't
forget:
+ //If somebody has a regex that say has a replacement
of url.com/%1/%2 and the
+ //regex can either match one or two patterns, if the
2nd pattern match is left,
+ //the url is invalid (url.com/match/%2). This is
expected regex behavior I'd assume.
+ replaceWith.remove(QRegExp("%[0-9]"));
+
+ replaceWith.replace("%\x01","%"); // return escaped %
to normal
// allow for var expansion in autoreplace
- replacement =
Konversation::doVarExpansion(replacement);
+ replaceWith =
Konversation::doVarExpansion(replaceWith);
// replace input with replacement
- line.replace(index, captures[0].length(),
replacement);
- index += replacement.length();
+ line.replace(index, captures[0].length(),
replaceWith);
+ index += replaceWith.length();
}
} while (index >= 0 && index < (int)line.length());
}
--
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the Konversation-devel
mailing list