Google

def initialize( first, parent=nil ) @entities = DEFAULT_ENTITIES if first.kind_of? String super() @name = first @external_id = parent elsif first.kind_of? DocType super(parent) @name = first.name @external_id = first.external_id elsif first.kind_of? Source super(parent) md = first.match( PATTERN_RE, true ) identity = md[1] close = md[2] identity =~ IDENTITY @name = $1 raise ParseException.new("DOCTYPE is missing a name", first) if @name.nil? @pub_sys = $2.nil? ? nil : $2.strip @long_name = $3.nil? ? nil : $3.strip @uri = $4.nil? ? nil : $4.strip @external_id = nil case @pub_sys when "SYSTEM" @external_id = "SYSTEM" when "PUBLIC" @external_id = "PUBLIC" else # Done, or junk end # If these raise nil exceptions, then the doctype was malformed begin @external_id << " #@long_name" if @long_name @external_id << " #@uri" if @uri rescue raise "malformed DOCTYPE declaration #$&" end return if close == ">" parse_entities first end end