lib/asciidoctor/helpers.rb in asciidoctor-1.5.7.1 vs lib/asciidoctor/helpers.rb in asciidoctor-1.5.8
- old
+ new
@@ -68,25 +68,24 @@
leading_bytes = (first_line = data[0]).unpack 'C3'
if COERCE_ENCODING
utf8 = ::Encoding::UTF_8
if (leading_2_bytes = leading_bytes.slice 0, 2) == BOM_BYTES_UTF_16LE
- # HACK Ruby messes up trailing whitespace on UTF-16LE, so take a different route
- return ((data.join.force_encoding ::Encoding::UTF_16LE)[1..-1].encode utf8).each_line.map {|line| line.rstrip }
+ # HACK Ruby messes up trailing whitespace on UTF-16LE, so reencode whole document first
+ data = data.join
+ return (((data.force_encoding ::Encoding::UTF_16LE).slice 1, data.length).encode utf8).each_line.map {|line| line.rstrip }
elsif leading_2_bytes == BOM_BYTES_UTF_16BE
- data[0] = (first_line.force_encoding ::Encoding::UTF_16BE)[1..-1]
- return data.map {|line| %(#{((line.force_encoding ::Encoding::UTF_16BE).encode utf8).rstrip}) }
+ data[0] = (first_line.force_encoding ::Encoding::UTF_16BE).slice 1, first_line.length
+ return data.map {|line| ((line.force_encoding ::Encoding::UTF_16BE).encode utf8).rstrip }
elsif leading_bytes == BOM_BYTES_UTF_8
- data[0] = (first_line.force_encoding utf8)[1..-1]
+ data[0] = (first_line.force_encoding utf8).slice 1, first_line.length
end
data.map {|line| line.encoding == utf8 ? line.rstrip : (line.force_encoding utf8).rstrip }
else
# Ruby 1.8 has no built-in re-encoding, so no point in removing the UTF-16 BOMs
- if leading_bytes == BOM_BYTES_UTF_8
- data[0] = first_line[3..-1]
- end
+ data[0] = first_line.slice 3, first_line.length if leading_bytes == BOM_BYTES_UTF_8
data.map {|line| line.rstrip }
end
end
# Public: Normalize the String and split into lines to prepare them for parsing
@@ -105,22 +104,20 @@
leading_bytes = data.unpack 'C3'
if COERCE_ENCODING
utf8 = ::Encoding::UTF_8
if (leading_2_bytes = leading_bytes.slice 0, 2) == BOM_BYTES_UTF_16LE
- data = (data.force_encoding ::Encoding::UTF_16LE)[1..-1].encode utf8
+ data = ((data.force_encoding ::Encoding::UTF_16LE).slice 1, data.length).encode utf8
elsif leading_2_bytes == BOM_BYTES_UTF_16BE
- data = (data.force_encoding ::Encoding::UTF_16BE)[1..-1].encode utf8
+ data = ((data.force_encoding ::Encoding::UTF_16BE).slice 1, data.length).encode utf8
elsif leading_bytes == BOM_BYTES_UTF_8
- data = data.encoding == utf8 ? data[1..-1] : (data.force_encoding utf8)[1..-1]
+ data = data.encoding == utf8 ? (data.slice 1, data.length) : ((data.force_encoding utf8).slice 1, data.length)
else
data = data.force_encoding utf8 unless data.encoding == utf8
end
else
# Ruby 1.8 has no built-in re-encoding, so no point in removing the UTF-16 BOMs
- if leading_bytes == BOM_BYTES_UTF_8
- data = data[3..-1]
- end
+ data = data.slice 3, data.length if leading_bytes == BOM_BYTES_UTF_8
end
data.each_line.map {|line| line.rstrip }
end
# Public: Efficiently checks whether the specified String resembles a URI