diff options
author | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-10-10 12:54:46 +0000 |
---|---|---|
committer | ser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-10-10 12:54:46 +0000 |
commit | 7d21c237ccd46ec1d56639ce53b5882bf97d9de3 (patch) | |
tree | e9667617b9228d24dbb9833bec2c3d1be0293cb9 /lib/rexml/source.rb | |
parent | 662532be008867582fc86dd813dcf8f6a79136eb (diff) |
* Changes to the encoding mechanism. If iconv is found, it is used first
for encoding changes. This should be the case on all 1.8 installations.
When it isn't found (<1.6), the native REXML encoding mechanism is used.
This cleaned out some files, and tightened up the code a bit; and iconv
should be faster than the pure Ruby code.
* Changed deprecated assert_not_nil to assert throughout the tests.
* Parse exceptions are a little more verbose, and extend RuntimeError.
* Bug fixes to XPathParser
* The Light API is still shifting, like the sands of the desert.
* Fixed a new Ruby 1.8.0 warning, added some speed optimizations, and
tightened error reporting in the base parser
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/source.rb')
-rw-r--r-- | lib/rexml/source.rb | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/lib/rexml/source.rb b/lib/rexml/source.rb index 8c175785b7..915b6efc27 100644 --- a/lib/rexml/source.rb +++ b/lib/rexml/source.rb @@ -39,10 +39,6 @@ module REXML # Overridden to support optimized en/decoding def encoding=(enc) super - eval <<-EOL - alias :encode :to_#{encoding.tr('-', '_').downcase} - alias :decode :from_#{encoding.tr('-', '_').downcase} - EOL @line_break = encode( '>' ) if enc != UTF_8 @buffer = decode(@buffer) @@ -78,8 +74,22 @@ module REXML def read end + def consume( pattern ) + @buffer = $' if pattern.match( @buffer ) + end + + def match_to( char, pattern ) + return pattern.match(@buffer) + end + + def match_to_consume( char, pattern ) + md = pattern.match(@buffer) + @buffer = $' + return md + end + def match pattern, consume=false - md = pattern.match @buffer + md = pattern.match(@buffer) @buffer = $' if consume and md return md end @@ -112,7 +122,9 @@ module REXML #@block_size = block_size #super @source.read(@block_size) @line_break = '>' - super @source.readline( @line_break ) + #super @source.readline( "\n" ) + super @source.readline( @line_break )[email protected] + @line_break = encode( '>' ) end def scan pattern, consume=false @@ -145,11 +157,15 @@ module REXML str = @source.readline('>') str = decode(str) if @to_utf and str @buffer << str - rescue + rescue Exception, NameError @source = nil end end + def consume( pattern ) + match( pattern, true ) + end + def match pattern, consume=false rv = pattern.match(@buffer) @buffer = $' if consume and rv |