summaryrefslogtreecommitdiff
path: root/ruby_1_8_5/lib/rexml/dtd/dtd.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_8_5/lib/rexml/dtd/dtd.rb')
-rw-r--r--ruby_1_8_5/lib/rexml/dtd/dtd.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/ruby_1_8_5/lib/rexml/dtd/dtd.rb b/ruby_1_8_5/lib/rexml/dtd/dtd.rb
new file mode 100644
index 0000000000..4f735d4812
--- /dev/null
+++ b/ruby_1_8_5/lib/rexml/dtd/dtd.rb
@@ -0,0 +1,51 @@
+require "rexml/dtd/elementdecl"
+require "rexml/dtd/entitydecl"
+require "rexml/comment"
+require "rexml/dtd/notationdecl"
+require "rexml/dtd/attlistdecl"
+require "rexml/parent"
+
+module REXML
+ module DTD
+ class Parser
+ def Parser.parse( input )
+ case input
+ when String
+ parse_helper input
+ when File
+ parse_helper input.read
+ end
+ end
+
+ # Takes a String and parses it out
+ def Parser.parse_helper( input )
+ contents = Parent.new
+ while input.size > 0
+ case input
+ when ElementDecl.PATTERN_RE
+ match = $&
+ source = $'
+ contents << ElementDecl.new( match )
+ when AttlistDecl.PATTERN_RE
+ matchdata = $~
+ source = $'
+ contents << AttlistDecl.new( matchdata )
+ when EntityDecl.PATTERN_RE
+ matchdata = $~
+ source = $'
+ contents << EntityDecl.new( matchdata )
+ when Comment.PATTERN_RE
+ matchdata = $~
+ source = $'
+ contents << Comment.new( matchdata )
+ when NotationDecl.PATTERN_RE
+ matchdata = $~
+ source = $'
+ contents << NotationDecl.new( matchdata )
+ end
+ end
+ contents
+ end
+ end
+ end
+end