From: Braden M. <br...@us...> - 2005-11-28 02:56:20
|
Update of /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31673/src/libopenvrml/openvrml Modified Files: Vrml97Parser.g Log Message: Don't try to use relative URIs as node_class_id's. Index: Vrml97Parser.g =================================================================== RCS file: /cvsroot/openvrml/openvrml/src/libopenvrml/openvrml/Vrml97Parser.g,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** Vrml97Parser.g 27 Nov 2005 20:15:49 -0000 1.40 --- Vrml97Parser.g 28 Nov 2005 02:56:12 -0000 1.41 *************** *** 695,699 **** --- 695,702 ---- options { defaultErrorHandler=false; } { + using std::string; using std::vector; + using boost::shared_ptr; + using boost::dynamic_pointer_cast; node_interface_set interfaces; *************** *** 704,707 **** --- 707,711 ---- } : KEYWORD_PROTO id:ID { + assert(scope); boost::shared_ptr<openvrml::scope> proto_scope(new openvrml::scope(id->getText(), scope)); *************** *** 717,721 **** is_map, routes] RBRACE { ! boost::shared_ptr<openvrml::node_class> node_class(new proto_node_class(scene.browser(), interfaces, --- 721,725 ---- is_map, routes] RBRACE { ! shared_ptr<openvrml::node_class> node_class(new proto_node_class(scene.browser(), interfaces, *************** *** 730,747 **** // First, construct the id for the node implementation. // ! std::string impl_id; do { impl_id = '#' + proto_scope->id() + impl_id; } while ((proto_scope = proto_scope->parent())->parent()); ! impl_id = scope->id() + impl_id; scene.browser().add_node_class(impl_id, node_class); // // PROTOs implicitly introduce a new node type as well. // ! const boost::shared_ptr<node_type> node_type = node_class->create_type(id->getText(), interfaces); assert(node_type); - assert(scope); if (!scope->add_type(node_type)) { using antlr::SemanticException; --- 734,756 ---- // First, construct the id for the node implementation. // ! string impl_id; do { impl_id = '#' + proto_scope->id() + impl_id; } while ((proto_scope = proto_scope->parent())->parent()); ! impl_id = proto_scope->id() + impl_id; scene.browser().add_node_class(impl_id, node_class); + if (!dynamic_pointer_cast<proto_node_class>( + scene.browser().node_class(node_class_id(this->uri)))) { + scene.browser().add_node_class(node_class_id(this->uri), + node_class); + } + // // PROTOs implicitly introduce a new node type as well. // ! const shared_ptr<node_type> node_type = node_class->create_type(id->getText(), interfaces); assert(node_type); if (!scope->add_type(node_type)) { using antlr::SemanticException; *************** *** 948,956 **** uri_list=externprotoUrlList { const vector<string> & alt_uris = uri_list.value(); ! for (vector<string>::const_iterator uri = alt_uris.begin(); ! uri != alt_uris.end(); ! ++uri) { const shared_ptr<openvrml::node_class> node_class = ! scene.browser().node_class(*uri); if (node_class) { node_type = node_class->create_type(id->getText(), --- 957,969 ---- uri_list=externprotoUrlList { const vector<string> & alt_uris = uri_list.value(); ! for (vector<string>::const_iterator resource_id = alt_uris.begin(); ! resource_id != alt_uris.end(); ! ++resource_id) { ! const ::uri absolute_uri = !relative(::uri(*resource_id)) ! ? ::uri(*resource_id) ! : ::uri(*resource_id) ! .resolve_against(::uri(this->uri)); const shared_ptr<openvrml::node_class> node_class = ! scene.browser().node_class(node_class_id(absolute_uri)); if (node_class) { node_type = node_class->create_type(id->getText(), *************** *** 964,971 **** new externproto_node_class(scene, alt_uris)); ! for (vector<string>::const_iterator uri = alt_uris.begin(); ! uri != alt_uris.end(); ! ++uri) { ! scene.browser().add_node_class(*uri, externproto_class); } --- 977,990 ---- new externproto_node_class(scene, alt_uris)); ! for (vector<string>::const_iterator resource_id = ! alt_uris.begin(); ! resource_id != alt_uris.end(); ! ++resource_id) { ! const ::uri absolute_uri = !relative(::uri(*resource_id)) ! ? ::uri(*resource_id) ! : ::uri(*resource_id) ! .resolve_against(::uri(this->uri)); ! scene.browser().add_node_class(node_class_id(absolute_uri), ! externproto_class); } |