orthotypo 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -1
- data/lib/orthotypo/analyzer.rb +18 -0
- data/lib/orthotypo/composer.rb +34 -3
- data/lib/orthotypo/version.rb +1 -1
- data/lib/orthotypo.rb +3 -0
- data/orthotypo.gemspec +1 -0
- data/spec/analyzer_spec.rb +8 -0
- data/spec/orthotypo_spec.rb +10 -0
- metadata +17 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b41b05766be4f11e6494a7e89823a6ab730910aec4a679d22b764ae96fb05f10
|
4
|
+
data.tar.gz: 0c2a072f5c3ebd8583b70c7ee4bf0eafe064c827d4e0af250728bcf5762dc5ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20ff73ede6bf05d4b2b8842604b09267f36cf2d44fc17c6e4a467e9e703934a20f18616368cc5af88529122166130c8b868612af6caab95ff6f685236b862443
|
7
|
+
data.tar.gz: 55f9a2023f185176d52de197847f92ee61ea0e8ba20d70c920fec7e31b4d86dbae0ab87594adcd7c406fcdbbc2ef189fa8a113bcfeab9f60786c31dd77771f1e
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
orthotypo (0.
|
4
|
+
orthotypo (0.6.0)
|
5
5
|
htmlentities
|
6
|
+
nokogiri
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
@@ -14,6 +15,10 @@ GEM
|
|
14
15
|
htmlentities (4.3.4)
|
15
16
|
json (2.6.3)
|
16
17
|
language_server-protocol (3.17.0.3)
|
18
|
+
nokogiri (1.15.4-arm64-darwin)
|
19
|
+
racc (~> 1.4)
|
20
|
+
nokogiri (1.15.4-x86_64-darwin)
|
21
|
+
racc (~> 1.4)
|
17
22
|
parallel (1.23.0)
|
18
23
|
parser (3.2.2.4)
|
19
24
|
ast (~> 2.4.1)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Orthotypo
|
2
|
+
class Analyzer
|
3
|
+
|
4
|
+
def self.url?(string)
|
5
|
+
(string =~ /\A#{URI::DEFAULT_PARSER.regexp[:ABS_URI]}\z/) &&
|
6
|
+
(string =~ /\A(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?\z/ix) ? true : false
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.email?(string)
|
10
|
+
string =~ /\A#{URI::MailTo::EMAIL_REGEXP}\z/ ? true : false
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.precious?(string)
|
14
|
+
email?(string) || url?(string)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/lib/orthotypo/composer.rb
CHANGED
@@ -5,6 +5,7 @@ module Orthotypo
|
|
5
5
|
SPACE = ' '.freeze
|
6
6
|
NBSP = ' '.freeze
|
7
7
|
NNBSP = ' '.freeze
|
8
|
+
PRECIOUS_TOKEN = 'orthotypopreciousthing'
|
8
9
|
|
9
10
|
def initialize(string, html: nil)
|
10
11
|
@string = string
|
@@ -52,15 +53,18 @@ module Orthotypo
|
|
52
53
|
|
53
54
|
def prepare_ortho
|
54
55
|
@ortho = string.dup
|
55
|
-
@ortho = html_entities.decode(@ortho) if contains_html_entities?
|
56
|
+
# @ortho = html_entities.decode(@ortho) if contains_html_entities?
|
57
|
+
@nokogiri = Nokogiri::HTML.fragment @ortho
|
56
58
|
end
|
57
59
|
|
58
60
|
def clean_ortho
|
59
|
-
@ortho =
|
61
|
+
@ortho = @nokogiri.to_s
|
62
|
+
# @ortho = html_entities.encode(@ortho) if contains_html_entities?
|
60
63
|
end
|
61
64
|
|
62
65
|
def parse
|
63
66
|
prepare_ortho
|
67
|
+
preserve_precious_things
|
64
68
|
# Chars
|
65
69
|
parse_chars_with_space_before
|
66
70
|
parse_chars_with_space_after
|
@@ -73,6 +77,30 @@ module Orthotypo
|
|
73
77
|
parse_numbers
|
74
78
|
#
|
75
79
|
clean_ortho
|
80
|
+
restore_precious_things
|
81
|
+
end
|
82
|
+
|
83
|
+
def preserve_precious_things
|
84
|
+
@precious_things = []
|
85
|
+
@nokogiri.traverse do |node|
|
86
|
+
next unless node.text?
|
87
|
+
new_content = node.content.split(SPACE).map { |fragment|
|
88
|
+
if Analyzer::precious?(fragment)
|
89
|
+
token = "#{PRECIOUS_TOKEN}#{@precious_things.length}"
|
90
|
+
@precious_things << fragment
|
91
|
+
token
|
92
|
+
else
|
93
|
+
fragment
|
94
|
+
end
|
95
|
+
}.join(SPACE)
|
96
|
+
node.content = new_content
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def restore_precious_things
|
101
|
+
@precious_things.each_with_index do |value, index|
|
102
|
+
@ortho.gsub! "#{PRECIOUS_TOKEN}#{index}", value
|
103
|
+
end
|
76
104
|
end
|
77
105
|
|
78
106
|
def parse_chars_with_space_before
|
@@ -145,7 +173,10 @@ module Orthotypo
|
|
145
173
|
end
|
146
174
|
|
147
175
|
def fix(bad, good)
|
148
|
-
@
|
176
|
+
@nokogiri.traverse do |node|
|
177
|
+
next unless node.text?
|
178
|
+
node.content = node.content.gsub(bad, good)
|
179
|
+
end
|
149
180
|
end
|
150
181
|
end
|
151
182
|
end
|
data/lib/orthotypo/version.rb
CHANGED
data/lib/orthotypo.rb
CHANGED
data/orthotypo.gemspec
CHANGED
data/spec/orthotypo_spec.rb
CHANGED
@@ -8,4 +8,14 @@ describe Orthotypo do
|
|
8
8
|
it 'leaves html tags untouched' do
|
9
9
|
expect("<b>bold</b>".ortho).to eq "<b>bold</b>"
|
10
10
|
end
|
11
|
+
|
12
|
+
it 'leaves URLs untouched' do
|
13
|
+
expect("https://unsplash.com/@lusvardi?utm_source=osuny".ortho).to eq "https://unsplash.com/@lusvardi?utm_source=osuny"
|
14
|
+
expect("<a href=\"https://unsplash.com/@lusvardi?utm_source=osuny\">https://unsplash.com/@lusvardi?utm_source=osuny</a>".ortho).to eq "<a href=\"https://unsplash.com/@lusvardi?utm_source=osuny\">https://unsplash.com/@lusvardi?utm_source=osuny</a>"
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'leaves URLs untouched' do
|
18
|
+
expect("prenom.nom@example.com".ortho).to eq "prenom.nom@example.com"
|
19
|
+
expect("<a href=\"mailto:prenom.nom@example.com\">prenom.nom@example.com</a>".ortho).to eq "<a href=\"mailto:prenom.nom@example.com\">prenom.nom@example.com</a>"
|
20
|
+
end
|
11
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orthotypo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arnaud Levy
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +101,7 @@ files:
|
|
87
101
|
- bin/console
|
88
102
|
- bin/setup
|
89
103
|
- lib/orthotypo.rb
|
104
|
+
- lib/orthotypo/analyzer.rb
|
90
105
|
- lib/orthotypo/composer.rb
|
91
106
|
- lib/orthotypo/composer/en.rb
|
92
107
|
- lib/orthotypo/composer/en_gb.rb
|
@@ -98,6 +113,7 @@ files:
|
|
98
113
|
- lib/orthotypo/version.rb
|
99
114
|
- orthotypo.gemspec
|
100
115
|
- sig/orthotypo.rbs
|
116
|
+
- spec/analyzer_spec.rb
|
101
117
|
- spec/composer/en_spec.rb
|
102
118
|
- spec/composer/fr_spec.rb
|
103
119
|
- spec/localizer_spec.rb
|