MinitScript  0.9.31 PRE-BETA
ConsoleMethods.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <span>
3 
9 
10 using std::cin;
11 using std::getline;
12 using std::span;
13 
15 
17 
20 
21 void ConsoleMethods::registerConstants(MinitScript* minitScript) {
22 }
23 
24 void ConsoleMethods::registerMethods(MinitScript* minitScript) {
25  // console
26  {
27  //
28  class MethodConsoleDump: public MinitScript::Method {
29  private:
30  MinitScript* minitScript { nullptr };
31  public:
32  MethodConsoleDump(MinitScript* minitScript):
34  {
35  { .type = MinitScript::TYPE_PSEUDO_MIXED, .name = "value", .optional = false, .reference = false, .nullable = false }
36  }
37  ),
38  minitScript(minitScript) {}
39  const string getMethodName() override {
40  return "console.dump";
41  }
42  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
43  if (arguments.size() == 1) {
44  _Console::printLine(arguments[0].getValueAsString(true));
45  } else {
46  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
47  }
48  }
49  };
50  minitScript->registerMethod(new MethodConsoleDump(minitScript));
51  }
52  {
53  //
54  class MethodConsolePrint: public MinitScript::Method {
55  private:
56  MinitScript* minitScript { nullptr };
57  public:
58  MethodConsolePrint(MinitScript* minitScript): MinitScript::Method(), minitScript(minitScript) {}
59  const string getMethodName() override {
60  return "console.print";
61  }
62  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
63  for (const auto& argument: arguments) {
64  _Console::print(argument.getValueAsString());
65  }
66  }
67  bool isVariadic() const override {
68  return true;
69  }
70  };
71  minitScript->registerMethod(new MethodConsolePrint(minitScript));
72  }
73  {
74  //
75  class MethodConsolePrintLine: public MinitScript::Method {
76  private:
77  MinitScript* minitScript { nullptr };
78  public:
79  MethodConsolePrintLine(MinitScript* minitScript): MinitScript::Method(), minitScript(minitScript) {}
80  const string getMethodName() override {
81  return "console.printLine";
82  }
83  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
84  for (const auto& argument: arguments) {
85  _Console::print(argument.getValueAsString());
86  }
88  }
89  bool isVariadic() const override {
90  return true;
91  }
92  };
93  minitScript->registerMethod(new MethodConsolePrintLine(minitScript));
94  }
95  {
96  //
97  class MethodConsoleReadLine: public MinitScript::Method {
98  private:
99  MinitScript* minitScript { nullptr };
100  public:
101  MethodConsoleReadLine(MinitScript* minitScript):
102  MinitScript::Method({}, MinitScript::TYPE_STRING),
103  minitScript(minitScript) {
104  //
105  }
106  const string getMethodName() override {
107  return "console.readLine";
108  }
109  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
110  if (arguments.size() == 0) {
111  returnValue.setValue(_Console::readLine());
112  } else {
113  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
114  }
115  }
116  };
117  minitScript->registerMethod(new MethodConsoleReadLine(minitScript));
118  }
119  {
120  //
121  class MethodConsoleReadAll: public MinitScript::Method {
122  private:
123  MinitScript* minitScript { nullptr };
124  public:
125  MethodConsoleReadAll(MinitScript* minitScript):
126  MinitScript::Method({}, MinitScript::TYPE_STRING),
127  minitScript(minitScript) {
128  //
129  }
130  const string getMethodName() override {
131  return "console.readAll";
132  }
133  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
134  if (arguments.size() == 0) {
135  returnValue.setValue(_Console::readAll());
136  } else {
137  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
138  }
139  }
140  };
141  minitScript->registerMethod(new MethodConsoleReadAll(minitScript));
142  }
143  {
144  //
145  class MethodConsoleReadAllAsArray: public MinitScript::Method {
146  private:
147  MinitScript* minitScript { nullptr };
148  public:
149  MethodConsoleReadAllAsArray(MinitScript* minitScript):
150  MinitScript::Method({}, MinitScript::TYPE_ARRAY),
151  minitScript(minitScript) {
152  //
153  }
154  const string getMethodName() override {
155  return "console.readAllAsArray";
156  }
157  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
158  if (arguments.size() == 0) {
159  returnValue.setType(MinitScript::TYPE_ARRAY);
160  const auto input = _Console::readAllAsArray();
161  for (const auto& line: input) returnValue.pushArrayEntry(MinitScript::Variable(line));
162  } else {
163  MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
164  }
165  }
166  };
167  minitScript->registerMethod(new MethodConsoleReadAllAsArray(minitScript));
168  }
169  {
170  //
171  class MethodConsoleErrorPrint: public MinitScript::Method {
172  private:
173  MinitScript* minitScript { nullptr };
174  public:
175  MethodConsoleErrorPrint(MinitScript* minitScript): MinitScript::Method(), minitScript(minitScript) {}
176  const string getMethodName() override {
177  return "console.error.print";
178  }
179  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
180  for (const auto& argument: arguments) {
181  _ErrorConsole::print(argument.getValueAsString());
182  }
183  }
184  bool isVariadic() const override {
185  return true;
186  }
187  };
188  minitScript->registerMethod(new MethodConsoleErrorPrint(minitScript));
189  }
190  {
191  //
192  class MethodConsoleErrorPrintLine: public MinitScript::Method {
193  private:
194  MinitScript* minitScript { nullptr };
195  public:
196  MethodConsoleErrorPrintLine(MinitScript* minitScript): MinitScript::Method(), minitScript(minitScript) {}
197  const string getMethodName() override {
198  return "console.error.printLine";
199  }
200  void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
201  for (const auto& argument: arguments) {
202  _ErrorConsole::print(argument.getValueAsString());
203  }
205  }
206  bool isVariadic() const override {
207  return true;
208  }
209  };
210  minitScript->registerMethod(new MethodConsoleErrorPrintLine(minitScript));
211  }
212 }
#define MINITSCRIPT_METHODUSAGE_COMPLAIN(methodName)
Definition: MinitScript.h:59
MinitScript script console methods.
void pushArrayEntry(const Variable &value)
Push entry to array.
Definition: MinitScript.h:1892
void setType(VariableType newType)
Set type.
Definition: MinitScript.h:1253
void setValue(const Variable &variable)
Set value from given variable into variable.
Definition: MinitScript.h:1618
void registerMethod(Method *method)
Register method.
static void printLine()
Print newline to console.
Definition: Console.cpp:66
static const string readAll()
Read all input from console into string.
Definition: Console.cpp:85
static const vector< string > readAllAsArray()
Read all input from console into string vector.
Definition: Console.cpp:95
static void print(const string_view &str)
Print given string without trainling newline to console.
Definition: Console.cpp:54
static const string readLine()
Read line from console.
Definition: Console.cpp:78
static void printLine()
Print newline to error console.
static void print(const string_view &str)
Print given string to error console without trainling new line.