17 #include "vtkObjectFactory.h"
36 class vtkCommandOptionsXMLParserInternal
39 vtkCommandOptionsXMLParserInternal() { this->ProcessType = 0; }
43 int SetArgument(
const char* arg,
const char* value);
44 int GetArgumentProcessType(
const char* arg)
46 if (this->ArgumentToVariableMap.count(arg) == 0)
50 return this->ArgumentToVariableMap[arg].ProcessType;
52 std::map<std::string, vtkCommandOptionsXMLParserArgumentStructure> ArgumentToVariableMap;
59 this->Internals->ProcessType = ptype;
73 int vtkCommandOptionsXMLParserInternal::SetArgument(
const char* arg,
const char* value)
75 if (this->ArgumentToVariableMap.count(arg))
96 vtkGenericWarningMacro(
"Bad XML Format missing Value for Name=\"" << arg <<
"\"");
100 *variable = atoi(value);
107 vtkGenericWarningMacro(
"Bad XML Format missing Value for Name=\"" << arg <<
"\"");
110 char** variable =
static_cast<char**
>(tmp.
Variable);
116 *variable = strcpy(
new char[strlen(value) + 1], value);
123 vtkGenericWarningMacro(
"Bad XML Format Unknown Option " << arg);
130 void vtkCommandOptionsXMLParserInternal::AddArgument(
135 vtkGenericWarningMacro(
"AddArgument must take arguments of the form --foo. "
136 "Argument not added: "
144 this->ArgumentToVariableMap[std::string(arg + 2)] = vardata;
158 this->Internals =
new vtkCommandOptionsXMLParserInternal;
164 delete this->Internals;
170 if (strcmp(
name,
"pvx") == 0)
177 vtkErrorMacro(
"Bad XML Element found not in <pvx></pvx> tag: " <<
name);
180 if (strcmp(
name,
"Option") == 0)
185 if (atts && atts[0] && atts[1])
187 if (strcmp(atts[0],
"Name") == 0)
189 int type = this->Internals->GetArgumentProcessType(atts[1]);
199 if (strcmp(
name,
"Process") == 0)
210 if (atts ==
nullptr || atts[0] ==
nullptr || strcmp(atts[0],
"Type") != 0)
213 "Bad XML Format 0 attributes found in Process Type, expected Process Type=\"..\" ");
216 if (atts[1] ==
nullptr)
218 vtkErrorMacro(
"Bad XML Format 1 attributes found in Process Process Type=\"..\" ");
229 const char* nameTag = atts[0];
230 const char*
name = 0;
232 if (!nameTag || (strcmp(nameTag,
"Name") != 0))
235 "Bad XML Format 0 attributes found in Option, expected Name=\"..\" [Value=\"...\"]");
243 vtkErrorMacro(
"Bad XML Format, Name has no name.");
248 const char* valueTag = atts[2];
249 const char* value = 0;
251 if (valueTag && (strcmp(valueTag,
"Value") != 0))
253 vtkErrorMacro(
"Bad XML Format missing value tag");
264 vtkErrorMacro(
"Bad XML Format missing value tag present but no value");
269 this->Internals->SetArgument(
name, value);
275 if (strcmp(
name,
"pvx") == 0)
280 if (strcmp(
name,
"Process") == 0)
282 this->Internals->ProcessType = 0;
290 this->Internals->AddArgument(
297 this->Internals->AddArgument(
304 this->Internals->AddArgument(
311 this->Superclass::PrintSelf(os, indent);
virtual void SetProcessType(const char *ptype)
void HandleOption(const char **atts)
void EndElement(const char *name) override
void AddArgument(const char *longarg, int *var, int type=0)
~vtkCommandOptionsXMLParser() override
void StartElement(const char *name, const char **atts) override
void AddBooleanArgument(const char *longarg, int *var, int type=0)
vtkCommandOptionsXMLParser()
void SetProcessTypeInt(int ptype)
void HandleProcessType(const char **atts)
void PrintSelf(ostream &os, vtkIndent indent) override
virtual int ParseExtraXMLTag(const char *, const char **)
vtkStandardNewMacro(vtkCommandOptionsXMLParser)