Merge pull request #250 from github/mac-format

Handle Mac Format when splitting lines
This commit is contained in:
Ryan Tomayko
2012-09-11 14:17:21 -07:00
3 changed files with 34 additions and 1 deletions

View File

@@ -204,7 +204,31 @@ module Linguist
# #
# Returns an Array of lines # Returns an Array of lines
def lines def lines
@lines ||= (viewable? && data) ? data.split("\n", -1) : [] @lines ||=
if viewable? && data
data.split(line_split_character, -1)
else
[]
end
end
# Character used to split lines. This is almost always "\n" except when Mac
# Format is detected in which case it's "\r".
#
# Returns a split pattern string.
def line_split_character
@line_split_character ||= (mac_format?? "\r" : "\n")
end
# Public: Is the data in ** Mac Format **. This format uses \r (0x0d) characters
# for line ends and does not include a \n (0x0a).
#
# Returns true when mac format is detected.
def mac_format?
return if !viewable?
if pos = data[0, 4096].index("\r")
data[pos + 1] != ?\n
end
end end
# Public: Get number of lines of code # Public: Get number of lines of code

1
samples/Text/mac.txt Normal file
View File

@@ -0,0 +1 @@
line 1

View File

@@ -65,6 +65,14 @@ class TestBlob < Test::Unit::TestCase
assert_equal ["module Foo", "end", ""], blob("Ruby/foo.rb").lines assert_equal ["module Foo", "end", ""], blob("Ruby/foo.rb").lines
end end
def test_mac_format
assert blob("Text/mac.txt").mac_format?
end
def test_lines_mac_format
assert_equal ["line 1", "line 2", ""], blob("Text/mac.txt").lines
end
def test_size def test_size
assert_equal 15, blob("Ruby/foo.rb").size assert_equal 15, blob("Ruby/foo.rb").size
end end