if(node.getNodeType() == DOM_Node::TEXT_NODE) { svg::SVGPCDATAElement *elem = new svg::SVGPCDATAElement; elem->content = node.getNodeValue(); return elem; } else ''' strdef_output='' for element_dtd_name in all_elements: # if element=='mpath': # continue classname = string.upper(element_dtd_name[0])+element_dtd_name[1:] classname = make_cppname(classname) #name=classname element_cpp_name = make_cpp_string_name(element_dtd_name) includes = includes + '#include <w3c/svg/SVG%sElement.hpp>\n'%(classname) output = output + ''' if (nodeName==svg::%s_element_string) { svg::SVG%sElement *elem = new svg::SVG%sElement; elem->parse(node, owner, viewport); return elem; } else '''%(element_cpp_name, classname, classname) strdef_output = strdef_output + 'STRDEF(%s,"%s")\n'%(classname, element_dtd_name) output = output +''' { std::cerr << "element " << nodeName.c_str() << " (type " << node.getNodeType() << ") unknown" << std::endl;
raise c, e = find_enum_in_inherit(entity_type.enums, classdecl) if entity_type.name == "xml:space": # print classdecl.name, entity_type # print e pass if c != None and e != None: # if c.name == "SVGComponentTransferFunctionElement": # print name, entity_type # print c.name # print e i = entity_type.name # print entity_type.name, e.name iname = make_cpp_string_name(i) if (iname, i) not in attr_strings: attr_strings.append((iname, i)) if c.name + e.name in already_done: continue already_done.append(c.name + e.name) if c.name not in includes: includes.append(c.name) output_cpp_read = ( output_cpp_read + """ svg::%s::%s
if(node.getNodeType() == DOM_Node::TEXT_NODE) { svg::SVGPCDATAElement *elem = new svg::SVGPCDATAElement; elem->content = node.getNodeValue(); return elem; } else ''' strdef_output = '' for element_dtd_name in all_elements: # if element=='mpath': # continue classname = string.upper(element_dtd_name[0]) + element_dtd_name[1:] classname = make_cppname(classname) #name=classname element_cpp_name = make_cpp_string_name(element_dtd_name) includes = includes + '#include <w3c/svg/SVG%sElement.hpp>\n' % (classname) output = output + ''' if (nodeName==svg::%s_element_string) { svg::SVG%sElement *elem = new svg::SVG%sElement; elem->parse(node, owner, viewport); return elem; } else ''' % (element_cpp_name, classname, classname) strdef_output = strdef_output + 'STRDEF(%s,"%s")\n' % (classname, element_dtd_name) output = output + ''' {
raise c, e = find_enum_in_inherit(entity_type.enums, classdecl) if entity_type.name == 'xml:space': #print classdecl.name, entity_type #print e pass if c != None and e != None: #if c.name == "SVGComponentTransferFunctionElement": # print name, entity_type #print c.name #print e i = entity_type.name #print entity_type.name, e.name iname = make_cpp_string_name(i) if (iname, i) not in attr_strings: attr_strings.append((iname, i)) if c.name + e.name in already_done: continue already_done.append(c.name + e.name) if c.name not in includes: includes.append(c.name) output_cpp_read = output_cpp_read + """ svg::%s::%s make_%s(const svg::String& s) {
def process(classdecl): if classdecl.name in includes: raise AlreadyProcessed if classdecl in already_done: return 0; already_done.append(classdecl) nattr=0 begin_string = ''' // %s int %s::parse_attributes(const String& attrName, const String& attrValue) { int recognized=0; // std::cerr << "%s::parse" << std::endl; { '''%(classdecl.name, classdecl.name, classdecl.name) begin_print_string = ''' // %s void %s::print_attributes(xmlostream& out) { '''%(classdecl.name, classdecl.name) begin_get_attr_by_name_string = ''' // %s svgl::AnimateAdapter* %s::getAttributeByName(const String& attrName) { // std::cerr << "%s::getAttributeByName " << attrName << std::endl; '''%(classdecl.name, classdecl.name, classdecl.name) for attr in classdecl.attributes: try: entity_name = mapDtdIdl.attributes_idl_dtd[attr] except KeyError: #print classdecl.name, attr #print classdecl #print mapDtdIdl.attributes_idl_dtd #raise "" continue if nattr==0: includes.append(classdecl.name) output_cpp = begin_string print_output_cpp = begin_print_string + ' out ' output_get_attr_by_name = begin_get_attr_by_name_string nattr=nattr+1 output_cpp = output_cpp + ''' if (*attrName==*%s_attribute_string) { *attrValue >> %s; ++recognized; } else '''%(make_cpp_string_name(entity_name), make_cpp(attr.name)) print_output_cpp = print_output_cpp + '''<< " %s=\\"" << %s << "\\"" '''%(entity_name, make_cpp(attr.name)) (typename, ispointer)=mapAttributeType.mapAttributeType(classdecl, attr) output_get_attr_by_name = output_get_attr_by_name + ''' if (*attrName==*%s_attribute_string) { return new svgl::AnimateAdapterTemplate< Attribute< %s > >(&%s); } else '''%(make_cpp_string_name(entity_name), typename, make_cpp(attr.name)) if nattr>0: print_output_cpp = print_output_cpp + ' ;\n' resDeclared = 0 for inh in classdecl.inherits: try: res = process(parse_idl.class_decls[inh]) except AlreadyProcessed: res=1 except KeyError: if inh not in ["Element", "events::EventTarget", "events::DocumentEvent", "css::ViewCSS", "css::DocumentCSS", "css::CSSValue", "smil::ElementTimeControl", "Document", "events::UIEvent", "css::CSSRule", "events::Event"]: raise else: continue if res>0: if nattr==0: includes.append(classdecl.name) output_cpp = begin_string print_output_cpp = begin_print_string output_get_attr_by_name = begin_get_attr_by_name_string if resDeclared==0: output_get_attr_by_name = output_get_attr_by_name + ''' { svgl::AnimateAdapter* res = 0; ''' resDeclared=1 nattr = nattr+res output_cpp = output_cpp + ''' if (%s::parse_attributes(attrName, attrValue)) { ++recognized; } else '''%(inh) print_output_cpp= print_output_cpp+''' %s::print_attributes(out);\n'''%(inh) output_get_attr_by_name = output_get_attr_by_name + ''' res = %s::getAttributeByName(attrName); if (res) { return res; } '''%(inh) if nattr>0: if classdecl.name in customParser: #print classdecl.name output_cpp = output_cpp + ''' if (customParseAttributes(attrName, attrValue)) { ++recognized; } else ''' #if it's an element #if string.find(classdecl.name,"Element")>0 and classdecl.name != "SVGElement": if mapDtdIdl.elements_idl_dtd.has_key(classdecl): output_cpp = output_cpp + ''' { // std::cerr << "unknown attribute %s::" << attrName << std::endl; } '''%(classdecl.name) output_get_attr_by_name = output_get_attr_by_name + ''' { std::cerr << "unknown attribute %s::" << attrName << std::endl; } '''%(classdecl.name) else: output_cpp = output_cpp +''' { } ''' output_cpp = output_cpp+''' } return recognized; } ''' if(resDeclared): output_get_attr_by_name = output_get_attr_by_name + ''' } ''' output_get_attr_by_name = output_get_attr_by_name + ''' return 0; } ''' print_output_cpp = print_output_cpp + '''}\n''' output_cpps[classdecl.name]=output_cpp print_output_cpps[classdecl.name]=print_output_cpp output_get_attr_by_names[classdecl.name]=output_get_attr_by_name #print classdecl.name, len(output_get_attr_by_name) else: #print classdecl pass return nattr