1require "rexml/dtd/elementdecl"
2require "rexml/dtd/entitydecl"
3require "rexml/comment"
4require "rexml/dtd/notationdecl"
5require "rexml/dtd/attlistdecl"
6require "rexml/parent"
7
8module REXML
9  module DTD
10    class Parser
11      def Parser.parse( input )
12        case input
13        when String
14          parse_helper input
15        when File
16          parse_helper input.read
17        end
18      end
19
20      # Takes a String and parses it out
21      def Parser.parse_helper( input )
22        contents = Parent.new
23        while input.size > 0
24          case input
25          when ElementDecl.PATTERN_RE
26            match = $&
27            source = $'
28            contents << ElementDecl.new( match )
29          when AttlistDecl.PATTERN_RE
30            matchdata = $~
31            source = $'
32            contents << AttlistDecl.new( matchdata )
33          when EntityDecl.PATTERN_RE
34            matchdata = $~
35            source = $'
36            contents << EntityDecl.new( matchdata )
37          when Comment.PATTERN_RE
38            matchdata = $~
39            source = $'
40            contents << Comment.new( matchdata )
41          when NotationDecl.PATTERN_RE
42            matchdata = $~
43            source = $'
44            contents << NotationDecl.new( matchdata )
45          end
46        end
47        contents
48      end
49    end
50  end
51end
52