Changeset 179 for Xml/xsd-fu/trunk/generateDS/generateDS.py
- Timestamp:
- 05/29/08 17:40:03 (6 months ago)
- Files:
-
- 1 modified
-
Xml/xsd-fu/trunk/generateDS/generateDS.py (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Xml/xsd-fu/trunk/generateDS/generateDS.py
r168 r179 228 228 def setBase(self, base): self.base = base 229 229 def getBase(self): return self.base 230 def setSimpleType(self, simpleType): self.simpleType = simpleType231 def getSimpleType(self): return self.simpleType232 230 def getAttributeGroups(self): return self.attributeGroups 233 231 def setAttributeGroup(self, attributeGroup): self.attributeGroup = attributeGroup … … 354 352 def getAnyAttribute(self): return self.anyAttribute 355 353 def setSimpleType(self, simpleType): self.simpleType = simpleType 356 def getSimpleType(self): return self.simpleType 354 def getSimpleType(self): return self.simpleType.getName() 357 355 358 356 def show(self, outfile, level): … … 423 421 # type_val = '' 424 422 type_val = self.resolve_type_1() 423 logging.debug("Resolving type of %s with initial type %s" % 424 (self, type_val)) 425 425 if type_val: 426 426 if type_val in ElementDict: 427 logging.debug("Type %s is in ElementDict" % type_val) 427 428 type_val1 = type_val 428 429 # The following loop handles the case where an Element's … … 438 439 element = ElementDict[type_val1] 439 440 t = element.resolve_type_1() 440 # If the type is available in the SimpleTypeDict, we 441 # know we've gone far enough in the Element hierarchy 442 # and can return the correct base type. 443 if t in SimpleTypeDict: 444 type_val1 = SimpleTypeDict[t].getBase() 441 logging.debug("Element[%s] %s from ElementDict's type " \ 442 " resolves to %s" % (i, element, t)) 443 # If the type has a simple type, we know we've gone far 444 # enough in the Element hierarchy and can return the 445 # correct base type. 446 if element.simpleType not in (None, 1): 447 type_val1 = element.simpleType.getBase() 448 logging.debug( 449 "Resolving type based on SimpleType %s to %s" % 450 (element.simpleType, type_val1)) 445 451 break 446 452 # If the type name is the same as the previous type name … … 498 504 else: 499 505 type_val = StringType[0] 506 logging.debug("Resolved type of %s to be %s" % (self, type_val)) 500 507 return type_val 501 508 … … 507 514 type_val = self.attrs['type'] 508 515 if type_val in SimpleTypeDict: 509 self.simpleType = type_val516 self.simpleType = SimpleTypeDict[type_val] 510 517 elif 'ref' in self.attrs: 511 518 # fix … … 727 734 self.inAttributeGroup = 0 728 735 self.inSimpleType = 0 736 self.inListType = 0 737 self.inUnionType = 0 729 738 # The last attribute we processed. 730 739 self.lastAttribute = None … … 743 752 print msg 744 753 sys.exit(-1) 754 755 def findLastXschemaElement(self): 756 """ 757 Traverses the current stack of elements to find the first instance 758 of XschemaElement. 759 """ 760 element = None 761 reverse = list(self.stack) 762 reverse.reverse() 763 for entry in reverse: 764 if isinstance(entry, XschemaElement): 765 element = entry 766 return element 745 767 746 768 def startElement(self, name, attrs): 747 769 logging.debug("Start element: %s %s" % (name, repr(attrs.items()))) 770 logging.debug("Stack: %s" % self.stack) 748 771 749 772 if name == SchemaType: … … 866 889 stName = None 867 890 # If the parent is an element, mark it as a simpleType. 868 if len(self.stack) > 0 :891 if len(self.stack) > 0 and isinstance(self.stack[-1], XschemaElement): 869 892 self.stack[-1].setSimpleType(1) 870 893 element = SimpleTypeElement(stName) … … 876 899 # the restriction base. 877 900 if self.inSimpleType > 0 and 'base' in attrs.keys(): 878 self.stack[-1].setBase(attrs['base']) 901 base = attrs['base'] 902 parent = self.stack[-1] 903 logging.debug("Setting base '%s' on: %s" % (base, parent)) 904 parent.setBase(base) 879 905 self.inRestrictionType = 1 880 906 elif name == EnumerationType: … … 889 915 # in the stack. We search backwards through the stack to 890 916 # find the last element. 891 element = None 892 reverse = list(self.stack) 893 reverse.reverse() 894 logging.debug("Found enum, reverse stack: %s" % reverse) 895 for entry in reverse: 896 if type(entry) == XschemaElement: 897 element = entry 917 element = self.findLastXschemaElement() 898 918 if element is None: 899 919 sys.stderr.write( … … 911 931 for member in attrs['memberTypes'].split(" "): 912 932 self.stack[-1].unionOf.append(member) 933 self.inUnionType = 1 913 934 elif name == WhiteSpaceType and self.inRestrictionType: 914 935 if attrs.has_key('value'): … … 919 940 #ipshell('Parsing simpleType -- Entering ipshell.\nHit Ctrl-D to exit') 920 941 #import pdb; pdb.set_trace() 921 logging.debug("Start element stack: %d" % len(self.stack))922 942 923 943 def endElement(self, name): … … 932 952 if len(self.stack) == 1: 933 953 self.topLevelSimpleTypes.append(simpleType) 954 elif not self.inAttribute and not self.inListType \ 955 and not self.inRestrictionType and not self.inUnionType: 956 logging.debug("Setting simple type on %s to %s" % (self.stack[-1], simpleType)) 957 self.stack[-1].simpleType = simpleType 934 958 elif name == RestrictionType and self.inRestrictionType: 935 959 self.inRestrictionType = 0 … … 980 1004 elif name == ListType: 981 1005 self.inListType = 0 1006 elif name == UnionType: 1007 self.inUnionType = 0 982 1008 983 1009 def characters(self, chrs):
