# File lib/wsdl/xmlSchema/parser.rb, line 50 50: def initialize(opt = {}) 51: @parser = XSD::XMLParser.create_parser(self, opt) 52: @parsestack = nil 53: @lastnode = nil 54: @ignored = {} 55: @location = opt[:location] 56: @originalroot = opt[:originalroot] 57: end
# File lib/wsdl/xmlSchema/parser.rb, line 87 87: def characters(text) 88: lastframe = @parsestack.last 89: if lastframe 90: # Need not to be cloned because character does not have attr. 91: ns = lastframe.ns 92: decode_text(ns, text) 93: else 94: p text if $DEBUG 95: end 96: end
# File lib/wsdl/xmlSchema/parser.rb, line 67 67: def charset 68: @parser.charset 69: end
# File lib/wsdl/xmlSchema/parser.rb, line 98 98: def end_element(name) 99: lastframe = @parsestack.pop 100: unless name == lastframe.name 101: raise UnexpectedElementError.new("closing element name '#{name}' does not match with opening element '#{lastframe.name}'") 102: end 103: decode_tag_end(lastframe.ns, lastframe.node) 104: @lastnode = lastframe.node 105: end
# File lib/wsdl/xmlSchema/parser.rb, line 59 59: def parse(string_or_readable) 60: @parsestack = [] 61: @lastnode = nil 62: @textbuf = '' 63: @parser.do_parse(string_or_readable) 64: @lastnode 65: end
# File lib/wsdl/xmlSchema/parser.rb, line 71 71: def start_element(name, attrs) 72: lastframe = @parsestack.last 73: ns = parent = nil 74: if lastframe 75: ns = lastframe.ns 76: parent = lastframe.node 77: else 78: ns = XSD::NS.new 79: parent = nil 80: end 81: # ns might be the same 82: ns, attrs = XSD::XMLParser.filter_ns(ns, attrs) 83: node = decode_tag(ns, name, attrs, parent) 84: @parsestack << ParseFrame.new(ns, name, node) 85: end
# File lib/wsdl/xmlSchema/parser.rb, line 109 109: def decode_tag(ns, name, attrs, parent) 110: o = nil 111: elename = ns.parse(name) 112: if !parent 113: if elename == SchemaName 114: o = Schema.parse_element(elename) 115: o.location = @location 116: else 117: raise UnknownElementError.new("unknown element: #{elename}") 118: end 119: o.root = @originalroot if @originalroot # o.root = o otherwise 120: else 121: if elename == AnnotationName 122: # only the first annotation element is allowed for each element. 123: o = Annotation.new 124: else 125: o = parent.parse_element(elename) 126: end 127: if o.nil? 128: unless @ignored.key?(elename) 129: warn("ignored element: #{elename} of #{parent.class}") 130: @ignored[elename] = elename 131: end 132: o = Documentation.new # which accepts any element. 133: end 134: # node could be a pseudo element. pseudo element has its own parent. 135: o.root = parent.root 136: o.parent = parent if o.parent.nil? 137: end 138: attrs.each do |key, value| 139: attr_ele = ns.parse(key, true) 140: value_ele = ns.parse(value, false) 141: value_ele.source = value # for recovery; value may not be a QName 142: if attr_ele == IdAttrName 143: o.id = value_ele 144: else 145: if o.parse_attr(attr_ele, value_ele).nil? 146: unless @ignored.key?(attr_ele) 147: warn("ignored attr: #{attr_ele}") 148: @ignored[attr_ele] = attr_ele 149: end 150: end 151: end 152: end 153: o 154: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.