19 using std::make_unique;
34 int main(
int argc,
char** argv)
36 Console::println(
string(
"createminiscriptcodecompletion ") + Version::getVersion());
37 Console::println(Version::getCopyright());
41 methodDescriptions.
load(
"resources/engine/code-completion",
"tscript-methods.properties");
44 vector<string> keywords1;
45 vector<string> keywords2;
46 keywords2.push_back(
"function:");
47 keywords2.push_back(
"on:");
48 keywords2.push_back(
"on-enabled:");
53 lines.push_back(
"<?xml version=\"1.0\"?>");
54 lines.push_back(
"<code-completion>");
57 EngineMiniScript::registerDataTypes();
59 auto baseMiniScript = make_unique<EngineMiniScript>();
60 baseMiniScript->registerMethods();
62 auto logicMiniScript = make_unique<LogicMiniScript>();
63 logicMiniScript->registerMethods();
65 auto guiMiniScript = make_unique<GUIMiniScript>(
nullptr);
66 guiMiniScript->registerMethods();
69 array<EngineMiniScript*, 3> miniScriptFlavours = { baseMiniScript.get(), logicMiniScript.get(), guiMiniScript.get() };
70 for (
const auto miniScriptFlavour: miniScriptFlavours) {
72 auto scriptMethods = miniScriptFlavour->getMethods();
73 vector<string> methods;
74 for (
const auto& scriptMethod: scriptMethods) {
76 if ((miniScriptFlavour != baseMiniScript.get() && baseMiniScript->hasMethod(scriptMethod->getMethodName()) ==
true) ||
77 (miniScriptFlavour == guiMiniScript.get() && logicMiniScript->hasMethod(scriptMethod->getMethodName()) ==
true)
80 keywords1.push_back(scriptMethod->getMethodName());
82 if (description.empty() ==
true) description = methodDescriptions.
get(
"miniscript.basemethod." + scriptMethod->getMethodName(),
string());
83 if (description.empty() ==
true) description = methodDescriptions.
get(
"miniscript.logicmethod." + scriptMethod->getMethodName(),
string());
84 if (description.empty() ==
true) description = methodDescriptions.
get(
"miniscript." + scriptMethod->getMethodName(),
string());
85 Console::println(
"Adding method: " + scriptMethod->getMethodName());
86 lines.push_back(
" <keyword name=\"" + scriptMethod->getMethodName() +
"\" func=\"yes\">");
87 lines.push_back(
" <overload return-value=\"" + EngineMiniScript::ScriptVariable::getReturnTypeAsString(scriptMethod->getReturnValueType(), scriptMethod->isReturnValueNullable()) +
"\" descr=\"" + GUIParser::escape(description) +
"\">");
88 for (
const auto& argumentType: scriptMethod->getArgumentTypes()) {
89 string argumentValueString;
90 if (argumentType.optional ==
true) argumentValueString+=
"[";
91 argumentValueString+= EngineMiniScript::ScriptVariable::getTypeAsString(argumentType.type) +
" ";
92 argumentValueString+= string() + (argumentType.reference ==
true?
"=":
"") +
"$" + argumentType.name;
93 if (argumentType.optional ==
true) argumentValueString+=
"]";
94 lines.push_back(
" <parameter name=\"" + argumentValueString +
"\" />");
96 if (scriptMethod->isVariadic() ==
true) {
97 lines.push_back(
" <parameter name=\"...\" />");
99 lines.push_back(
" </overload>");
100 lines.push_back(
" </keyword>");
105 lines.push_back(
"</code-completion>");
106 for (
const auto& line: lines) Console::println(line);
110 Console::println(
"Syntax highlighting: ");
111 Console::print(
"Syntax highlighting: keywords1: ");
112 for (
const auto& keyword1: keywords1) Console::print(keyword1 +
" ");
115 Console::print(
"Syntax highlighting: keywords2: ");
116 for (
const auto& keyword2: keywords2) Console::print(keyword2 +
" ");
121 Console::println(
"Saving to: resources/engine/code-completion/tscript.xml");
122 FileSystem::getInstance()->setContentFromStringArray(
"resources/engine/code-completion",
"tscript.xml", lines);
125 Application::exit(Application::EXITCODE_SUCCESS);
Application base class, please make sure to allocate application on heap to have correct application ...
File system singleton class.
Properties class, which helps out with storeing or loading key value pairs from/to property files.
const string & get(const string &key, const string &defaultValue) const
Get property value by key.
void load(const string &pathName, const string &fileName, FileSystemInterface *fileSystem=nullptr)
Load property file.
int main(int argc, char **argv)