aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kvirc/kernel/kvi_userinput.cpp23
-rw-r--r--src/kvirc/kernel/kvi_userinput.h7
-rw-r--r--src/kvirc/kvs/kvi_kvs_corefunctions.cpp1
-rw-r--r--src/kvirc/kvs/kvi_kvs_corefunctions.h1
-rw-r--r--src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp34
-rw-r--r--src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp2
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)