Google

def initialize stream, value=nil, parent=nil super(parent) @reference = false @external = nil if stream.kind_of? Source match = stream.match( ENTITYDECL, true ).to_a.compact # Now we have to sort out what kind of entity reference this is, # and dereference any internal entities if match.include? '%' # Reference entity @reference = true match.delete '%' end @value = nil if match.include? 'SYSTEM' # External reference @external = 'SYSTEM' match.delete @external @ref = match[2][1..-2] @pubid = @ndata = nil @ndata = match[-1] if match.size == 5 elsif match.include? 'PUBLIC' # External reference @external = 'PUBLIC' match.delete @external @pubid = match[2][1..-2] @ref = match[3][1..-2] @ndata = nil else @value = match[2][1..-2] end @name = match[1] elsif stream.kind_of? String @name = stream @value = value end end