rutils 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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