gilenson 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 "Вот&#160;такие<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&#8211;12&#8211;30</span>', '3-12-30'.gilensize
32
+ assert_equal '<span class="nobr">12&#8211;34&#8211;56</span>', '12-34-56'.gilensize
33
+ assert_equal '<span class="nobr">88&#8211;25&#8211;04</span>', '88-25-04'.gilensize
34
+ assert_equal '+7 <span class="nobr">(99284)&#160;65&#8211;818</span>', '+7 (99284) 65-818'.gilensize
35
+ assert_equal '<span class="nobr">725&#8211;01&#8211;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="Знак &#60;">БВГ</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 'табл.&#160;2, рис.&#160;2.10', 'табл. 2, рис. 2.10'.gilensize
60
+ assert_equal 'офис&#160;415, оф.340, д.5, ул.&#160;Народной Воли, пл. Малышева', 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева'.gilensize
61
+ end
62
+
63
+ def test_html_entities_replace
64
+ assert_equal '&#34; &#38; &#39; &#62; &#60; &#160; &#167; &#169; &#171; &#174; &#176; &#177; &#183; &#187; &#8211; &#8212; &#8216; &#8217; &#8220; &#8221; &#8222; &#8226; &#8230; &#8482; &#8722;', '&quot; &amp; &apos; &gt; &lt; &nbsp; &sect; &copy; &laquo; &reg; &deg; &plusmn; &middot; &raquo; &ndash; &mdash; &lsquo; &rsquo; &ldquo; &rdquo; &bdquo; &bull; &hellip; &trade; &minus;'.gilensize
65
+ end
66
+
67
+ def test_non_displayable_entities_replace1 # not_correct_number
68
+ assert_equal '&#8222; &#8230; &#39; &#8220; &#8221; &#8226; &#8211; &#8212; &#8482;', '&#132; &#133; &#146; &#147; &#148; &#149; &#150; &#151; &#153;'.gilensize
69
+ end
70
+
71
+ def test_non_displayable_entities_replace2 # copy&paste
72
+ @gilenson.configure!(:copypaste => true)
73
+ assert_equal '&#171; &#160; &#187; &#167; &#169; &#174; &#176; &#177; &#182; &#183; &#8211; &#8212; &#8216; &#8217; &#8220; &#8221; &#8222; &#8226; &#8230; &#8470; &#8482; &#8722; &#8201; &#8243;', @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 '&#169; 2002, &#169; 2003, &#169; 2004, &#169; 2005 &#8212; тоже без&#160;пробелов: &#169;2002, &#169;Кукуц. однако: варианты (а) и&#160;(с)', '(с) 2002, (С) 2003, (c) 2004, (C) 2005 -- тоже без пробелов: (с)2002, (c)Кукуц. однако: варианты (а) и (с)'.gilensize
86
+ assert_equal '+5&#176;С, +7&#176;C, &#8211;5&#176;F', '+5^С, +17^C, -275^F'.gilensize
87
+ assert_equal 'об&#160;этом подробнее &#8212; читай &#167;25', 'об этом подробнее -- читай (p)25'.gilensize
88
+ assert_equal 'один же&#160;минус &#8211; краткое тире', 'один же минус - краткое тире'.gilensize
89
+ assert_equal 'Sharpdesign&#8482;, Microsoft<sup>&#174;</sup>', 'Sharpdesign(tm), Microsoft(r)'.gilensize
90
+ end
91
+
92
+ def test_breaking
93
+ assert_equal 'скажи, мне, ведь не&#160;даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.gilensize
94
+ assert_equal 'so&#160;be it, my&#160;liege. Tiny dwellers roam thru midnight! Hell raised, the&#160;Balrog is&#160;hiding in&#160;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 'при&#160;установке командой строки в&#160;?page=help <span class="nobr">бла-бла-бла-бла</span>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
96
+ assert_equal 'как&#160;интересно будет переноситься со&#160;строки на&#160;строку <span class="nobr">что-то</span> разделённое дефисом, ведь дефис тот&#160;тоже ведь из&#160;наших. <span class="nobr">Какие-то</span> браузеры думают, что&#160;следует переносить и&#160;его&#8230;', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
97
+ end
98
+
99
+ def test_forced_quotes
100
+ assert_equal 'кавычки &#171;расставлены&#187; &#8220;in a&#160;chaotic order&#8221;',
101
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize
102
+ assert_equal 'кавычки &#8220;расставлены&#8221; &#8220;in a&#160;chaotic order&#8221;',
103
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_en_quotes => true)
104
+ assert_equal 'кавычки &#171;расставлены&#187; &#171;in a&#160;chaotic order&#187;',
105
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_ru_quotes => true)
106
+ end
107
+
108
+ #def test_quotes_and_inch
109
+ # assert_equal "&#171;This one&#160;is&#160;12&#8342;&#187;", '"This one is 12""'.gilensize
110
+ #end
111
+
112
+ def test_quotes
113
+ assert_equal 'english &#8220;quotes&#8221; should be&#160;quite like this', 'english "quotes" should be quite like this'.gilensize
114
+ assert_equal 'русские же&#160;&#171;оформляются&#187; подобным образом', 'русские же "оформляются" подобным образом'.gilensize
115
+ assert_equal 'кавычки &#171;расставлены&#187; &#8220;in a&#160;chaotic order&#8221;', 'кавычки "расставлены" "in a chaotic order"'.gilensize
116
+ assert_equal 'диагональ моего монитора &#8212; 17&#8243;, а&#160;размер пениса &#8212; 1,5&#8243;', 'диагональ моего монитора -- 17", а размер пениса -- 1,5"'.gilensize
117
+ assert_equal 'в&#160;толщину, &#171;вложенные &#8220;quotes&#8221; вот&#160;так&#187;, &#8220;or it&#160;&#171;будет вложено&#187; elsewhere&#8221;', 'в толщину, "вложенные "quotes" вот так", "or it "будет вложено" elsewhere"'.gilensize
118
+ assert_equal '&#8220;complicated &#171;кавычки&#187;, &#171;странные &#8220;includements&#8221; кавычек&#187;', '"complicated "кавычки", "странные "includements" кавычек"'.gilensize
119
+ assert_equal '&#8220;double &#8220;quotes&#8221;', '"double "quotes"'.gilensize
120
+ assert_equal '&#171;дважды вложенные &#171;кавычки&#187;', '"дважды вложенные "кавычки"'.gilensize
121
+ assert_equal '&#171;01/02/03&#187;, дискеты в&#160;5.25&#8243;', '"01/02/03", дискеты в 5.25"'.gilensize
122
+ assert_equal 'после троеточия правая кавычка &#8212; &#171;Вот&#8230;&#187;', 'после троеточия правая кавычка -- "Вот..."'.gilensize
123
+ assert_equal 'setlocale(LC_ALL, &#8220;ru_RU.UTF8&#8221;);', 'setlocale(LC_ALL, "ru_RU.UTF8");'.gilensize
124
+ assert_equal '&#8220;read, write, delete&#8221; с&#160;флагом &#8220;only_mine&#8221;', '"read, write, delete" с флагом "only_mine"'.gilensize
125
+ assert_equal '&#171;Двоеточие:&#187;, &#171;такую умную тему должен писать чувак умеющий скрипты скриптить.&#187;', '"Двоеточие:", "такую умную тему должен писать чувак умеющий скрипты скриптить."'.gilensize
126
+ assert_equal '(&#171;Вики != HTML&#187; &#8212; &#171;Вики != HTML&#187; &#8212; (&#171;всякая чушь&#187;))', '("Вики != HTML" -- "Вики != HTML" -- ("всякая чушь"))'.gilensize
127
+ assert_equal '&#171;фигня123&#187;, &#8220;fignya123&#8221;', '"фигня123", "fignya123"'.gilensize
128
+ # assert_equal '&#171;сбалансированные &#171;кавычки<!--notypo--><!--/notypo--> (четыре в&#160;конце) &#8212; связано с&#160;синтаксисом ваки', '"сбалансированные "кавычки"""" (четыре в конце) -- связано с синтаксисом ваки'.gilensize
129
+ assert_equal '&#171;несбалансированные &#171;кавычки&#34;&#34;" (три в&#160;конце) &#8212; связано с&#160;синтаксисом ваки', '"несбалансированные "кавычки""" (три в конце) -- связано с синтаксисом ваки'.gilensize
130
+ assert_equal '&#171;разноязыкие quotes&#187;', '"разноязыкие quotes"'.gilensize
131
+ assert_equal '&#171;multilanguage кавычки&#187;', '"multilanguage кавычки"'.gilensize
132
+ end
133
+
134
+ def test_additional_quote_cases
135
+ assert_equal "&#171;И это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос",
136
+ %q{ "И это называется языком?", -- таков был его вопрос }.gilensize
137
+
138
+ assert_equal "&#171;Он &#8212; сволочь!&#187;, сказал&#160;я",
139
+ %q{ "Он -- сволочь!", сказал я }.gilensize
140
+ end
141
+
142
+ def test_initials
143
+ assert_equal 'Это&#160;нам сказал П.И.&#8201;Петров', 'Это нам сказал П. И. Петров'.gilensize
144
+
145
+ assert_equal "А&#160;Ефимов&#8230;",
146
+ @gilenson.process("А Ефимов...")
147
+
148
+ assert_equal "Обратился за&#160;ПО. К&#160;негодяям.",
149
+ @gilenson.process("Обратился за ПО. К негодяям.")
150
+
151
+ assert_equal "ГО&#160;Самарской обл.",
152
+ @gilenson.process("ГО Самарской обл.")
153
+
154
+ assert_equal "ГОР&#160;Самарской обл.",
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 "сказал&#160;я", "сказал я".gilensize
167
+ assert_equal "сказал&#160;я!", "сказал я!".gilensize
168
+ assert_equal "сказал&#160;я?", "сказал я?".gilensize
169
+ assert_equal "сказал&#160;я&#8230;", "сказал я...".gilensize
170
+ assert_equal "сказал&#160;он&#8230;", "сказал он...".gilensize
171
+ assert_equal "сказали&#160;мы?..", "сказали мы?..".gilensize
172
+ assert_equal "сказали&#160;мы?!", "сказали мы?!".gilensize
173
+ assert_equal "сказали мы?!!!", "сказали мы?!!!".gilensize
174
+ assert_equal "сказали нам", "сказали нам".gilensize
175
+ assert_equal "(сказали&#160;им)", "(сказали им)".gilensize
176
+ assert_equal "Справка&#160;09", 'Справка 09'.gilensize
177
+ end
178
+
179
+ def test_wordglue_combined_with_glyphs # http://pixel-apes.com/typografica/trako/12
180
+ assert_equal "&#171;Справка&#160;09&#187;", '"Справка 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 &#8212; 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> &#8212; <code attr='test -- attr'>Скип -- скип!</code>",
200
+ @gilenson.process("<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> -- <code attr='test -- attr'>Скип -- скип!</code>")
201
+
202
+ assert_equal "<ttt>Скип &#8212; скип!</tt>",
203
+ @gilenson.process("<ttt>Скип -- скип!</tt>")
204
+
205
+ assert_equal "<tt>Скип &#8212; скип!</ttt>",
206
+ @gilenson.process("<tt>Скип -- скип!</ttt>")
207
+
208
+ assert_equal "Ах, &#8212; <code>var x = j // -- тест</code>",
209
+ @gilenson.process("Ах, -- <code>var x = j // -- тест</code>")
210
+
211
+ assert_equal "<![CDATA[ CDATA -- ]]> &#8212; CDATA",
212
+ @gilenson.process("<![CDATA[ CDATA -- ]]> -- CDATA")
213
+
214
+ assert_equal "<![CDATA[ CDATA -- >] -- CDATA ]]> &#8212; <![CDATA[ CDATA ]> -- CDATA ]]>",
215
+ @gilenson.process("<![CDATA[ CDATA -- >] -- CDATA ]]> -- <![CDATA[ CDATA ]> -- CDATA ]]>")
216
+
217
+ assert_equal "<![CDATA[ CDATA -- >] -- CDATA ]]> &#8212; <![CDATA[ CDATA ]> -- CDATA ]]> &#8212; CDATA ]]>",
218
+ @gilenson.process("<![CDATA[ CDATA -- >] -- CDATA ]]> -- <![CDATA[ CDATA ]> -- CDATA ]]> -- CDATA ]]>")
219
+
220
+ @gilenson.configure!(:skip_code => false)
221
+
222
+ assert_equal "Ах, &#8212; <code>var x&#160;= j&#160;// &#8212; тест</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 &#8212; test</a>",
230
+ @gilenson.process("<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just -- test</a>")
231
+
232
+ assert_equal 'мы&#160;напишем title="test &#8212; me" и&#160;alt=\'test &#8212; 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 &#8212;&#160;me' alt=\"смотри &#8212; смотри\">just &#8212; test</a>",
238
+ @gilenson.process("<a href='#' attr='смотри -- смотри' title='test -- me' alt=\"смотри -- смотри\">just -- test</a>")
239
+
240
+ assert_equal 'мы&#160;напишем title="test &#8212; me" и&#160;alt=\'test &#8212; me\', вот',
241
+ @gilenson.process('мы напишем title="test -- me" и alt=\'test -- me\', вот')
242
+ end
243
+
244
+ def test_escape_html
245
+ assert_equal "Используйте &#38; вместо &#38;amp;",
246
+ @gilenson.process("Используйте &#38; вместо &#38;amp;")
247
+
248
+ @gilenson.configure!(:html => false)
249
+
250
+ assert_equal "&#38;#38; &#8212; &#38;amp; &#60;code/&#62; &#60;some_tag&#62;таги не&#160;пройдут!&#60;/some_tag&#62;. Ну&#160;и?..",
251
+ @gilenson.process("&#38; -- &amp; <code/> <some_tag>таги не пройдут!</some_tag>. Ну и?..")
252
+
253
+ assert_equal "Используйте &#38;#38; вместо &#38;amp;",
254
+ @gilenson.process("Используйте &#38; вместо &amp;")
255
+
256
+ end
257
+
258
+ def test_ampersand_in_urls
259
+
260
+ @gilenson.configure!(:html=>false)
261
+
262
+ assert_equal "&#60;a href='test?test5=5&#38;#38;test6=6'&#62;test&#38;#38;&#60;/a&#62;",
263
+ @gilenson.process("<a href='test?test5=5&#38;test6=6'>test&#38;</a>")
264
+
265
+ @gilenson.configure!(:html=>true)
266
+
267
+ assert_equal "<a href='test?test7=7&#38;test8=8'>test&#38;</a>",
268
+ @gilenson.process("<a href='test?test7=7&#38;test8=8'>test&#38;</a>")
269
+
270
+ assert_equal "<a href='test?test9=9&#038;test10=10'>test&#038;</a>",
271
+ @gilenson.process("<a href='test?test9=9&#038;test10=10'>test&#038;</a>")
272
+
273
+ assert_equal "<a href='test?test11=11&#38;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&#38;'>test</a>",
277
+ @gilenson.process("<a href='test?test12=12&amp;'>test</a>")
278
+
279
+ assert_equal "<a href='test?x=1&#38;y=2' title='&#38;-amp, &#8230;-hellip'>test</a>",
280
+ @gilenson.process("<a href='test?x=1&y=2' title='&#38;-amp, &#8230;-hellip'>test</a>")
281
+
282
+ assert_equal "<a href='test?x=3&#38;#039;y=4'>test</a>",
283
+ @gilenson.process("<a href='test?x=3&#039;y=4'>test</a>")
284
+
285
+
286
+ @gilenson.glyph[:amp] = '&amp;'
287
+
288
+ assert_equal "<a href='test?test11=11&amp;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&amp;test14=14'>test&</a>",
292
+ @gilenson.process("<a href='test?test13=13&amp;test14=14'>test&</a>")
293
+
294
+ assert_equal "<a href='test?test15=15&amp;amppp;test16=16'>test&</a>",
295
+ @gilenson.process("<a href='test?test15=15&amppp;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 "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
331
+ @gilenson.process("Ну и куда вот -- да туда!")
332
+
333
+ assert_equal "Ну и куда вот &#8212; да туда!",
334
+ @gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
335
+
336
+ assert_equal "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
337
+ @gilenson.process("Ну и куда вот -- да туда!")
338
+
339
+ @gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
340
+
341
+ assert_equal "Ну и куда вот &#8212; да туда!",
342
+ @gilenson.process("Ну и куда вот -- да туда!")
343
+
344
+ @gilenson.configure!(:all => true)
345
+
346
+ assert_equal "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
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 'скажи, мне, ведь не&#160;даром! Москва, клеймённая пожаром. Французу отдана',
357
+ @gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
358
+
359
+ @gilenson.glyph[:nbsp] = '&nbsp;'
360
+ assert_equal 'скажи, мне, ведь не&nbsp;даром! Москва, клеймённая пожаром. Французу отдана',
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 "&#8220;c:\\www\\sites\\&#8221;", '"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 '&#38442; Это просто «кавычки»',
383
+ @gilenson.process('&#38442; Это просто "кавычки"')
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&#8211;12&#8211;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