diff options
| author | 2010-06-30 12:20:55 +0000 | |
|---|---|---|
| committer | 2010-06-30 12:20:55 +0000 | |
| commit | 0edd63d3191fff9fcbffb33b890dc17c4729b679 (patch) | |
| tree | 4144dbf365e6919e679b94e62a052c8c68979ed9 | |
| parent | fixed layout of sound selectors (diff) | |
| download | KVIrc-0edd63d3191fff9fcbffb33b890dc17c4729b679.tar.gz KVIrc-0edd63d3191fff9fcbffb33b890dc17c4729b679.tar.bz2 KVIrc-0edd63d3191fff9fcbffb33b890dc17c4729b679.zip | |
added $escape() function and fixed aliases/popups using eval (fixes #824)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4564 17fca916-40b9-46aa-a4ea-0a15b648b75c
| -rw-r--r-- | data/defscript/aliases.kvs | 2 | ||||
| -rw-r--r-- | data/defscript/popups.kvs | 4 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_userinput.cpp | 23 | ||||
| -rw-r--r-- | src/kvirc/kernel/kvi_userinput.h | 7 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_corefunctions.cpp | 1 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_corefunctions.h | 1 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp | 34 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp | 2 |
8 files changed, 62 insertions, 12 deletions
diff --git a/data/defscript/aliases.kvs b/data/defscript/aliases.kvs index b529cdb1b..182431e04 100644 --- a/data/defscript/aliases.kvs +++ b/data/defscript/aliases.kvs @@ -521,7 +521,7 @@ alias(hop) // Exit channel if($window.type($channel(%chan))=="channel") - eval "part --keep %chan $option(stringPartMessage)" + eval "part --keep $escape(%chan) $option(stringPartMessage)" // Rejoin channel if(!%key) join %chan else join %chan %key diff --git a/data/defscript/popups.kvs b/data/defscript/popups.kvs index bfa4f444e..49c0e3b9a 100644 --- a/data/defscript/popups.kvs +++ b/data/defscript/popups.kvs @@ -665,7 +665,7 @@ defpopup(channelpopup) item($tr("&Part","defscript") $0,40) { - if($channel($0)) eval "part $0 $option(stringPartMessage)"; + if($channel($0)) eval "part $escape($0) $option(stringPartMessage)"; } separator @@ -724,7 +724,7 @@ defpopup(channeltextview) item($tr("&Part","defscript") $0,40) { - if($channel($0)) eval "part $0 $option(stringPartMessage)"; + if($channel($0)) eval "part $escape($0) $option(stringPartMessage)"; } separator diff --git a/src/kvirc/kernel/kvi_userinput.cpp b/src/kvirc/kernel/kvi_userinput.cpp index 455ca73da..374be7674 100644 --- a/src/kvirc/kernel/kvi_userinput.cpp +++ b/src/kvirc/kernel/kvi_userinput.cpp @@ -83,15 +83,7 @@ namespace KviUserInput static QString szUserFriendlyCommandlineContext(__tr2qs("commandline::userfriendly")); QString szCmd = szData; - // escape any -$;\%( - szCmd.replace("\\","\\\\"); - szCmd.replace("\"","\\\""); - szCmd.replace("$","\\$"); - szCmd.replace("%","\\%"); - szCmd.replace("(","\\("); - szCmd.replace(";","\\;"); - szCmd.replace("-","\\-"); - szCmd.replace("+","\\+"); + escapeString(szCmd); KviKvsScript kvs(szContext.isEmpty() ? szUserFriendlyCommandlineContext : szContext,szCmd); return (kvs.run(pWindow,0,0) != KviKvsScript::Error); @@ -161,4 +153,17 @@ namespace KviUserInput } } } + + void escapeString(QString & szData) + { + // escape any -$;\%( + szData.replace("\\","\\\\"); + szData.replace("\"","\\\""); + szData.replace("$","\\$"); + szData.replace("%","\\%"); + szData.replace("(","\\("); + szData.replace(";","\\;"); + szData.replace("-","\\-"); + szData.replace("+","\\+"); + } }; diff --git a/src/kvirc/kernel/kvi_userinput.h b/src/kvirc/kernel/kvi_userinput.h index d3a059752..28dba4bae 100644 --- a/src/kvirc/kernel/kvi_userinput.h +++ b/src/kvirc/kernel/kvi_userinput.h @@ -69,6 +69,13 @@ namespace KviUserInput */ KVIRC_API void parseNonCommand(QString & szData, KviWindow * pWindow); + /** + * \brief Escapes any kvs special character from a string + * \param szData The string to escape + * \return void + */ + KVIRC_API void escapeString(QString & szData); + //bool parseCommandWithSingleArgument(const QString & szData, KviWindow * pWindow, const QString & szContext = KviQString::Empty); } diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions.cpp b/src/kvirc/kvs/kvi_kvs_corefunctions.cpp index c64dd8eca..5ce814210 100644 --- a/src/kvirc/kvs/kvi_kvs_corefunctions.cpp +++ b/src/kvirc/kvs/kvi_kvs_corefunctions.cpp @@ -61,6 +61,7 @@ namespace KviKvsCoreFunctions _REGFNC("countStatusBarItems",countStatusBarItems) _REGFNC("cr",cr) _REGFNC("date",date) + _REGFNC("escape",escape) _REGFNC("false",falseCKEYWORDWORKAROUND) _REGFNC("features",features) _REGFNC("firstConnectedConsole",firstConnectedConsole) diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions.h b/src/kvirc/kvs/kvi_kvs_corefunctions.h index f3b7410db..2e1e1ebe7 100644 --- a/src/kvirc/kvs/kvi_kvs_corefunctions.h +++ b/src/kvirc/kvs/kvi_kvs_corefunctions.h @@ -67,6 +67,7 @@ namespace KviKvsCoreFunctions KVSCF(countStatusBarItems); KVSCF(cr); KVSCF(date); + KVSCF(escape); KVSCF(falseCKEYWORDWORKAROUND); KVSCF(features); KVSCF(firstConnectedConsole); diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp index f8b848353..ab6c97542 100644 --- a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp +++ b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp @@ -39,6 +39,7 @@ #include "kvi_ircuserdb.h" #include "kvi_frame.h" #include "kvi_statusbar.h" +#include "kvi_userinput.h" // date includes #include <QDateTime> @@ -999,6 +1000,39 @@ namespace KviKvsCoreFunctions ///////////////////////////////////////////////////////////////////////////////////////////// /* + @doc: escape + @type: + function + @title: + $escape + @short: + Returns a kvs-escaped version of the string + @syntax: + <string> $escape(<text:string>) + @description: + In KVS some characters in a string have special meanings: % marks the start of a variable name, $ the start of a function name, etc..[br] + Sometimes you could need to escape them using a \ character to avoid kvirc from interpreting the special meaning of these characters: + this function will to the dirty job for you, returning a correctly kvs-escaped version of the string passed as a parameter.[br] + @seealso: + [cmd]eval[/cmd] + */ + + KVSCF(escape) + { + QString szData; + KVSCF_PARAMETERS_BEGIN + KVSCF_PARAMETER("text",KVS_PT_NONEMPTYSTRING,0,szData) + KVSCF_PARAMETERS_END + + KviUserInput::escapeString(szData); + + KVSCF_pRetBuffer->setString(szData); + return true; + } + + ///////////////////////////////////////////////////////////////////////////////////////////// + + /* @doc: false @type: function diff --git a/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp b/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp index e47bc2134..ed210e198 100644 --- a/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp +++ b/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp @@ -1390,6 +1390,8 @@ namespace KviKvsCoreSimpleCommands [comment]# Evaluate a command block[/comment] eval "{ echo First command!; echo Second command!; }" [/example] + @seealso: + [fnc]$escape[/fnc] */ KVSCSC(eval) |
