[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pingus-CVS] rev 2217 - trunk/src
From: |
Ingo Ruhnke |
Subject: |
[Pingus-CVS] rev 2217 - trunk/src |
Date: |
Tue, 06 Apr 2004 05:08:44 +0200 |
Author: grumbel
Date: 2004-04-06 05:08:44 +0200 (Tue, 06 Apr 2004)
New Revision: 2217
Modified:
trunk/src/xml_eval.cxx
trunk/src/xml_eval.hxx
Log:
- some cleanup
Modified: trunk/src/xml_eval.cxx
===================================================================
--- trunk/src/xml_eval.cxx 2004-04-06 01:47:11 UTC (rev 2216)
+++ trunk/src/xml_eval.cxx 2004-04-06 03:08:44 UTC (rev 2217)
@@ -27,6 +27,27 @@
std::map<std::string, int> variables;
std::map<std::string, CL_DomNode> functions;
+int lookup(const std::string& name)
+{
+ int value = 0;
+
+ if (from_string(name, value))
+ {
+ return value;
+ }
+ else
+ {
+ std::map<std::string, int>::iterator i = variables.find(name);
+
+ if (i != variables.end())
+ {
+ return i->second;
+ }
+ std::cout << "Error: No variable named: '" << name << "'" << std::endl;
+ return 0;
+ }
+}
+
void eval_block(CL_DomNode child)
{
while(!child.is_null())
@@ -46,14 +67,10 @@
{
if (cur.get_node_name() == "for")
{
- std::string var = el.get_attribute("name");
- int start = 0;
- int end = 0;
+ std::string var = el.get_attribute("name");
- from_string(el.get_attribute("start"), start);
- from_string(el.get_attribute("end"), end);
-
- for(int i = start; i <= end; ++i)
+ for(int i = lookup(el.get_attribute("start"));
+ i <= lookup(el.get_attribute("end")); ++i)
{
variables[var] = i;
eval_block(cur.get_first_child());
@@ -65,7 +82,7 @@
}
else if (cur.get_node_name() == "printvar")
{
- std::cout << variables[el.get_attribute("var")] << std::flush;
+ std::cout << lookup(el.get_attribute("var")) << std::flush;
}
else if (cur.get_node_name() == "print")
{
@@ -79,49 +96,40 @@
{
eval_block(cur.get_first_child());
}
- else if (cur.get_node_name() == "defvar")
+ else if (cur.get_node_name() == "set")
{
- int value = 0;
- from_string(el.get_attribute("value"), value);
- variables[el.get_attribute("name")] = value;
+ variables[el.get_attribute("name")] =
lookup(el.get_attribute("var"));
}
- else if (cur.get_node_name() == "defun")
+ else if (cur.get_node_name() == "function")
{
functions[el.get_attribute("name")] = el.get_first_child();
}
- else if (cur.get_node_name() == "defvarvar")
- {
- variables[el.get_attribute("name")] =
variables[el.get_attribute("var")];
- }
else if (cur.get_node_name() == "modulo")
{
- int value = 0;
- from_string(el.get_attribute("value"), value);
- variables[el.get_attribute("var")] =
variables[el.get_attribute("var")] % value;
+ variables[el.get_attribute("name")]
+ = lookup(el.get_attribute("name")) %
lookup(el.get_attribute("var"));
}
else if (cur.get_node_name() == "add")
{
- int value = 0;
- from_string(el.get_attribute("value"), value);
- variables[el.get_attribute("var")] =
variables[el.get_attribute("var")] + value;
+ variables[el.get_attribute("name")]
+ = lookup(el.get_attribute("name")) +
lookup(el.get_attribute("var"));
}
else if (cur.get_node_name() == "if-non-zero")
{
- int var = variables[el.get_attribute("var")];
+ int var = lookup(el.get_attribute("var"));
if (var != 0)
eval_block(cur.get_first_child());
}
else if (cur.get_node_name() == "if-zero")
{
- int var = variables[el.get_attribute("var")];
+ int var = lookup(el.get_attribute("var"));
if (var == 0)
eval_block(cur.get_first_child());
}
else if (cur.get_node_name() == "mult")
{
- int value = 0;
- from_string(el.get_attribute("value"), value);
- variables[el.get_attribute("var")] =
variables[el.get_attribute("var")] * value;
+ variables[el.get_attribute("name")]
+ = lookup(el.get_attribute("name")) *
lookup(el.get_attribute("val"));
}
else if (cur.get_node_name() == "funcall")
{
@@ -145,8 +153,13 @@
try {
CL_SetupCore::init();
- CL_DomDocument dom(new CL_InputSource_File("test.xml"), true);
+ std::string filename = "test.xml";
+ if (argc > 1)
+ filename = argv[1];
+
+ CL_DomDocument dom(new CL_InputSource_File(filename), true);
+
CL_DomNode cur = dom.get_document_element();
XMLEval::eval(cur);
Modified: trunk/src/xml_eval.hxx
===================================================================
--- trunk/src/xml_eval.hxx 2004-04-06 01:47:11 UTC (rev 2216)
+++ trunk/src/xml_eval.hxx 2004-04-06 03:08:44 UTC (rev 2217)
@@ -24,6 +24,7 @@
void eval(const CL_DomNode& cur);
void eval_block(CL_DomNode cur);
+int lookup(const std::string& name);
} // namespace XMLEval
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pingus-CVS] rev 2217 - trunk/src,
Ingo Ruhnke <=