rutils 0.2.3 → 0.2.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/test/t_gilenson.rb CHANGED
@@ -27,11 +27,11 @@ class GilensonOwnTest < Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  def test_phones
30
- assert_equal '<nobr>3&#8211;12&#8211;30</nobr>', '3-12-30'.gilensize
31
- assert_equal '<nobr>12&#8211;34&#8211;56</nobr>', '12-34-56'.gilensize
32
- assert_equal '<nobr>88&#8211;25&#8211;04</nobr>', '88-25-04'.gilensize
33
- assert_equal '+7 <nobr>(99284)&#160;65&#8211;818</nobr>', '+7 (99284) 65-818'.gilensize
34
- assert_equal '<nobr>725&#8211;01&#8211;10</nobr>', '725-01-10'.gilensize
30
+ assert_equal '<span class="nobr">3&#8211;12&#8211;30</span>', '3-12-30'.gilensize
31
+ assert_equal '<span class="nobr">12&#8211;34&#8211;56</span>', '12-34-56'.gilensize
32
+ assert_equal '<span class="nobr">88&#8211;25&#8211;04</span>', '88-25-04'.gilensize
33
+ assert_equal '+7 <span class="nobr">(99284)&#160;65&#8211;818</span>', '+7 (99284) 65-818'.gilensize
34
+ assert_equal '<span class="nobr">725&#8211;01&#8211;10</span>', '725-01-10'.gilensize
35
35
  end
36
36
 
37
37
  def test_acronyms_with_html_output
@@ -78,10 +78,23 @@ class GilensonOwnTest < Test::Unit::TestCase
78
78
  def test_breaking
79
79
  assert_equal 'скажи, мне, ведь не&#160;даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.gilensize
80
80
  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
81
- assert_equal 'при&#160;установке командой строки в&#160;?page=help <nobr>бла-бла-бла-бла</nobr>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
82
- assert_equal 'как&#160;интересно будет переноситься со&#160;строки на&#160;строку <nobr>что-то</nobr> разделённое дефисом, ведь дефис тот&#160;тоже ведь из&#160;наших. <nobr>Какие-то</nobr> браузеры думают, что&#160;следует переносить и&#160;его&#8230;', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
81
+ assert_equal 'при&#160;установке командой строки в&#160;?page=help <span class="nobr">бла-бла-бла-бла</span>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
82
+ assert_equal 'как&#160;интересно будет переноситься со&#160;строки на&#160;строку <span class="nobr">что-то</span> разделённое дефисом, ведь дефис тот&#160;тоже ведь из&#160;наших. <span class="nobr">Какие-то</span> браузеры думают, что&#160;следует переносить и&#160;его&#8230;', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
83
83
  end
84
84
 
85
+ def test_forced_quotes
86
+ assert_equal 'кавычки &#171;расставлены&#187; &#8220;in a&#160;chaotic order&#8221;',
87
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize
88
+ assert_equal 'кавычки &#8220;расставлены&#8221; &#8220;in a&#160;chaotic order&#8221;',
89
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_en_quotes => true)
90
+ assert_equal 'кавычки &#171;расставлены&#187; &#171;in a&#160;chaotic order&#187;',
91
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_ru_quotes => true)
92
+ end
93
+
94
+ #def test_quotes_and_inch
95
+ # assert_equal "&#171;This one&#160;is&#160;12&#8342;&#187;", '"This one is 12""'.gilensize
96
+ #end
97
+
85
98
  def test_quotes
86
99
  assert_equal 'english &#8220;quotes&#8221; should be&#160;quite like this', 'english "quotes" should be quite like this'.gilensize
87
100
  assert_equal 'русские же&#160;&#171;оформляются&#187; подобным образом', 'русские же "оформляются" подобным образом'.gilensize
@@ -146,10 +159,15 @@ class GilensonOwnTest < Test::Unit::TestCase
146
159
  assert_equal "сказали мы?!!!", "сказали мы?!!!".gilensize
147
160
  assert_equal "сказали нам", "сказали нам".gilensize
148
161
  assert_equal "(сказали&#160;им)", "(сказали им)".gilensize
162
+ assert_equal "Справка&#160;09", 'Справка 09'.gilensize
163
+ end
164
+
165
+ def test_wordglue_combined_with_glyphs # http://pixel-apes.com/typografica/trako/12
166
+ assert_equal "&#171;Справка&#160;09&#187;", '"Справка 09"'.gilensize(:wordglue => true)
149
167
  end
150
168
 
151
169
  def test_marker_bypass
152
- assert_equal "<p><nobr>МИЭЛЬ-Недвижимость</nobr></p>", "<p>МИЭЛЬ-Недвижимость</p>".gilensize
170
+ assert_equal "<p><span class=\"nobr\">МИЭЛЬ-Недвижимость</span></p>", "<p>МИЭЛЬ-Недвижимость</p>".gilensize
153
171
  end
154
172
 
155
173
  def test_skip_code
@@ -338,6 +356,18 @@ class GilensonConfigurationTest < Test::Unit::TestCase
338
356
  assert_raise(RuTils::Gilenson::UnknownSetting) { @gilenson.configure!(:bararara => true) }
339
357
  end
340
358
 
359
+ def test_raise_on_unknown_setting_via_gilensize
360
+ assert_raise(RuTils::Gilenson::UnknownSetting) { "s".gilensize(:bararara => true) }
361
+ end
362
+
363
+ def test_backslash_does_not_suppress_quote # http://pixel-apes.com/typografica/trako/13, но с латинскими кавычками
364
+ assert_equal "&#8220;c:\\www\\sites\\&#8221;", '"c:\www\sites\"'.gilensize
365
+ end
366
+
367
+ def test_cpp
368
+ assert_equal "C++-API", "C++-API".gilensize
369
+ end
370
+
341
371
  def test_raw_utf8_output
342
372
  @gilenson.configure!(:raw_output=>true)
343
373
  assert_equal '&#38442; Это просто «кавычки»',
@@ -348,18 +378,10 @@ class GilensonConfigurationTest < Test::Unit::TestCase
348
378
  assert @gilenson.configure(:raw_output=>true)
349
379
  assert @gilenson.configure!(:raw_output=>true)
350
380
  end
351
- end
352
-
353
- # class TypograficaTrakoEntries < Test::Unit::TestCase
354
- # def test_cpp
355
- # assert_equal "C++-API", "C++-API".gilensize
356
- # end
357
- #
358
- # def test_symmetricity # http://pixel-apes.com/typografica/trako/12
359
- # assert_equal "&#171;Справка&#160;09&#187;", '"Справка 09"'.gilensize
360
- # end
361
- #
362
- # def test_paths # http://pixel-apes.com/typografica/trako/13
363
- # assert_equal '&#171;c:\www\sites\&#187;', '"c:\www\sites\"'.gilensize
364
- # end
365
- # end
381
+
382
+ def test_explicit_nobr
383
+ @gilenson.glyph[:nob_open] = '[NOB]'
384
+ @gilenson.glyph[:nob_close] = '[NOBC]'
385
+ assert_equal '[NOB]3&#8211;12&#8211;30[NOBC]', @gilenson.process('3-12-30')
386
+ end
387
+ end
@@ -1,6 +1,12 @@
1
1
  $KCODE = 'u'
2
- require 'test/unit'
3
2
  require 'rubygems'
3
+ require 'test/unit'
4
+
5
+ begin
6
+ require 'multi_rails_init'
7
+ rescue LoadError
8
+ $stderr.puts "Please install multi_rails for regression testing!"
9
+ end
4
10
 
5
11
  begin
6
12
  require 'action_controller' unless defined?(ActionController)
@@ -85,41 +91,79 @@ class MarkdownIntegrationTest < Test::Unit::TestCase
85
91
  end
86
92
  end
87
93
 
88
- TEST_DATE = Date.parse("1983-10-15") # coincidentially...
94
+ TEST_DATE = Date.parse("1983-10-15") # coincidentially...
89
95
  TEST_TIME = Time.local(1983, 10, 15, 12, 15) # also coincidentially...
96
+
90
97
  # Перегрузка helper'ов Rails
91
98
  class RailsHelpersOverrideTest < Test::Unit::TestCase
92
- def test_distance_of_time_in_words
99
+ # Вспомогательный класс для тестирования перегруженного DateHelper
100
+ class HelperStub
101
+ # для тестирования to_datetime_select_tag
102
+ def date_field; TEST_TIME; end
103
+ end
104
+
105
+ def setup
93
106
  raise "You must have Rails to test ActionView integration" and return if $skip_rails
94
107
 
95
- eval 'class HelperTester
96
- include ActionView::Helpers::DateHelper
97
- def get_distance
98
- distance_of_time_in_words(Time.now - 20.minutes, Time.now)
99
- end
100
-
101
- def get_select_month
102
- select_month(TEST_DATE)
103
- end
104
-
105
- def get_date_select
106
- select_date(TEST_DATE)
107
- end
108
-
109
- def get_date_select_without_day
110
- select_date(TEST_DATE, :order => [:month, :year])
111
- end
112
-
113
- end'
114
-
115
108
  RuTils::overrides = true
116
- stub = HelperTester.new
117
- assert_equal "20 минут", stub.get_distance
118
- assert_match /июль/, stub.get_select_month, "Месяц в выборе месяца должен быть указан в именительном падеже"
119
- assert_match /декабря/, stub.get_date_select, "Имя месяца должно быть указано в родительном падеже"
120
- assert_match /декабря/, stub.get_date_select_without_day,
109
+ # А никто и не говорил что класс должен быть один :-)
110
+ k = Class.new(HelperStub)
111
+ [ActionView::Helpers::TagHelper, ActionView::Helpers::DateHelper].each{|m| k.send(:include, m)}
112
+ @stub = k.new
113
+ end
114
+
115
+ def test_distance_of_time_in_words
116
+ assert_equal "20 минут", @stub.distance_of_time_in_words(Time.now - 20.minutes, Time.now)
117
+ end
118
+
119
+ # TODO - TextMate это не хайлайтит, и это _крайне_ достает
120
+ def test_select_month
121
+ assert_match /июль/, @stub.select_month(TEST_DATE),
122
+ "Месяц в выборе месяца должен быть указан в именительном падеже"
123
+ assert_match />7\<\/option\>/, @stub.select_month(TEST_DATE, :use_month_numbers => true),
124
+ "Хелпер select_month с номером месяца вместо названия месяца"
125
+ assert_match /10\ \-\ октябрь/, @stub.select_month(TEST_DATE, :add_month_numbers => true),
126
+ "Хелпер select_month с номером и названием месяца"
127
+ assert_match /\>июн\<\/option\>/, @stub.select_month(TEST_DATE, :use_short_month => true),
128
+ "Короткое имя месяца при использовании опции :use_short_month"
129
+ assert_match /name\=\"date\[foobar\]\"/, @stub.select_month(TEST_DATE, :field_name => "foobar"),
130
+ "Хелпер select_month должен принимать опцию :field_name"
131
+ assert_match /type\=\"hidden\".+value\=\"10\"/m, @stub.select_month(TEST_DATE, :use_hidden => true),
132
+ "Хелпер select_month должен принимать опцию :use_hidden"
133
+ end
134
+
135
+ def test_select_date
136
+ assert_match /date\_day.+date\_month.+date\_year/m, @stub.select_date(TEST_DATE),
137
+ "Хелпер select_date должен выводить поля в следующем порядке: день, месяц, год"
138
+ assert_match /декабря/, @stub.select_date(TEST_DATE),
139
+ "Имя месяца должно быть указано в родительном падеже"
140
+ assert_match /декабря/, @stub.select_date(TEST_DATE, :order => [:month, :year]),
121
141
  "Хелпер select_date не позволяет опускать фрагменты, имя месяца должно быть указано в родительном падеже"
122
-
142
+ assert_match @stub.select_date, @stub.select_date(Time.now),
143
+ "Хелпер select_date без параметров работает с текущей датой"
144
+ end
145
+
146
+ def test_select_datetime
147
+ assert_match /date\_day.+date\_month.+date\_year/m, @stub.select_datetime(TEST_TIME),
148
+ "Хелпер select_datetime должен выводить поля в следующем порядке: день, месяц, год"
149
+ end
150
+
151
+ def test_html_options
152
+ if ActionView::Helpers::DateHelper::DATE_HELPERS_RECEIVE_HTML_OPTIONS
153
+ assert_match /id\=\"foobar\"/m, @stub.select_month(TEST_DATE, {}, :id => "foobar"),
154
+ "Хелпер select_month принимает html_options"
155
+
156
+ assert_match /id\=\"foobar\"/m, @stub.select_date(TEST_DATE, {}, :id => "foobar"),
157
+ "Хелпер select_date принимает html_options"
158
+ end
159
+ end
160
+
161
+ def test_instance_tag
162
+ @it = ActionView::Helpers::InstanceTag.new(:stub, :date_field, self).to_datetime_select_tag
163
+ assert_match /\>10\<.+\>октября\<.+\>1983\</m, @it,
164
+ "to_datetime_select_rag должен выводить поля в следующем порядке: день, месяц, год"
165
+ assert_match /июля/m, @it,
166
+ "to_datetime_select_tag выводит месяц в родительном падеже"
123
167
  end
124
168
  end
125
169
 
data/test/t_pluralize.rb CHANGED
@@ -39,6 +39,8 @@ class PropisjuTestCase < Test::Unit::TestCase
39
39
  assert_equal "триста сорок три рубля двадцать копеек", (343.20).rublej
40
40
  assert_equal "сорок две копейки", (0.4187).rublej
41
41
  assert_equal "триста тридцать два рубля", (331.995).rublej
42
+ assert_equal "один рубль", 1.rubl
43
+ assert_equal "три рубля четырнадцать копеек", (3.14).rublja
42
44
  end
43
45
  end
44
46
 
metadata CHANGED
@@ -1,86 +1,102 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: rutils
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.2.3
7
- date: 2007-09-27 00:00:00 +02:00
8
- summary: Simple processing of russian strings
9
- require_paths:
10
- - lib
11
- email: me@julik.nl
12
- homepage: http://rubyforge.org/projects/rutils
13
- rubyforge_project: rutils
14
- description: Allows simple processing of russian strings - transliteration, numerals as text and HTML beautification
15
- autorequire: rutils
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.4
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
- - Julian "Julik" Tarkhanov
7
+ - Julian 'Julik' Tarkhanov
8
+ - Danil Ivanov
9
+ - Yaroslav Markin
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2008-07-10 00:00:00 +04:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: hoe
19
+ type: :development
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.7.0
26
+ version:
27
+ description: Simple processing of russian strings
28
+ email:
29
+ - me@julik.nl
30
+ - yaroslav@markin.net
31
+ executables:
32
+ - gilensize
33
+ - rutilize
34
+ extensions: []
35
+
36
+ extra_rdoc_files:
37
+ - History.txt
38
+ - Manifest.txt
39
+ - README.txt
40
+ - TODO.txt
31
41
  files:
42
+ - History.txt
43
+ - Manifest.txt
44
+ - README.txt
45
+ - Rakefile.rb
46
+ - TODO.txt
32
47
  - bin/gilensize
33
48
  - bin/rutilize
34
- - test/run_tests.rb
35
- - test/t_datetime.rb
36
- - test/t_gilenson.rb
37
- - test/t_integration.rb
38
- - test/t_pluralize.rb
39
- - test/t_rutils_base.rb
40
- - test/t_transliteration.rb
41
- - test/t_typografica.rb
42
- - lib/countries
49
+ - init.rb
43
50
  - lib/countries/countries.rb
44
- - lib/datetime
45
51
  - lib/datetime/datetime.rb
46
- - lib/gilenson
47
52
  - lib/gilenson/gilenson.rb
48
- - lib/gilenson/gilenson_port.rb
49
- - lib/integration
50
53
  - lib/integration/blue_cloth_override.rb
51
54
  - lib/integration/integration.rb
52
55
  - lib/integration/rails_date_helper_override.rb
53
56
  - lib/integration/red_cloth_override.rb
54
- - lib/pluralizer
55
57
  - lib/pluralizer/pluralizer.rb
56
58
  - lib/rutils.rb
57
- - lib/transliteration
58
59
  - lib/transliteration/bidi.rb
59
60
  - lib/transliteration/simple.rb
60
61
  - lib/transliteration/transliteration.rb
61
- - CHANGELOG
62
- - init.rb
63
- - Rakefile.rb
64
- - README
65
- - TODO
66
- test_files:
67
62
  - test/run_tests.rb
63
+ - test/t_datetime.rb
64
+ - test/t_gilenson.rb
65
+ - test/t_integration.rb
66
+ - test/t_pluralize.rb
67
+ - test/t_rutils_base.rb
68
+ - test/t_transliteration.rb
69
+ has_rdoc: true
70
+ homepage: http://rutils.rubyforge.org
71
+ post_install_message:
68
72
  rdoc_options:
69
- - --main=README
70
- - --line-numbers
71
- - --webcvs=http://rubyforge.org/cgi-bin/viewcvs.cgi/rutils/%s?cvsroot=rutils
72
- - --charset=utf-8
73
- - --promiscuous
74
- extra_rdoc_files:
75
- - README
76
- - TODO
77
- - CHANGELOG
78
- executables:
79
- - gilensize
80
- - rutilize
81
- extensions: []
82
-
73
+ - --main
74
+ - README.txt
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
83
89
  requirements: []
84
90
 
85
- dependencies: []
86
-
91
+ rubyforge_project: rutils
92
+ rubygems_version: 1.2.0
93
+ signing_key:
94
+ specification_version: 2
95
+ summary: Simple processing of russian strings
96
+ test_files:
97
+ - test/t_datetime.rb
98
+ - test/t_gilenson.rb
99
+ - test/t_integration.rb
100
+ - test/t_pluralize.rb
101
+ - test/t_rutils_base.rb
102
+ - test/t_transliteration.rb
data/README DELETED
@@ -1,192 +0,0 @@
1
- == Добро пожаловать в RuTils
2
-
3
- RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать
4
- разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же
5
- простой как и разработку оных на английском)
6
-
7
- Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode 'u'). Стандартно работа RuTils проверяется
8
- как на стандартной версии Ruby, так и на парсере регулярных выражений Oniguruma (правда имейте в виду, что с ним
9
- Gilenson работает медленнее).
10
-
11
- Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно узнать в константе
12
-
13
- RuTils::VERSION
14
-
15
- Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
16
-
17
- * Переменная $KCODE включена в режим 'u'
18
- * Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
19
-
20
- Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой RubyKanjiCode в своем httpd.conf.
21
-
22
- Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за реализацию большинства алгоритмов
23
- на PHP.
24
-
25
- Разработку RuTils ведут Julik[http://live.julik.nl] и Mash[http://imfo.ru]
26
-
27
- == Cумма прописью и выбор числительного
28
-
29
- RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным учетом рода. Например:
30
-
31
- 4.propisju => "четыре"
32
- 345.propisju => "триста сорок пять"
33
- 231.propisju(2) => "двести тридцать одна"
34
- 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
35
- (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых четыре десятых сволочи"
36
-
37
- Также реализуется выбор варианта числительного в зависимости от числа
38
-
39
- 15.items("кодер", "кодера", "кодеров") => "кодеров"
40
-
41
- и вывод "суммы прописью" для денежных сумм
42
-
43
- (413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
44
-
45
- == Транслит
46
-
47
- RuTils на данный момент реализует простейший транслит "в одну сторону" и "взаимно-однозначный транслит" (BiDi-транслит).
48
-
49
- Простейший транслит "в одну сторону".
50
-
51
- "Вот такое вот дело".translify => "Vot takoye vot delo"
52
- "Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
53
-
54
- == BiDi-транслит
55
-
56
- Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
57
- Реализует транслитерацию "в обе стороны", предоставляя возможность получить валидный URL
58
- из строки, содержащей русские и английские буквы. С некоторыми потерями (запятых и прочих
59
- "слабозначащих" символов) возможно восстановление исходной строки.
60
-
61
- Два режима работы:
62
-
63
- * Уничтожение всех слешей, которые встретятся во входной строке. В этом случае методы вызываются с передачей в них false. Например, "Web/Скрипты".bidi_translify(false)
64
- * Пропуск слэшей (используется по умолчанию). Например, "Web/+Skripty".bidi_detranslify
65
-
66
- "WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
67
- "+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
68
- "WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
69
- "+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
70
-
71
- == Обработка русской типографики в HTML
72
-
73
- Gilenson - порт Typografica[http://pixel-apes.com/typografica] от
74
- Pixel Apes. Тыпографица - механизм автоматической расстановки подстановок в тексте
75
- перед его выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки
76
- и тому подобные "украшательства".
77
-
78
- Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы, английские - для латиницы),
79
- заменит "хитрые" пунктуационные символы на entities и отформатирует знаки типа (c), (tm), телефоны и адреса.
80
-
81
- %q{"И это называется языком?", -- таков был его вопрос}.gilensize =>
82
- "&#171;И это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос"
83
-
84
- Более подробная документация по Gilenson доступна в документах к RuTils::Gilenson::Formatter
85
-
86
- В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать Unicode-тексты в среде UNIX
87
- пользуясь стандартным выводом
88
-
89
- $ cat myfile.txt | gilensize > myfile.html
90
-
91
- == Даты
92
-
93
- В класс Date введены следующие константы:
94
- * RU_MONTHNAMES (Январь Февраль Март...)
95
- * RU_DAYNAMES (Воскресенье Понедельник...)
96
- * RU_ABBR_MONTHNAMES (Янв Фев Мар...)
97
- * RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
98
- * RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
99
- * RU_DAYNAMES_E (первое второе третье...)
100
-
101
- Пример использования:
102
-
103
- require 'date'
104
- date = Date.new(2005, 11, 9)
105
- puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
106
- puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
107
- puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
108
- puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
109
-
110
- При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется "покрытие" стандартной
111
- функции Time#strftime ("родную" #strftime можно продолжать использовать через alias-метод #strftime_norutils):
112
-
113
- Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
114
- Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
115
-
116
- == Интеграция с Rails, RedCloth и BlueCloth
117
-
118
- RuTils в первую очередь задумывался как максимально "прозрачный" механизм обработки русского текста
119
- в контексте Rails-приложения. В связи с этим RuTils "вторгается" в работу других Ruby-модулей
120
- и изменяет механизм их работы.
121
-
122
- Если вы используете RuTils в одном приложении с RedCloth или BlueCloth,
123
- RuTils автоматически будет обрабатывать типографику во всех текстах, пропускаемых через них. Имейте в виду, что для
124
- корректной работы этой функции RuTils надо загружать *после* модулей RedCloth и BlueCloth.
125
-
126
- Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
127
-
128
- * Меню выбора даты (+date_select+ и +datetime_select+) будут выводиться с русскими именами месяцев
129
- * +distance_of_time_in_words+ будет выводить русские описания длительности ("более 2 часов")
130
-
131
- Перегрузку всех функций других модулей можно включать и отключать в любое время
132
- с помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние библиотеки будут работать
133
- в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно
134
- когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
135
-
136
- Если вы хотите использовать rutils как дополнение к Rails в одном конкретном приложении, скопируйте
137
- директорию rutils в папку vendor/plugins вашего приложения. Вы можете воспользоваться командой
138
- rutilize чтобы сделать это автоматически. После этого вы сможете использовать RuTils без
139
- необходимости установки gem'а на вашем сервере (не забудьте перезапустить приложение чтобы вгрузить в него RuTils).
140
-
141
- $ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
142
-
143
- Вы можете свободно распространять RuTils со своим Rails-приложением при условии сохранения структуры
144
- и файла README.
145
-
146
- == Требования
147
-
148
- * Ruby 1.8.2, немного прямых рук.
149
- * Rake[http://rake.rubyforge.org], Rails[http://rubyonrails.org], RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов
150
-
151
- == Как использовать
152
-
153
- Просто включите rutils в свою программу как gem
154
-
155
- require_gem 'rutils'
156
-
157
- или как библиотеку
158
-
159
- require 'rutils'
160
-
161
- == Где получить помощь
162
-
163
- На странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
164
-
165
- == Работает ли это с текстом в кодировке Windows-1251
166
-
167
- Нет и никогда не будет.
168
-
169
- == Реальные проекты
170
-
171
- В настоящее время RuTils используется на следующих сайтах:
172
-
173
- * http://artonica.ru
174
- * http://radar.cinemac.ru
175
-
176
- Если вы используете RuTils в своей работе пожалуйста сообщайте нам об этом чтобы мы могли включить ваши приложения и сайты в список.
177
-
178
- == Как ускорить реализацию новых функций
179
-
180
- Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите (по возможности) тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы можете скопировать из собственных тестов RuTils.
181
-
182
- Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы, пожалуйста следуйте следующим правилам оформления кода:
183
-
184
- * Unix line breaks (LF)
185
- * Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
186
- * Отступы в 2 пробела, без табуляций.
187
- * Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
188
- * Все другие конвенции нормального написания Ruby-кода (http://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
189
-
190
- Мы используем пробелы поскольку табулятор означает автозаполнение в IRB (Interactive Ruby Shell)
191
-
192
- Если вы хотите участвовать в разработке RuTils пользуйтесь CVS проекта.