TDME2  1.9.200
createminiscriptcodecompletion-main.cpp
Go to the documentation of this file.
1 #include <array>
2 #include <memory>
3 #include <string>
4 #include <vector>
5 
6 #include <tdme/tdme.h>
9 #include <tdme/engine/Version.h>
11 #include <tdme/gui/GUIParser.h>
14 #include <tdme/utilities/Console.h>
17 
18 using std::array;
19 using std::make_unique;
20 using std::string;
21 using std::vector;
22 
33 
34 int main(int argc, char** argv)
35 {
36  Console::println(string("createminiscriptcodecompletion ") + Version::getVersion());
37  Console::println(Version::getCopyright());
38  Console::println();
39 
40  Properties methodDescriptions;
41  methodDescriptions.load("resources/engine/code-completion", "tscript-methods.properties");
42 
43  //
44  vector<string> keywords1;
45  vector<string> keywords2;
46  keywords2.push_back("function:");
47  keywords2.push_back("on:");
48  keywords2.push_back("on-enabled:");
49 
50 
51  //
52  vector<string> lines;
53  lines.push_back("<?xml version=\"1.0\"?>");
54  lines.push_back("<code-completion>");
55 
56  //
57  EngineMiniScript::registerDataTypes();
58  //
59  auto baseMiniScript = make_unique<EngineMiniScript>();
60  baseMiniScript->registerMethods();
61 
62  auto logicMiniScript = make_unique<LogicMiniScript>();
63  logicMiniScript->registerMethods();
64 
65  auto guiMiniScript = make_unique<GUIMiniScript>(nullptr);
66  guiMiniScript->registerMethods();
67 
68  //
69  array<EngineMiniScript*, 3> miniScriptFlavours = { baseMiniScript.get(), logicMiniScript.get(), guiMiniScript.get() };
70  for (const auto miniScriptFlavour: miniScriptFlavours) {
71  // methods
72  auto scriptMethods = miniScriptFlavour->getMethods();
73  vector<string> methods;
74  for (const auto& scriptMethod: scriptMethods) {
75  //
76  if ((miniScriptFlavour != baseMiniScript.get() && baseMiniScript->hasMethod(scriptMethod->getMethodName()) == true) ||
77  (miniScriptFlavour == guiMiniScript.get() && logicMiniScript->hasMethod(scriptMethod->getMethodName()) == true)
78  ) continue;
79  //
80  keywords1.push_back(scriptMethod->getMethodName());
81  string description;
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 + "\" />");
95  }
96  if (scriptMethod->isVariadic() == true) {
97  lines.push_back(" <parameter name=\"...\" />");
98  }
99  lines.push_back(" </overload>");
100  lines.push_back(" </keyword>");
101  }
102  }
103 
104  //
105  lines.push_back("</code-completion>");
106  for (const auto& line: lines) Console::println(line);
107  Console::println();
108 
109  // syntax highlighting
110  Console::println("Syntax highlighting: ");
111  Console::print("Syntax highlighting: keywords1: ");
112  for (const auto& keyword1: keywords1) Console::print(keyword1 + " ");
113  Console::println();
114 
115  Console::print("Syntax highlighting: keywords2: ");
116  for (const auto& keyword2: keywords2) Console::print(keyword2 + " ");
117  Console::println();
118  Console::println();
119 
120  // store
121  Console::println("Saving to: resources/engine/code-completion/tscript.xml");
122  FileSystem::getInstance()->setContentFromStringArray("resources/engine/code-completion", "tscript.xml", lines);
123 
124  //
125  Application::exit(Application::EXITCODE_SUCCESS);
126 }
Application base class, please make sure to allocate application on heap to have correct application ...
Definition: Application.h:41
GUI parser.
Definition: GUIParser.h:40
File system singleton class.
Definition: FileSystem.h:17
Console class.
Definition: Console.h:29
Properties class, which helps out with storeing or loading key value pairs from/to property files.
Definition: Properties.h:23
const string & get(const string &key, const string &defaultValue) const
Get property value by key.
Definition: Properties.h:46
void load(const string &pathName, const string &fileName, FileSystemInterface *fileSystem=nullptr)
Load property file.
Definition: Properties.cpp:24
int main(int argc, char **argv)