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