summaryrefslogtreecommitdiff
path: root/lib/rexml/source.rb
diff options
context:
space:
mode:
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