aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Tomayko <rtomayko@gmail.com>2012-09-11 14:17:21 -0700
committerRyan Tomayko <rtomayko@gmail.com>2012-09-11 14:17:21 -0700
commit567cd6ef68bdaa8ab42f132ef6ad6707d47672c3 (patch)
tree2d3414289cd984ef468968f20f083d2b02345588
parentae137847b42c21e15b5459ee85a28b0710e8af54 (diff)
parent887a050db9a0c945d06af86ca550d18f46cf176a (diff)
Merge pull request #250 from github/mac-format
Handle Mac Format when splitting lines
-rw-r--r--lib/linguist/blob_helper.rb26
-rw-r--r--samples/Text/mac.txt1
-rw-r--r--test/test_blob.rb8
3 files changed, 34 insertions, 1 deletions
diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb
index 04c3f0a..b0a2062 100644
--- a/lib/linguist/blob_helper.rb
+++ b/lib/linguist/blob_helper.rb
@@ -204,7 +204,31 @@ module Linguist
#
# Returns an Array of 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
# Public: Get number of lines of code
diff --git a/samples/Text/mac.txt b/samples/Text/mac.txt
new file mode 100644
index 0000000..c22612b
--- /dev/null
+++ b/samples/Text/mac.txt
@@ -0,0 +1 @@
+line 1 line 2 \ No newline at end of file
diff --git a/test/test_blob.rb b/test/test_blob.rb
index 17e9ef8..333b0ce 100644
--- a/test/test_blob.rb
+++ b/test/test_blob.rb
@@ -65,6 +65,14 @@ class TestBlob < Test::Unit::TestCase
assert_equal ["module Foo", "end", ""], blob("Ruby/foo.rb").lines
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
assert_equal 15, blob("Ruby/foo.rb").size
end