gilenson 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +23 -0
- data/History.txt +80 -0
- data/Manifest.txt +8 -0
- data/README.txt +114 -0
- data/Rakefile +15 -0
- data/bin/gilensize +22 -0
- data/lib/gilenson.rb +572 -0
- data/test/test_gilenson.rb +396 -0
- metadata +114 -0
@@ -0,0 +1,396 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$KCODE = 'u'
|
3
|
+
require 'test/unit'
|
4
|
+
require File.dirname(__FILE__) + '/../lib/gilenson'
|
5
|
+
|
6
|
+
|
7
|
+
# Cюда идут наши тесты типографа. Мы содержим их отдельно поскольку набор тестов Типографицы нами не контролируется.
|
8
|
+
# Когда у рутилей появятся собственные баги под каждый баг следует завести тест
|
9
|
+
class GilensonOwnTest < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@gilenson = Gilenson.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_tag_lift
|
16
|
+
assert_equal "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела", "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела".gilensize
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_byte_pass
|
20
|
+
assert_equal '<p>Теперь добираться до офиса Студии автортранспортом стало удобнее. ' +
|
21
|
+
'Для этого мы разместили в разделе <a href="#">«Контакт»</a> окно вебкамеры, ' +
|
22
|
+
'которая непрерывно транслирует дорожную обстановку на Садовом кольце по адресу Земляной Вал, 23. <br>' +
|
23
|
+
'Удачной дороги! </p>',
|
24
|
+
'<p>Теперь добираться до офиса Студии автортранспортом стало удобнее. ' +
|
25
|
+
'Для этого мы разместили в разделе <a href="#">«Контакт»</a> окно вебкамеры, ' +
|
26
|
+
'которая непрерывно транслирует дорожную обстановку на Садовом кольце по адресу Земляной Вал, 23. <br>' +
|
27
|
+
'Удачной дороги! </p>'.gilensize
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_phones
|
31
|
+
assert_equal '<span class="nobr">3–12–30</span>', '3-12-30'.gilensize
|
32
|
+
assert_equal '<span class="nobr">12–34–56</span>', '12-34-56'.gilensize
|
33
|
+
assert_equal '<span class="nobr">88–25–04</span>', '88-25-04'.gilensize
|
34
|
+
assert_equal '+7 <span class="nobr">(99284) 65–818</span>', '+7 (99284) 65-818'.gilensize
|
35
|
+
assert_equal '<span class="nobr">725–01–10</span>', '725-01-10'.gilensize
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_acronyms_with_html_output
|
39
|
+
assert_equal '<acronym title="Большая советская энциклопедия">БСЭ</acronym>', 'БСЭ(Большая советская энциклопедия)'.gilensize
|
40
|
+
assert_equal '<acronym title="Advanced Micro Devices">AMD</acronym>',
|
41
|
+
'AMD(Advanced Micro Devices)'.gilensize
|
42
|
+
assert_equal '<acronym title="Расширяемый язык разметки">XML</acronym>',
|
43
|
+
'XML(Расширяемый язык разметки)'.gilensize
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_acronyms_should_escape_entities
|
47
|
+
@gilenson.configure(:raw_output => false)
|
48
|
+
assert_equal '<acronym title="Знак <">БВГ</acronym>', 'БВГ(Знак <)'.gilensize
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_acronyms_with_text_output
|
52
|
+
@gilenson.configure(:raw_output => true)
|
53
|
+
thin_space = [8201].pack("U")
|
54
|
+
assert_equal_cp "так утверждает БСЭ#{thin_space}(Большая советская энциклопедия)",
|
55
|
+
@gilenson.process('так утверждает БСЭ(Большая советская энциклопедия)')
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_address
|
59
|
+
assert_equal 'табл. 2, рис. 2.10', 'табл. 2, рис. 2.10'.gilensize
|
60
|
+
assert_equal 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева', 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева'.gilensize
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_html_entities_replace
|
64
|
+
assert_equal '" & ' > <   § © « ® ° ± · » – — ‘ ’ “ ” „ • … ™ −', '" & ' > < § © « ® ° ± · » – — ‘ ’ “ ” „ • … ™ −'.gilensize
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_non_displayable_entities_replace1 # not_correct_number
|
68
|
+
assert_equal '„ … ' “ ” • – — ™', '„ … ’ “ ” • – — ™'.gilensize
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_non_displayable_entities_replace2 # copy&paste
|
72
|
+
@gilenson.configure!(:copypaste => true)
|
73
|
+
assert_equal '«   » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ −   ″', @gilenson.process('« » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ − ″')
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_nbsp_removed_on_anchor_start
|
77
|
+
assert_equal 'abcd', @gilenson.process(' abcd')
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_nbsp_removed_on_anchor_end
|
81
|
+
assert_equal 'abcd', @gilenson.process('abcd ')
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_specials
|
85
|
+
assert_equal '© 2002, © 2003, © 2004, © 2005 — тоже без пробелов: ©2002, ©Кукуц. однако: варианты (а) и (с)', '(с) 2002, (С) 2003, (c) 2004, (C) 2005 -- тоже без пробелов: (с)2002, (c)Кукуц. однако: варианты (а) и (с)'.gilensize
|
86
|
+
assert_equal '+5°С, +7°C, –5°F', '+5^С, +17^C, -275^F'.gilensize
|
87
|
+
assert_equal 'об этом подробнее — читай §25', 'об этом подробнее -- читай (p)25'.gilensize
|
88
|
+
assert_equal 'один же минус – краткое тире', 'один же минус - краткое тире'.gilensize
|
89
|
+
assert_equal 'Sharpdesign™, Microsoft<sup>®</sup>', 'Sharpdesign(tm), Microsoft(r)'.gilensize
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_breaking
|
93
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.gilensize
|
94
|
+
assert_equal 'so be it, my liege. Tiny dwellers roam thru midnight! Hell raised, the Balrog is hiding in your backyard!', 'so be it ,my liege .Tiny dwellers roam thru midnight !Hell raised, the Balrog is hiding in your backyard!'.gilensize
|
95
|
+
assert_equal 'при установке командой строки в ?page=help <span class="nobr">бла-бла-бла-бла</span>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
|
96
|
+
assert_equal 'как интересно будет переноситься со строки на строку <span class="nobr">что-то</span> разделённое дефисом, ведь дефис тот тоже ведь из наших. <span class="nobr">Какие-то</span> браузеры думают, что следует переносить и его…', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_forced_quotes
|
100
|
+
assert_equal 'кавычки «расставлены» “in a chaotic order”',
|
101
|
+
'кавычки "расставлены" "in a chaotic order"'.gilensize
|
102
|
+
assert_equal 'кавычки “расставлены” “in a chaotic order”',
|
103
|
+
'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_en_quotes => true)
|
104
|
+
assert_equal 'кавычки «расставлены» «in a chaotic order»',
|
105
|
+
'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_ru_quotes => true)
|
106
|
+
end
|
107
|
+
|
108
|
+
#def test_quotes_and_inch
|
109
|
+
# assert_equal "«This one is 12ₖ»", '"This one is 12""'.gilensize
|
110
|
+
#end
|
111
|
+
|
112
|
+
def test_quotes
|
113
|
+
assert_equal 'english “quotes” should be quite like this', 'english "quotes" should be quite like this'.gilensize
|
114
|
+
assert_equal 'русские же «оформляются» подобным образом', 'русские же "оформляются" подобным образом'.gilensize
|
115
|
+
assert_equal 'кавычки «расставлены» “in a chaotic order”', 'кавычки "расставлены" "in a chaotic order"'.gilensize
|
116
|
+
assert_equal 'диагональ моего монитора — 17″, а размер пениса — 1,5″', 'диагональ моего монитора -- 17", а размер пениса -- 1,5"'.gilensize
|
117
|
+
assert_equal 'в толщину, «вложенные “quotes” вот так», “or it «будет вложено» elsewhere”', 'в толщину, "вложенные "quotes" вот так", "or it "будет вложено" elsewhere"'.gilensize
|
118
|
+
assert_equal '“complicated «кавычки», «странные “includements” кавычек»', '"complicated "кавычки", "странные "includements" кавычек"'.gilensize
|
119
|
+
assert_equal '“double “quotes”', '"double "quotes"'.gilensize
|
120
|
+
assert_equal '«дважды вложенные «кавычки»', '"дважды вложенные "кавычки"'.gilensize
|
121
|
+
assert_equal '«01/02/03», дискеты в 5.25″', '"01/02/03", дискеты в 5.25"'.gilensize
|
122
|
+
assert_equal 'после троеточия правая кавычка — «Вот…»', 'после троеточия правая кавычка -- "Вот..."'.gilensize
|
123
|
+
assert_equal 'setlocale(LC_ALL, “ru_RU.UTF8”);', 'setlocale(LC_ALL, "ru_RU.UTF8");'.gilensize
|
124
|
+
assert_equal '“read, write, delete” с флагом “only_mine”', '"read, write, delete" с флагом "only_mine"'.gilensize
|
125
|
+
assert_equal '«Двоеточие:», «такую умную тему должен писать чувак умеющий скрипты скриптить.»', '"Двоеточие:", "такую умную тему должен писать чувак умеющий скрипты скриптить."'.gilensize
|
126
|
+
assert_equal '(«Вики != HTML» — «Вики != HTML» — («всякая чушь»))', '("Вики != HTML" -- "Вики != HTML" -- ("всякая чушь"))'.gilensize
|
127
|
+
assert_equal '«фигня123», “fignya123”', '"фигня123", "fignya123"'.gilensize
|
128
|
+
# assert_equal '«сбалансированные «кавычки<!--notypo--><!--/notypo--> (четыре в конце) — связано с синтаксисом ваки', '"сбалансированные "кавычки"""" (четыре в конце) -- связано с синтаксисом ваки'.gilensize
|
129
|
+
assert_equal '«несбалансированные «кавычки""" (три в конце) — связано с синтаксисом ваки', '"несбалансированные "кавычки""" (три в конце) -- связано с синтаксисом ваки'.gilensize
|
130
|
+
assert_equal '«разноязыкие quotes»', '"разноязыкие quotes"'.gilensize
|
131
|
+
assert_equal '«multilanguage кавычки»', '"multilanguage кавычки"'.gilensize
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_additional_quote_cases
|
135
|
+
assert_equal "«И это называется языком?», — таков был его вопрос",
|
136
|
+
%q{ "И это называется языком?", -- таков был его вопрос }.gilensize
|
137
|
+
|
138
|
+
assert_equal "«Он — сволочь!», сказал я",
|
139
|
+
%q{ "Он -- сволочь!", сказал я }.gilensize
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_initials
|
143
|
+
assert_equal 'Это нам сказал П.И. Петров', 'Это нам сказал П. И. Петров'.gilensize
|
144
|
+
|
145
|
+
assert_equal "А Ефимов…",
|
146
|
+
@gilenson.process("А Ефимов...")
|
147
|
+
|
148
|
+
assert_equal "Обратился за ПО. К негодяям.",
|
149
|
+
@gilenson.process("Обратился за ПО. К негодяям.")
|
150
|
+
|
151
|
+
assert_equal "ГО Самарской обл.",
|
152
|
+
@gilenson.process("ГО Самарской обл.")
|
153
|
+
|
154
|
+
assert_equal "ГОР Самарской обл.",
|
155
|
+
@gilenson.process("ГОР Самарской обл.")
|
156
|
+
|
157
|
+
assert_equal "КОШМАР Самарской обл.",
|
158
|
+
@gilenson.process("КОШМАР Самарской обл.")
|
159
|
+
|
160
|
+
assert_equal "УФПС Самарской обл.",
|
161
|
+
@gilenson.process("УФПС Самарской обл.")
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_nbsp_last_letters
|
166
|
+
assert_equal "сказал я", "сказал я".gilensize
|
167
|
+
assert_equal "сказал я!", "сказал я!".gilensize
|
168
|
+
assert_equal "сказал я?", "сказал я?".gilensize
|
169
|
+
assert_equal "сказал я…", "сказал я...".gilensize
|
170
|
+
assert_equal "сказал он…", "сказал он...".gilensize
|
171
|
+
assert_equal "сказали мы?..", "сказали мы?..".gilensize
|
172
|
+
assert_equal "сказали мы?!", "сказали мы?!".gilensize
|
173
|
+
assert_equal "сказали мы?!!!", "сказали мы?!!!".gilensize
|
174
|
+
assert_equal "сказали нам", "сказали нам".gilensize
|
175
|
+
assert_equal "(сказали им)", "(сказали им)".gilensize
|
176
|
+
assert_equal "Справка 09", 'Справка 09'.gilensize
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_wordglue_combined_with_glyphs # http://pixel-apes.com/typografica/trako/12
|
180
|
+
assert_equal "«Справка 09»", '"Справка 09"'.gilensize(:wordglue => true)
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_marker_bypass
|
184
|
+
assert_equal "<p><span class=\"nobr\">МИЭЛЬ-Недвижимость</span></p>", "<p>МИЭЛЬ-Недвижимость</p>".gilensize
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_skip_code
|
188
|
+
@gilenson.configure!(:all => true, :skip_code => true)
|
189
|
+
|
190
|
+
assert_equal "<code>Скип -- скип!</code>",
|
191
|
+
@gilenson.process("<code>Скип -- скип!</code>")
|
192
|
+
|
193
|
+
assert_equal '<code attr="test -- attr">Скип -- скип!</code>',
|
194
|
+
@gilenson.process('<code attr="test -- attr">Скип -- скип!</code>')
|
195
|
+
|
196
|
+
assert_equal "<tt>Скип -- скип!</tt> test — test <tt attr='test -- attr'>Скип -- скип!</tt>",
|
197
|
+
@gilenson.process("<tt>Скип -- скип!</tt> test -- test <tt attr='test -- attr'>Скип -- скип!</tt>")
|
198
|
+
|
199
|
+
assert_equal "<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> — <code attr='test -- attr'>Скип -- скип!</code>",
|
200
|
+
@gilenson.process("<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> -- <code attr='test -- attr'>Скип -- скип!</code>")
|
201
|
+
|
202
|
+
assert_equal "<ttt>Скип — скип!</tt>",
|
203
|
+
@gilenson.process("<ttt>Скип -- скип!</tt>")
|
204
|
+
|
205
|
+
assert_equal "<tt>Скип — скип!</ttt>",
|
206
|
+
@gilenson.process("<tt>Скип -- скип!</ttt>")
|
207
|
+
|
208
|
+
assert_equal "Ах, — <code>var x = j // -- тест</code>",
|
209
|
+
@gilenson.process("Ах, -- <code>var x = j // -- тест</code>")
|
210
|
+
|
211
|
+
assert_equal "<![CDATA[ CDATA -- ]]> — CDATA",
|
212
|
+
@gilenson.process("<![CDATA[ CDATA -- ]]> -- CDATA")
|
213
|
+
|
214
|
+
assert_equal "<![CDATA[ CDATA -- >] -- CDATA ]]> — <![CDATA[ CDATA ]> -- CDATA ]]>",
|
215
|
+
@gilenson.process("<![CDATA[ CDATA -- >] -- CDATA ]]> -- <![CDATA[ CDATA ]> -- CDATA ]]>")
|
216
|
+
|
217
|
+
assert_equal "<![CDATA[ CDATA -- >] -- CDATA ]]> — <![CDATA[ CDATA ]> -- CDATA ]]> — CDATA ]]>",
|
218
|
+
@gilenson.process("<![CDATA[ CDATA -- >] -- CDATA ]]> -- <![CDATA[ CDATA ]> -- CDATA ]]> -- CDATA ]]>")
|
219
|
+
|
220
|
+
@gilenson.configure!(:skip_code => false)
|
221
|
+
|
222
|
+
assert_equal "Ах, — <code>var x = j // — тест</code>",
|
223
|
+
@gilenson.process("Ах, -- <code>var x = j // -- тест</code>")
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_skip_attr
|
227
|
+
@gilenson.configure!(:skip_attr => true)
|
228
|
+
|
229
|
+
assert_equal "<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just — test</a>",
|
230
|
+
@gilenson.process("<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just -- test</a>")
|
231
|
+
|
232
|
+
assert_equal 'мы напишем title="test — me" и alt=\'test — me\', вот',
|
233
|
+
@gilenson.process('мы напишем title="test -- me" и alt=\'test -- me\', вот')
|
234
|
+
|
235
|
+
@gilenson.configure!(:skip_attr => false)
|
236
|
+
|
237
|
+
assert_equal "<a href='#' attr='смотри -- смотри' title='test — me' alt=\"смотри — смотри\">just — test</a>",
|
238
|
+
@gilenson.process("<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just -- test</a>")
|
239
|
+
|
240
|
+
assert_equal 'мы напишем title="test — me" и alt=\'test — me\', вот',
|
241
|
+
@gilenson.process('мы напишем title="test -- me" и alt=\'test -- me\', вот')
|
242
|
+
end
|
243
|
+
|
244
|
+
def test_escape_html
|
245
|
+
assert_equal "Используйте & вместо &amp;",
|
246
|
+
@gilenson.process("Используйте & вместо &amp;")
|
247
|
+
|
248
|
+
@gilenson.configure!(:html => false)
|
249
|
+
|
250
|
+
assert_equal "&#38; — &amp; <code/> <some_tag>таги не пройдут!</some_tag>. Ну и?..",
|
251
|
+
@gilenson.process("& -- & <code/> <some_tag>таги не пройдут!</some_tag>. Ну и?..")
|
252
|
+
|
253
|
+
assert_equal "Используйте &#38; вместо &amp;",
|
254
|
+
@gilenson.process("Используйте & вместо &")
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_ampersand_in_urls
|
259
|
+
|
260
|
+
@gilenson.configure!(:html=>false)
|
261
|
+
|
262
|
+
assert_equal "<a href='test?test5=5&#38;test6=6'>test&#38;</a>",
|
263
|
+
@gilenson.process("<a href='test?test5=5&test6=6'>test&</a>")
|
264
|
+
|
265
|
+
@gilenson.configure!(:html=>true)
|
266
|
+
|
267
|
+
assert_equal "<a href='test?test7=7&test8=8'>test&</a>",
|
268
|
+
@gilenson.process("<a href='test?test7=7&test8=8'>test&</a>")
|
269
|
+
|
270
|
+
assert_equal "<a href='test?test9=9&test10=10'>test&</a>",
|
271
|
+
@gilenson.process("<a href='test?test9=9&test10=10'>test&</a>")
|
272
|
+
|
273
|
+
assert_equal "<a href='test?test11=11&test12=12'>test&</a>",
|
274
|
+
@gilenson.process("<a href='test?test11=11&test12=12'>test&</a>")
|
275
|
+
|
276
|
+
assert_equal "<a href='test?test12=12&'>test</a>",
|
277
|
+
@gilenson.process("<a href='test?test12=12&'>test</a>")
|
278
|
+
|
279
|
+
assert_equal "<a href='test?x=1&y=2' title='&-amp, …-hellip'>test</a>",
|
280
|
+
@gilenson.process("<a href='test?x=1&y=2' title='&-amp, …-hellip'>test</a>")
|
281
|
+
|
282
|
+
assert_equal "<a href='test?x=3&#039;y=4'>test</a>",
|
283
|
+
@gilenson.process("<a href='test?x=3'y=4'>test</a>")
|
284
|
+
|
285
|
+
|
286
|
+
@gilenson.glyph[:amp] = '&'
|
287
|
+
|
288
|
+
assert_equal "<a href='test?test11=11&test12=12'>test&</a>",
|
289
|
+
@gilenson.process("<a href='test?test11=11&test12=12'>test&</a>")
|
290
|
+
|
291
|
+
assert_equal "<a href='test?test13=13&test14=14'>test&</a>",
|
292
|
+
@gilenson.process("<a href='test?test13=13&test14=14'>test&</a>")
|
293
|
+
|
294
|
+
assert_equal "<a href='test?test15=15&amppp;test16=16'>test&</a>",
|
295
|
+
@gilenson.process("<a href='test?test15=15&pp;test16=16'>test&</a>")
|
296
|
+
|
297
|
+
end
|
298
|
+
|
299
|
+
private
|
300
|
+
# Проверить равны ли строки, и если нет то обьяснить какой кодпойнт отличается.
|
301
|
+
# Совершенно необходимо для работы с различными пробелами.
|
302
|
+
def assert_equal_cp(reference, actual, msg = nil)
|
303
|
+
(assert(true, msg); return) if (reference == actual)
|
304
|
+
|
305
|
+
reference_cp, actual_cp = [reference, actual].map{|t| t.unpack("U*") }
|
306
|
+
reference_cp.each_with_index do | ref_codepoint, idx |
|
307
|
+
next unless actual_cp[idx] != ref_codepoint
|
308
|
+
beg, fin = idx - 2, idx + 2
|
309
|
+
beg = 0 if (beg < 0)
|
310
|
+
conflicting_piece = actual_cp[beg..fin].pack("U*")
|
311
|
+
msg = []
|
312
|
+
msg << "Expected #{actual.inspect} to be equal to #{reference.inspect}, but they were not, " +
|
313
|
+
"in fragment '#{beg > 0 ? '...' : ''}#{conflicting_piece}...'"
|
314
|
+
msg << "Non-matching codepoint #{actual[idx]} at offset #{idx}, " +
|
315
|
+
"expected codepoint #{ref_codepoint} instead"
|
316
|
+
flunk msg.join("\n"); return
|
317
|
+
end
|
318
|
+
raise "We should never get here"
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
|
323
|
+
class GilensonConfigurationTest < Test::Unit::TestCase
|
324
|
+
def setup
|
325
|
+
@gilenson = Gilenson.new
|
326
|
+
end
|
327
|
+
|
328
|
+
def test_settings_as_tail_arguments
|
329
|
+
|
330
|
+
assert_equal "Ну и куда вот — да туда!",
|
331
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
332
|
+
|
333
|
+
assert_equal "Ну и куда вот — да туда!",
|
334
|
+
@gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
|
335
|
+
|
336
|
+
assert_equal "Ну и куда вот — да туда!",
|
337
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
338
|
+
|
339
|
+
@gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
|
340
|
+
|
341
|
+
assert_equal "Ну и куда вот — да туда!",
|
342
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
343
|
+
|
344
|
+
@gilenson.configure!(:all => true)
|
345
|
+
|
346
|
+
assert_equal "Ну и куда вот — да туда!",
|
347
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
348
|
+
|
349
|
+
@gilenson.configure!(:all => false)
|
350
|
+
|
351
|
+
assert_equal "Ну и куда вот -- да туда!",
|
352
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
353
|
+
end
|
354
|
+
|
355
|
+
def test_glyph_override
|
356
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
357
|
+
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
358
|
+
|
359
|
+
@gilenson.glyph[:nbsp] = ' '
|
360
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
361
|
+
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_raise_on_unknown_setting
|
365
|
+
assert_raise(Gilenson::UnknownSetting) { @gilenson.configure!(:bararara => true) }
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_raise_on_unknown_setting_via_gilensize
|
369
|
+
assert_raise(Gilenson::UnknownSetting) { "s".gilensize(:bararara => true) }
|
370
|
+
end
|
371
|
+
|
372
|
+
def test_backslash_does_not_suppress_quote # http://pixel-apes.com/typografica/trako/13, но с латинскими кавычками
|
373
|
+
assert_equal "“c:\\www\\sites\\”", '"c:\www\sites\"'.gilensize
|
374
|
+
end
|
375
|
+
|
376
|
+
def test_cpp
|
377
|
+
assert_equal "C++-API", "C++-API".gilensize
|
378
|
+
end
|
379
|
+
|
380
|
+
def test_raw_utf8_output
|
381
|
+
@gilenson.configure!(:raw_output=>true)
|
382
|
+
assert_equal '阪 Это просто «кавычки»',
|
383
|
+
@gilenson.process('阪 Это просто "кавычки"')
|
384
|
+
end
|
385
|
+
|
386
|
+
def test_configure_alternate_names
|
387
|
+
assert @gilenson.configure(:raw_output=>true)
|
388
|
+
assert @gilenson.configure!(:raw_output=>true)
|
389
|
+
end
|
390
|
+
|
391
|
+
def test_explicit_nobr
|
392
|
+
@gilenson.glyph[:nob_open] = '[NOB]'
|
393
|
+
@gilenson.glyph[:nob_close] = '[NOBC]'
|
394
|
+
assert_equal '[NOB]3–12–30[NOBC]', @gilenson.process('3-12-30')
|
395
|
+
end
|
396
|
+
end
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gilenson
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 5
|
10
|
+
version: 1.0.5
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Julik Tarkhanov
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-08-15 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rubyforge
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 7
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 0
|
33
|
+
- 4
|
34
|
+
version: 2.0.4
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: hoe
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 23
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 6
|
49
|
+
- 0
|
50
|
+
version: 2.6.0
|
51
|
+
type: :development
|
52
|
+
version_requirements: *id002
|
53
|
+
description: "\xD0\x9E\xD0\xB1\xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD1\x82\xD1\x87\xD0\xB8\xD0\xBA \xD1\x82\xD0\xB8\xD0\xBF\xD0\xBE\xD0\xB3\xD1\x80\xD0\xB0\xD1\x84\xD1\x81\xD0\xBA\xD0\xB8\xD1\x85 \xD1\x81\xD0\xB8\xD0\xBC\xD0\xB2\xD0\xBE\xD0\xBB\xD0\xBE\xD0\xB2 \xD0\xB2 HTML \xD1\x81\xD0\xBE\xD0\xB3\xD0\xBB\xD0\xB0\xD1\x81\xD0\xBD\xD0\xBE \xD0\xBE\xD0\xB1\xD1\x89\xD0\xB5\xD0\xBF\xD1\x80\xD0\xB8\xD0\xBD\xD1\x8F\xD1\x82\xD1\x8B\xD0\xBC \xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xB8\xD0\xBB\xD0\xB0\xD0\xBC.\n\
|
54
|
+
\xD0\x9F\xD0\xBE\xD1\x81\xD0\xB2\xD1\x8F\xD1\x89\xD0\xB0\xD0\xB5\xD1\x82\xD1\x81\xD1\x8F \xD0\x9F.\xD0\x93.\xD0\x93\xD0\xB8\xD0\xBB\xD0\xB5\xD0\xBD\xD1\x81\xD0\xBE\xD0\xBD\xD1\x83[http://www.rudtp.ru/lib.php?book=172], \xD0\xB1\xD0\xBB\xD0\xB0\xD0\xB3\xD0\xBE\xD0\xB4\xD0\xB0\xD1\x80\xD1\x8F \xD0\xBA\xD0\xBE\xD1\x82\xD0\xBE\xD1\x80\xD0\xBE\xD0\xBC\xD1\x83 \xD1\x80\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB5 \xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xB8\xD0\xBB\xD0\xB0 \xD1\x82\xD0\xB5\xD1\x85.\n\
|
55
|
+
\xD1\x80\xD0\xB5\xD0\xB4\xD0\xB0\xD0\xBA\xD1\x82\xD1\x83\xD1\x80\xD1\x8B \xD0\xB5\xD1\x89\xD0\xB5 \xD0\xBA\xD0\xB0\xD0\xBA \xD0\xBC\xD0\xB8\xD0\xBD\xD0\xB8\xD0\xBC\xD1\x83\xD0\xBC 20 \xD0\xBB\xD0\xB5\xD1\x82 \xD0\xBE\xD1\x81\xD1\x82\xD0\xB0\xD0\xBD\xD1\x83\xD1\x82\xD1\x81\xD1\x8F \xD0\xB1\xD0\xB5\xD1\x81\xD1\x81\xD0\xBC\xD1\x8B\xD1\x81\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xBD\xD0\xBE \xD1\x81\xD1\x82\xD0\xB0\xD1\x80\xD0\xBE\xD0\xBC\xD0\xBE\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xBC\xD0\xB8."
|
56
|
+
email:
|
57
|
+
- me@julik.nl
|
58
|
+
executables:
|
59
|
+
- gilensize
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
extra_rdoc_files:
|
63
|
+
- History.txt
|
64
|
+
- Manifest.txt
|
65
|
+
- README.txt
|
66
|
+
files:
|
67
|
+
- .autotest
|
68
|
+
- History.txt
|
69
|
+
- Manifest.txt
|
70
|
+
- README.txt
|
71
|
+
- Rakefile
|
72
|
+
- bin/gilensize
|
73
|
+
- lib/gilenson.rb
|
74
|
+
- test/test_gilenson.rb
|
75
|
+
has_rdoc: true
|
76
|
+
homepage: http://github.com/julik/gilenson
|
77
|
+
licenses: []
|
78
|
+
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options:
|
81
|
+
- --main
|
82
|
+
- README.txt
|
83
|
+
- --charset
|
84
|
+
- utf-8
|
85
|
+
- --promiscuous
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 3
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
version: "0"
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
hash: 3
|
103
|
+
segments:
|
104
|
+
- 0
|
105
|
+
version: "0"
|
106
|
+
requirements: []
|
107
|
+
|
108
|
+
rubyforge_project: gilenson
|
109
|
+
rubygems_version: 1.3.7
|
110
|
+
signing_key:
|
111
|
+
specification_version: 3
|
112
|
+
summary: "\xD0\x9E\xD0\xB1\xD1\x80\xD0\xB0\xD0\xB1\xD0\xBE\xD1\x82\xD1\x87\xD0\xB8\xD0\xBA \xD1\x82\xD0\xB8\xD0\xBF\xD0\xBE\xD0\xB3\xD1\x80\xD0\xB0\xD1\x84\xD1\x81\xD0\xBA\xD0\xB8\xD1\x85 \xD1\x81\xD0\xB8\xD0\xBC\xD0\xB2\xD0\xBE\xD0\xBB\xD0\xBE\xD0\xB2 \xD0\xB2 HTML \xD1\x81\xD0\xBE\xD0\xB3\xD0\xBB\xD0\xB0\xD1\x81\xD0\xBD\xD0\xBE \xD0\xBE\xD0\xB1\xD1\x89\xD0\xB5\xD0\xBF\xD1\x80\xD0\xB8\xD0\xBD\xD1\x8F\xD1\x82\xD1\x8B\xD0\xBC \xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xB8\xD0\xBB\xD0\xB0\xD0\xBC"
|
113
|
+
test_files:
|
114
|
+
- test/test_gilenson.rb
|