23 #include "libmesh/vector_value.h" 34 for (
auto & entry : actmap)
35 for (
auto & act : entry.second)
39 for (
auto & entry : objmap)
40 for (
auto & obj : entry.second)
44 std::vector<std::string>
48 std::istringstream f(path);
49 std::vector<std::string> paths;
50 while (std::getline(f, s,
'/'))
60 mooseAssert(paths.size() > 0,
"path is empty");
61 auto * next = &(
_root[
"blocks"][paths[0]]);
63 for (
auto pit = paths.begin() + 1; pit != paths.end(); ++pit)
67 next = &(*next)[
"star"];
68 else if (*pit ==
"<type>")
69 next = &(*next)[
"types"];
71 next = &(*next)[
"subblocks"][*pit];
82 if (path.back() ==
'*' && !j.contains(
"subblock_types"))
83 j[
"subblock_types"] = nlohmann::json();
84 else if (path.back() !=
'*' && !j.contains(
"types"))
85 j[
"types"] = nlohmann::json();
89 auto & parent_json =
getJson(parent);
91 std::string key =
"subblock_types";
94 auto & val = parent_json[key][paths.back()];
102 for (
auto & iter : *params)
106 if (params->isPrivate(iter.first) || (!
_search.empty() && !search_match && !param_match))
110 nlohmann::json param_json;
112 param_json[
"required"] = params->isParamRequired(iter.first);
115 if (params->isParamValid(iter.first))
117 else if (params->hasDefaultCoupledValue(iter.first))
118 param_json[
"default"] = params->defaultCoupledValue(iter.first);
120 bool out_of_range_allowed =
false;
121 std::map<MooseEnumItem, std::string> docs;
122 param_json[
"options"] =
buildOptions(iter, out_of_range_allowed, docs);
123 if (!nlohmann::to_string(param_json[
"options"]).empty())
125 param_json[
"out_of_range_allowed"] = out_of_range_allowed;
128 nlohmann::json jdocs;
129 for (
const auto & doc : docs)
130 jdocs[doc.first.name()] = doc.second;
131 param_json[
"option_docs"] = jdocs;
134 auto reserved_values = params->reservedValues(iter.first);
135 for (
const auto & reserved : reserved_values)
136 param_json[
"reserved_values"].push_back(reserved);
139 param_json[
"cpp_type"] = t;
141 param_json[
"group_name"] = params->getGroupName(iter.first);
142 param_json[
"name"] = iter.first;
144 std::string doc = params->getDocString(iter.first);
146 param_json[
"description"] = doc;
148 param_json[
"doc_unit"] = params->getDocUnit(iter.first);
150 param_json[
"controllable"] = params->isControllable(iter.first);
151 param_json[
"deprecated"] = params->isParamDeprecated(iter.first);
152 all_params[iter.first] = param_json;
164 nlohmann::json jparams;
166 _root[
"global"][
"parameters"] = jparams;
171 for (
const auto & name_bi_pair : factory.registeredObjects())
172 apps.push_back(name_bi_pair.first);
174 _root[
"global"][
"registered_apps"] = apps;
180 const std::string & path,
182 const std::string & action,
186 const std::string & classname)
188 if (action ==
"EmptyAction")
191 nlohmann::json all_params;
195 auto count =
setParams(params, search_match, all_params);
196 if (!
_search.empty() && count == 0)
200 nlohmann::json & json =
getJson(parent, path, is_type);
204 json[action][
"parameters"] = all_params;
206 json[action][
"action_path"] = path;
208 json[action][
"label"] = label_pair.first;
209 json[action][
"register_file"] = label_pair.second;
211 json[action][
"file_info"][lineinfo.
file()] = lineinfo.
line();
216 json[
"moose_base"] = params->
get<std::string>(
"_moose_base");
218 json[
"parameters"] = all_params;
219 json[
"syntax_path"] = path;
220 json[
"parent_syntax"] = parent;
224 if (params->
isParamValid(
"_moose_base") && json[
"moose_base"] ==
"Action")
227 json[
"label"] = label_pair.first;
228 json[
"register_file"] = label_pair.second;
233 json[
"label"] = label_pair.first;
234 json[
"register_file"] = label_pair.second;
238 json[
"file_info"][lineinfo.
file()] = lineinfo.
line();
239 if (!classname.empty())
240 json[
"class"] = classname;
248 bool & out_of_range_allowed,
249 std::map<MooseEnumItem, std::string> & docs)
255 auto * enum_type =
dynamic_cast<InputParameters::Parameter<MooseEnum> *
>(val);
258 out_of_range_allowed = enum_type->get().isOutOfRangeAllowed();
259 options = enum_type->get().getRawNames();
260 docs = enum_type->get().getItemDocumentation();
264 auto * enum_type =
dynamic_cast<InputParameters::Parameter<MultiMooseEnum> *
>(val);
267 out_of_range_allowed = enum_type->get().isOutOfRangeAllowed();
268 options = enum_type->get().getRawNames();
269 docs = enum_type->get().getItemDocumentation();
273 auto * enum_type =
dynamic_cast<InputParameters::Parameter<ExecFlagEnum> *
>(val);
276 out_of_range_allowed = enum_type->get().isOutOfRangeAllowed();
277 options = enum_type->get().getRawNames();
278 docs = enum_type->get().getItemDocumentation();
282 auto * enum_type =
dynamic_cast<InputParameters::Parameter<std::vector<MooseEnum>
> *>(val);
285 out_of_range_allowed = (enum_type->get())[0].isOutOfRangeAllowed();
286 options = (enum_type->get())[0].getRawNames();
287 docs = enum_type->get()[0].getItemDocumentation();
291 auto * enum_type =
dynamic_cast<InputParameters::Parameter<std::vector<MultiMooseEnum>
> *>(val);
294 out_of_range_allowed = (enum_type->get())[0].isOutOfRangeAllowed();
295 options = (enum_type->get())[0].getRawNames();
296 docs = enum_type->get()[0].getItemDocumentation();
304 const std::iterator_traits<InputParameters::iterator>::value_type & p)
309 std::stringstream str;
310 InputParameters::Parameter<Point> * ptr0 =
dynamic_cast<InputParameters::Parameter<Point> *
>(val);
313 InputParameters::Parameter<RealVectorValue> * ptr1 =
314 dynamic_cast<InputParameters::Parameter<RealVectorValue> *
>(val);
318 str << ptr0->get().operator()(0) <<
" " << ptr0->get().operator()(1) <<
" " 319 << ptr0->get().operator()(2);
323 str << ptr1->get().operator()(0) <<
" " << ptr1->get().operator()(1) <<
" " 324 << ptr1->get().operator()(2);
331 std::string tmp_str = str.str();
332 for (
auto & ch : tmp_str)
336 return tmp_str.substr(0, tmp_str.find(
"<RESIDUAL>"));
345 j[
"associated_types"].push_back(type);
350 _root[
"global"][
"associated_types"][type].push_back(path);
356 const std::string & action,
357 const std::string & task_name,
360 nlohmann::json & json =
getJson(
"", path,
false);
362 json[action][
"tasks"][task_name][
"file_info"][lineinfo.
file()] = lineinfo.
line();
368 std::string s =
"String";
369 if (cpp_type.find(
"std::vector") != std::string::npos ||
370 cpp_type.find(
"libMesh::VectorValue") != std::string::npos ||
371 cpp_type.find(
"libMesh::TensorValue") != std::string::npos ||
372 cpp_type.find(
"Eigen::Matrix") != std::string::npos)
375 pcrecpp::RE r(
"^[^<]+<\\s*(.*)\\s*>$");
377 r.FullMatch(cpp_type, &t);
380 if (cpp_type.find(
"Eigen::Matrix") != std::string::npos)
381 t = t.substr(0, t.find(
","));
385 else if (cpp_type.find(
"MultiMooseEnum") != std::string::npos ||
386 cpp_type.find(
"ExecFlagEnum") != std::string::npos ||
387 cpp_type.find(
"VectorPostprocessorName") != std::string::npos ||
388 cpp_type.find(
"std::map") != std::string::npos)
390 else if (cpp_type.find(
"libMesh::Point") != std::string::npos)
392 else if (cpp_type ==
"int" || cpp_type ==
"unsigned int" || cpp_type ==
"short" ||
393 cpp_type ==
"unsigned short" || cpp_type ==
"char" || cpp_type ==
"unsigned char" ||
394 cpp_type ==
"long" || cpp_type ==
"unsigned long" || cpp_type ==
"long long" ||
395 cpp_type ==
"unsigned long long")
397 else if (cpp_type ==
"double" || cpp_type ==
"float")
399 else if (cpp_type ==
"bool")
405 std::pair<std::string, std::string>
413 return std::make_pair(
"",
"");
416 std::pair<std::string, std::string>
423 return std::make_pair(
"",
"");
void addSyntaxType(const std::string &path, const std::string type)
Add an associated type to a block.
virtual void print(std::ostream &) const=0
std::string buildOptions(const std::iterator_traits< InputParameters::iterator >::value_type &p, bool &out_of_range_allowed, std::map< MooseEnumItem, std::string > &docs)
void addActionTask(const std::string &path, const std::string &action, const std::string &task, const FileLineInfo &lineinfo)
Add a task to the tree.
nlohmann::json & getJson(const std::string &parent, const std::string &path, bool is_type)
static const std::map< std::string, std::vector< std::shared_ptr< RegistryEntryBase > > > & allActions()
Returns a per-label keyed map of all Actions in the registry.
size_t setParams(InputParameters *params, bool search_match, nlohmann::json &all_params)
T * get(const std::unique_ptr< T > &u)
The MooseUtils::get() specializations are used to support making forwards-compatible code changes fro...
static std::vector< std::string > splitPath(const std::string &path)
static InputParameters validParams()
Parameters that are processed directly by the Parser and are valid anywhere in the input...
static const std::map< std::string, std::vector< std::shared_ptr< RegistryEntryBase > > > & allObjects()
Returns a per-label keyed map of all MooseObjects in the registry.
static std::string buildOutputString(const std::iterator_traits< InputParameters::iterator >::value_type &p)
JsonSyntaxTree(const std::string &search_string)
bool addParameters(const std::string &parent_path, const std::string &path, bool is_type, const std::string &action, bool is_action, InputParameters *params, const FileLineInfo &lineinfo, const std::string &classname)
Add parameters to the tree.
std::map< std::string, std::pair< std::string, std::string > > _action_label_map
static std::string basicCppType(const std::string &cpp_type)
Utilities for making sense of c++ types.
Holds file and line information.
static AppFactory & instance()
Get the instance of the AppFactory.
std::pair< std::string, std::string > getActionLabel(const std::string &action) const
std::pair< std::string, std::string > getObjectLabel(const std::string &obj) const
bool wildCardMatch(std::string name, std::string search_string)
void addGlobal()
Add the global section to the output.
std::map< std::string, std::pair< std::string, std::string > > _object_label_map
void escape(std::string &str)
This function will escape all of the standard C++ escape characters so that they can be printed...
std::string prettyCppType(const std::string &cpp_type)