7 #include <unordered_map>
8 #include <unordered_set>
25 using std::make_unique;
30 using std::unordered_map;
31 using std::unordered_set;
43 int main(
int argc,
char** argv)
46 auto printInformation = []() ->
void {
47 Console::printLine(
string(
"minitscriptdocumentation ") + Version::getVersion());
48 Console::printLine(Version::getCopyright());
50 Console::printLine(
"Usage: minitscriptdocumentation [--heading=n] classes|methods|variables|operators|keys|keywords");
54 if (argc != 2 && argc != 3) {
61 if (StringTools::startsWith(argv[argIdx],
"--heading=") ==
true) {
62 auto sectionVector = StringTools::tokenize(argv[1],
"=");
63 if (sectionVector.size() != 2) {
67 heading = Integer::parse(sectionVector[1]);
77 auto documentationType = string(argv[argIdx]);
78 array<string, 6> documentationTypes = {
86 if (find(documentationTypes.begin(), documentationTypes.end(), documentationType) == documentationTypes.end()) {
92 descriptions.
load(
MINITSCRIPT_DATA +
"/resources/minitscript/documentation",
"method-descriptions.properties");
94 MinitScript::initialize();
96 auto context = make_unique<Context>();
97 auto minitScript = make_unique<MinitScript>();
98 minitScript->setContext(context.get());
99 minitScript->registerMethods();
100 minitScript->registerVariables();
102 auto allClassMethods = Documentation::getAllClassMethods(minitScript.get());
104 if (documentationType ==
"classes") {
106 auto classesDocumentation = Documentation::generateClassesDocumentation(
"Classes", heading, minitScript.get(), descriptions,
"minitscript.basemethod.", allClassMethods);
107 Console::printLine(classesDocumentation);
109 if (documentationType ==
"methods") {
111 auto methodsDocumentation = Documentation::generateMethodsDocumentation(
"Methods", heading, minitScript.get(), descriptions,
"minitscript.basemethod.", allClassMethods);
112 Console::printLine(methodsDocumentation);
114 if (documentationType ==
"variables") {
116 auto variablesDocumentation = Documentation::generateVariablesDocumentation(
"Constants", heading, minitScript.get());
117 Console::printLine(variablesDocumentation);
119 if (documentationType ==
"operators") {
121 auto operatorsDocumentation = Documentation::generateOperatorsDocumentation(
"Operators", heading, minitScript.get());
122 Console::printLine(operatorsDocumentation);
124 if (documentationType ==
"keys") {
125 Console::printLine(
"# properties methodname=human readable string");
126 Console::printLine(
"# base methods");
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) +
"=");
133 auto scriptMethods = minitScript->getMethods();
134 for (
auto scriptMethod: scriptMethods) {
135 Console::printLine(
"minitscript.basemethod." + scriptMethod->getMethodName() +
"=");
138 if (documentationType ==
"keywords") {
139 set<string> allMethods;
142 auto scriptMethods = minitScript->getMethods();
143 for (
auto scriptMethod: scriptMethods) {
144 allMethods.insert(scriptMethod->getMethodName());
148 for (
const auto& method: allMethods) {
149 Console::print(method +
" ");
MinitScript documentation.
Properties class, which helps out with storeing or loading key value pairs from/to property files.
void load(const string &pathName, const string &fileName)
Load property file.
int main(int argc, char **argv)