Sam Ruby has been doing a bang-up job fixing the bugs in REXML. Who knows when these improvements will trickle down to vendor distributions of Ruby. In the meantime, let's bundle the latest version of REXML with Instiki. We check the version number of the bundled REXML against that of the System REXML, and use whichever is later.
51 lines
1.1 KiB
Ruby
51 lines
1.1 KiB
Ruby
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
|