aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rexml/source.rb
diff options
context:
space:
mode:
authorser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-10 12:54:46 +0000
committerser <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-10 12:54:46 +0000
commit7d21c237ccd46ec1d56639ce53b5882bf97d9de3 (patch)
treee9667617b9228d24dbb9833bec2c3d1be0293cb9 /lib/rexml/source.rb
parent662532be008867582fc86dd813dcf8f6a79136eb (diff)
downloadruby-7d21c237ccd46ec1d56639ce53b5882bf97d9de3.tar.gz
* 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.rb30
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 )+@source.read
+ @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