rutils 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/{CHANGELOG → History.txt} +49 -18
- data/Manifest.txt +27 -0
- data/README.txt +214 -0
- data/Rakefile.rb +48 -120
- data/{TODO → TODO.txt} +1 -4
- data/bin/gilensize +8 -4
- data/bin/rutilize +0 -0
- data/lib/datetime/datetime.rb +15 -17
- data/lib/gilenson/gilenson.rb +74 -60
- data/lib/integration/blue_cloth_override.rb +7 -3
- data/lib/integration/integration.rb +2 -2
- data/lib/integration/rails_date_helper_override.rb +91 -57
- data/lib/integration/red_cloth_override.rb +8 -8
- data/lib/pluralizer/pluralizer.rb +4 -0
- data/lib/rutils.rb +11 -6
- data/lib/transliteration/bidi.rb +8 -1
- data/test/t_datetime.rb +16 -1
- data/test/t_gilenson.rb +45 -23
- data/test/t_integration.rb +73 -29
- data/test/t_pluralize.rb +2 -0
- metadata +78 -62
- data/README +0 -192
- data/lib/gilenson/gilenson_port.rb +0 -321
- data/test/t_typografica.rb +0 -57
@@ -1,321 +0,0 @@
|
|
1
|
-
module RuTils
|
2
|
-
module Gilenson
|
3
|
-
end
|
4
|
-
end
|
5
|
-
|
6
|
-
# Это - прямой порт Тыпографицы от pixelapes.
|
7
|
-
# Настройки можно регулировать через методы, т.е.
|
8
|
-
#
|
9
|
-
# typ = RuTils::Gilenson::Obsolete.new('Эти "так называемые" великие деятели')
|
10
|
-
# typ.html = false => "false"
|
11
|
-
# typ.dash = true => "true"
|
12
|
-
# typ.to_html => 'Эти «так называемые» великие деятели'
|
13
|
-
# Ни обновляться ни поддерживаться этот модуль более не будет.
|
14
|
-
class RuTils::Gilenson::Obsolete
|
15
|
-
def initialize(text, *args)
|
16
|
-
@_text = text
|
17
|
-
@skip_tags = true;
|
18
|
-
@p_prefix = "<p class=typo>";
|
19
|
-
@p_postfix = "</p>";
|
20
|
-
@a_soft = true;
|
21
|
-
@indent_a = "images/z.gif width=25 height=1 border=0 alt=\'\' align=top />" # <->
|
22
|
-
@indent_b = "images/z.gif width=50 height=1 border=0 alt=\'\' align=top />" # <-->
|
23
|
-
@fixed_size = 80 # максимальная ширина
|
24
|
-
@ignore = /notypo/ # regex, который игнорируется. Этим надо воспользоваться для обработки pre и code
|
25
|
-
|
26
|
-
@de_nobr = true;
|
27
|
-
|
28
|
-
@phonemasks = [[ /([0-9]{4})\-([0-9]{2})\-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})/,
|
29
|
-
/([0-9]{4})\-([0-9]{2})\-([0-9]{2})/,
|
30
|
-
/(\([0-9\+\-]+\)) ?([0-9]{3})\-([0-9]{2})\-([0-9]{2})/,
|
31
|
-
/(\([0-9\+\-]+\)) ?([0-9]{2})\-([0-9]{2})\-([0-9]{2})/,
|
32
|
-
/(\([0-9\+\-]+\)) ?([0-9]{3})\-([0-9]{2})/,
|
33
|
-
/(\([0-9\+\-]+\)) ?([0-9]{2})\-([0-9]{3})/,
|
34
|
-
/([0-9]{3})\-([0-9]{2})\-([0-9]{2})/,
|
35
|
-
/([0-9]{2})\-([0-9]{2})\-([0-9]{2})/,
|
36
|
-
/([0-9]{1})\-([0-9]{2})\-([0-9]{2})/,
|
37
|
-
/([0-9]{2})\-([0-9]{3})/,
|
38
|
-
/([0-9]+)\-([0-9]+)/,
|
39
|
-
],[
|
40
|
-
'<nobr>\1–\2–\3 \4:\5:\6</nobr>',
|
41
|
-
'<nobr>\1–\2–\3</nobr>',
|
42
|
-
'<nobr>\1 \2–\3–\4</nobr>',
|
43
|
-
'<nobr>\1 \2–\3–\4</nobr>',
|
44
|
-
'<nobr>\1 \2–\3</nobr>',
|
45
|
-
'<nobr>\1 \2–\3</nobr>',
|
46
|
-
'<nobr>\1–\2–\3</nobr>',
|
47
|
-
'<nobr>\1–\2–\3</nobr>',
|
48
|
-
'<nobr>\1–\2–\3</nobr>',
|
49
|
-
'<nobr>\1–\2</nobr>',
|
50
|
-
'<nobr>\1–\2</nobr>'
|
51
|
-
]]
|
52
|
-
|
53
|
-
@glueleft = ['рис.', 'табл.', 'см.', 'им.', 'ул.', 'пер.', 'кв.', 'офис', 'оф.', 'г.']
|
54
|
-
@glueright = ['руб.', 'коп.', 'у.е.', 'мин.']
|
55
|
-
|
56
|
-
@settings = {
|
57
|
-
"inches" => true, # преобразовывать дюймы в "
|
58
|
-
"laquo" => true, # кавычки-ёлочки
|
59
|
-
"farlaquo" => false, # кавычки-ёлочки для фара (знаки "больше-меньше")
|
60
|
-
"quotes" => true, # кавычки-английские лапки
|
61
|
-
"dash" => true, # короткое тире (150)
|
62
|
-
"emdash" => true, # длинное тире двумя минусами (151)
|
63
|
-
"(c)" => true,
|
64
|
-
"(r)" => true,
|
65
|
-
"(tm)" => true,
|
66
|
-
"(p)" => true,
|
67
|
-
"+-" => true, # спецсимволы, какие - понятно
|
68
|
-
"degrees" => true, # знак градуса
|
69
|
-
"<-->" => true, # отступы $Indent*
|
70
|
-
"dashglue" => true, "wordglue" => true, # приклеивание предлогов и дефисов
|
71
|
-
"spacing" => true, # запятые и пробелы, перестановка
|
72
|
-
"phones" => true, # обработка телефонов
|
73
|
-
"fixed" => false, # подгон под фиксированную ширину
|
74
|
-
"html" => false # запрет тагов html
|
75
|
-
}
|
76
|
-
# irrelevant - indentation with images
|
77
|
-
@indent_a = "<!--indent-->"
|
78
|
-
@indent_b = "<!--indent-->"
|
79
|
-
|
80
|
-
@mark_tag = "\xF0\xF0\xF0\xF0" # Подстановочные маркеры тегов
|
81
|
-
@mark_ignored = "\201" # Подстановочные маркеры неизменяемых групп
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
# Proxy unknown method calls as setting switches. Methods with = will set settings, methods without - fetch them
|
86
|
-
def method_missing(meth, *args) #:nodoc:
|
87
|
-
setting = meth.to_s.gsub(/=$/, '')
|
88
|
-
super(meth, *args) unless @settings.has_key?(setting) #this will pop the exception if we have no such setting
|
89
|
-
|
90
|
-
return @settings[meth.to_s] if setting == meth.to_s
|
91
|
-
return (@settings[meth.to_s] = args[0])
|
92
|
-
end
|
93
|
-
|
94
|
-
|
95
|
-
def to_html(no_paragraph = false)
|
96
|
-
|
97
|
-
text = @_text
|
98
|
-
|
99
|
-
# -2. игнорируем ещё регексп
|
100
|
-
ignored = []
|
101
|
-
|
102
|
-
|
103
|
-
text.scan(@ignore) do |result|
|
104
|
-
ignored << result
|
105
|
-
end
|
106
|
-
|
107
|
-
text.gsub!(@ignore, @mark_ignored) # маркер игнора
|
108
|
-
|
109
|
-
# -1. запрет тагов html
|
110
|
-
text.gsub!(/&/, '&') if @settings["html"]
|
111
|
-
|
112
|
-
|
113
|
-
# 0. Вырезаем таги
|
114
|
-
# проблема на самом деле в том, на что похожи таги.
|
115
|
-
# вариант 1, простой (закрывающий таг) </abcz>
|
116
|
-
# вариант 2, простой (просто таг) <abcz>
|
117
|
-
# вариант 3, посложней <abcz href="abcz">
|
118
|
-
# вариант 4, простой (просто таг) <abcz />
|
119
|
-
# вариант 5, вакка \xA2\xA2...== нафиг нафиг
|
120
|
-
# самый сложный вариант - это когда в параметре тага встречается вдруг символ ">"
|
121
|
-
# вот он: <abcz href="abcz>">
|
122
|
-
# как работает вырезание? введём спецсимвол. Да, да, спецсимвол.
|
123
|
-
# нам он ещё вопьётся =)
|
124
|
-
# заменим все таги на спец.символ, запоминая одновременно их в массив.
|
125
|
-
# и будем верить, что спец.символы в дикой природе не встречаются.
|
126
|
-
|
127
|
-
tags = []
|
128
|
-
if (@skip_tags)
|
129
|
-
# re = /<\/?[a-z0-9]+("+ # имя тага
|
130
|
-
# "\s+("+ # повторяющая конструкция: хотя бы один разделитель и тельце
|
131
|
-
# "[a-z]+("+ # атрибут из букв, за которым может стоять знак равенства и потом
|
132
|
-
# "=((\'[^\']*\')|(\"[^\"]*\")|([0-9@\-_a-z:\/?&=\.]+))"+ #
|
133
|
-
# ")?"+
|
134
|
-
# ")?"+
|
135
|
-
# ")*\/?>|\xA2\xA2[^\n]*?==/i;
|
136
|
-
|
137
|
-
# re = /<\/?[a-z0-9]+(\s+([a-z]+(=((\'[^\']*\')|(\"[^\"]*\")|([0-9@\-_a-z:\/?&=\.]+)))?)?)*\/?>|\xA2\xA2[^\n]*?==/ui
|
138
|
-
|
139
|
-
re = /(<\/?[a-z0-9]+(\s+([a-z]+(=((\'[^\']*\')|(\"[^\"]*\")|([0-9@\-_a-z:\/?&=\.]+)))?)?)*\/?>)/ui
|
140
|
-
|
141
|
-
# по-хорошему атрибуты тоже нужно типографить. Или не нужно? бугага...
|
142
|
-
|
143
|
-
tags = text.scan(re).map{|tag| tag[0] }
|
144
|
-
# match = "<" + match if @settings["html"]
|
145
|
-
text.gsub!(re, @mark_tag) #маркер тега, мы используем Invalid UTF-sequence для него
|
146
|
-
|
147
|
-
# puts "matched #{tags.size} tags"
|
148
|
-
end
|
149
|
-
|
150
|
-
# 1. Запятые и пробелы
|
151
|
-
if @settings["spacing"]
|
152
|
-
text.gsub!( /(\s*)([,]*)/sui, '\2\1');
|
153
|
-
text.gsub!( /(\s*)([\.?!]*)(\s*[ЁА-ЯA-Z])/su, '\2\1\3');
|
154
|
-
end
|
155
|
-
|
156
|
-
# 2. Разбиение на строки длиной не более ХХ символов
|
157
|
-
# --- для ваки не портировано ---
|
158
|
-
# --- для ваки не портировано ---
|
159
|
-
|
160
|
-
# 3. Спецсимволы
|
161
|
-
# 0. дюймы с цифрами
|
162
|
-
text.gsub!(/\s([0-9]{1,2}([\.,][0-9]{1,2})?)\"/ui, ' \1"') if @settings["inches"]
|
163
|
-
|
164
|
-
# 1. лапки
|
165
|
-
if (@settings["quotes"])
|
166
|
-
text.gsub!( /\"\"/ui, """")
|
167
|
-
text.gsub!( /\"\.\"/ui, ""."")
|
168
|
-
_text = '""';
|
169
|
-
while _text != text do
|
170
|
-
_text = text
|
171
|
-
text.gsub!( /(^|\s|\201|\xF0\xF0\xF0\xF0|>)\"([0-9A-Za-z\'\!\s\.\?\,\-\&\;\:\_\xF0\xF0\xF0\xF0\201]+(\"|”))/ui, '\1“\2')
|
172
|
-
#this doesnt work in-place. somehow.
|
173
|
-
text = text.gsub( /(\&\#147\;([A-Za-z0-9\'\!\s\.\?\,\-\&\;\:\xF0\xF0\xF0\xF0\201\_]*).*[A-Za-z0-9][\xF0\xF0\xF0\xF0\201\?\.\!\,]*)\"/ui, '\1”')
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
# 2. ёлочки
|
178
|
-
if @settings["laquo"]
|
179
|
-
text.gsub!( /\"\"/ui, """");
|
180
|
-
text.gsub!( /(^|\s|\201|\xF0\xF0\xF0\xF0|>|\()\"((\201|\xF0\xF0\xF0\xF0)*[~0-9ёЁA-Za-zА-Яа-я\-:\/\.])/ui, "\\1«\\2");
|
181
|
-
# nb: wacko only regexp follows:
|
182
|
-
text.gsub!( /(^|\s|\201|\xF0\xF0\xF0\xF0|>|\()\"((\201|\xF0\xF0\xF0\xF0|\/ |\/|\!)*[~0-9ёЁA-Za-zА-Яа-я\-:\/\.])/ui, "\\1«\\2")
|
183
|
-
_text = "\"\"";
|
184
|
-
while (_text != text) do
|
185
|
-
_text = text;
|
186
|
-
text.gsub!( /(\«\;([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/](\201|\xF0\xF0\xF0\xF0)*)\"/sui, "\\1»")
|
187
|
-
# nb: wacko only regexps follows:
|
188
|
-
text.gsub!( /(\«\;([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/](\201|\xF0\xF0\xF0\xF0)*\?(\201|\xF0\xF0\xF0\xF0)*)\"/sui, "\\1»")
|
189
|
-
text.gsub!( /(\«\;([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/](\201|\xF0\xF0\xF0\xF0|\/|\!)*)\"/sui, "\\1»")
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
|
194
|
-
# 2b. одновременно ёлочки и лапки
|
195
|
-
if (@settings["quotes"] && (@settings["laquo"] or @settings["farlaquo"]))
|
196
|
-
text.gsub!(/(\&\#147;\;(([A-Za-z0-9'!\.?,\-&;:]|\s|\xF0\xF0\xF0\xF0|\201)*)«(.*)»)»/ui,"\\1”");
|
197
|
-
end
|
198
|
-
|
199
|
-
|
200
|
-
# 3. тире
|
201
|
-
if (@settings["dash"])
|
202
|
-
text.gsub!( /(\s|;)\-(\s)/ui, "\\1–\\2")
|
203
|
-
end
|
204
|
-
|
205
|
-
|
206
|
-
# 3a. тире длинное
|
207
|
-
if (@settings["emdash"])
|
208
|
-
text.gsub!( /(\s|;)\-\-(\s)/ui, "\\1—\\2")
|
209
|
-
# 4. (с)
|
210
|
-
text.gsub!(/\([сСcC]\)((?=\w)|(?=\s[0-9]+))/u, "©") if @settings["(c)"]
|
211
|
-
# 4a. (r)
|
212
|
-
text.gsub!( /\(r\)/ui, "<sup>®</sup>") if @settings["(r)"]
|
213
|
-
|
214
|
-
# 4b. (tm)
|
215
|
-
text.gsub!( /\(tm\)|\(тм\)/ui, "™") if @settings["(tm)"]
|
216
|
-
# 4c. (p)
|
217
|
-
text.gsub!( /\(p\)/ui, "§") if @settings["(p)"]
|
218
|
-
end
|
219
|
-
|
220
|
-
|
221
|
-
# 5. +/-
|
222
|
-
text.gsub!(/[^+]\+\-/ui, "±") if @settings["+-"]
|
223
|
-
|
224
|
-
|
225
|
-
# 5a. 12^C
|
226
|
-
if @settings["degrees"]
|
227
|
-
text.gsub!( /-([0-9])+\^([FCС])/, "–\\1°\\2")
|
228
|
-
text.gsub!( /\+([0-9])+\^([FCС])/, "+\\1°\\2")
|
229
|
-
text.gsub!( /\^([FCС])/, "°\\1")
|
230
|
-
end
|
231
|
-
|
232
|
-
|
233
|
-
# 6. телефоны
|
234
|
-
if @settings["phones"]
|
235
|
-
@phonemasks[0].each_with_index do |v, i|
|
236
|
-
text.gsub!(v, @phonemasks[1][i])
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
|
241
|
-
# 7. Короткие слова и
|
242
|
-
if (@settings["wordglue"])
|
243
|
-
|
244
|
-
text = " " + text + " ";
|
245
|
-
_text = " " + text + " ";
|
246
|
-
until _text == text
|
247
|
-
_text = text
|
248
|
-
text.gsub!( /(\s+)([a-zа-яА-Я]{1,2})(\s+)([^\\s$])/ui, '\1\2 \4')
|
249
|
-
text.gsub!( /(\s+)([a-zа-яА-Я]{3})(\s+)([^\\s$])/ui, '\1\2 \4')
|
250
|
-
end
|
251
|
-
|
252
|
-
for i in @glueleft
|
253
|
-
text.gsub!( /(\s)(#{i})(\s+)/sui, '\1\2 ')
|
254
|
-
end
|
255
|
-
|
256
|
-
for i in @glueright
|
257
|
-
text.gsub!( /(\s)(#{i})(\s+)/sui, ' \2\3')
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
# 8. Склейка ласт. Тьфу! дефисов.
|
264
|
-
text.gsub!( /([a-zа-яА-Я0-9]+(\-[a-zа-яА-Я0-9]+)+)/ui, '<nobr>\1</nobr>') if @settings["dashglue"]
|
265
|
-
|
266
|
-
|
267
|
-
# 9. Макросы
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
# 10. Переводы строк
|
272
|
-
# --- для ваки не портировано ---
|
273
|
-
# --- для ваки не портировано ---
|
274
|
-
|
275
|
-
|
276
|
-
# БЕСКОНЕЧНОСТЬ. Вставляем таги обратно.
|
277
|
-
# if (@skip_tags)
|
278
|
-
# text = text.split("\xF0\xF0\xF0\xF0").join
|
279
|
-
#
|
280
|
-
|
281
|
-
tags.each do |tag|
|
282
|
-
text.sub!(@mark_tag, tag)
|
283
|
-
end
|
284
|
-
|
285
|
-
# i = 0
|
286
|
-
# text.gsub!(@mark_tag) {
|
287
|
-
# i + 1
|
288
|
-
# tags[i-1]
|
289
|
-
# }
|
290
|
-
|
291
|
-
# text = text.split("\xF0\xF0\xF0\xF0")
|
292
|
-
#puts "reinserted #{i} tags"
|
293
|
-
#
|
294
|
-
# end
|
295
|
-
|
296
|
-
|
297
|
-
#ext.gsub!("a", '')
|
298
|
-
# raise "Text still has tag markers!" if text.include?("a")
|
299
|
-
|
300
|
-
# БЕСКОНЕЧНОСТЬ-2. вставляем ещё сигнорированный регексп
|
301
|
-
#
|
302
|
-
# if @ignore
|
303
|
-
# ignored.each { | tag | text.sub!(@mark_ignored, tag) }
|
304
|
-
# end
|
305
|
-
|
306
|
-
# raise "Text still has ignored markers!" if text.include?("\201")
|
307
|
-
|
308
|
-
# БОНУС: прокручивание ссылок через A(...)
|
309
|
-
# --- для ваки не портировано ---
|
310
|
-
# --- для ваки не портировано ---
|
311
|
-
|
312
|
-
# фуф, закончили.
|
313
|
-
# text.gsub!(/<nobr>/, "<span class=\"nobr\">").gsub(/<\/nobr>/, "</span>") if (@de_nobr)
|
314
|
-
|
315
|
-
# text.gsub!(/<nobr>/, "<span class=\"nobr\">").gsub(/<\/nobr>/, "</span>") if (@de_nobr)
|
316
|
-
|
317
|
-
text.gsub(/(\s)+$/, "").gsub(/^(\s)+/, "")
|
318
|
-
|
319
|
-
end
|
320
|
-
|
321
|
-
end
|
data/test/t_typografica.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
$KCODE = 'u'
|
2
|
-
require 'test/unit'
|
3
|
-
require File.dirname(__FILE__) + '/../lib/rutils'
|
4
|
-
|
5
|
-
# Тесты Гиленсона - обычный набор тестов к Тыпографице с сайта pixel-apes. Все "наши" тесты Гиленсона идут в другой test case!
|
6
|
-
class TypograficaComplianceTest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
def test_phones
|
9
|
-
assert_equal '<nobr>3–12–30</nobr>', '3-12-30'.o_gilensize
|
10
|
-
assert_equal '<nobr>12–34–56</nobr>', '12-34-56'.o_gilensize
|
11
|
-
assert_equal '<nobr>88–25–04</nobr>', '88-25-04'.o_gilensize
|
12
|
-
assert_equal '+7 <nobr>(99284) 65–818</nobr>', '+7 (99284) 65-818'.o_gilensize
|
13
|
-
assert_equal '<nobr>725–01–10</nobr>', '725-01-10'.o_gilensize
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_address
|
17
|
-
assert_equal 'табл. 2, рис. 2.10', 'табл. 2, рис. 2.10'.o_gilensize
|
18
|
-
assert_equal 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева', 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева'.o_gilensize
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_specials
|
22
|
-
assert_equal '© 2002, © 2003, © 2004, © 2005 — тоже без пробелов: ©2002, ©Кукуц. однако: варианты (а) и (с)', '(с) 2002, (С) 2003, (c) 2004, (C) 2005 -- тоже без пробелов: (с)2002, (c)Кукуц. однако: варианты (а) и (с)'.o_gilensize
|
23
|
-
assert_equal '+5°С, +7°C, –5°F', '+5^С, +17^C, -275^F'.o_gilensize
|
24
|
-
assert_equal 'об этом подробнее — читай §25', 'об этом подробнее -- читай (p)25'.o_gilensize
|
25
|
-
assert_equal 'один же минус – краткое тире', 'один же минус - краткое тире'.o_gilensize
|
26
|
-
assert_equal 'Sharpdesign™, Microsoft<sup>®</sup>', 'Sharpdesign(tm), Microsoft(r)'.o_gilensize
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_breaking
|
30
|
-
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.o_gilensize
|
31
|
-
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!'.o_gilensize
|
32
|
-
assert_equal 'при установке командой строки в ?page=help <nobr>бла-бла-бла-бла</nobr>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.o_gilensize
|
33
|
-
assert_equal 'как интересно будет переноситься со строки на строку <nobr>что-то</nobr> разделённое дефисом, ведь дефис тот тоже ведь из наших. <nobr>Какие-то</nobr> браузеры думают, что следует переносить и его...', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.o_gilensize
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_quotes
|
37
|
-
assert_equal 'english “quotes” should be quite like this', 'english "quotes" should be quite like this'.o_gilensize
|
38
|
-
assert_equal 'русские же «оформляются» подобным образом', 'русские же "оформляются" подобным образом'.o_gilensize
|
39
|
-
assert_equal 'кавычки «расставлены» “in a chaotic order”', 'кавычки "расставлены" "in a chaotic order"'.o_gilensize
|
40
|
-
assert_equal 'диагональ моего монитора — 17", а размер пениса — 1,5"', 'диагональ моего монитора -- 17", а размер пениса -- 1,5"'.o_gilensize
|
41
|
-
assert_equal 'в толщину, «вложенные “quotes” вот так», “or it «будет вложено» elsewhere”', 'в толщину, "вложенные "quotes" вот так", "or it "будет вложено" elsewhere"'.o_gilensize
|
42
|
-
assert_equal '“complicated «кавычки», «странные “includements” кавычек»', '"complicated "кавычки", "странные "includements" кавычек"'.o_gilensize
|
43
|
-
assert_equal '“double “quotes”', '"double "quotes"'.o_gilensize
|
44
|
-
assert_equal '«дважды вложенные «кавычки»', '"дважды вложенные "кавычки"'.o_gilensize
|
45
|
-
assert_equal '«01/02/03», дискеты в 5.25"', '"01/02/03", дискеты в 5.25"'.o_gilensize
|
46
|
-
assert_equal 'после троеточия правая кавычка — «Вот...»', 'после троеточия правая кавычка -- "Вот..."'.o_gilensize
|
47
|
-
assert_equal 'setlocale(LC_ALL, “ru_RU.UTF8”);', 'setlocale(LC_ALL, "ru_RU.UTF8");'.o_gilensize
|
48
|
-
assert_equal '“read, write, delete” с флагом “only_mine”', '"read, write, delete" с флагом "only_mine"'.o_gilensize
|
49
|
-
assert_equal '«Двоеточие:», «такую умную тему должен писать чувак умеющий скрипты скриптить.»', '"Двоеточие:", "такую умную тему должен писать чувак умеющий скрипты скриптить."'.o_gilensize
|
50
|
-
assert_equal '(«Вики != HTML» — «Вики != HTML» — («всякая чушь»))', '("Вики != HTML" -- "Вики != HTML" -- ("всякая чушь"))'.o_gilensize
|
51
|
-
assert_equal '«фигня123», “fignya123”', '"фигня123", "fignya123"'.o_gilensize
|
52
|
-
# assert_equal '«сбалансированные «кавычки<!--notypo--><!--/notypo--> (четыре в конце) — связано с синтаксисом ваки', '"сбалансированные "кавычки"""" (четыре в конце) -- связано с синтаксисом ваки'.o_gilensize
|
53
|
-
assert_equal '«несбалансированные «кавычки""" (три в конце) — связано с синтаксисом ваки', '"несбалансированные "кавычки""" (три в конце) -- связано с синтаксисом ваки'.o_gilensize
|
54
|
-
assert_equal '«разноязыкие quotes»', '"разноязыкие quotes"'.o_gilensize
|
55
|
-
assert_equal '«multilanguage кавычки»', '"multilanguage кавычки"'.o_gilensize
|
56
|
-
end
|
57
|
-
end
|