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 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
@@ -2,6 +2,8 @@
2
2
 
3
3
  ==Gilenson
4
4
 
5
+ * Пара красивых примеров в README
6
+
5
7
  ==Pluralization
6
8
 
7
9
  * Истинная плюрализация без передачи рода и вариантов (как в Rails)
@@ -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
@@ -16,7 +16,7 @@ module RuTils
16
16
  end
17
17
 
18
18
  # ==Что такое Gilenson
19
- # Обработчик типографских символов в HTML согласно общепринятым правилам. Пока присутствует только в CVS.
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
- # Для маркера мы применяем invalid UTF-sequence чтобы его НЕЛЬЗЯ было перепутать с частью
185
- # любого другого мультибайтного глифа. Thanks to huNter.
186
- REPLACEMENT_MARKER = '\xF0\xF0\xF0\xF0' #:nodoc:
184
+ # Для маркера мы применяем invalid UTF-sequence чтобы его НЕЛЬЗЯ было перепутать с частью
185
+ # любого другого мультибайтного глифа. Thanks to huNter.
186
+ REPLACEMENT_MARKER = "\xF0\xF0\xF0\xF0" #:nodoc:
187
187
 
188
188
  # Кто придумал &#147;? Не учите людей плохому...
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 { |fragment|
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
- } # unless @settings['raw_output'] -- делать это надо всегда (mash)
450
+ end # unless @settings['raw_output'] -- делать это надо всегда (mash)
451
451
 
452
- fragment.gsub!(/ (title|alt)=((?:(\')([^\']*)(\'))|(?:(\")([^\"]*)(\")))/uim) {
453
- " #{$1}=#{$3}" + self.process($4.to_s) + "#{$5}#{$6}" + self.process($7.to_s) + "#{$8}"
454
- } unless @settings['skip_attr']
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\.\?\,\-\&\;\:\_#{@mark_tag}]+(\"|#{self.glyph[:rdquo]}))/ui, '\1'+self.glyph[:ldquo]+'\2')
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\.\?\,\-\&\;\:#{@mark_tag}\_]*).*[A-Za-z0-9][#{@mark_tag}\?\.\!\,]*)\"/ui, '\1'+self.glyph[:rdquo])
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:
@@ -1,4 +1,4 @@
1
- if defined?(Object::RedCloth)
1
+ if defined?(Object::RedCloth) and (!RedCloth.instance_methods.include?(:stock_pgl))
2
2
  # RuTils выполняет перегрузку Textile Glyphs в RedCloth, перенося форматирование спецсимволов на Gilenson.
3
3
  class Object::RedCloth < String #:nodoc:
4
4
 
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 #:nodoc:
10
- MINOR = 1 #:nodoc:
11
- TINY = 3 #:nodoc:
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
@@ -1,4 +1,4 @@
1
1
  Dir.entries(File.dirname(__FILE__)).each do | it|
2
- next unless it =~ /t_/
2
+ next unless it =~ /^t_/
3
3
  require File.dirname(__FILE__) + '/' + it.gsub(/\.rb$/, '')
4
4
  end
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 "Вот&#160;такие<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 "&#171;Он &#8212; сволочь!&#187;, сказал&#160;я",
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 "(сказали&#160;им)", "(сказали им)".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 "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
123
- @gilenson.process("Ну и куда вот -- да туда!")
124
-
125
- assert_equal "Ну и куда вот &#8212; да туда!",
126
- @gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
127
-
128
- assert_equal "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
129
- @gilenson.process("Ну и куда вот -- да туда!")
130
-
131
- @gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
132
-
133
- assert_equal "Ну и куда вот &#8212; да туда!",
134
- @gilenson.process("Ну и куда вот -- да туда!")
135
-
136
- @gilenson.configure!(:all => true)
137
-
138
- assert_equal "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
139
- @gilenson.process("Ну и куда вот -- да туда!")
140
-
141
- @gilenson.configure!(:all => false)
142
-
143
- assert_equal "Ну и куда вот -- да туда!",
144
- @gilenson.process("Ну и куда вот -- да туда!")
145
- end
146
111
 
147
- def test_glyph_override
148
- assert_equal 'скажи, мне, ведь не&#160;даром! Москва, клеймённая пожаром. Французу отдана',
149
- @gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
150
-
151
- @gilenson.glyph[:nbsp] = '&nbsp;'
152
- assert_equal 'скажи, мне, ведь не&nbsp;даром! Москва, клеймённая пожаром. Французу отдана',
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 '&#160; &#171; &#187; &#167; &#169; &#174; &#176; &#177; &#182; &#183; &#8211; &#8212; &#8216; &#8217; &#8220; &#8221; &#8222; &#8226; &#8230; &#8470; &#8482; &#8722; &#8201; &#8243;', @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 '&#38442; Это просто «кавычки»',
168
- @gilenson.process('&#38442; Это просто "кавычки"')
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 &#8212; test <tt attr='test -- attr'>Скип -- скип!</tt>",
188
126
  @gilenson.process("<tt>Скип -- скип!</tt> test -- test <tt attr='test -- attr'>Скип -- скип!</tt>")
189
127
 
190
- assert_equal "<TT>Скип -- скип!</TT><TT>Скип -- скип!</TT> &#8212; <CoDe attr='test -- attr'>Скип -- скип!</cOdE>",
191
- @gilenson.process("<TT>Скип -- скип!</TT><TT>Скип -- скип!</TT> -- <CoDe attr='test -- attr'>Скип -- скип!</cOdE>")
128
+ assert_equal "<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> &#8212; <code attr='test -- attr'>Скип -- скип!</code>",
129
+ @gilenson.process("<tt>Скип -- скип!</tt><tt>Скип -- скип!</tt> -- <code attr='test -- attr'>Скип -- скип!</code>")
192
130
 
193
131
  assert_equal "<ttt>Скип &#8212; скип!</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&amppp;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 "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
238
+ @gilenson.process("Ну и куда вот -- да туда!")
239
+
240
+ assert_equal "Ну и куда вот &#8212; да туда!",
241
+ @gilenson.process("Ну и куда вот -- да туда!", :dash => false, :dashglue => false, :wordglue => false)
242
+
243
+ assert_equal "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
244
+ @gilenson.process("Ну и куда вот -- да туда!")
245
+
246
+ @gilenson.configure!(:dash => false, :dashglue => false, :wordglue => false)
247
+
248
+ assert_equal "Ну и куда вот &#8212; да туда!",
249
+ @gilenson.process("Ну и куда вот -- да туда!")
250
+
251
+ @gilenson.configure!(:all => true)
252
+
253
+ assert_equal "Ну&#160;и куда вот&#160;&#8212; да&#160;туда!",
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 'скажи, мне, ведь не&#160;даром! Москва, клеймённая пожаром. Французу отдана',
264
+ @gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
265
+
266
+ @gilenson.glyph[:nbsp] = '&nbsp;'
267
+ assert_equal 'скажи, мне, ведь не&nbsp;даром! Москва, клеймённая пожаром. Французу отдана',
268
+ @gilenson.process('скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана')
269
+ end
270
+
271
+ def test_ugly_entities_replace2 # copy&paste
272
+ @gilenson.configure!(:copypaste => true)
273
+ assert_equal '&#160; &#171; &#187; &#167; &#169; &#174; &#176; &#177; &#182; &#183; &#8211; &#8212; &#8216; &#8217; &#8220; &#8221; &#8222; &#8226; &#8230; &#8470; &#8482; &#8722; &#8201; &#8243;', @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 '&#38442; Это просто «кавычки»',
283
+ @gilenson.process('&#38442; Это просто "кавычки"')
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
 
@@ -46,7 +46,7 @@ class MarkdownIntegrationTest < Test::Unit::TestCase
46
46
  assert RuTils.overrides_enabled?
47
47
  assert_equal "<p>И вот&#160;&#171;они пошли туда&#187;, и&#160;шли шли&#160;шли</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.3
7
- date: 2005-11-15 00:00:00 +01:00
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