diff options
Diffstat (limited to 'src')
| -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 |
6 files changed, 59 insertions, 9 deletions
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) |
