rutils 0.2.5 → 1.0.0
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/History.txt +9 -0
- data/Manifest.txt +22 -15
- data/README.txt +54 -41
- data/Rakefile.rb +9 -26
- data/TODO.txt +2 -3
- data/WHAT_HAS_CHANGED.txt +44 -0
- data/init.rb +20 -2
- data/lib/countries/countries.rb +1 -0
- data/lib/datetime/datetime.rb +1 -0
- data/lib/gilenson/bluecloth_extra.rb +7 -0
- data/lib/gilenson/gilenson.rb +39 -30
- data/lib/gilenson/helper.rb +34 -0
- data/lib/gilenson/maruku_extra.rb +19 -0
- data/lib/gilenson/rdiscount_extra.rb +7 -0
- data/lib/gilenson/redcloth_extra.rb +42 -0
- data/lib/integration/integration.rb +1 -11
- data/lib/integration/rails_date_helper_override.rb +103 -105
- data/lib/integration/rails_pre_filter.rb +1 -0
- data/lib/pluralizer/pluralizer.rb +14 -13
- data/lib/rutils.rb +15 -25
- data/lib/transliteration/bidi.rb +15 -72
- data/lib/transliteration/simple.rb +1 -0
- data/lib/transliteration/transliteration.rb +11 -9
- data/lib/version.rb +5 -0
- data/test/extras/integration_bluecloth.rb +13 -0
- data/test/extras/integration_maruku.rb +15 -0
- data/test/{test_rails_filter.rb → extras/integration_rails_filter.rb} +3 -1
- data/test/extras/integration_rails_gilenson_helpers.rb +80 -0
- data/test/{test_rails_helpers.rb → extras/integration_rails_helpers.rb} +15 -3
- data/test/extras/integration_rdiscount.rb +15 -0
- data/test/extras/integration_redcloth3.rb +18 -0
- data/test/extras/integration_redcloth4.rb +19 -0
- data/test/run_tests.rb +2 -2
- data/test/{t_datetime.rb → test_datetime.rb} +1 -2
- data/test/{t_gilenson.rb → test_gilenson.rb} +15 -6
- data/test/test_integration.rb +22 -0
- data/test/test_integration_flag.rb +18 -0
- data/test/{t_pluralize.rb → test_pluralize.rb} +3 -2
- data/test/{t_rutils_base.rb → test_rutils_base.rb} +1 -0
- data/test/test_transliteration.rb +53 -0
- metadata +35 -26
- data/lib/integration/blue_cloth_override.rb +0 -12
- data/lib/integration/red_cloth_four.rb +0 -24
- data/lib/integration/red_cloth_override.rb +0 -7
- data/lib/integration/red_cloth_three.rb +0 -25
- data/test/t_integration.rb +0 -46
- data/test/t_transliteration.rb +0 -109
- data/test/test_integration_bluecloth.rb +0 -17
- data/test/test_integration_redcloth3.rb +0 -31
- data/test/test_integration_redcloth4.rb +0 -31
data/History.txt
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
+
=== 1.0.0 - 08.02.2009
|
2
|
+
|
3
|
+
* Оверрайды очищены и уничтожены, перегрузка форматтеров выполняется через наследование и рельсовый хелпер (julik)
|
4
|
+
* Протестировано на JRuby 1.1.6 (julik)
|
5
|
+
* Основные шестеренки совместимы с Ruby 1.9.1 (julik)
|
6
|
+
* BiDi транслит покидает нас. URL давно поддерживают Unicode, если нет - сохраняйте транслитерированный slug отдельно.
|
7
|
+
Если кому-то это не нравится - см. Wikipedia (julik)
|
8
|
+
|
1
9
|
=== 0.2.5 - 08.08.2008
|
10
|
+
|
2
11
|
* Поддержка Rails Edge (pre-2.2) для хелперов DateTime. RuTils при overrides_enabled пытается поставить себя выше I18n -- при overrides_enabled I18n не вызывается для datetime хелперов. (Yaroslav Markin)
|
3
12
|
* Частичная поддержка RedCloth 4 (julik)
|
4
13
|
* Фильтр для контроллера чтобы установить верный флаг для экшена, то что происходит в экшене - thread local (julik)
|
data/Manifest.txt
CHANGED
@@ -3,33 +3,40 @@ Manifest.txt
|
|
3
3
|
README.txt
|
4
4
|
Rakefile.rb
|
5
5
|
TODO.txt
|
6
|
+
WHAT_HAS_CHANGED.txt
|
6
7
|
bin/gilensize
|
7
8
|
bin/rutilize
|
8
9
|
init.rb
|
9
10
|
lib/countries/countries.rb
|
10
11
|
lib/datetime/datetime.rb
|
12
|
+
lib/gilenson/bluecloth_extra.rb
|
11
13
|
lib/gilenson/gilenson.rb
|
12
|
-
lib/
|
14
|
+
lib/gilenson/helper.rb
|
15
|
+
lib/gilenson/maruku_extra.rb
|
16
|
+
lib/gilenson/rdiscount_extra.rb
|
17
|
+
lib/gilenson/redcloth_extra.rb
|
13
18
|
lib/integration/integration.rb
|
14
19
|
lib/integration/rails_date_helper_override.rb
|
15
20
|
lib/integration/rails_pre_filter.rb
|
16
|
-
lib/integration/red_cloth_four.rb
|
17
|
-
lib/integration/red_cloth_override.rb
|
18
|
-
lib/integration/red_cloth_three.rb
|
19
21
|
lib/pluralizer/pluralizer.rb
|
20
22
|
lib/rutils.rb
|
21
23
|
lib/transliteration/bidi.rb
|
22
24
|
lib/transliteration/simple.rb
|
23
25
|
lib/transliteration/transliteration.rb
|
26
|
+
lib/version.rb
|
27
|
+
test/extras/integration_bluecloth.rb
|
28
|
+
test/extras/integration_maruku.rb
|
29
|
+
test/extras/integration_rails_filter.rb
|
30
|
+
test/extras/integration_rails_gilenson_helpers.rb
|
31
|
+
test/extras/integration_rails_helpers.rb
|
32
|
+
test/extras/integration_rdiscount.rb
|
33
|
+
test/extras/integration_redcloth3.rb
|
34
|
+
test/extras/integration_redcloth4.rb
|
24
35
|
test/run_tests.rb
|
25
|
-
test/
|
26
|
-
test/
|
27
|
-
test/
|
28
|
-
test/
|
29
|
-
test/
|
30
|
-
test/
|
31
|
-
test/
|
32
|
-
test/test_integration_redcloth3.rb
|
33
|
-
test/test_integration_redcloth4.rb
|
34
|
-
test/test_rails_filter.rb
|
35
|
-
test/test_rails_helpers.rb
|
36
|
+
test/test_datetime.rb
|
37
|
+
test/test_gilenson.rb
|
38
|
+
test/test_integration.rb
|
39
|
+
test/test_integration_flag.rb
|
40
|
+
test/test_pluralize.rb
|
41
|
+
test/test_rutils_base.rb
|
42
|
+
test/test_transliteration.rb
|
data/README.txt
CHANGED
@@ -4,9 +4,13 @@ RuTils - простой обработчик русского текста на
|
|
4
4
|
сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
|
5
5
|
и приятной (в идеале - столь же простой как и разработку оных на английском).
|
6
6
|
|
7
|
+
== Шеф! все пропало! я обновил RuTils и он работает совершенно по-другому!
|
8
|
+
|
9
|
+
Раздел также известен под именем "Что поменялось в RuTils 0.3.0". Вам {сюда.}[files/WHAT_HAS_CHANGED_txt.html]
|
10
|
+
|
7
11
|
== Чье это
|
8
12
|
|
9
|
-
Разработчики RuTils - Julik[http://julik.nl], Mash[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
|
13
|
+
Разработчики RuTils - {Julik}[http://julik.nl], {Mash}[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
|
10
14
|
|
11
15
|
Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за
|
12
16
|
реализацию большинства алгоритмов на PHP.
|
@@ -51,32 +55,12 @@ RuTils реализует сумму прописью для целых и др
|
|
51
55
|
|
52
56
|
== Транслит
|
53
57
|
|
54
|
-
RuTils на данный момент реализует простейший транслит "в одну сторону"
|
55
|
-
"
|
56
|
-
|
57
|
-
Простейший транслит "в одну сторону".
|
58
|
+
RuTils на данный момент реализует простейший транслит "в одну сторону".
|
59
|
+
"Взаимно-однозначный транслит" (BiDi-транслит) больше не поддерживается.
|
58
60
|
|
59
61
|
"Вот такое вот дело".translify => "Vot takoye vot delo"
|
60
62
|
"Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
|
61
63
|
|
62
|
-
== BiDi-транслит
|
63
|
-
|
64
|
-
Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
|
65
|
-
Реализует транслитерацию "в обе стороны", предоставляя возможность получить
|
66
|
-
валидный URL из строки, содержащей русские и английские буквы. С некоторыми
|
67
|
-
потерями (запятых и прочих "слабозначащих" символов) возможно восстановление
|
68
|
-
исходной строки.
|
69
|
-
|
70
|
-
Два режима работы:
|
71
|
-
|
72
|
-
1. Уничтожение всех слешей, которые встретятся во входной строке. В этом случае методы вызываются с передачей в них false. Например, <tt>"Web/Скрипты".bidi_translify(false)</tt>
|
73
|
-
2. Пропуск слэшей (используется по умолчанию). Например,
|
74
|
-
|
75
|
-
"WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
|
76
|
-
"+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
|
77
|
-
"WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
|
78
|
-
"+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
|
79
|
-
|
80
64
|
== Обработка русской типографики в HTML
|
81
65
|
|
82
66
|
Gilenson - порт Typografica[http://pixel-apes.com/typografica] от Pixel Apes.
|
@@ -125,18 +109,32 @@ Unicode-тексты в среде UNIX пользуясь стандартны
|
|
125
109
|
Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
|
126
110
|
Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
|
127
111
|
|
128
|
-
== Интеграция с
|
112
|
+
== Интеграция с RedCloth и BlueCloth
|
129
113
|
|
130
114
|
RuTils в первую очередь задумывался как максимально "прозрачный" механизм
|
131
|
-
обработки русского текста в контексте Rails-приложения.
|
132
|
-
|
115
|
+
обработки русского текста в контексте Rails-приложения.
|
116
|
+
|
117
|
+
Если вы используете RuTils в одном приложении со стандартными форматтерами (RedCloth, BlueCloth...) воспользуйтесь
|
118
|
+
дополнительными модулями которые выводят отформатированный Гиленсоном результат работы форматтеров
|
119
|
+
|
120
|
+
Gilenson определяет следующие дополнительные форматтеры (они работают так же как и их базовые классы)
|
133
121
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
122
|
+
* RuTils::Gilenson::RedClothExtra
|
123
|
+
* RuTils::Gilenson::BlueClothExtra
|
124
|
+
* RuTils::Gilenson::RDiscountExtra
|
125
|
+
* RuTils::Gilenson::MarukuExtra
|
138
126
|
|
139
|
-
|
127
|
+
В этих классах Gilenson будет обрабатывать типографику во всех текстах, пропускаемых через
|
128
|
+
них. Эти классы при включенном флаге RuTils.overrides автоматически подключаются в хелперы
|
129
|
+
+markdown+ и +textilize+.
|
130
|
+
|
131
|
+
== Интеграция с Rails версии 2.2.2 и выше
|
132
|
+
|
133
|
+
Используйте гем russian для дат и RuTils как дополнение (для транслита, функций kopeek и так далее)
|
134
|
+
|
135
|
+
== Интеграция с Rails версий 1.2 - 2.1.1
|
136
|
+
|
137
|
+
RuTils заставляет следующие функции старых (pre-i18n) версий Rails говорить по-русски:
|
140
138
|
|
141
139
|
* Меню выбора даты (+date_select+ и +datetime_select+) и связанные с этим хелперы
|
142
140
|
будут выводиться с русскими именами месяцев, и учитывая локализованный порядок дат
|
@@ -144,11 +142,12 @@ RuTils в первую очередь задумывался как максим
|
|
144
142
|
* +distance_of_time_in_words+ будет выводить
|
145
143
|
русские описания длительности ("более 2 часов")
|
146
144
|
|
145
|
+
== Управление оверрайдами
|
146
|
+
|
147
147
|
Перегрузку всех функций других модулей можно включать и отключать в любое время с
|
148
148
|
помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
|
149
|
-
|
150
|
-
|
151
|
-
переключиться на английский (или любой другой язык) без перезапуска приложения.
|
149
|
+
хелперы будут работать в стандартном режиме (например, даты и время будут выводиться по-русски).
|
150
|
+
Это нужно когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
|
152
151
|
|
153
152
|
Рекомендуемый способ использования RuTils с Ruby on Rails приложением -- установка RuTils
|
154
153
|
плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего
|
@@ -159,14 +158,23 @@ RuTils в первую очередь задумывался как максим
|
|
159
158
|
|
160
159
|
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
|
161
160
|
|
162
|
-
|
161
|
+
== Распространения
|
162
|
+
|
163
|
+
Вы можете свободно распространять RuTils со своим приложением при условии
|
163
164
|
сохранения структуры и файла README.
|
164
165
|
|
166
|
+
== Совместимость
|
167
|
+
|
168
|
+
* Ruby 1.8.x
|
169
|
+
* Ruby 1.9.x (релизные версии начиная с 1.9.1)
|
170
|
+
* JRuby 1.1.6
|
171
|
+
|
165
172
|
== Требования
|
166
173
|
|
167
|
-
* Ruby 1.8.2 или выше, немного прямых
|
174
|
+
* Ruby 1.8.2 или выше, немного прямых рук
|
168
175
|
* Rake[http://rake.rubyforge.org],
|
169
176
|
|
177
|
+
|
170
178
|
Rails[http://rubyonrails.org],
|
171
179
|
RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
|
172
180
|
BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов.
|
@@ -204,16 +212,21 @@ RubyKanjiCode в своем httpd.conf.
|
|
204
212
|
|
205
213
|
* Unix line breaks (LF)
|
206
214
|
* Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
|
207
|
-
*
|
215
|
+
* Все файлы должны содержать emacs-прагму
|
216
|
+
# -*- encoding: utf-8 -*-
|
217
|
+
в первой строке
|
218
|
+
* Отступы в 2 пробела, без табуляций
|
219
|
+
* Только однозначный код для 1.8 и 1.9
|
220
|
+
* Без функций которые отсутствуют в 1.8 (в первую очередь encodings)
|
221
|
+
* Без функций которые убраны из 1.9
|
208
222
|
* Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
|
209
223
|
* Все другие конвенции нормального написания
|
210
|
-
Ruby-кода (http://
|
224
|
+
Ruby-кода (http://github.com/chneukirchen/styleguide/tree/master)
|
211
225
|
|
212
226
|
При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
|
213
227
|
- он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
|
214
228
|
разницу между двумя разными пробелами, например)
|
215
229
|
|
216
|
-
Если вы хотите участвовать в разработке RuTils
|
217
|
-
trunk.
|
230
|
+
Если вы хотите участвовать в разработке RuTils - fork us on GitHub
|
218
231
|
|
219
|
-
|
232
|
+
git clone git://github.com/julik/rutils.git
|
data/Rakefile.rb
CHANGED
@@ -1,28 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
$KCODE = 'u'
|
2
3
|
$:.reject! { |e| e.include? 'TextMate' }
|
3
4
|
|
4
|
-
require 'lib/
|
5
|
-
require 'rubygems'
|
6
|
-
|
7
|
-
|
5
|
+
require 'lib/version'
|
8
6
|
|
9
7
|
begin
|
8
|
+
require 'rubygems'
|
10
9
|
require 'hoe'
|
11
10
|
|
12
11
|
# Disable spurious warnings when running tests, ActiveMagic cannot stand -w
|
13
12
|
Hoe::RUBY_FLAGS.replace ENV['RUBY_FLAGS'] || "-I#{%w(lib test).join(File::PATH_SEPARATOR)}" +
|
14
13
|
(Hoe::RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
|
15
14
|
|
16
|
-
# The generic URI syntax mandates that new URI schemes that provide for the
|
17
|
-
# representation of character data in a URI must, in effect, represent characters from
|
18
|
-
# the unreserved set without translation, and should convert all other characters to
|
19
|
-
# bytes according to UTF-8, # and then percent-encode those values. This requirement was
|
20
|
-
# introduced in January 2005 with the publication of RFC 3986. URI schemes # introduced
|
21
|
-
# before this date are not affected.
|
22
|
-
|
23
15
|
# Hoe minus dependency pollution plus unidocs plus rdoc fix. Kommunizm, perestroika.
|
24
|
-
|
25
|
-
DOCOPTS = %w(--webcvs=http://
|
16
|
+
Class.new(Hoe) do
|
17
|
+
DOCOPTS = %w(--webcvs=http://github.com/julik/rutils/tree/master/%s --charset=utf-8 --promiscuous)
|
26
18
|
Rake::RDocTask.class_eval do
|
27
19
|
alias_method :_odefine, :define
|
28
20
|
def define; @options.unshift(*DOCOPTS); _odefine; end
|
@@ -32,20 +24,17 @@ begin
|
|
32
24
|
extra_deps.reject! {|e| e[0] == 'hoe' }
|
33
25
|
super
|
34
26
|
end
|
35
|
-
end
|
36
|
-
|
37
|
-
KolkHoe.new('rutils', RuTils::VERSION) do |p|
|
27
|
+
end.new('rutils', RuTils::VERSION) do |p|
|
38
28
|
p.name = "rutils"
|
39
29
|
p.author = ["Julian 'Julik' Tarkhanov", "Danil Ivanov", "Yaroslav Markin"]
|
40
30
|
p.email = ['me@julik.nl', 'yaroslav@markin.net']
|
41
31
|
p.description = 'Simple processing of russian strings'
|
42
32
|
p.summary = 'Simple processing of russian strings'
|
43
|
-
p.url = "http://rutils.rubyforge.org"
|
44
|
-
p.test_globs = 'test/t_*.rb'
|
45
|
-
p.remote_rdoc_dir = ''
|
46
|
-
p.need_zip = true
|
47
33
|
p.remote_rdoc_dir = ''
|
34
|
+
p.need_zip = true # ненвижу
|
48
35
|
end
|
36
|
+
|
37
|
+
require 'load_multi_rails_rake_tasks'
|
49
38
|
|
50
39
|
rescue LoadError
|
51
40
|
$stderr.puts "Meta-operations on this package require Hoe and multi_rails"
|
@@ -58,10 +47,4 @@ rescue LoadError
|
|
58
47
|
t.pattern = 'test/t_*.rb'
|
59
48
|
t.verbose = true
|
60
49
|
end
|
61
|
-
end
|
62
|
-
|
63
|
-
begin
|
64
|
-
require 'load_multi_rails_rake_tasks'
|
65
|
-
rescue LoadError
|
66
|
-
$stderr.puts "Proper testing of this package with Rails requires multi_rails"
|
67
50
|
end
|
data/TODO.txt
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
== Изменения по отношению к RuTils 0.2.x
|
2
|
+
|
3
|
+
=== Никаких оверрайдов
|
4
|
+
|
5
|
+
К сожалению, переделать все существующие во Вселенной библиотеки невозможно. Мы предоставляем
|
6
|
+
унаследованные классы которые реализуют нужную нам функциональность с минимальной хирургией чужих
|
7
|
+
модулей. Например, если раньше вы делали так:
|
8
|
+
|
9
|
+
RuTils.overrides = true
|
10
|
+
BlueCloth.new(text_to_markdown_and_gilensize).to_html
|
11
|
+
|
12
|
+
то теперь нужно делать так
|
13
|
+
|
14
|
+
RuTils::Gilenson::BlueClothExtra.new(text_to_markdown_and_gilensize).to_html
|
15
|
+
|
16
|
+
=== Почему удален BiDi-транслит?
|
17
|
+
|
18
|
+
В отличие от DHH авторы RuTils придерживаются стратегии синтактической серной кислоты вместо синтактического уксуса. Основная область
|
19
|
+
применения bidi-транслитераций - генерация "как-бы" более удобочитаемых URL. К сожалению, у нее есть ряд свойств которые делают ее
|
20
|
+
бессмысленной (кроме как в качестве упражнения по строковым итераторам Ruby). Приводим список аргументов почему вам не нужны
|
21
|
+
автоматические транслитерированные URL:
|
22
|
+
|
23
|
+
* Они будут работать только для набора символов "ASCII + русский". Любая попытка засунуть в ваш URL слово stød закончится печально.
|
24
|
+
* Они будут работать только для русского языка, кириллиц много. Транслитерация по определению языкозависима.
|
25
|
+
* Вашим пользователям придется непрерывно угадывать, пишется буква "я". "Ja"? "Ya"? "J"? Если вы хоть раз наблюдали иностранца, пытающегося
|
26
|
+
выговорить "ОВИРскую" транслитерацию вашей фамилии из загранпаспорта, вы знаете о чем мы говорим.
|
27
|
+
* Приличные браузеры не кодируют русский текст в адресной строке если Ваш вебсервер его принял. Если браузер неприличный то он позволяет этот текст ввести.
|
28
|
+
Если браузер совсем неприличный, то средство ввода у него - стилус размером с зубочистку, а пользуются им в трамвае. Вводить ваш транслит
|
29
|
+
в таких условиях все равно никто не будет, успокойтесь.
|
30
|
+
|
31
|
+
Приводить список аргументов "почему такой транслит вам нужен" мы не будем дабы никого не травмировать.
|
32
|
+
|
33
|
+
Если вам таки страшно неймется реализовать транслит в URL, рекомендуем следующий подход:
|
34
|
+
|
35
|
+
* Для адресуемого обьекта сохраняется поле ++slug++
|
36
|
+
* При сохранении в это поле автоматически пишется "дирифицированное" название, но пользователь может его вручную отредактировать
|
37
|
+
* Дальнейшая адресация производится без "транслитерации обратно", по полю slug напрямую
|
38
|
+
|
39
|
+
Дополнительно рекомендуется запретить загрузку файлов с русскими именами (с помощью Javascript и свойства value элемента input).
|
40
|
+
|
41
|
+
=== Рубинов много
|
42
|
+
|
43
|
+
Это актуально только для тех кто собирается слать патчи. RuTils тестирован и работает под двумя версиями MRI и под JRuby. Это автоматически означает
|
44
|
+
что патчи должны тестироваться во всех этих средах.
|
data/init.rb
CHANGED
@@ -1,9 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
=begin
|
2
3
|
Этот файл - заглушка для Rails-плагина.
|
3
4
|
Если поместить rutils/ в папку vendor/plugins/ вашего Rails-приложения,
|
4
5
|
RuTils будет автоматически загружен с включенным флагом <tt>RuTils::overrides = true</tt>.
|
5
6
|
В ActionController::Base будет установлен пре-фильтр устанавливающий флаг <tt>overrides.</tt>
|
6
7
|
=end
|
7
|
-
require File.
|
8
|
+
require File.dirname(__FILE__) + '/lib/rutils' unless defined?(RuTils)
|
9
|
+
|
8
10
|
RuTils::overrides = true
|
9
|
-
require File.dirname(__FILE__) + '/lib/integration/rails_pre_filter'
|
11
|
+
require File.dirname(__FILE__) + '/lib/integration/rails_pre_filter'
|
12
|
+
|
13
|
+
def russan_gem_required?
|
14
|
+
require 'action_pack/version'
|
15
|
+
ma, mi, ti = ActionPack::VERSION::MAJOR, ActionPack::VERSION::MINOR, ActionPack::VERSION::TINY
|
16
|
+
return true if (ma >= 2 && mi >= 2 && ti >= 1)
|
17
|
+
false
|
18
|
+
end
|
19
|
+
|
20
|
+
if russan_gem_required?
|
21
|
+
STDERR.puts "RuTils: On this version of Rails use the `russian` gem for date helper overrides instead"
|
22
|
+
else
|
23
|
+
require File.dirname(__FILE__) + "/lib/integration/rails_date_helper_override"
|
24
|
+
end
|
25
|
+
|
26
|
+
# textilize и markdown
|
27
|
+
::ActionController::Base.send(:helper, RuTils::Gilenson::Helper)
|
data/lib/countries/countries.rb
CHANGED
data/lib/datetime/datetime.rb
CHANGED
data/lib/gilenson/gilenson.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
module RuTils
|
2
3
|
module Gilenson
|
3
4
|
# Позволяет возвращать класс форматтера при вызове
|
@@ -5,6 +6,12 @@ module RuTils
|
|
5
6
|
def self.new(*args) #:nodoc:
|
6
7
|
RuTils::Gilenson::Formatter.new(*args)
|
7
8
|
end
|
9
|
+
|
10
|
+
autoload :BlueClothExtra, File.dirname(__FILE__) + '/bluecloth_extra'
|
11
|
+
autoload :RedClothExtra, File.dirname(__FILE__) + '/redcloth_extra'
|
12
|
+
autoload :RDiscountExtra, File.dirname(__FILE__) + '/rdiscount_extra'
|
13
|
+
autoload :MarukuExtra, File.dirname(__FILE__) + '/maruku_extra'
|
14
|
+
autoload :Helper, File.dirname(__FILE__) + '/helper'
|
8
15
|
end
|
9
16
|
end
|
10
17
|
|
@@ -21,8 +28,6 @@ end
|
|
21
28
|
# * работа только и полностью в UTF-8 (включая entities, применимые в XML)
|
22
29
|
# * поддержка "raw"-вывода (символов вместо entities) - текст выводимый Gilenson можно верстать на бумаге
|
23
30
|
#
|
24
|
-
# Если вам нужно получать идентичный Typografica вывод, пользуйтесь RuTils::Gilenson::Obsolete
|
25
|
-
# вместо RuTils::Gilenson::Formatter.
|
26
31
|
#
|
27
32
|
# ==Использование
|
28
33
|
# Быстрее всего - через метод ++gilensize++ для любой строковой переменной
|
@@ -151,9 +156,8 @@ class RuTils::Gilenson::Formatter
|
|
151
156
|
:thinsp => " ", # полукруглая шпация (тонкий пробел)
|
152
157
|
:nob_open => '<span class="nobr">', # открывающий блок без переноса слов
|
153
158
|
:nob_close => '</span>', # закрывающий блок без переноса слов
|
154
|
-
}
|
155
|
-
|
156
|
-
GLYPHS.freeze
|
159
|
+
}.freeze
|
160
|
+
|
157
161
|
# Нормальные "типографские" символы в UTF-виде. Браузерами обрабатываются плохонько, поэтому
|
158
162
|
# лучше заменять их на entities.
|
159
163
|
VERBATIM_GLYPHS = {
|
@@ -181,12 +185,10 @@ class RuTils::Gilenson::Formatter
|
|
181
185
|
'−' => :minus,
|
182
186
|
' ' => :thinsp,
|
183
187
|
'″' => :inch,
|
184
|
-
}
|
185
|
-
VERBATIM_GLYPHS.freeze #:nodoc:
|
188
|
+
}.freeze
|
186
189
|
|
187
|
-
#
|
188
|
-
|
189
|
-
REPLACEMENT_MARKER = RuTils::SUBSTITUTION_MARKER.freeze #:nodoc:
|
190
|
+
# Метка на которую подменяются вынутые теги
|
191
|
+
REPLACEMENT_MARKER = RuTils::SUBSTITUTION_MARKER #:nodoc:
|
190
192
|
|
191
193
|
# Кто придумал “? Не учите людей плохому...
|
192
194
|
# Привет А.Лебедеву http://www.artlebedev.ru/kovodstvo/62/
|
@@ -202,8 +204,23 @@ class RuTils::Gilenson::Formatter
|
|
202
204
|
'150' => :ndash,
|
203
205
|
'151' => :mdash,
|
204
206
|
'153' => :trade,
|
205
|
-
}
|
206
|
-
|
207
|
+
}.freeze
|
208
|
+
|
209
|
+
# All the unicode whitespace
|
210
|
+
UNICODE_WHITESPACE = [
|
211
|
+
(0x0009..0x000D).to_a, # White_Space # Cc [5] <control-0009>..<control-000D>
|
212
|
+
0x0020, # White_Space # Zs SPACE
|
213
|
+
0x0085, # White_Space # Cc <control-0085>
|
214
|
+
0x00A0, # White_Space # Zs NO-BREAK SPACE
|
215
|
+
0x1680, # White_Space # Zs OGHAM SPACE MARK
|
216
|
+
0x180E, # White_Space # Zs MONGOLIAN VOWEL SEPARATOR
|
217
|
+
(0x2000..0x200A).to_a, # White_Space # Zs [11] EN QUAD..HAIR SPACE
|
218
|
+
0x2028, # White_Space # Zl LINE SEPARATOR
|
219
|
+
0x2029, # White_Space # Zp PARAGRAPH SEPARATOR
|
220
|
+
0x202F, # White_Space # Zs NARROW NO-BREAK SPACE
|
221
|
+
0x205F, # White_Space # Zs MEDIUM MATHEMATICAL SPACE
|
222
|
+
0x3000, # White_Space # Zs IDEOGRAPHIC SPACE
|
223
|
+
].flatten.pack("U*").freeze
|
207
224
|
|
208
225
|
PROTECTED_SETTINGS = [ :raw_output ] #:nodoc:
|
209
226
|
|
@@ -225,27 +242,24 @@ class RuTils::Gilenson::Formatter
|
|
225
242
|
def method_missing(meth, *args) #:nodoc:
|
226
243
|
setting = meth.to_s.gsub(/=$/, '')
|
227
244
|
super(meth, *args) unless @settings.has_key?(setting) #this will pop the exception if we have no such setting
|
228
|
-
|
245
|
+
|
229
246
|
return (@settings[setting] = args[0])
|
230
247
|
end
|
231
|
-
|
248
|
+
|
232
249
|
# Обрабатывает text_to_process с сохранением настроек, присвоенных обьекту-форматтеру
|
233
250
|
# Дополнительные аргументы передаются как параметры форматтера и не сохраняются после прогона.
|
234
251
|
def process(text_to_process, *args)
|
235
252
|
@_text = text_to_process
|
236
253
|
|
237
|
-
|
238
|
-
with_configuration(args.last) { self.to_html }
|
239
|
-
else
|
240
|
-
self.to_html
|
241
|
-
end
|
254
|
+
args.last.is_a?(Hash) ? with_configuration(args.last) { to_html } : to_html
|
242
255
|
end
|
243
256
|
|
244
|
-
# Обрабатывает текст, присвоенный форматтеру при создании и возвращает результат
|
245
|
-
def to_html
|
257
|
+
# Обрабатывает текст, присвоенный форматтеру при создании и возвращает результат обработки
|
258
|
+
def to_html
|
246
259
|
return '' unless @_text
|
247
260
|
|
248
|
-
|
261
|
+
# NOTE: strip is Unicode-space aware on 1.9.1, so here we simulate that
|
262
|
+
text = @_text.gsub(/[#{UNICODE_WHITESPACE}]\z/, '').gsub(/\A[#{UNICODE_WHITESPACE}]/, '')
|
249
263
|
|
250
264
|
# -6. Подмухляем таблицу глифов, если нам ее передали
|
251
265
|
glyph_table = glyph.dup
|
@@ -263,12 +277,12 @@ class RuTils::Gilenson::Formatter
|
|
263
277
|
|
264
278
|
# -4. запрет тагов html
|
265
279
|
process_escape_html(text) unless @settings["html"]
|
266
|
-
|
280
|
+
|
267
281
|
# -3. Никогда (вы слышите?!) не пущать лабуду &#not_correct_number;
|
268
282
|
FORBIDDEN_NUMERIC_ENTITIES.dup.each_pair do | key, rep |
|
269
283
|
text.gsub!(/&##{key};/, self.glyph[rep])
|
270
284
|
end
|
271
|
-
|
285
|
+
|
272
286
|
# -2. Чистим copy&paste
|
273
287
|
process_copy_paste_clearing(text) if @settings['copypaste']
|
274
288
|
|
@@ -489,7 +503,7 @@ class RuTils::Gilenson::Formatter
|
|
489
503
|
end
|
490
504
|
|
491
505
|
def process_copy_paste_clearing(text)
|
492
|
-
VERBATIM_GLYPHS.each {|key,value| text.gsub!(/#{key}/, glyph[value]) }
|
506
|
+
VERBATIM_GLYPHS.each {|key,value| text.gsub!(/#{Regexp.escape(key)}/, glyph[value]) }
|
493
507
|
end
|
494
508
|
|
495
509
|
def process_spacing(text)
|
@@ -646,11 +660,6 @@ module RuTils::Gilenson::StringFormatting
|
|
646
660
|
RuTils::Gilenson::Formatter.new(self, args.shift || {}).to_html
|
647
661
|
end
|
648
662
|
|
649
|
-
# Форматирует строку с помощью Gilenson::Obsolete. Всe дополнительные опции передаются форматтеру.
|
650
|
-
def o_gilensize(*args)
|
651
|
-
opts = args.last.is_a?(Hash) ? args.last : {}
|
652
|
-
RuTils::Gilenson::Obsolete.new(self, *opts).to_html
|
653
|
-
end
|
654
663
|
end
|
655
664
|
|
656
665
|
Object::String.send(:include, RuTils::Gilenson::StringFormatting)
|