summaryrefslogtreecommitdiff
path: root/lib/rdoc/markup
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rdoc/markup')
-rw-r--r--lib/rdoc/markup/parser.rb13
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/rdoc/markup/parser.rb b/lib/rdoc/markup/parser.rb
index ca384d0639..3fce2b4c3b 100644
--- a/lib/rdoc/markup/parser.rb
+++ b/lib/rdoc/markup/parser.rb
@@ -79,6 +79,8 @@ class RDoc::Markup::Parser
@current_token = nil
@debug = false
@have_encoding = Object.const_defined? :Encoding
+ @have_byteslice = ''.respond_to? :byteslice
+ @input = nil
@input_encoding = nil
@line = 0
@line_pos = 0
@@ -321,7 +323,9 @@ class RDoc::Markup::Parser
# The character offset for the input string at the given +byte_offset+
def char_pos byte_offset
- if @have_encoding then
+ if @have_byteslice then
+ @input.byteslice(0, byte_offset).length
+ elsif @have_encoding then
matched = @binary_input[0, byte_offset]
matched.force_encoding @input_encoding
matched.length
@@ -416,10 +420,11 @@ class RDoc::Markup::Parser
def setup_scanner input
@line = 0
@line_pos = 0
+ @input = input.dup
- if @have_encoding then
- @input_encoding = input.encoding
- @binary_input = input.dup.force_encoding Encoding::BINARY
+ if @have_encoding and not @have_byteslice then
+ @input_encoding = @input.encoding
+ @binary_input = @input.force_encoding Encoding::BINARY
end
@s = StringScanner.new input