X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Floadcanvas.cpp;h=9132bab14637908927dc20350d11d7a72d8620d9;hb=67e4cb808328ea14df418d983e368f0eb4b742ae;hp=1c87a0459dcb2053363449d659924aba13744a6d;hpb=d9e1d2e988f648460b80449d24d9e5fa98c3aef9;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/loadcanvas.cpp b/synfig-core/trunk/src/synfig/loadcanvas.cpp index 1c87a04..9132bab 100644 --- a/synfig-core/trunk/src/synfig/loadcanvas.cpp +++ b/synfig-core/trunk/src/synfig/loadcanvas.cpp @@ -2,19 +2,20 @@ /*! \file loadcanvas.cpp ** \brief writeme ** -** $Id: loadcanvas.cpp,v 1.3 2005/01/04 23:40:44 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -82,7 +83,7 @@ public: int test_class::bleh(0); test_class test_class_instance; -*/ +*/ /* === M A C R O S ========================================================= */ @@ -104,7 +105,7 @@ static void _remove_from_open_canvas_map(Canvas *x) { get_open_canvas_map().eras static void _canvas_file_name_changed(Canvas *x) { std::map >::iterator iter; - + for(iter=get_open_canvas_map().begin();iter!=get_open_canvas_map().end();++iter) if(iter->second==x) break; @@ -113,7 +114,7 @@ static void _canvas_file_name_changed(Canvas *x) return; get_open_canvas_map().erase(iter->first); get_open_canvas_map()[etl::absolute_path(x->get_file_name())]=x; - + } Canvas::Handle @@ -127,7 +128,7 @@ synfig::open_canvas(const String &filename) if(parser.error_count()) return Canvas::Handle(); - + return canvas; } @@ -142,7 +143,7 @@ synfig::open_canvas_as(const String &filename,const String &as) if(parser.error_count()) return Canvas::Handle(); - + return canvas; } @@ -216,19 +217,19 @@ CanvasParser::parse_keyframe(xmlpp::Element *element,Canvas::Handle canvas) error(element,strprintf(_("<%s> is missing \"%s\" attribute"),"real","time")); return Keyframe(); } - + Keyframe ret(Time(element->get_attribute("time")->get_value(),canvas->rend_desc().get_frame_rate())); if(element->get_children().empty()) return ret; - + if(element->get_child_text()->get_content().empty()) return ret; - + ret.set_description(element->get_child_text()->get_content()); - return ret; + return ret; } @@ -316,13 +317,7 @@ CanvasParser::parse_vector(xmlpp::Element *element,Canvas::Handle canvas) error(element, "Undefined value in "); return Vector(); } - xmlpp::TextNode *text=dynamic_cast(child->get_children().front()); - if(!text) - { - error(element,"I need a number, not an element!"); - return Vector(); - } - vect[0]=atof(text->get_content().c_str()); + vect[0]=atof(child->get_child_text()->get_content().c_str()); } else if(child->get_name()=="y") @@ -332,13 +327,7 @@ CanvasParser::parse_vector(xmlpp::Element *element,Canvas::Handle canvas) error(element, "Undefined value in "); return Vector(); } - xmlpp::TextNode *text=dynamic_cast(child->get_children().front()); - if(!text) - { - error(element,"I need a number, not an element!"); - return Vector(); - } - vect[1]=atof(text->get_content().c_str()); + vect[1]=atof(child->get_child_text()->get_content().c_str()); } else error_unexpected_element(child,child->get_name()); @@ -422,13 +411,13 @@ CanvasParser::parse_string(xmlpp::Element *element,Canvas::Handle canvas) warning(element, "Undefined value in "); return synfig::String(); } - + if(element->get_child_text()->get_content().empty()) { warning(element, "Content element of appears to be empty"); return synfig::String(); } - + return element->get_child_text()->get_content(); } @@ -454,7 +443,7 @@ CanvasParser::parse_bool(xmlpp::Element *element,Canvas::Handle canvas) return false; error(element,strprintf(_("Bad value \"%s\" in <%s>"),val.c_str(),"bool")); - + return false; } @@ -463,7 +452,7 @@ CanvasParser::parse_gradient(xmlpp::Element *node,Canvas::Handle canvas) { assert(node->get_name()=="gradient"); Gradient ret; - + xmlpp::Element::NodeList list = node->get_children(); for(xmlpp::Element::NodeList::iterator iter = list.begin(); iter != list.end(); ++iter) { @@ -482,7 +471,7 @@ CanvasParser::parse_gradient(xmlpp::Element *node,Canvas::Handle canvas) } cpoint.pos=atof(child->get_attribute("pos")->get_value().c_str()); - + ret.push_back(cpoint); } } @@ -681,7 +670,7 @@ CanvasParser::parse_bline_point(xmlpp::Element *element,Canvas::Handle canvas) ret.set_vertex(parse_vector(dynamic_cast(*iter),canvas)); } else - // Tangent 1 + // Tangent 1 if(child->get_name()=="t1" || child->get_name()=="tangent") { xmlpp::Element::NodeList list = child->get_children(); @@ -706,7 +695,7 @@ CanvasParser::parse_bline_point(xmlpp::Element *element,Canvas::Handle canvas) ret.set_tangent1(parse_vector(dynamic_cast(*iter),canvas)); } else - // Tangent 2 + // Tangent 2 if(child->get_name()=="t2") { xmlpp::Element::NodeList list = child->get_children(); @@ -882,7 +871,7 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) error(element,"Bad type in "); return ValueNode_Animated::Handle(); } - + ValueNode_Animated::Handle value_node=ValueNode_Animated::create(type); if(!value_node) @@ -910,12 +899,24 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) Time time(child->get_attribute("time")->get_value(),canvas->rend_desc().get_frame_rate()); - + ValueNode::Handle waypoint_value_node; - + xmlpp::Element::NodeList list = child->get_children(); + if(child->get_attribute("use")) { - waypoint_value_node=canvas->surefind_value_node(child->get_attribute("use")->get_value()); + if(!list.empty()) + warning(child,_("Found \"use\" attribute for , but it wasn't empty. Ignoring contents...")); + + // the waypoint might look like this, in which case we won't find "mycanvas" in the list of valuenodes, 'cos it's a canvas + // + // + // + // + if (type==ValueBase::TYPE_CANVAS) + waypoint_value_node=ValueNode_Const::create(canvas->surefind_canvas(child->get_attribute("use")->get_value())); + else + waypoint_value_node=canvas->surefind_value_node(child->get_attribute("use")->get_value()); } else { @@ -924,25 +925,24 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) error(child, strprintf(_("<%s> is missing its data"),"waypoint")); continue; } - - xmlpp::Element::NodeList list = child->get_children(); + xmlpp::Element::NodeList::iterator iter; - + // Search for the first non-text XML element for(iter = list.begin(); iter != list.end(); ++iter) if(dynamic_cast(*iter)) break; - + if(iter==list.end()) { error(child, strprintf(_("<%s> is missing its data"),"waypoint")); continue; } - + waypoint_value_node=parse_value_node(dynamic_cast(*iter),canvas); - + /* ValueBase data=parse_value(dynamic_cast(*iter),canvas); - + if(!data.is_valid()) { error(child,_("Bad data for ")); @@ -954,7 +954,7 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) error(child,_("Bad data for ")); continue; } - + /*! HACK -- This is a temporary fix to help repair some ** weirdness that is currently going on (10-21-2004). ** This short circuits the linking of waypoints, @@ -962,7 +962,7 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) ** away with something like this pretty easily. */ waypoint_value_node=waypoint_value_node->clone(); - + // Warn if there is trash after the param value for(iter++; iter != list.end(); ++iter) if(dynamic_cast(*iter)) @@ -1010,7 +1010,7 @@ CanvasParser::parse_animated(xmlpp::Element *element,Canvas::Handle canvas) else error(child,strprintf(_("\"%s\" not a valid value for attribute \"%s\" in <%s>"),val.c_str(),"before","waypoint")); } - + if(child->get_attribute("after")) { string val=child->get_attribute("after")->get_value(); @@ -1047,22 +1047,22 @@ etl::handle CanvasParser::parse_timedswap(xmlpp::Element *node,Canvas::Handle canvas) { ValueNode_TimedSwap::Handle timed_swap(parse_linkable_value_node(node,canvas)); - + assert(timed_swap); ValueNode_Animated::Handle animated(ValueNode_Animated::create(timed_swap->get_type())); animated->set_root_canvas(canvas->get_root()); - + assert(animated); - + Time swap_time, swap_length; (*timed_swap->get_swap_time())(0).put(&swap_time); (*timed_swap->get_swap_length())(0).put(&swap_length); - + animated->new_waypoint(swap_time-swap_length,timed_swap->get_before()); animated->new_waypoint(swap_time,timed_swap->get_after()); - + return animated; } @@ -1119,9 +1119,9 @@ CanvasParser::parse_subtract(xmlpp::Element *element,Canvas::Handle canvas) if(element->get_attribute("lhs")) { lhs=canvas->surefind_value_node(element->get_attribute("lhs")->get_value()); - value_node->set_lhs(lhs); + value_node->set_lhs(lhs); } - + if(element->get_attribute("rhs")) { rhs=canvas->surefind_value_node(element->get_attribute("rhs")->get_value()); @@ -1136,7 +1136,7 @@ CanvasParser::parse_subtract(xmlpp::Element *element,Canvas::Handle canvas) { 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) { @@ -1260,7 +1260,7 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c { handle value_node; ValueBase::Type type; - + // Determine the type if(element->get_attribute("type")) { @@ -1279,18 +1279,18 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c } value_node=LinkableValueNode::create(element->get_name(),type); - + if(!value_node) { error(element,"Unknown ValueNode type "+element->get_name()); return 0; - } + } if(value_node->get_type()!=type) { error(element,"ValueNode did not accept type"); return 0; - } + } value_node->set_root_canvas(canvas->get_root()); @@ -1300,13 +1300,13 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c if(element->get_attribute(value_node->link_name(i))) try { String id(element->get_attribute(value_node->link_name(i))->get_value()); - + if(!value_node->set_link(i, canvas->surefind_value_node( id ) ) - ) error(element,strprintf(_("Unable to set link \"%s\" to ValueNode \"%s\" (link #%d in \"%s\")"),value_node->link_name(i).c_str(),id.c_str(),i,value_node->get_name().c_str())); + ) error(element,strprintf(_("Unable to set link \"%s\" to ValueNode \"%s\" (link #%d in \"%s\")"),value_node->link_name(i).c_str(),id.c_str(),i,value_node->get_name().c_str())); } catch(Exception::IDNotFound) { @@ -1322,8 +1322,8 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c element->get_attribute(value_node->link_name(i))->get_value().c_str())); throw; } - } - + } + xmlpp::Element::NodeList list = element->get_children(); @@ -1363,7 +1363,7 @@ CanvasParser::parse_linkable_value_node(xmlpp::Element *element,Canvas::Handle c } // \todo do a search for more elements and warn if they are found - + } catch(Exception::BadLinkName) { @@ -1475,7 +1475,7 @@ CanvasParser::parse_composite(xmlpp::Element *element,Canvas::Handle canvas) { error(child,strprintf(_("<%s> has a bad value"),name.c_str())); break; - } + } // \todo do a search for more elements and warn if they are found break; @@ -1524,7 +1524,7 @@ handle CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) { assert(element->get_name()=="dynamic_list" || element->get_name()=="bline"); - + const float fps(canvas?canvas->rend_desc().get_frame_rate():0); if(!element->get_attribute("type")) @@ -1555,8 +1555,8 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) else bline_value_node->set_loop(false); } - - } + + } else value_node=ValueNode_DynamicList::create(type); @@ -1578,7 +1578,7 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) if(child->get_name()=="entry") { ValueNode_DynamicList::ListEntry list_entry; - + // Parse begin/end waypoints { typedef synfig::ValueNode_DynamicList::ListEntry::Activepoint Activepoint; @@ -1586,9 +1586,9 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) String begin_sequence; String end_sequence; - + ActivepointList &timing_info(list_entry.timing_info); - + if(child->get_attribute("begin")) begin_sequence=child->get_attribute("begin")->get_value(); @@ -1600,18 +1600,22 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) if(child->get_attribute("off")) end_sequence=child->get_attribute("off")->get_value(); - + // clear out any auto-start if(!begin_sequence.empty()) timing_info.clear(); - + //! \optimize while(!begin_sequence.empty()) { String::iterator iter(find(begin_sequence.begin(),begin_sequence.end(),',')); - String timecode(begin_sequence.begin(), iter); + String timecode(begin_sequence.begin(), iter); int priority=0; - + + // skip whitespace before checking for a priority + while (isspace(timecode[0])) + timecode=timecode.substr(1); + // If there is a priority, then grab it and remove // it from the timecode if(timecode[0]=='p') @@ -1623,7 +1627,7 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) timecode=String(timecode.begin()+space+1,timecode.end()); //synfig::info("priority: %d timecode: %s",priority,timecode.c_str()); } - + timing_info.push_back( Activepoint( Time( @@ -1634,7 +1638,7 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) priority ) ); - + if(iter==begin_sequence.end()) begin_sequence.clear(); else @@ -1645,9 +1649,13 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) while(!end_sequence.empty()) { String::iterator iter(find(end_sequence.begin(),end_sequence.end(),',')); - String timecode(end_sequence.begin(), iter); + String timecode(end_sequence.begin(), iter); int priority=0; - + + // skip whitespace before checking for a priority + while (isspace(timecode[0])) + timecode=timecode.substr(1); + // If there is a priority, then grab it and remove // it from the timecode if(timecode[0]=='p') @@ -1659,7 +1667,7 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) timecode=String(timecode.begin()+space+1,timecode.end()); //synfig::info("priority: %d timecode: %s",priority,timecode.c_str()); } - + timing_info.push_back( Activepoint( Time( @@ -1675,12 +1683,13 @@ CanvasParser::parse_dynamic_list(xmlpp::Element *element,Canvas::Handle canvas) else end_sequence=String(iter+1,end_sequence.end()); } - + timing_info.sort(); } if(child->get_attribute("use")) { + // \todo does this need to be able to read 'use="canvas"', like waypoints can now? (see 'surefind_canvas' in this file) string id=child->get_attribute("use")->get_value(); try { @@ -1730,9 +1739,9 @@ CanvasParser::parse_value_node(xmlpp::Element *element,Canvas::Handle canvas) { handle value_node; assert(element); - + GUID guid; - + if(element->get_attribute("guid")) { guid=GUID(element->get_attribute("guid")->get_value())^canvas->get_root()->get_guid(); @@ -1740,10 +1749,10 @@ CanvasParser::parse_value_node(xmlpp::Element *element,Canvas::Handle canvas) if(value_node) return value_node; } - + // If ValueBase::ident_type() recognises the name, then we know it's a ValueBase if(element->get_name()!="canvas" && ValueBase::ident_type(element->get_name())) - { + { ValueBase data=parse_value(element,canvas); if(!data.is_valid()) @@ -1775,10 +1784,10 @@ CanvasParser::parse_value_node(xmlpp::Element *element,Canvas::Handle canvas) if(element->get_name()=="bline") // This is not a typo. The dynamic list parser will parse a bline. value_node=parse_dynamic_list(element,canvas); else - if(element->get_name()=="timed_swap") - value_node=parse_timedswap(element,canvas); - else - if(LinkableValueNode::book().count(element->get_name())) +// if(element->get_name()=="timed_swap") +// value_node=parse_timedswap(element,canvas); +// else + if(LinkableValueNode::book().count(element->get_name())) value_node=parse_linkable_value_node(element,canvas); else if(element->get_name()=="canvas") @@ -1789,10 +1798,10 @@ CanvasParser::parse_value_node(xmlpp::Element *element,Canvas::Handle canvas) error(element, "Expected a ValueNode"); } - + value_node->set_root_canvas(canvas->get_root()); - - + + // If we were successful, and our element has // an ID attribute, go ahead and add it to the // value_node list @@ -1808,7 +1817,7 @@ CanvasParser::parse_value_node(xmlpp::Element *element,Canvas::Handle canvas) catch(Exception::BadLinkName) { warning(element,strprintf(_("Bad ID \"%s\""),id.c_str())); - return value_node; + return value_node; } catch(Exception::IDAlreadyExists) { @@ -1846,7 +1855,7 @@ CanvasParser::parse_canvas_defs(xmlpp::Element *element,Canvas::Handle canvas) Layer::Handle CanvasParser::parse_layer(xmlpp::Element *element,Canvas::Handle canvas) { - + assert(element->get_name()=="layer"); Layer::Handle layer; @@ -1879,7 +1888,7 @@ CanvasParser::parse_layer(xmlpp::Element *element,Canvas::Handle canvas) // Handle the description if(element->get_attribute("desc")) layer->set_description(element->get_attribute("desc")->get_value()); - + if(element->get_attribute("active")) layer->set_active(element->get_attribute("active")->get_value()=="false"?false:true); @@ -1991,7 +2000,7 @@ CanvasParser::parse_layer(xmlpp::Element *element,Canvas::Handle canvas) for(iter++; iter != list.end(); ++iter) if(dynamic_cast(*iter)) warning((*iter),strprintf(_("Unexpected element <%s> after data, ignoring..."),(*iter)->get_name().c_str())); - continue; + continue; } else error_unexpected_element(child,child->get_name()); @@ -2004,7 +2013,7 @@ CanvasParser::parse_layer(xmlpp::Element *element,Canvas::Handle canvas) Canvas::Handle CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool inline_, String filename) { - + if(element->get_name()!="canvas") { error_unexpected_element(element,element->get_name(),"canvas"); @@ -2012,8 +2021,8 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in } Canvas::Handle canvas; - - + + if(parent && (element->get_attribute("id") || inline_)) { if(inline_) @@ -2064,7 +2073,7 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in if(element->get_attribute("yres")) canvas->rend_desc().set_y_res(atof(element->get_attribute("yres")->get_value().c_str())); - + if(element->get_attribute("fps")) canvas->rend_desc().set_frame_rate(atof(element->get_attribute("fps")->get_value().c_str())); @@ -2102,16 +2111,16 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in { string values=element->get_attribute("bgcolor")->get_value(); Color bg; - + bg.set_r(atof(string(values.data(),values.find(' ')).c_str())); values=string(values.begin()+values.find(' ')+1,values.end()); - + bg.set_g(atof(string(values.data(),values.find(' ')).c_str())); values=string(values.begin()+values.find(' ')+1,values.end()); - + bg.set_b(atof(string(values.data(),values.find(' ')).c_str())); values=string(values.begin()+values.find(' ')+1,values.end()); - + bg.set_a(atof(values.c_str())); canvas->rend_desc().set_bg_color(bg); @@ -2163,9 +2172,9 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in warning(child,_("Inline canvases cannot have metadata")); continue; } - + String name,content; - + if(!child->get_attribute("name")) { warning(child,_(" must have a name")); @@ -2177,17 +2186,17 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in warning(child,_(" must have content")); continue; } - + canvas->set_meta_data(child->get_attribute("name")->get_value(),child->get_attribute("content")->get_value()); } else if(child->get_name()=="name") { xmlpp::Element::NodeList list = child->get_children(); - + // If we don't have any name, warn if(list.empty()) warning(child,_("blank \"name\" entitity")); - + string tmp; for(xmlpp::Element::NodeList::iterator iter = list.begin(); iter != list.end(); ++iter) if(dynamic_cast(*iter))tmp+=dynamic_cast(*iter)->get_content(); @@ -2196,13 +2205,13 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in else if(child->get_name()=="desc") { - + xmlpp::Element::NodeList list = child->get_children(); - + // If we don't have any description, warn if(list.empty()) warning(child,_("blank \"desc\" entitity")); - + string tmp; for(xmlpp::Element::NodeList::iterator iter = list.begin(); iter != list.end(); ++iter) if(dynamic_cast(*iter))tmp+=dynamic_cast(*iter)->get_content(); @@ -2211,13 +2220,13 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in else if(child->get_name()=="author") { - + xmlpp::Element::NodeList list = child->get_children(); - + // If we don't have any description, warn if(list.empty()) warning(child,_("blank \"author\" entitity")); - + string tmp; for(xmlpp::Element::NodeList::iterator iter = list.begin(); iter != list.end(); ++iter) if(dynamic_cast(*iter))tmp+=dynamic_cast(*iter)->get_content(); @@ -2241,7 +2250,7 @@ CanvasParser::parse_canvas(xmlpp::Element *element,Canvas::Handle parent,bool in if(canvas->value_node_list().placeholder_count()) { - error(element,strprintf(_("Canvas %s has undefined ValueNodes"),canvas->get_id().c_str())); + error(element,strprintf(_("Canvas %s has undefined ValueNodes"),canvas->get_id().c_str())); } return canvas; @@ -2259,6 +2268,7 @@ CanvasParser::parse_from_file_as(const String &file_,const String &as_) CHECK_EXPIRE_TIME(); try { + ChangeLocale change_locale(LC_NUMERIC, "C"); String file(unix_to_local_path(file_)); String as(unix_to_local_path(as_)); @@ -2278,7 +2288,7 @@ CanvasParser::parse_from_file_as(const String &file_,const String &as_) const ValueNodeList& value_node_list(canvas->value_node_list()); - + again: ValueNodeList::const_iterator iter; for(iter=value_node_list.begin();iter!=value_node_list.end();++iter) @@ -2320,6 +2330,7 @@ CanvasParser::parse_from_string(const String &data) try { + ChangeLocale change_locale(LC_NUMERIC, "C"); filename=_(""); total_warnings_=0; xmlpp::DomParser parser; @@ -2343,7 +2354,7 @@ CanvasParser::parse_from_string(const String &data) goto again; } } - + return canvas; } }