typohero 0.0.3 → 0.0.4
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/typohero.rb +19 -12
- data/lib/typohero/version.rb +1 -1
- data/test/typohero_test.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13d3687a6f31edadcea2ff02592d22225f5b0b19
|
4
|
+
data.tar.gz: 78d20a873b169e808800dbf6158ad93889f750d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2404afeb00889cbbe73d21e5b64fc18cbcd74d7cf568baaa1eb9188f491876bfb9e618a46d701698b12f949d28ba0fb560e48460b574b638d83784ed63078b16
|
7
|
+
data.tar.gz: eb7d1528137c7a91a4f67b8a96e1295e8b72735bdf11faa0e7eb33ede2ae892b88ff09440fd41e9849982331a15b15d37b11ab4b06e91c29d3834296038dc772
|
data/lib/typohero.rb
CHANGED
@@ -27,8 +27,8 @@ module TypoHero
|
|
27
27
|
'\`' => '`',
|
28
28
|
}
|
29
29
|
UNESCAPE = Hash[ESCAPE.map {|k,v| [v,k[1..-1]] }]
|
30
|
-
ESCAPE_RE = Regexp.union
|
31
|
-
UNESCAPE_RE = Regexp.union
|
30
|
+
ESCAPE_RE = Regexp.union ESCAPE.keys
|
31
|
+
UNESCAPE_RE = Regexp.union UNESCAPE.keys
|
32
32
|
|
33
33
|
NBSP = "\u00a0"
|
34
34
|
NBSP_THIN = "\u202F"
|
@@ -68,8 +68,8 @@ module TypoHero
|
|
68
68
|
'–' => NDASH,
|
69
69
|
'—' => MDASH
|
70
70
|
}
|
71
|
-
SPECIAL_RE = Regexp.union
|
72
|
-
LATEX_RE = /(#{Regexp.union
|
71
|
+
SPECIAL_RE = Regexp.union SPECIAL.keys
|
72
|
+
LATEX_RE = /(#{Regexp.union LATEX.keys})(?=\p{Space}|$)/m
|
73
73
|
|
74
74
|
DASH_RE = "[#{MDASH}#{NDASH}]"
|
75
75
|
AMP_RE = '&(?:amp;)?'
|
@@ -83,6 +83,9 @@ module TypoHero
|
|
83
83
|
}
|
84
84
|
ORDINAL_RE = /(?<=\d)(st|nd|rd|th)(?=\p{Space}|$)/
|
85
85
|
|
86
|
+
UNITS_RE = /(?<=\p{Space}|^)(-?\d+(?:\.\d+)?)\p{Space}*([mk]?m|km\/h|m\/s|[m]?l|[mk]g)(?=\p{Space}|\p{Punct}|$)/
|
87
|
+
UNITS = "\\1#{NBSP_THIN}\\2"
|
88
|
+
|
86
89
|
MDASH_SPACE_RE = /\p{Space}*#{MDASH}\p{Space}*/
|
87
90
|
NDASH_SPACE_RE = /\p{Space}*#{NDASH}\p{Space}*/
|
88
91
|
MDASH_SPACE = "#{NBSP_THIN}#{MDASH}#{NBSP_THIN}"
|
@@ -90,10 +93,6 @@ module TypoHero
|
|
90
93
|
|
91
94
|
REPLACE_AMP_RE = /(?<=\p{Space})#{AMP_RE}(?=\p{Space})/
|
92
95
|
|
93
|
-
CAPS_BEGIN_RE = "(^|\\p{Space}|#{LEFT_QUOTE_RE})"
|
94
|
-
CAPS_INNER_RE = "(?:#{AMP_RE}|[A-Z\\d\\.]|#{RSQUO})*" # right quote for posession (e.g. JIMMY'S)
|
95
|
-
CAPS_RE = /#{CAPS_BEGIN_RE}([A-Z\d]#{CAPS_INNER_RE}[A-Z]#{CAPS_INNER_RE}|[A-Z]#{CAPS_INNER_RE}[A-Z\d]#{CAPS_INNER_RE})/m
|
96
|
-
|
97
96
|
RIGHT_QUOTE_RE = %r{
|
98
97
|
^['"](?=\p{Punct})\B| # Very first character is a closing quote followed by punctuation at a non-word-break
|
99
98
|
(?<!^|#{DASH_RE}|\p{Space}|[\[\{\(\-])['"]| # Not after dash, space or opening parentheses
|
@@ -103,6 +102,9 @@ module TypoHero
|
|
103
102
|
'(?=(\d\d(?:s|\p{Space}|$))) # Decade abbreviations (the '80s)
|
104
103
|
}xm
|
105
104
|
|
105
|
+
CAPS_INNER_RE = "(?:#{AMP_RE}|[A-Z\\d\\.\-]|#{RSQUO})*" # right quote for posession (e.g. JIMMY'S)
|
106
|
+
CAPS_RE = /(?<=^|\p{Space}|#{LEFT_QUOTE_RE})([A-Z\d]#{CAPS_INNER_RE}[A-Z]#{CAPS_INNER_RE}|[A-Z]#{CAPS_INNER_RE}[A-Z\d]#{CAPS_INNER_RE})(?=$|\p{Space}|#{RIGHT_QUOTE_RE}|\p{Punct})/m
|
107
|
+
|
106
108
|
LEFT_QUOTES = {
|
107
109
|
"'" => LSQUO,
|
108
110
|
'"' => LDQUO,
|
@@ -133,7 +135,7 @@ module TypoHero
|
|
133
135
|
}
|
134
136
|
|
135
137
|
def tokenize(input)
|
136
|
-
|
138
|
+
excluded, latex, dollar = 0, 0, 0
|
137
139
|
input.scan TOKENIZER_RE do |s|
|
138
140
|
type =
|
139
141
|
if s =~ /\A<!--/
|
@@ -198,7 +200,7 @@ module TypoHero
|
|
198
200
|
def truncate(input, *max_words_or_separator)
|
199
201
|
max_words = max_words_or_separator.select {|i| Fixnum === i }.first
|
200
202
|
if separator = max_words_or_separator.reject {|i| Fixnum === i }.first
|
201
|
-
separator = Regexp.union(
|
203
|
+
separator = Regexp.union(separator) unless Regexp === separator
|
202
204
|
separator = nil unless input =~ separator
|
203
205
|
end
|
204
206
|
out, tail, truncated = '', '', false
|
@@ -254,6 +256,7 @@ module TypoHero
|
|
254
256
|
last_char = s[-1]
|
255
257
|
decode(s)
|
256
258
|
escape(s)
|
259
|
+
units(s)
|
257
260
|
primes(s)
|
258
261
|
special(s)
|
259
262
|
latex(s)
|
@@ -343,7 +346,7 @@ module TypoHero
|
|
343
346
|
end
|
344
347
|
|
345
348
|
def caps(s)
|
346
|
-
s.gsub!(CAPS_RE, '
|
349
|
+
s.gsub!(CAPS_RE, '<span class="caps">\1</span>')
|
347
350
|
end
|
348
351
|
|
349
352
|
def initial_quotes(s)
|
@@ -351,7 +354,7 @@ module TypoHero
|
|
351
354
|
end
|
352
355
|
|
353
356
|
def nobr(s)
|
354
|
-
s.gsub!(/[\p{
|
357
|
+
s.gsub!(/[\p{Word}]+(-[\p{Word}]+)+/, '<span class="nobr">\0</span>')
|
355
358
|
end
|
356
359
|
|
357
360
|
def primes(s)
|
@@ -375,4 +378,8 @@ module TypoHero
|
|
375
378
|
s.gsub!(RIGHT_QUOTE_RE, RIGHT_QUOTES)
|
376
379
|
s.gsub!(/['"]/, LEFT_QUOTES)
|
377
380
|
end
|
381
|
+
|
382
|
+
def units(s)
|
383
|
+
s.gsub!(UNITS_RE, UNITS)
|
384
|
+
end
|
378
385
|
end
|
data/lib/typohero/version.rb
CHANGED
data/test/typohero_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
$VERBOSE = true
|
2
3
|
require 'minitest/autorun'
|
3
4
|
require 'typohero'
|
4
5
|
|
@@ -161,6 +162,7 @@ multiline
|
|
161
162
|
|
162
163
|
def test_should_replace_caps
|
163
164
|
assert_enhance "A message from KU", 'A message from <span class="caps">KU</span>'
|
165
|
+
assert_enhance "DG-1000", '<span class="caps"><span class="nobr">DG-1000</span></span>'
|
164
166
|
assert_enhance 'Replace text <a href=".">IN</a> tags', 'Replace text <a href="."><span class="caps">IN</span></a> tags'
|
165
167
|
assert_enhance 'Replace text <i>IN</i> tags', 'Replace text <i><span class="caps">IN</span></i> tags'
|
166
168
|
assert_enhance 'AB, CD, EF', '<span class="caps">AB</span>, <span class="caps">CD</span>, <span class="caps">EF</span>'
|
@@ -253,6 +255,17 @@ multiline
|
|
253
255
|
assert_enhance 'I am the 1st', 'I am the 1<span class="ord">st</span>'
|
254
256
|
end
|
255
257
|
|
258
|
+
def test_units
|
259
|
+
assert_enhance '-1m', "-1\u202Fm"
|
260
|
+
assert_enhance '1m', "1\u202Fm"
|
261
|
+
assert_enhance '100 m.', "100\u202Fm."
|
262
|
+
assert_enhance '1.2 m', "1.2\u202Fm"
|
263
|
+
assert_enhance '1.2 km', "1.2\u202Fkm"
|
264
|
+
assert_enhance '1.2 km/h', "1.2\u202Fkm/h"
|
265
|
+
assert_enhance 'text 1m text', "text 1\u202Fm text"
|
266
|
+
assert_enhance 'text 1.2 m text', "text 1.2\u202Fm text"
|
267
|
+
end
|
268
|
+
|
256
269
|
def test_latex
|
257
270
|
assert_enhance '\\textbackslash', '\\'
|
258
271
|
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.4
|
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-
|
11
|
+
date: 2014-11-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).
|