diff options
| author | Ryan Tomayko <rtomayko@gmail.com> | 2012-09-11 14:17:21 -0700 |
|---|---|---|
| committer | Ryan Tomayko <rtomayko@gmail.com> | 2012-09-11 14:17:21 -0700 |
| commit | 567cd6ef68bdaa8ab42f132ef6ad6707d47672c3 (patch) | |
| tree | 2d3414289cd984ef468968f20f083d2b02345588 | |
| parent | ae137847b42c21e15b5459ee85a28b0710e8af54 (diff) | |
| parent | 887a050db9a0c945d06af86ca550d18f46cf176a (diff) | |
Merge pull request #250 from github/mac-format
Handle Mac Format when splitting lines
| -rw-r--r-- | lib/linguist/blob_helper.rb | 26 | ||||
| -rw-r--r-- | samples/Text/mac.txt | 1 | ||||
| -rw-r--r-- | test/test_blob.rb | 8 |
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 |
