MinitScript  0.9.31 PRE-BETA
minitscriptdocumentation-main.cpp
Go to the documentation of this file.
1 #include <algorithm>
2 #include <cstdlib>
3 #include <map>
4 #include <memory>
5 #include <set>
6 #include <string>
7 #include <unordered_map>
8 #include <unordered_set>
9 #include <utility>
10 #include <vector>
11 
21 
22 using std::exit;
23 using std::find;
24 using std::make_pair;
25 using std::make_unique;
26 using std::map;
27 using std::pair;
28 using std::set;
29 using std::string;
30 using std::unordered_map;
31 using std::unordered_set;
32 using std::vector;
33 
42 
43 int main(int argc, char** argv)
44 {
45  //
46  auto printInformation = []() -> void {
47  Console::printLine(string("minitscriptdocumentation ") + Version::getVersion());
48  Console::printLine(Version::getCopyright());
49  Console::printLine();
50  Console::printLine("Usage: minitscriptdocumentation [--heading=n] classes|methods|variables|operators|keys|keywords");
51  Console::printLine();
52  };
53  //
54  if (argc != 2 && argc != 3) {
55  printInformation();
56  return EXIT_SUCCESS;
57  }
58  //
59  auto heading = 1;
60  auto argIdx = 1;
61  if (StringTools::startsWith(argv[argIdx], "--heading=") == true) {
62  auto sectionVector = StringTools::tokenize(argv[1], "=");
63  if (sectionVector.size() != 2) {
64  printInformation();
65  return EXIT_SUCCESS;
66  } else {
67  heading = Integer::parse(sectionVector[1]);
68  }
69  argIdx++;
70  }
71  //
72  if (argIdx >= argc) {
73  printInformation();
74  return EXIT_SUCCESS;
75  }
76  //
77  auto documentationType = string(argv[argIdx]);
78  array<string, 6> documentationTypes = {
79  "classes",
80  "methods",
81  "variables",
82  "operators",
83  "keys",
84  "keywords"
85  };
86  if (find(documentationTypes.begin(), documentationTypes.end(), documentationType) == documentationTypes.end()) {
87  printInformation();
88  return EXIT_SUCCESS;
89  }
90  //
91  Properties descriptions;
92  descriptions.load(MINITSCRIPT_DATA + "/resources/minitscript/documentation", "method-descriptions.properties");
93  //
94  MinitScript::initialize();
95  //
96  auto context = make_unique<Context>();
97  auto minitScript = make_unique<MinitScript>();
98  minitScript->setContext(context.get());
99  minitScript->registerMethods();
100  minitScript->registerVariables();
101  //
102  auto allClassMethods = Documentation::getAllClassMethods(minitScript.get());
103  //
104  if (documentationType == "classes") {
105  // classes
106  auto classesDocumentation = Documentation::generateClassesDocumentation("Classes", heading, minitScript.get(), descriptions, "minitscript.basemethod.", allClassMethods);
107  Console::printLine(classesDocumentation);
108  } else
109  if (documentationType == "methods") {
110  // base methods
111  auto methodsDocumentation = Documentation::generateMethodsDocumentation("Methods", heading, minitScript.get(), descriptions, "minitscript.basemethod.", allClassMethods);
112  Console::printLine(methodsDocumentation);
113  } else
114  if (documentationType == "variables") {
115  // variables
116  auto variablesDocumentation = Documentation::generateVariablesDocumentation("Constants", heading, minitScript.get());
117  Console::printLine(variablesDocumentation);
118  } else
119  if (documentationType == "operators") {
120  // operators
121  auto operatorsDocumentation = Documentation::generateOperatorsDocumentation("Operators", heading, minitScript.get());
122  Console::printLine(operatorsDocumentation);
123  } else
124  if (documentationType == "keys") {
125  Console::printLine("# properties methodname=human readable string");
126  Console::printLine("# base methods");
127  //
128  auto baseMethodCategories = Documentation::getMethodsCategories(minitScript.get(), allClassMethods);
129  for (const auto& baseMethodCategory: baseMethodCategories) {
130  Console::printLine("minitscript.basemethod.group." + (baseMethodCategory.empty() == true?"uncategorized":baseMethodCategory) + "=");
131  }
132  //
133  auto scriptMethods = minitScript->getMethods();
134  for (auto scriptMethod: scriptMethods) {
135  Console::printLine("minitscript.basemethod." + scriptMethod->getMethodName() + "=");
136  }
137  } else
138  if (documentationType == "keywords") {
139  set<string> allMethods;
140  {
141  //
142  auto scriptMethods = minitScript->getMethods();
143  for (auto scriptMethod: scriptMethods) {
144  allMethods.insert(scriptMethod->getMethodName());
145  }
146  }
147  //
148  for (const auto& method: allMethods) {
149  Console::print(method + " ");
150  }
151  }
152  //
153  return EXIT_SUCCESS;
154 }
MinitScript documentation.
Definition: Documentation.h:21
Properties class, which helps out with storeing or loading key value pairs from/to property files.
Definition: Properties.h:17
void load(const string &pathName, const string &fileName)
Load property file.
Definition: Properties.cpp:22
#define MINITSCRIPT_DATA
Definition: minitscript.h:22
int main(int argc, char **argv)