-
- // \todo do a search for more elements and warn if they are found
-
- }
- catch(Exception::BadLinkName)
- {
- error_unexpected_element(child,child->get_name());
- }
- catch(...)
- {
- error(child,strprintf(_("Unknown Exception thrown when working on element \"%s\""),child->get_name().c_str()));
- throw;
- }
- }
-
- return value_node;
-}
-
-handle<ValueNode_Composite>
-CanvasParser::parse_composite(xmlpp::Element *element,Canvas::Handle canvas)
-{
- assert(element->get_name()=="composite");
-
- if(!element->get_attribute("type"))
- {
- error(element,"Missing attribute \"type\" in <composite>");
- return handle<ValueNode_Composite>();
- }
-
- ValueBase::Type type=ValueBase::ident_type(element->get_attribute("type")->get_value());
-
- if(!type)
- {
- error(element,"Bad type in <composite>");
- return handle<ValueNode_Composite>();
- }
-
- handle<ValueNode_Composite> value_node=ValueNode_Composite::create(type);
- handle<ValueNode> c[6];
-
- if(!value_node)
- {
- error(element,strprintf(_("Unable to create <composite>")));
- return handle<ValueNode_Composite>();
- }
-
- int i;
-
- for(i=0;i<value_node->link_count();i++)
- {
- string name=strprintf("c%d",i+1);
- if(c[i])
- {
- error(element,name+" was already defined in <composite>");
- continue;
- }
- if(element->get_attribute(name))
- {
- c[i]=canvas->surefind_value_node(element->get_attribute(name)->get_value());
- if(c[i])