- Light script language for integration to your project
- Script deny access read/write to out folders/files
- Any variables or procedure is global
- Used a procedure simple language
- You can set variables before run script
- You can get variables after run script
- You can extend or disable procedures on c++
- Multiline strings
- no if, for, while
Just include this files:
- src/wsjcpp_core/wsjcpp_core.h
- src/wsjcpp_core/wsjcpp_core.cpp
- src/wsjcpp_safe_scripting.h
- src/wsjcpp_safe_scripting.cpp
$ wsjcpp install https://github.com/wsjcpp/wsjcpp-safe-scripting:master
Default Variables:
rootdir
- directory when will be run scriptscript_filename
- name of script
Default procedures:
exit
- will be exit from script with exitcode 0error
- will be exit from script with exitcode -1 (error code)print_all_variables
- print to log all defined variableslog_info [args]
- print argsvar <varname>
- define new variableset_value <varname1> "some"
- set string value to variableset_value <varname1> <varname2>
- set value to variableconcat <varname1> [args]
- concatinate string values from all vars tomake_dir "dir_name"
- try create dirnamenormalize_class_name <varname1>
- will be removed characters which not in [a-zA-Z0-9]convert_CamelCase_to_snake_case <from> <to>
- convert from CamelCase to snake_casewrite_file <filepath> <content>
- write variable to filecmakelists_txt_append_wsjcpp <filepath>
- append string like 'list (APPEND WSJCPP_SOURCES "%filepath%")' to CMakeLists.txt into between '#### BEGIN_WSJCPP_APPEND' and '#### END_WSJCPP_APPEND'
#include <wsjcpp_safe_scripting.h>
...
WsjcppSafeScriptingContext scriptContext;
std::string sCurrentDirectory = WsjcppCore::getCurrentDirectory();
std::string sScriptFileName = "script_filename";
std::vector<std::string> vScriptArgs = {"Some1", "Some2"}; // script args: arg1, arg2
// script content
std::string sScriptContent =
"var test1\n"
"set_value test1 \"test string\"\n"
"log_info test1\n"
"log_info arg1\n"
"log_info arg2\n";
int nResult = scriptContext.exec(
sCurrentDirectory,
sScriptFileName,
sScriptContent,
vScriptArgs
);
if (nResult == 0) {
std::string sTest1 = scriptContext.getVariable("test1")->getValue();
}
wsjcpp generate WsjcppSafeScriptingProc YourClassName
After this will be generated files and added to your CMakeLists.txt:
#### BEGIN_WSJCPP_APPEND
list (APPEND WSJCPP_SOURCES "src/wsjcpp_safe_scripting_proc_your_class_name.h")
list (APPEND WSJCPP_SOURCES "src/wsjcpp_safe_scripting_proc_your_class_name.cpp")
#### END_WSJCPP_APPEND
Now you can write you code in this files or move to another place
header src/wsjcpp_safe_scripting_proc_your_class_name.h
:
#ifndef WSJCPP_SAFE_SCRIPTING_PROC_YOUR_CLASS_NAME_H
#define WSJCPP_SAFE_SCRIPTING_PROC_YOUR_CLASS_NAME_H
#include <wsjcpp_safe_scripting.h>
class WsjcppSafeScriptingProcYourClassName : public WsjcppSafeScriptingProc {
public:
WsjcppSafeScriptingProcYourClassName();
virtual bool exec(const std::vector<WsjcppSafeScriptingVariable *> &m_vArgs);
};
#endif // WSJCPP_SAFE_SCRIPTING_PROC_YOUR_CLASS_NAME_H
source-code src/wsjcpp_safe_scripting_proc_your_class_name.cpp
:
#include "wsjcpp_safe_scripting_proc_your_class_name.h"
#include <wsjcpp_core.h>
// ---------------------------------------------------------------------
// WsjcppSafeScriptingProcYourClassName
WsjcppSafeScriptingProcYourClassName::WsjcppSafeScriptingProcYourClassName()
: WsjcppSafeScriptingProc("your_class_name") {
}
// ---------------------------------------------------------------------
bool WsjcppSafeScriptingProcYourClassName::exec(const std::vector<WsjcppSafeScriptingVariable *> &vArgs) {
// you code here
WsjcppLog::err(TAG, "Not implemented")
return false;
}
Example:
WsjcppSafeScriptingContext scriptContext;
// variable
WsjcppSafeScriptingVariable *pVar = new WsjcppSafeScriptingVariable("");
scriptContext.addVar(pVar);
WsjcppSafeScriptingProcYourClassName *pProc = new WsjcppSafeScriptingProcYourClassName();
scriptContext.addProc(pProc);