typogruby 1.0.11 → 1.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +25 -25
- data/HISTORY.md +6 -0
- data/features/ignoring.feature +1 -1
- data/features/inputs.feature +2 -2
- data/features/selective_filtering.feature +4 -4
- data/features/simple.feature +4 -4
- data/lib/typogruby.rb +7 -8
- data/lib/version.rb +1 -1
- data/test/test_typogruby.rb +7 -0
- metadata +23 -25
data/Gemfile.lock
CHANGED
@@ -1,45 +1,45 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
typogruby (1.0.
|
4
|
+
typogruby (1.0.12)
|
5
5
|
rubypants
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
aruba (0.3.
|
11
|
-
childprocess (
|
12
|
-
cucumber (
|
13
|
-
rspec (
|
14
|
-
bluecloth (2.0
|
10
|
+
aruba (0.3.6)
|
11
|
+
childprocess (>= 0.1.7)
|
12
|
+
cucumber (>= 0.10.0)
|
13
|
+
rspec (>= 2.5.0)
|
14
|
+
bluecloth (2.1.0)
|
15
15
|
builder (3.0.0)
|
16
|
-
childprocess (0.1.
|
17
|
-
ffi (~> 0.6
|
18
|
-
cucumber (0.10.
|
16
|
+
childprocess (0.1.8)
|
17
|
+
ffi (~> 1.0.6)
|
18
|
+
cucumber (0.10.2)
|
19
19
|
builder (>= 2.1.2)
|
20
|
-
diff-lcs (
|
21
|
-
gherkin (
|
22
|
-
json (
|
23
|
-
term-ansicolor (
|
20
|
+
diff-lcs (>= 1.1.2)
|
21
|
+
gherkin (>= 2.3.5)
|
22
|
+
json (>= 1.4.6)
|
23
|
+
term-ansicolor (>= 1.0.5)
|
24
24
|
diff-lcs (1.1.2)
|
25
|
-
ffi (0.
|
25
|
+
ffi (1.0.7)
|
26
26
|
rake (>= 0.8.7)
|
27
|
-
gherkin (2.3.
|
28
|
-
json (
|
29
|
-
json (1.
|
27
|
+
gherkin (2.3.7)
|
28
|
+
json (>= 1.4.6)
|
29
|
+
json (1.5.1)
|
30
30
|
rake (0.8.7)
|
31
31
|
rcov (0.9.9)
|
32
|
-
rspec (2.
|
33
|
-
rspec-core (~> 2.
|
34
|
-
rspec-expectations (~> 2.
|
35
|
-
rspec-mocks (~> 2.
|
36
|
-
rspec-core (2.
|
37
|
-
rspec-expectations (2.
|
32
|
+
rspec (2.5.0)
|
33
|
+
rspec-core (~> 2.5.0)
|
34
|
+
rspec-expectations (~> 2.5.0)
|
35
|
+
rspec-mocks (~> 2.5.0)
|
36
|
+
rspec-core (2.5.2)
|
37
|
+
rspec-expectations (2.5.0)
|
38
38
|
diff-lcs (~> 1.1.2)
|
39
|
-
rspec-mocks (2.
|
39
|
+
rspec-mocks (2.5.0)
|
40
40
|
rubypants (0.2.0)
|
41
41
|
term-ansicolor (1.0.5)
|
42
|
-
yard (0.6.
|
42
|
+
yard (0.6.8)
|
43
43
|
|
44
44
|
PLATFORMS
|
45
45
|
ruby
|
data/HISTORY.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.0.12
|
4
|
+
|
5
|
+
* Fixed aruba deprecation warnings
|
6
|
+
* Ensure duplicate sensitive tags are properly rendered (thanks Justin Hileman)
|
7
|
+
* Removed obsolete tag-ignoring clauses from regexes
|
8
|
+
|
3
9
|
## 1.0.11
|
4
10
|
|
5
11
|
* Excluded more typography-sensitive tags from filtering (thanks Justin Hileman)
|
data/features/ignoring.feature
CHANGED
data/features/inputs.feature
CHANGED
@@ -16,7 +16,7 @@ Feature: various inputs
|
|
16
16
|
|
17
17
|
@wip
|
18
18
|
Scenario: take input from STDIN
|
19
|
-
When I run
|
19
|
+
When I run `typogruby < input.html`
|
20
20
|
Then the output should contain exactly:
|
21
21
|
"""
|
22
22
|
<p><span class="dquo">“</span>This <span class="caps">IS</span> a simple file!</p>
|
@@ -24,7 +24,7 @@ Feature: various inputs
|
|
24
24
|
And the exit status should be 0
|
25
25
|
|
26
26
|
Scenario: multiple input files
|
27
|
-
When I run
|
27
|
+
When I run `typogruby input.html input2.html`
|
28
28
|
Then the output should contain exactly:
|
29
29
|
"""
|
30
30
|
<p><span class="dquo">“</span>This <span class="caps">IS</span> a simple file!</p><p>This is another file</p>
|
@@ -11,7 +11,7 @@ Feature: selective filtering
|
|
11
11
|
"""
|
12
12
|
|
13
13
|
Scenario: using just one filter
|
14
|
-
When I run
|
14
|
+
When I run `typogruby -w input.html`
|
15
15
|
Then the output should contain exactly:
|
16
16
|
"""
|
17
17
|
<p>"This IS a simple file!</p>
|
@@ -19,7 +19,7 @@ Feature: selective filtering
|
|
19
19
|
And the exit status should be 0
|
20
20
|
|
21
21
|
Scenario: using just several filters
|
22
|
-
When I run
|
22
|
+
When I run `typogruby -cw input.html`
|
23
23
|
Then the output should contain exactly:
|
24
24
|
"""
|
25
25
|
<p>"This <span class="caps">IS</span> a simple file!</p>
|
@@ -27,7 +27,7 @@ Feature: selective filtering
|
|
27
27
|
And the exit status should be 0
|
28
28
|
|
29
29
|
Scenario: excluding a single filter
|
30
|
-
When I run
|
30
|
+
When I run `typogruby --no-widows input.html`
|
31
31
|
Then the output should contain exactly:
|
32
32
|
"""
|
33
33
|
<p><span class="dquo">“</span>This <span class="caps">IS</span> a simple file!</p>
|
@@ -35,7 +35,7 @@ Feature: selective filtering
|
|
35
35
|
And the exit status should be 0
|
36
36
|
|
37
37
|
Scenario: excluding multiple filters
|
38
|
-
When I run
|
38
|
+
When I run `typogruby --no-widows --no-caps input.html`
|
39
39
|
Then the output should contain exactly:
|
40
40
|
"""
|
41
41
|
<p><span class="dquo">“</span>This IS a simple file!</p>
|
data/features/simple.feature
CHANGED
@@ -5,12 +5,12 @@ Feature: Simple usage
|
|
5
5
|
I want to apply typogruby to a file
|
6
6
|
|
7
7
|
Scenario: getting help
|
8
|
-
When I run
|
8
|
+
When I run `typogruby -h`
|
9
9
|
Then the output should contain "Usage: typogruby [options] filename [filename, ...]"
|
10
10
|
And the exit status should be 0
|
11
11
|
|
12
12
|
Scenario: getting the version number
|
13
|
-
When I run
|
13
|
+
When I run `typogruby -v`
|
14
14
|
Then the output should contain "Typogruby "
|
15
15
|
|
16
16
|
Scenario: filtering a file
|
@@ -18,7 +18,7 @@ Feature: Simple usage
|
|
18
18
|
"""
|
19
19
|
<p>"This IS a simple file!</p>
|
20
20
|
"""
|
21
|
-
When I run
|
21
|
+
When I run `typogruby input.html`
|
22
22
|
Then the output should contain exactly:
|
23
23
|
"""
|
24
24
|
<p><span class="dquo">“</span>This <span class="caps">IS</span> a simple file!</p>
|
@@ -30,7 +30,7 @@ Feature: Simple usage
|
|
30
30
|
"""
|
31
31
|
<p>"This IS a simple file!</p>
|
32
32
|
"""
|
33
|
-
When I run
|
33
|
+
When I run `typogruby -o output.html input.html`
|
34
34
|
Then the file "output.html" should contain exactly:
|
35
35
|
"""
|
36
36
|
<p><span class="dquo">“</span>This <span class="caps">IS</span> a simple file!</p>
|
data/lib/typogruby.rb
CHANGED
@@ -56,10 +56,10 @@ module Typogruby
|
|
56
56
|
# @param [String] text input text
|
57
57
|
# @return [String] input text with ampersands wrapped
|
58
58
|
def amp(text)
|
59
|
-
# $1 is
|
59
|
+
# $1 is the part before the caps and $2 is the amp match
|
60
60
|
exclude_sensitive_tags(text) do |t|
|
61
|
-
t.gsub(
|
62
|
-
$1
|
61
|
+
t.gsub(/(\s| )&(?:amp;|#38;)?(\s| )/) { |str|
|
62
|
+
$1 + '<span class="amp">&</span>' + $2
|
63
63
|
}.gsub(/(\w+)="(.*?)<span class="amp">&<\/span>(.*?)"/, '\1="\2&\3"')
|
64
64
|
end
|
65
65
|
end
|
@@ -147,17 +147,16 @@ module Typogruby
|
|
147
147
|
exclude_sensitive_tags(text) do |t|
|
148
148
|
# $1 and $2 are excluded HTML tags, $3 is the part before the caps and $4 is the caps match
|
149
149
|
t.gsub(%r{
|
150
|
-
(?i:<(code|pre).+?</\1>)| # Ignore the contents of code and pre elements
|
151
150
|
(<[^/][^>]+?>)| # Ignore any opening tag, so we don't mess up attribute values
|
152
151
|
(\s| |^|'|"|>) # Make sure our capture is preceded by whitespace or quotes
|
153
152
|
([A-Z\d][A-Z\d\.']{1,}) # Capture captial words, with optional dots or numbers in between
|
154
153
|
(?!\w) # ...which must not be followed by a word character.
|
155
154
|
}x) do |str|
|
156
|
-
|
155
|
+
tag, before, caps = $1, $2, $3
|
157
156
|
|
158
157
|
# Do nothing with the contents if ignored tags, the inside of an opening HTML element
|
159
158
|
# so we don't mess up attribute values, or if our capture is only digits.
|
160
|
-
if
|
159
|
+
if tag || caps =~ /^\d+\.?$/
|
161
160
|
str
|
162
161
|
elsif $3 =~ /^[\d\.]+$/
|
163
162
|
before + caps
|
@@ -254,7 +253,7 @@ private
|
|
254
253
|
end
|
255
254
|
end
|
256
255
|
|
257
|
-
# Hackish text filter that will make sure our text filters leave
|
256
|
+
# Hackish text filter that will make sure our text filters leave
|
258
257
|
# sensitive tags alone without resorting to a full-blown HTML parser.
|
259
258
|
#
|
260
259
|
# Sensitive tags are tags with literal contents, which we do not
|
@@ -278,7 +277,7 @@ private
|
|
278
277
|
hash
|
279
278
|
end
|
280
279
|
yield(modified_text).gsub(/#{@exluded_sensitive_tags.keys.join('|')}/) do |h|
|
281
|
-
@exluded_sensitive_tags
|
280
|
+
@exluded_sensitive_tags[h]
|
282
281
|
end
|
283
282
|
end
|
284
283
|
|
data/lib/version.rb
CHANGED
data/test/test_typogruby.rb
CHANGED
@@ -104,4 +104,11 @@ class TestTypogruby < Test::Unit::TestCase
|
|
104
104
|
assert_equal test_string, improve(test_string)
|
105
105
|
end
|
106
106
|
end
|
107
|
+
|
108
|
+
def test_should_not_forget_about_duplicate_sensitive_tags
|
109
|
+
%w{script pre code kbd math}.each do |tag_name|
|
110
|
+
test_string = "<#{tag_name}>this</#{tag_name}>==<#{tag_name}>this</#{tag_name}>"
|
111
|
+
assert_equal test_string, improve(test_string)
|
112
|
+
end
|
113
|
+
end
|
107
114
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typogruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 12
|
10
|
+
version: 1.0.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Arjan van der Gaag
|
@@ -15,13 +15,9 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-05-12 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
23
|
-
type: :runtime
|
24
|
-
name: rubypants
|
25
21
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
22
|
none: false
|
27
23
|
requirements:
|
@@ -32,10 +28,10 @@ dependencies:
|
|
32
28
|
- 0
|
33
29
|
version: "0"
|
34
30
|
requirement: *id001
|
35
|
-
|
31
|
+
name: rubypants
|
36
32
|
prerelease: false
|
37
|
-
type: :
|
38
|
-
|
33
|
+
type: :runtime
|
34
|
+
- !ruby/object:Gem::Dependency
|
39
35
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
36
|
none: false
|
41
37
|
requirements:
|
@@ -46,10 +42,10 @@ dependencies:
|
|
46
42
|
- 0
|
47
43
|
version: "0"
|
48
44
|
requirement: *id002
|
49
|
-
|
45
|
+
name: yard
|
50
46
|
prerelease: false
|
51
47
|
type: :development
|
52
|
-
|
48
|
+
- !ruby/object:Gem::Dependency
|
53
49
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
50
|
none: false
|
55
51
|
requirements:
|
@@ -60,10 +56,10 @@ dependencies:
|
|
60
56
|
- 0
|
61
57
|
version: "0"
|
62
58
|
requirement: *id003
|
63
|
-
|
59
|
+
name: rake
|
64
60
|
prerelease: false
|
65
61
|
type: :development
|
66
|
-
|
62
|
+
- !ruby/object:Gem::Dependency
|
67
63
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
68
64
|
none: false
|
69
65
|
requirements:
|
@@ -74,10 +70,10 @@ dependencies:
|
|
74
70
|
- 0
|
75
71
|
version: "0"
|
76
72
|
requirement: *id004
|
77
|
-
|
73
|
+
name: aruba
|
78
74
|
prerelease: false
|
79
75
|
type: :development
|
80
|
-
|
76
|
+
- !ruby/object:Gem::Dependency
|
81
77
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
82
78
|
none: false
|
83
79
|
requirements:
|
@@ -88,10 +84,10 @@ dependencies:
|
|
88
84
|
- 0
|
89
85
|
version: "0"
|
90
86
|
requirement: *id005
|
91
|
-
|
87
|
+
name: cucumber
|
92
88
|
prerelease: false
|
93
89
|
type: :development
|
94
|
-
|
90
|
+
- !ruby/object:Gem::Dependency
|
95
91
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
96
92
|
none: false
|
97
93
|
requirements:
|
@@ -102,10 +98,10 @@ dependencies:
|
|
102
98
|
- 0
|
103
99
|
version: "0"
|
104
100
|
requirement: *id006
|
105
|
-
|
101
|
+
name: rcov
|
106
102
|
prerelease: false
|
107
103
|
type: :development
|
108
|
-
|
104
|
+
- !ruby/object:Gem::Dependency
|
109
105
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
110
106
|
none: false
|
111
107
|
requirements:
|
@@ -116,10 +112,10 @@ dependencies:
|
|
116
112
|
- 0
|
117
113
|
version: "0"
|
118
114
|
requirement: *id007
|
119
|
-
|
115
|
+
name: rspec
|
120
116
|
prerelease: false
|
121
117
|
type: :development
|
122
|
-
|
118
|
+
- !ruby/object:Gem::Dependency
|
123
119
|
version_requirements: &id008 !ruby/object:Gem::Requirement
|
124
120
|
none: false
|
125
121
|
requirements:
|
@@ -130,6 +126,9 @@ dependencies:
|
|
130
126
|
- 0
|
131
127
|
version: "0"
|
132
128
|
requirement: *id008
|
129
|
+
name: bluecloth
|
130
|
+
prerelease: false
|
131
|
+
type: :development
|
133
132
|
description: Improve web typography using various text filters. This gem prevents widows and applies markup to ampersans, consecutive capitals and initial quotes.
|
134
133
|
email: arjan@arjanvandergaag.nl
|
135
134
|
executables:
|
@@ -160,7 +159,6 @@ files:
|
|
160
159
|
- lib/version.rb
|
161
160
|
- test/test_typogruby.rb
|
162
161
|
- typogruby.gemspec
|
163
|
-
has_rdoc: true
|
164
162
|
homepage: http://avdgaag.github.com/typogruby
|
165
163
|
licenses: []
|
166
164
|
|
@@ -190,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
188
|
requirements: []
|
191
189
|
|
192
190
|
rubyforge_project:
|
193
|
-
rubygems_version: 1.
|
191
|
+
rubygems_version: 1.8.1
|
194
192
|
signing_key:
|
195
193
|
specification_version: 3
|
196
194
|
summary: Improves web typography like Django's Typogrify
|