rutils 0.1.3 → 0.1.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.
- data/CHANGELOG +9 -0
- data/TODO +2 -0
- data/lib/datetime/datetime.rb +1 -1
- data/lib/gilenson/gilenson.rb +16 -14
- data/lib/integration/red_cloth_override.rb +1 -1
- data/lib/rutils.rb +4 -4
- data/test/run_tests.rb +1 -1
- data/test/t_gilenson.rb +72 -71
- data/test/t_integration.rb +1 -1
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
Версия 0.1.4 - 02.12.2005
|
2
|
+
* Поправлен паттерн сбора тестируемых файлов (julik)
|
3
|
+
* Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
|
4
|
+
* Gilenson - в тестах произведена замена <cOdE> на <code> и <TT> на <tt> (mash)
|
5
|
+
* Gilenson - в двух регулярных выражениях (в "def process_quotes") изменен #{@mark_tag} на
|
6
|
+
\#{@mark_tag} чтобы предотвратить segfault ruby 1.8.2 (2004-12-25) на [i386-mswin32] (mash)
|
7
|
+
* Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
|
8
|
+
* DateTime - RU_INFLECTED_MONTHNAMES => Авгуса --> Августа (mash)
|
9
|
+
|
1
10
|
Версия 0.1.3 - 14.11.2005
|
2
11
|
* Gilenson - замена троеточий на ellipsis (julik)
|
3
12
|
* Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
|
data/TODO
CHANGED
data/lib/datetime/datetime.rb
CHANGED
@@ -50,7 +50,7 @@ class Date
|
|
50
50
|
RU_DAYNAMES = %w(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота)
|
51
51
|
RU_ABBR_MONTHNAMES = [nil] + %w{ Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек }
|
52
52
|
RU_ABBR_DAYNAMES = %w(Вск Пн Вт Ср Чт Пт Сб)
|
53
|
-
RU_INFLECTED_MONTHNAMES = [nil] + %w{ Января Февраля Марта Апреля Мая Июня Июля
|
53
|
+
RU_INFLECTED_MONTHNAMES = [nil] + %w{ Января Февраля Марта Апреля Мая Июня Июля Августа Сентября Октября Ноября Декабря }
|
54
54
|
# RU_DAYNAMES_E -- оставить?
|
55
55
|
RU_DAYNAMES_E = [nil] + %w{первое второе третье четвёртое пятое шестое седьмое восьмое девятое десятое одиннадцатое двенадцатое тринадцатое четырнадцатое пятнадцатое шестнадцатое семнадцатое восемнадцатое девятнадцатое двадцатое двадцать тридцатое тридцатьпервое}
|
56
56
|
end
|
data/lib/gilenson/gilenson.rb
CHANGED
@@ -16,7 +16,7 @@ module RuTils
|
|
16
16
|
end
|
17
17
|
|
18
18
|
# ==Что такое Gilenson
|
19
|
-
# Обработчик типографских символов в HTML согласно общепринятым правилам.
|
19
|
+
# Обработчик типографских символов в HTML согласно общепринятым правилам.
|
20
20
|
# Посвящается П.Г.Гиленсону[http://www.rudtp.ru/lib.php?book=172], благодаря которому русские правила тех.
|
21
21
|
# редактуры еще как минимум 20 лет останутся столь-же бессмысленно старомодными и строгими.
|
22
22
|
#
|
@@ -181,9 +181,9 @@ class RuTils::Gilenson::Formatter
|
|
181
181
|
'″' => :inch,
|
182
182
|
} #:nodoc:
|
183
183
|
|
184
|
-
|
185
|
-
|
186
|
-
|
184
|
+
# Для маркера мы применяем invalid UTF-sequence чтобы его НЕЛЬЗЯ было перепутать с частью
|
185
|
+
# любого другого мультибайтного глифа. Thanks to huNter.
|
186
|
+
REPLACEMENT_MARKER = "\xF0\xF0\xF0\xF0" #:nodoc:
|
187
187
|
|
188
188
|
# Кто придумал “? Не учите людей плохому...
|
189
189
|
# Привет А.Лебедеву http://www.artlebedev.ru/kovodstvo/62/
|
@@ -444,16 +444,18 @@ class RuTils::Gilenson::Formatter
|
|
444
444
|
end
|
445
445
|
|
446
446
|
def reinsert_fragments(text, fragments)
|
447
|
-
fragments.each
|
448
|
-
fragment.gsub!(/ (href|src|data)=((?:(\')([^\']*)(\'))|(?:(\")([^\"]*)(\")))/uim)
|
447
|
+
fragments.each do |fragment|
|
448
|
+
fragment.gsub!(/ (href|src|data)=((?:(\')([^\']*)(\'))|(?:(\")([^\"]*)(\")))/uim) do
|
449
449
|
" #{$1}=" + $2.gsub(/&(?!(#0*38)|(amp);)/, self.glyph[:amp])
|
450
|
-
|
450
|
+
end # unless @settings['raw_output'] -- делать это надо всегда (mash)
|
451
451
|
|
452
|
-
|
453
|
-
|
454
|
-
|
452
|
+
unless @settings['skip_attr']
|
453
|
+
fragment.gsub!(/ (title|alt)=((?:(\')([^\']*)(\'))|(?:(\")([^\"]*)(\")))/uim) do
|
454
|
+
" #{$1}=#{$3}" + self.process($4.to_s) + "#{$5}#{$6}" + self.process($7.to_s) + "#{$8}"
|
455
|
+
end
|
456
|
+
end
|
455
457
|
text.sub!(@mark_tag, fragment)
|
456
|
-
|
458
|
+
end
|
457
459
|
end
|
458
460
|
|
459
461
|
### Имплементации фильтров
|
@@ -533,9 +535,9 @@ class RuTils::Gilenson::Formatter
|
|
533
535
|
_text = '""';
|
534
536
|
until _text == text do
|
535
537
|
_text = text.dup
|
536
|
-
text.gsub!( /(^|\s|#{@mark_tag}|>)\"([0-9A-Za-z\'\!\s\.\?\,\-\&\;\:\_
|
538
|
+
text.gsub!( /(^|\s|#{@mark_tag}|>)\"([0-9A-Za-z\'\!\s\.\?\,\-\&\;\:\_\#{@mark_tag}]+(\"|#{self.glyph[:rdquo]}))/ui, '\1'+self.glyph[:ldquo]+'\2')
|
537
539
|
#this doesnt work in-place. somehow.
|
538
|
-
text.gsub!( /(#{self.glyph[:ldquo]}([A-Za-z0-9\'\!\s
|
540
|
+
text.gsub!( /(#{self.glyph[:ldquo]}([A-Za-z0-9\'\!\s\.\?\,\-\&\;\:\#{@mark_tag}\_]*).*[A-Za-z0-9][\#{@mark_tag}\?\.\!\,]*)\"/ui, '\1'+self.glyph[:rdquo])
|
539
541
|
end
|
540
542
|
end
|
541
543
|
|
@@ -604,7 +606,7 @@ class RuTils::Gilenson::Formatter
|
|
604
606
|
end
|
605
607
|
end #end Gilenson
|
606
608
|
|
607
|
-
class RuTils::Gilenson::UnknownSetting < RuntimeError
|
609
|
+
class RuTils::Gilenson::UnknownSetting < RuntimeError #:nodoc:
|
608
610
|
end
|
609
611
|
|
610
612
|
module RuTils::Gilenson::StringFormatting #:nodoc:
|
data/lib/rutils.rb
CHANGED
@@ -6,12 +6,12 @@ require 'jcode' # вот от этого надо бы избавиться - с
|
|
6
6
|
module RuTils
|
7
7
|
# Папка, куда установлен модуль RuTils. Нужно чтобы автоматически копировать RuTils в другие приложения.
|
8
8
|
INSTALLATION_DIRECTORY = File.expand_path(File.dirname(__FILE__) + '/../') #:nodoc:
|
9
|
-
MAJOR = 0
|
10
|
-
MINOR = 1
|
11
|
-
TINY =
|
9
|
+
MAJOR = 0
|
10
|
+
MINOR = 1
|
11
|
+
TINY = 4
|
12
12
|
|
13
13
|
# Версия RuTils
|
14
|
-
VERSION = [MAJOR, MINOR ,TINY].join('.')
|
14
|
+
VERSION = [MAJOR, MINOR ,TINY].join('.') #:nodoc:
|
15
15
|
|
16
16
|
# Стандартный маркер для подстановок
|
17
17
|
SUBSTITUTION_MARKER = "\xFF\xFF\xFF\xFF" #:nodoc:
|
data/test/run_tests.rb
CHANGED
data/test/t_gilenson.rb
CHANGED
@@ -7,9 +7,10 @@ require File.dirname(__FILE__) + '/../lib/rutils'
|
|
7
7
|
# Когда у рутилей появятся собственные баги под каждый баг следует завести тест
|
8
8
|
class GilensonOwnTest < Test::Unit::TestCase
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def setup
|
11
|
+
@gilenson = RuTils::Gilenson::Formatter.new
|
12
|
+
end
|
13
|
+
|
13
14
|
def test_tag_lift
|
14
15
|
assert_equal "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела", "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела".gilensize
|
15
16
|
end
|
@@ -89,7 +90,6 @@ class GilensonOwnTest < Test::Unit::TestCase
|
|
89
90
|
|
90
91
|
assert_equal "«Он — сволочь!», сказал я",
|
91
92
|
%q{ "Он -- сволочь!", сказал я }.gilensize
|
92
|
-
|
93
93
|
end
|
94
94
|
|
95
95
|
def test_initials
|
@@ -108,75 +108,13 @@ class GilensonOwnTest < Test::Unit::TestCase
|
|
108
108
|
assert_equal "сказали нам", "сказали нам".gilensize
|
109
109
|
assert_equal "(сказали им)", "(сказали им)".gilensize
|
110
110
|
end
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
|
115
|
-
class GilensonConfigurationTest < Test::Unit::TestCase
|
116
|
-
def setup
|
117
|
-
@gilenson = RuTils::Gilenson::Formatter.new
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_settings_as_tail_arguments
|
121
|
-
|
122
|
-
assert_equal "Ну и куда вот — да туда!",
|
123
|
-
@gilenson.process("Ну и куда вот -- да туда!")
|
124
|
-
|
125
|
-
assert_equal "Ну и куда вот — да туда!",
|
126
|
-
@gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
|
127
|
-
|
128
|
-
assert_equal "Ну и куда вот — да туда!",
|
129
|
-
@gilenson.process("Ну и куда вот -- да туда!")
|
130
|
-
|
131
|
-
@gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
|
132
|
-
|
133
|
-
assert_equal "Ну и куда вот — да туда!",
|
134
|
-
@gilenson.process("Ну и куда вот -- да туда!")
|
135
|
-
|
136
|
-
@gilenson.configure!(:all => true)
|
137
|
-
|
138
|
-
assert_equal "Ну и куда вот — да туда!",
|
139
|
-
@gilenson.process("Ну и куда вот -- да туда!")
|
140
|
-
|
141
|
-
@gilenson.configure!(:all => false)
|
142
|
-
|
143
|
-
assert_equal "Ну и куда вот -- да туда!",
|
144
|
-
@gilenson.process("Ну и куда вот -- да туда!")
|
145
|
-
end
|
146
111
|
|
147
|
-
def
|
148
|
-
assert_equal
|
149
|
-
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
150
|
-
|
151
|
-
@gilenson.glyph[:nbsp] = ' '
|
152
|
-
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
153
|
-
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
112
|
+
def test_marker_bypass
|
113
|
+
assert_equal "<p><nobr>МИЭЛЬ-Недвижимость</nobr></p>", "<p>МИЭЛЬ-Недвижимость</p>".gilensize
|
154
114
|
end
|
155
115
|
|
156
|
-
def test_ugly_entities_replace2 # copy&paste
|
157
|
-
@gilenson.configure!(:copypaste => true)
|
158
|
-
assert_equal '  « » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ −   ″', @gilenson.process(' « » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ − ″')
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_raise_on_unknown_setting
|
162
|
-
assert_raise(RuTils::Gilenson::UnknownSetting) { @gilenson.configure!(:bararara => true) }
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_raw_utf8_output
|
166
|
-
@gilenson.configure!(:raw_output=>true)
|
167
|
-
assert_equal '阪 Это просто «кавычки»',
|
168
|
-
@gilenson.process('阪 Это просто "кавычки"')
|
169
|
-
end
|
170
|
-
|
171
|
-
def test_configure_alternate_names
|
172
|
-
assert @gilenson.configure(:raw_output=>true)
|
173
|
-
assert @gilenson.configure!(:raw_output=>true)
|
174
|
-
end
|
175
|
-
|
176
116
|
def test_skip_code
|
177
|
-
@gilenson.configure!(:all => true)
|
178
|
-
|
179
|
-
@gilenson.configure!(:skip_code => true)
|
117
|
+
@gilenson.configure!(:all => true, :skip_code => true)
|
180
118
|
|
181
119
|
assert_equal "<code>Скип -- скип!</code>",
|
182
120
|
@gilenson.process("<code>Скип -- скип!</code>")
|
@@ -187,8 +125,8 @@ class GilensonConfigurationTest < Test::Unit::TestCase
|
|
187
125
|
assert_equal "<tt>Скип -- скип!</tt> test — test <tt attr='test -- attr'>Скип -- скип!</tt>",
|
188
126
|
@gilenson.process("<tt>Скип -- скип!</tt> test -- test <tt attr='test -- attr'>Скип -- скип!</tt>")
|
189
127
|
|
190
|
-
assert_equal "<
|
191
|
-
@gilenson.process("<
|
128
|
+
assert_equal "<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> — <code attr='test -- attr'>Скип -- скип!</code>",
|
129
|
+
@gilenson.process("<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> -- <code attr='test -- attr'>Скип -- скип!</code>")
|
192
130
|
|
193
131
|
assert_equal "<ttt>Скип — скип!</tt>",
|
194
132
|
@gilenson.process("<ttt>Скип -- скип!</tt>")
|
@@ -286,6 +224,69 @@ class GilensonConfigurationTest < Test::Unit::TestCase
|
|
286
224
|
@gilenson.process("<a href='test?test15=15&pp;test16=16'>test&</a>")
|
287
225
|
|
288
226
|
end
|
227
|
+
end
|
228
|
+
|
229
|
+
|
230
|
+
class GilensonConfigurationTest < Test::Unit::TestCase
|
231
|
+
def setup
|
232
|
+
@gilenson = RuTils::Gilenson::Formatter.new
|
233
|
+
end
|
234
|
+
|
235
|
+
def test_settings_as_tail_arguments
|
236
|
+
|
237
|
+
assert_equal "Ну и куда вот — да туда!",
|
238
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
239
|
+
|
240
|
+
assert_equal "Ну и куда вот — да туда!",
|
241
|
+
@gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
|
242
|
+
|
243
|
+
assert_equal "Ну и куда вот — да туда!",
|
244
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
245
|
+
|
246
|
+
@gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
|
247
|
+
|
248
|
+
assert_equal "Ну и куда вот — да туда!",
|
249
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
250
|
+
|
251
|
+
@gilenson.configure!(:all => true)
|
252
|
+
|
253
|
+
assert_equal "Ну и куда вот — да туда!",
|
254
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
255
|
+
|
256
|
+
@gilenson.configure!(:all => false)
|
257
|
+
|
258
|
+
assert_equal "Ну и куда вот -- да туда!",
|
259
|
+
@gilenson.process("Ну и куда вот -- да туда!")
|
260
|
+
end
|
261
|
+
|
262
|
+
def test_glyph_override
|
263
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
264
|
+
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
265
|
+
|
266
|
+
@gilenson.glyph[:nbsp] = ' '
|
267
|
+
assert_equal 'скажи, мне, ведь не даром! Москва, клеймённая пожаром. Французу отдана',
|
268
|
+
@gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
|
269
|
+
end
|
270
|
+
|
271
|
+
def test_ugly_entities_replace2 # copy&paste
|
272
|
+
@gilenson.configure!(:copypaste => true)
|
273
|
+
assert_equal '  « » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ −   ″', @gilenson.process(' « » § © ® ° ± ¶ · – — ‘ ’ “ ” „ • … № ™ − ″')
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_raise_on_unknown_setting
|
277
|
+
assert_raise(RuTils::Gilenson::UnknownSetting) { @gilenson.configure!(:bararara => true) }
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_raw_utf8_output
|
281
|
+
@gilenson.configure!(:raw_output=>true)
|
282
|
+
assert_equal '阪 Это просто «кавычки»',
|
283
|
+
@gilenson.process('阪 Это просто "кавычки"')
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_configure_alternate_names
|
287
|
+
assert @gilenson.configure(:raw_output=>true)
|
288
|
+
assert @gilenson.configure!(:raw_output=>true)
|
289
|
+
end
|
289
290
|
|
290
291
|
end
|
291
292
|
|
data/test/t_integration.rb
CHANGED
@@ -46,7 +46,7 @@ class MarkdownIntegrationTest < Test::Unit::TestCase
|
|
46
46
|
assert RuTils.overrides_enabled?
|
47
47
|
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
48
48
|
BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
49
|
-
|
49
|
+
|
50
50
|
RuTils::overrides = false
|
51
51
|
assert !RuTils.overrides_enabled?
|
52
52
|
assert_equal "<p>И вот \"они пошли туда\", и шли шли шли</p>",
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rutils
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.1.4
|
7
|
+
date: 2005-12-04 00:00:00 +01:00
|
8
8
|
summary: Simple processing of russian strings
|
9
9
|
require_paths:
|
10
10
|
- lib
|