typohero 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -0
- data/README.md +36 -11
- data/latex.pl +11 -4
- data/lib/typohero/latex.rb +538 -533
- data/lib/typohero/version.rb +1 -1
- data/lib/typohero.rb +180 -64
- data/test/typohero_test.rb +171 -128
- data/typohero.gemspec +1 -1
- metadata +2 -3
- data/bench/bench.txt +0 -16413
data/test/typohero_test.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'minitest/autorun'
|
2
3
|
require 'typohero'
|
3
4
|
|
4
5
|
class TypoHeroTest < Minitest::Test
|
5
|
-
def
|
6
|
+
def assert_enhance(str, orig)
|
6
7
|
# todo test recursive
|
7
8
|
a = TypoHero.enhance(str)
|
8
9
|
#b = TypoHero.enhance(a)
|
@@ -20,10 +21,10 @@ class TypoHeroTest < Minitest::Test
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def test_verbatim
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
assert_enhance "foo!", "foo!"
|
25
|
+
assert_enhance "<div>This is html</div>", "<div>This is html</div>"
|
26
|
+
assert_enhance "<div>This is html with <crap </div> tags>", "<div>This is html with <crap </div> tags>"
|
27
|
+
assert_enhance %q{
|
27
28
|
multiline
|
28
29
|
|
29
30
|
<b>html</b>
|
@@ -38,172 +39,182 @@ multiline
|
|
38
39
|
}
|
39
40
|
end
|
40
41
|
|
42
|
+
def test_excluded
|
43
|
+
assert_enhance "<script>'hello'</script>", "<script>'hello'</script>"
|
44
|
+
assert_enhance "<!-- <a>'hello'</a> -->", "<!-- <a>'hello'</a> -->"
|
45
|
+
assert_enhance "<![CDATA[<a>'hello'</a>]]>", "<![CDATA[<a>'hello'</a>]]>"
|
46
|
+
end
|
47
|
+
|
41
48
|
def test_quotes
|
42
|
-
|
43
|
-
|
49
|
+
assert_enhance '"A first example"', '<span class="dquo">“</span>A first example”'
|
50
|
+
assert_enhance '"A first "nested" example"',
|
44
51
|
'<span class="dquo">“</span>A first “nested” example”'
|
45
52
|
|
46
|
-
|
47
|
-
|
53
|
+
assert_enhance '".', '”.'
|
54
|
+
assert_enhance '"a', '<span class="dquo">“</span>a'
|
48
55
|
|
49
|
-
|
50
|
-
|
56
|
+
assert_enhance "'.", '’.'
|
57
|
+
assert_enhance "'a", '<span class="quo">‘</span>a'
|
51
58
|
|
52
|
-
|
59
|
+
assert_enhance %{<p>He said, "'Quoted' words in a larger quote."</p>},
|
53
60
|
'<p>He said, “‘Quoted’ words in a larger quote.”</p>'
|
54
61
|
|
55
|
-
|
56
|
-
|
57
|
-
|
62
|
+
assert_enhance %{"I like the 70's"}, '<span class="dquo">“</span>I like the 70’s”'
|
63
|
+
assert_enhance %{"I like the '70s"}, '<span class="dquo">“</span>I like the ’70s”'
|
64
|
+
assert_enhance %{"I like the '70!"}, '<span class="dquo">“</span>I like the ‘70!”'
|
58
65
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
66
|
+
assert_enhance 'pre"post', 'pre”post'
|
67
|
+
assert_enhance 'pre "post', 'pre “post'
|
68
|
+
assert_enhance 'pre "post', 'pre “post'
|
69
|
+
assert_enhance 'pre--"post', 'pre – “post'
|
70
|
+
assert_enhance 'pre--"!', 'pre – ”!'
|
64
71
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
72
|
+
assert_enhance "pre'post", 'pre’post'
|
73
|
+
assert_enhance "pre 'post", 'pre ‘post'
|
74
|
+
assert_enhance "pre 'post", 'pre ‘post'
|
75
|
+
assert_enhance "pre--'post", 'pre – ‘post'
|
76
|
+
assert_enhance "pre--'!", 'pre – ’!'
|
70
77
|
|
71
|
-
|
72
|
-
|
78
|
+
assert_enhance "<b>'</b>", '<b><span class="quo">‘</span></b>'
|
79
|
+
assert_enhance "foo<b>'</b>", "foo<b>’</b>"
|
73
80
|
|
74
|
-
|
75
|
-
|
81
|
+
assert_enhance '<b>"</b>', '<b><span class="dquo">“</span></b>'
|
82
|
+
assert_enhance 'foo<b>"</b>', "foo<b>”</b>"
|
76
83
|
end
|
77
84
|
|
78
85
|
def test_dashes
|
79
|
-
|
80
|
-
|
86
|
+
assert_enhance "foo--bar", 'foo – bar'
|
87
|
+
assert_enhance "foo - bar", 'foo – bar'
|
88
|
+
assert_enhance "foo---bar", "foo\u202F\u2014\u202Fbar"
|
81
89
|
end
|
82
90
|
|
83
91
|
def test_ellipses
|
84
|
-
|
85
|
-
|
86
|
-
|
92
|
+
assert_enhance "foo..bar", 'foo..bar'
|
93
|
+
assert_enhance "foo...bar", 'foo…bar'
|
94
|
+
assert_enhance "foo....bar", 'foo….bar'
|
87
95
|
|
88
|
-
|
89
|
-
|
90
|
-
|
96
|
+
assert_enhance "foo. . ..bar", 'foo….bar'
|
97
|
+
assert_enhance "foo. . ...bar", 'foo…..bar'
|
98
|
+
assert_enhance "foo. . ....bar", 'foo……bar'
|
91
99
|
end
|
92
100
|
|
93
101
|
def test_backticks
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
102
|
+
assert_enhance "pre``post", 'pre“post'
|
103
|
+
assert_enhance "pre ``post", 'pre “post'
|
104
|
+
assert_enhance "pre ``post", 'pre “post'
|
105
|
+
assert_enhance "pre--``post", 'pre – “post'
|
106
|
+
assert_enhance "pre--``!", 'pre – “!'
|
107
|
+
|
108
|
+
assert_enhance "pre''post", 'pre”post'
|
109
|
+
assert_enhance "pre ''post", 'pre ”post'
|
110
|
+
assert_enhance "pre ''post", 'pre ”post'
|
111
|
+
assert_enhance "pre--''post", 'pre – ”post'
|
112
|
+
assert_enhance "pre--''!", 'pre – ”!'
|
105
113
|
end
|
106
114
|
|
107
115
|
def test_single_backticks
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
116
|
+
assert_enhance "`foo'", '<span class="quo">‘</span>foo’'
|
117
|
+
|
118
|
+
assert_enhance "pre`post", 'pre‘post'
|
119
|
+
assert_enhance "pre `post", 'pre ‘post'
|
120
|
+
assert_enhance "pre `post", 'pre ‘post'
|
121
|
+
assert_enhance "pre--`post", 'pre – ‘post'
|
122
|
+
assert_enhance "pre--`!", 'pre – ‘!'
|
123
|
+
|
124
|
+
assert_enhance "pre'post", 'pre’post'
|
125
|
+
assert_enhance "pre 'post", 'pre ‘post'
|
126
|
+
assert_enhance "pre 'post", 'pre ‘post'
|
127
|
+
assert_enhance "pre--'post", 'pre – ‘post'
|
128
|
+
assert_enhance "pre--'!", 'pre – ’!'
|
121
129
|
end
|
122
130
|
|
123
131
|
def test_process_escapes
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
132
|
+
assert_enhance %q{foo\bar}, "foo\\bar"
|
133
|
+
assert_enhance %q{foo\\\bar}, "foo\\bar"
|
134
|
+
assert_enhance %q{foo\\\\\bar}, "foo\\\\bar"
|
135
|
+
assert_enhance %q{foo\...bar}, "foo...bar"
|
136
|
+
assert_enhance %q{foo\.\.\.bar}, "foo...bar"
|
137
|
+
|
138
|
+
assert_enhance %q{foo\'bar}, "foo'bar"
|
139
|
+
assert_enhance %q{foo\"bar}, "foo\"bar"
|
140
|
+
assert_enhance %q{foo\-bar}, "foo-bar"
|
141
|
+
assert_enhance %q{foo\`bar}, "foo`bar"
|
142
|
+
assert_enhance %q{foo\,,}, "foo,,"
|
143
|
+
|
144
|
+
assert_enhance %q{foo\#bar}, "foo\\#bar"
|
145
|
+
assert_enhance %q{foo\*bar}, "foo\\*bar"
|
146
|
+
assert_enhance %q{foo\&bar}, "foo\\&bar"
|
147
|
+
assert_enhance %q{foo\\\theta}, "foo\\theta"
|
138
148
|
end
|
139
149
|
|
140
150
|
def test_should_replace_amps
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
151
|
+
assert_enhance 'One & two', 'One <span class="amp">&</span> two'
|
152
|
+
assert_enhance 'One & two', 'One <span class="amp">&</span> two'
|
153
|
+
assert_enhance 'One & two', 'One <span class="amp">&</span> two'
|
154
|
+
assert_enhance 'One & two', 'One <span class="amp">&</span> two'
|
145
155
|
end
|
146
156
|
|
147
157
|
def test_should_ignore_special_amps
|
148
|
-
|
149
|
-
|
158
|
+
assert_enhance 'One <span class="amp">&</span> two', 'One <span class="amp">&</span> two'
|
159
|
+
assert_enhance '“this” & <a href="/?that&test">that</a>', '<span class="dquo">“</span>this” <span class="amp">&</span> <a href="/?that&test">that</a>'
|
150
160
|
end
|
151
161
|
|
152
162
|
def test_should_replace_caps
|
153
|
-
|
154
|
-
|
155
|
-
|
163
|
+
assert_enhance "A message from KU", 'A message from <span class="caps">KU</span>'
|
164
|
+
assert_enhance 'Replace text <a href=".">IN</a> tags', 'Replace text <a href="."><span class="caps">IN</span></a> tags'
|
165
|
+
assert_enhance 'Replace text <i>IN</i> tags', 'Replace text <i><span class="caps">IN</span></i> tags'
|
166
|
+
assert_enhance 'AB, CD, EF', '<span class="caps">AB</span>, <span class="caps">CD</span>, <span class="caps">EF</span>'
|
156
167
|
end
|
157
168
|
|
158
169
|
def test_should_ignore_special_case_caps
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
170
|
+
assert_enhance 'It should ignore just numbers like 1234.', 'It should ignore just numbers like 1234.'
|
171
|
+
assert_enhance "<pre>CAPS</pre> more CAPS", '<pre>CAPS</pre> more <span class="caps">CAPS</span>'
|
172
|
+
assert_enhance "<Pre>CAPS</PRE> with odd tag names CAPS", '<Pre>CAPS</PRE> with odd tag names <span class="caps">CAPS</span>'
|
173
|
+
assert_enhance "A message from 2KU2 with digits", 'A message from <span class="caps">2KU2</span> with digits'
|
174
|
+
assert_enhance "Dotted caps followed by spaces should never include them in the wrap D.O.T. like so.", 'Dotted caps followed by spaces should never include them in the wrap <span class="caps">D.O.T.</span> like so.'
|
175
|
+
assert_enhance 'Caps in attributes (<span title="Example CAPS">example</span>) should be ignored', 'Caps in attributes (<span title="Example CAPS">example</span>) should be ignored'
|
176
|
+
assert_enhance '<head><title>CAPS Example</title></head>', '<head><title>CAPS Example</title></head>'
|
166
177
|
end
|
167
178
|
|
168
179
|
def test_should_not_break_caps_with_apostrophes
|
169
|
-
|
170
|
-
|
180
|
+
assert_enhance "JIMMY'S", '<span class="caps">JIMMY’S</span>'
|
181
|
+
assert_enhance "<i>D.O.T.</i>HE34T<b>RFID</b>", '<i><span class="caps">D.O.T.</span></i><span class="caps">HE34T</span><b><span class="caps">RFID</span></b>'
|
171
182
|
end
|
172
183
|
|
173
184
|
def test_should_not_break_caps_with_ampersands
|
174
|
-
|
175
|
-
|
176
|
-
|
185
|
+
assert_enhance "AT&T", '<span class="caps">AT&T</span>'
|
186
|
+
assert_enhance "AT&T", '<span class="caps">AT&T</span>'
|
187
|
+
assert_enhance "AT&T", '<span class="caps">AT&T</span>'
|
177
188
|
end
|
178
189
|
|
179
190
|
def test_should_prevent_widows
|
180
|
-
|
191
|
+
assert_enhance 'A very simple test', 'A very simple test'
|
181
192
|
end
|
182
193
|
|
183
194
|
def test_should_not_change_single_word_items
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
195
|
+
assert_enhance 'Test', 'Test'
|
196
|
+
assert_enhance ' Test', ' Test'
|
197
|
+
assert_enhance '<ul><li>Test</p></li><ul>', '<ul><li>Test</p></li><ul>'
|
198
|
+
assert_enhance '<ul><li> Test</p></li><ul>', '<ul><li> Test</p></li><ul>'
|
199
|
+
assert_enhance '<p>In a couple of paragraphs</p><p>paragraph two</p>', '<p>In a couple of paragraphs</p><p>paragraph two</p>'
|
200
|
+
assert_enhance '<h1><a href="#">In a link inside a heading</i> </a></h1>', '<h1><a href="#">In a link inside a heading</i> </a></h1>'
|
201
|
+
assert_enhance '<h1><a href="#">In a link</a> followed by other text</h1>', '<h1><a href="#">In a link</a> followed by other text</h1>'
|
191
202
|
end
|
192
203
|
|
193
204
|
def test_should_not_add_nbsp_before_another
|
194
|
-
|
205
|
+
assert_enhance 'Sentence with one nbsp', 'Sentence with one nbsp'
|
195
206
|
end
|
196
207
|
|
197
208
|
def test_should_not_error_on_empty_html
|
198
|
-
|
209
|
+
assert_enhance '<h1><a href="#"></a></h1>', '<h1><a href="#"></a></h1>'
|
199
210
|
end
|
200
211
|
|
201
212
|
def test_should_ignore_widows_in_special_tags
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
213
|
+
assert_enhance '<div>Divs get love!</div>', '<div>Divs get love!</div>'
|
214
|
+
assert_enhance '<pre>Neither do PREs</pre>', '<pre>Neither do PREs</pre>'
|
215
|
+
assert_enhance '<textarea>nor text in textarea</textarea>', '<textarea>nor text in textarea</textarea>'
|
216
|
+
assert_enhance "<script>\nreturn window;\n</script>", "<script>\nreturn window;\n</script>"
|
217
|
+
assert_enhance '<div><p>But divs with paragraphs do!</p></div>', '<div><p>But divs with paragraphs do!</p></div>'
|
207
218
|
end
|
208
219
|
|
209
220
|
def test_widont
|
@@ -213,43 +224,75 @@ multiline
|
|
213
224
|
<a href="/contact/">Contact</a>
|
214
225
|
</li>
|
215
226
|
</ul>}
|
216
|
-
|
227
|
+
assert_enhance code, code
|
217
228
|
end
|
218
229
|
|
219
230
|
def test_should_replace_quotes
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
231
|
+
assert_enhance '"With primes"', '<span class="dquo">“</span>With primes”'
|
232
|
+
assert_enhance "'With single primes'", '<span class="quo">‘</span>With single primes’'
|
233
|
+
assert_enhance '<a href="#">"With primes and a link"</a>', '<a href="#"><span class="dquo">“</span>With primes and a link”</a>'
|
234
|
+
assert_enhance '“With smartypanted quotes”', '<span class="dquo">“</span>With smartypanted quotes”'
|
235
|
+
assert_enhance '‘With manual quotes’', '<span class="quo">‘</span>With manual quotes’'
|
225
236
|
end
|
226
237
|
|
227
238
|
def test_should_apply_all_filters
|
228
|
-
|
239
|
+
assert_enhance '<h2>"Jayhawks" & KU fans act extremely obnoxiously</h2>', '<h2><span class="dquo">“</span>Jayhawks” <span class="amp">&</span> <span class="caps">KU</span> fans act extremely obnoxiously</h2>'
|
229
240
|
end
|
230
241
|
|
231
242
|
def test_other_special
|
232
|
-
|
233
|
-
|
243
|
+
assert_enhance ',,hello\'\'', "<span class=\"bdquo\">\u201E</span>hello”"
|
244
|
+
assert_enhance '(tm)', "\u2122"
|
234
245
|
end
|
235
246
|
|
236
247
|
def test_primes
|
237
|
-
|
248
|
+
assert_enhance "She's 6'2''", "She’s 6\u20322\u2033"
|
249
|
+
assert_enhance %{He said "Oslo coordinates are: 59°57'N 10°45'E" and there it is.}, "He said “Oslo coordinates are: 59°57\u2032N 10°45\u2032E” and there it is."
|
238
250
|
end
|
239
251
|
|
240
252
|
def test_ordinals
|
241
|
-
|
253
|
+
assert_enhance 'I am the 1st', 'I am the 1<span class="ord">st</span>'
|
242
254
|
end
|
243
255
|
|
244
256
|
def test_latex
|
245
|
-
|
257
|
+
assert_enhance '\\textbackslash', '\\'
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_nobr
|
261
|
+
assert_enhance 'T-shirt', '<span class="nobr">T-shirt</span>'
|
262
|
+
assert_enhance '2014-01-01', '<span class="nobr">2014-01-01</span>'
|
246
263
|
end
|
247
264
|
|
248
265
|
def test_ignore_mathjax
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
266
|
+
assert_enhance '$$\\approx$$ outside \\approx', "$$\\approx$$ outside \u2248"
|
267
|
+
assert_enhance '\) $$\\approx$$ outside \\approx', "\\) $$\\approx$$ outside \u2248"
|
268
|
+
assert_enhance '\] $$\\approx$$ outside \\approx', "\\] $$\\approx$$ outside \u2248"
|
269
|
+
assert_enhance '\\(\\approx\\) outside \\approx', "\\(\\approx\\) outside \u2248"
|
270
|
+
assert_enhance '\\[\\approx\\] outside \\approx', "\\[\\approx\\] outside \u2248"
|
271
|
+
assert_enhance '<span>$</span>', '<span>$</span>'
|
272
|
+
assert_enhance '<span>\\</span>', '<span>\\</span>'
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_truncate
|
276
|
+
assert_equal "<a>a <span>b\u2026</span></a>", TypoHero.truncate('<a>a <span>b c d</span> c</a>', 2)
|
277
|
+
assert_equal "<a>a <span>b\u2026</span></a>", TypoHero.truncate('<a>a <span>b!?! c d</span> c</a>', 2)
|
278
|
+
assert_equal "<a>a <!--comment--><span>b\u2026</span></a>", TypoHero.truncate('<a>a <!--comment--><span>b </span> c</a>', 2)
|
279
|
+
assert_equal "<a>a <!--comment--><span>b\u2026</span></a>", TypoHero.truncate('<a>a <!--comment--><span>b!!! </span> c</a>', 2)
|
280
|
+
assert_equal "<!--comment-->a <span>b\u2026</span>", TypoHero.truncate('<!--comment-->a <span>b </span>c', 2)
|
281
|
+
assert_equal "<a>a <span><script>b</script> c\u2026</span></a>", TypoHero.truncate('<a>a <span><script>b</script> c d</span> c</a>', 2)
|
282
|
+
assert_equal "<p>Lorem ipsum dolor sit amet.</p>", TypoHero.truncate("<p>Lorem ipsum dolor sit amet.</p>", 5)
|
283
|
+
assert_equal "<p>Lorem ipsum\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor sit amet.</p>", 5, 'dolor')
|
284
|
+
assert_equal "<p>Lorem ipsum dolor\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor<!--more--> sit amet.</p>", 5, 'more')
|
285
|
+
assert_equal "<p>Lorem ipsum dolor\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor<!--more--> sit amet.</p>", 5, '<!--more-->')
|
286
|
+
assert_equal "<p>Lorem ipsum dolor\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor<!--more--> sit amet.</p>", 5, /more/)
|
287
|
+
assert_equal "<p><span>Lorem ipsum dolor\u2026</span></p>", TypoHero.truncate("<p><span>Lorem ipsum dolor</span> sit amet.</p>", 5, '</span>')
|
288
|
+
assert_equal "<p>Lorem ipsum dolor\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor<span class=\"more\"> sit amet.</span></p>", 5, 'more')
|
289
|
+
assert_equal "<p>Lorem ipsum dolor\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor<span class=\"more\"> sit amet.</span></p>", 'more', 10)
|
290
|
+
assert_equal "<p>Lorem ipsum\u2026</p>", TypoHero.truncate("<p>Lorem ipsum dolor<span class=\"more\"> sit amet.</span></p>", 'more', 2)
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_strip_tags
|
294
|
+
assert_equal 'a b c d e', TypoHero.strip_tags('<a>a <span>b c d</span> e</a>')
|
295
|
+
assert_equal 'a c d e', TypoHero.strip_tags('<a>a <span><script>b</script> c d</span> e</a>')
|
296
|
+
assert_equal 'a \(latex\) text', TypoHero.strip_tags('a <script>\(a b c\)</script><a> <test> \(latex\) text')
|
254
297
|
end
|
255
298
|
end
|
data/typohero.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.homepage = 'https://github.com/minad/typohero/'
|
14
14
|
s.license = 'MIT'
|
15
15
|
|
16
|
-
s.files = `git ls-files`.split("\n")
|
16
|
+
s.files = `git ls-files | grep -v bench/*.txt`.split("\n")
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = %w(lib)
|
19
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typohero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Mendler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: TypoHero improves web typography by applying various filters (similar
|
14
14
|
to rubypants, typogruby, typogrify).
|
@@ -24,7 +24,6 @@ files:
|
|
24
24
|
- README.md
|
25
25
|
- Rakefile
|
26
26
|
- bench/bench.rb
|
27
|
-
- bench/bench.txt
|
28
27
|
- bench/profile.rb
|
29
28
|
- hero.jpg
|
30
29
|
- latex.pl
|