line-detector 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/line-detector.rb +63 -20
- data/lib/version.rb +1 -1
- metadata +1 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc7429071fc4b90421939e9f2efa635af6706ffd
|
4
|
+
data.tar.gz: 62d454bedea6b374d17ff18aa29aa5b7148ca624
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1ef12f759a63cf88182305b5eb334d7fff9accf0fe08968084e7ac9a35be8844962a7ab473793b741477dc26b4887dc59b714255a8fd8ec5c78c343448834ed
|
7
|
+
data.tar.gz: 0097e756cd16d68987f7a56fabb23f4cde41050de9d63dc86408f97d8b86c6634a35654cb423311c06b9188c07a39b3b79f2a2cd5d32e228a38287ffe95d110a
|
data/lib/line-detector.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'ptools'
|
3
2
|
|
4
3
|
require 'version'
|
5
4
|
|
@@ -7,34 +6,78 @@ require 'version'
|
|
7
6
|
# LineDetector - line ending detector
|
8
7
|
#
|
9
8
|
module LineDetector
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
9
|
+
EOL_CHARACTERS = [
|
10
|
+
"\r",
|
11
|
+
"\n",
|
12
|
+
"\v",
|
13
|
+
"\f",
|
14
|
+
"\u2028",
|
15
|
+
"\u2029",
|
16
|
+
"\u0085"
|
17
|
+
]
|
18
|
+
|
19
|
+
EOL2NAME = {
|
20
|
+
"\r\n" => :crlf,
|
21
|
+
"\n\r" => :lfcr,
|
22
|
+
"\n" => :lf,
|
23
|
+
"\r" => :cr,
|
24
|
+
"\v" => :vt,
|
25
|
+
"\f" => :ff,
|
26
|
+
"\u2028" => :ls,
|
27
|
+
"\u2029" => :ps,
|
28
|
+
"\u0085" => :nel
|
29
|
+
}
|
30
|
+
|
31
|
+
NAME2EOL = EOL2NAME.invert
|
22
32
|
|
33
|
+
#
|
34
|
+
# Detect line ending format of arbitrary text
|
35
|
+
#
|
36
|
+
# If text uses multiple line ending formats,
|
37
|
+
# Returns :mix.
|
38
|
+
#
|
23
39
|
def self.detect_line_ending_of_text(text)
|
24
|
-
line_endings = text.
|
25
|
-
|
26
|
-
|
40
|
+
line_endings = text.split(/[^#{EOL_CHARACTERS.join('')}]/)
|
41
|
+
.reject { |ending| ending == '' }
|
42
|
+
.map { |ending| ending.gsub(/(.+?)(\1)+/m, '\1') }
|
43
|
+
.uniq
|
27
44
|
|
28
|
-
|
45
|
+
len = line_endings.length
|
46
|
+
|
47
|
+
if len == 0
|
29
48
|
:none
|
30
|
-
elsif
|
31
|
-
line_endings.first
|
49
|
+
elsif len == 1
|
50
|
+
EOL2NAME[line_endings.first] || :unknown
|
32
51
|
else
|
33
52
|
:mix
|
34
53
|
end
|
35
54
|
end
|
36
55
|
|
56
|
+
#
|
57
|
+
# Detect line ending format of a file
|
58
|
+
#
|
59
|
+
# Assumes file is a text file.
|
60
|
+
#
|
37
61
|
def self.detect_line_ending_of_file(filename)
|
38
|
-
detect_line_ending_of_text(open(filename))
|
62
|
+
detect_line_ending_of_text(open(filename).read)
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# A more capable version of String#lines,
|
67
|
+
# that handles some of the more obscure line ending formats.
|
68
|
+
#
|
69
|
+
# If line ending format cannot be determined,
|
70
|
+
# returns :unknown.
|
71
|
+
#
|
72
|
+
def self.lines(text)
|
73
|
+
line_ending = detect_line_ending_of_text(text)
|
74
|
+
|
75
|
+
if line_ending == :unknown
|
76
|
+
line_ending
|
77
|
+
elsif line_ending == :none
|
78
|
+
[text]
|
79
|
+
else
|
80
|
+
text.split(NAME2EOL[line_ending])
|
81
|
+
end
|
39
82
|
end
|
40
83
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: line-detector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Pennebaker
|
@@ -10,20 +10,6 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: ptools
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.2'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.2'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|