1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/rexml/dtd/notationdecl.rb
ser 95be40a06d @@ Fix for the XPath descendant* result set ordering bug @@
@@ SAX2 listener bug fixes @@
@@ Undid a code change that caused a 10x speed regression @@
@@ Indentation fixes, and a new word wrapping feature for text nodes
  was contributed by Devin Bayer (documentation forthcoming; see the
  change logs for now) @@

The XPath bug fix is really ugly and inefficient, but I spent two days hacking
at it and this was the best I could come up with.

The SAX2 listener fixes had to do with crashes in certain conditions, like when
there was a carriage return at the end of a document

Several people submitted patches for the speed regression; it is embarrassing
how long it took me to get around to looking at this.  To this day, I don't
know where the offending code came from.

Encoding fixes

Added a contributed word wrapping option for text formatting.  Devin Bayer
contributed this.  Here's his comment:
"Setting :wordwrapping to :all, wordwraps all text nodes longer than 60
  characters.
  Setting :indentstyle to aString, make aString used as indentation,
  instead of the default '  '.
  And as long as :respect_whitespace isn't set for the element,
  multiline text nodes will be indented."


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-02-13 22:40:14 +00:00

39 lines
951 B
Ruby

require "rexml/child"
module REXML
module DTD
class NotationDecl < Child
START = "<!NOTATION"
START_RE = /^\s*#{START}/um
PUBLIC = /^\s*#{START}\s+(\w[\w-]*)\s+(PUBLIC)\s+((["']).*?\4)\s*>/um
SYSTEM = /^\s*#{START}\s+(\w[\w-]*)\s+(SYSTEM)\s+((["']).*?\4)\s*>/um
def initialize src
super()
if src.match( PUBLIC )
md = src.match( PUBLIC, true )
elsif src.match( SYSTEM )
md = src.match( SYSTEM, true )
else
raise ParseException.new( "error parsing notation: no matching pattern", src )
end
@name = md[1]
@middle = md[2]
@rest = md[3]
end
def to_s
"<!NOTATION #@name #@middle #@rest>"
end
def write( output, indent )
indent( output, indent )
output << to_s
end
def NotationDecl.parse_source source, listener
md = source.match( PATTERN_RE, true )
thing = md[0].squeeze(" \t\n\r")
listener.send inspect.downcase, thing
end
end
end
end