-handle<ValueNode_Subtract>
-CanvasParser::parse_subtract(xmlpp::Element *element,Canvas::Handle canvas)
-{
- assert(element->get_name()=="subtract");
-
- handle<ValueNode_Subtract> value_node;
- handle<ValueNode> lhs,rhs,scalar;
-
- if(element->get_attribute("type"))
- {
- ValueBase::Type type=ValueBase::ident_type(element->get_attribute("type")->get_value());
-
- if(!type)
- {
- error(element,"Bad type in <subtract>");
- return ValueNode_Subtract::Handle();
- }
- value_node=ValueNode_Subtract::create(type);
- }
- else
- value_node=ValueNode_Subtract::create();
-
- if(!value_node)
- {
- error(element,strprintf(_("Unable to create <subtract>")));
- return handle<ValueNode_Subtract>();
- }
-
- //if(element->get_attribute("scalar"))
- //{
- // value_node->set_scalar(atof(element->get_attribute("scalar")->get_value().c_str()));
- //}
-
- try
- {
- if(element->get_attribute("scalar"))
- {
- // This is for compatibility with older versions of the file format
- String value(element->get_attribute("scalar")->get_value());
- if((value[0]<='9' && value[0]>='0') || value[0]=='-')
- {
- warning(element, _("Use of a real value where the ID should be is deprecated"));
- value_node->set_scalar(atof(value.c_str()));
- }
- else
- value_node->set_scalar(canvas->surefind_value_node(value));
- scalar=value_node->get_scalar();
- }
-
- if(element->get_attribute("lhs"))
- {
- lhs=canvas->surefind_value_node(element->get_attribute("lhs")->get_value());
- value_node->set_lhs(lhs);
- }
-
- if(element->get_attribute("rhs"))
- {
- rhs=canvas->surefind_value_node(element->get_attribute("rhs")->get_value());
- value_node->set_rhs(rhs);
- }
- }
- catch (Exception::IDNotFound)
- {
- error(element,"attribute in <subtract> references unknown ID");
- }
- catch (Exception::FileNotFound)
- {
- error(element,"Unable to open external file referenced in ID");
- }
-
- xmlpp::Element::NodeList list = element->get_children();
- for(xmlpp::Element::NodeList::iterator iter = list.begin(); iter != list.end(); ++iter)