rutils 0.2.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/History.txt +9 -0
  2. data/Manifest.txt +22 -15
  3. data/README.txt +54 -41
  4. data/Rakefile.rb +9 -26
  5. data/TODO.txt +2 -3
  6. data/WHAT_HAS_CHANGED.txt +44 -0
  7. data/init.rb +20 -2
  8. data/lib/countries/countries.rb +1 -0
  9. data/lib/datetime/datetime.rb +1 -0
  10. data/lib/gilenson/bluecloth_extra.rb +7 -0
  11. data/lib/gilenson/gilenson.rb +39 -30
  12. data/lib/gilenson/helper.rb +34 -0
  13. data/lib/gilenson/maruku_extra.rb +19 -0
  14. data/lib/gilenson/rdiscount_extra.rb +7 -0
  15. data/lib/gilenson/redcloth_extra.rb +42 -0
  16. data/lib/integration/integration.rb +1 -11
  17. data/lib/integration/rails_date_helper_override.rb +103 -105
  18. data/lib/integration/rails_pre_filter.rb +1 -0
  19. data/lib/pluralizer/pluralizer.rb +14 -13
  20. data/lib/rutils.rb +15 -25
  21. data/lib/transliteration/bidi.rb +15 -72
  22. data/lib/transliteration/simple.rb +1 -0
  23. data/lib/transliteration/transliteration.rb +11 -9
  24. data/lib/version.rb +5 -0
  25. data/test/extras/integration_bluecloth.rb +13 -0
  26. data/test/extras/integration_maruku.rb +15 -0
  27. data/test/{test_rails_filter.rb → extras/integration_rails_filter.rb} +3 -1
  28. data/test/extras/integration_rails_gilenson_helpers.rb +80 -0
  29. data/test/{test_rails_helpers.rb → extras/integration_rails_helpers.rb} +15 -3
  30. data/test/extras/integration_rdiscount.rb +15 -0
  31. data/test/extras/integration_redcloth3.rb +18 -0
  32. data/test/extras/integration_redcloth4.rb +19 -0
  33. data/test/run_tests.rb +2 -2
  34. data/test/{t_datetime.rb → test_datetime.rb} +1 -2
  35. data/test/{t_gilenson.rb → test_gilenson.rb} +15 -6
  36. data/test/test_integration.rb +22 -0
  37. data/test/test_integration_flag.rb +18 -0
  38. data/test/{t_pluralize.rb → test_pluralize.rb} +3 -2
  39. data/test/{t_rutils_base.rb → test_rutils_base.rb} +1 -0
  40. data/test/test_transliteration.rb +53 -0
  41. metadata +35 -26
  42. data/lib/integration/blue_cloth_override.rb +0 -12
  43. data/lib/integration/red_cloth_four.rb +0 -24
  44. data/lib/integration/red_cloth_override.rb +0 -7
  45. data/lib/integration/red_cloth_three.rb +0 -25
  46. data/test/t_integration.rb +0 -46
  47. data/test/t_transliteration.rb +0 -109
  48. data/test/test_integration_bluecloth.rb +0 -17
  49. data/test/test_integration_redcloth3.rb +0 -31
  50. 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/integration/blue_cloth_override.rb
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/t_datetime.rb
26
- test/t_gilenson.rb
27
- test/t_integration.rb
28
- test/t_pluralize.rb
29
- test/t_rutils_base.rb
30
- test/t_transliteration.rb
31
- test/test_integration_bluecloth.rb
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
- "взаимно-однозначный транслит" (BiDi-транслит).
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
- == Интеграция с Rails, RedCloth и BlueCloth
112
+ == Интеграция с RedCloth и BlueCloth
129
113
 
130
114
  RuTils в первую очередь задумывался как максимально "прозрачный" механизм
131
- обработки русского текста в контексте Rails-приложения. В связи с этим RuTils
132
- "вторгается" в работу других Ruby-модулей и изменяет механизм их работы.
115
+ обработки русского текста в контексте Rails-приложения.
116
+
117
+ Если вы используете RuTils в одном приложении со стандартными форматтерами (RedCloth, BlueCloth...) воспользуйтесь
118
+ дополнительными модулями которые выводят отформатированный Гиленсоном результат работы форматтеров
119
+
120
+ Gilenson определяет следующие дополнительные форматтеры (они работают так же как и их базовые классы)
133
121
 
134
- Если вы используете RuTils в одном приложении с RedCloth или BlueCloth, RuTils
135
- автоматически будет обрабатывать типографику во всех текстах, пропускаемых через
136
- них. Имейте в виду, что для корректной работы этой функции RuTils надо загружать
137
- *после* модулей RedCloth и BlueCloth.
122
+ * RuTils::Gilenson::RedClothExtra
123
+ * RuTils::Gilenson::BlueClothExtra
124
+ * RuTils::Gilenson::RDiscountExtra
125
+ * RuTils::Gilenson::MarukuExtra
138
126
 
139
- Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
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
- библиотеки будут работать в стандартном режиме (например, RedCloth будет
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
- Вы можете свободно распространять RuTils со своим Rails-приложением при условии
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
- * Отступы в 2 пробела, без табуляций.
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://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
224
+ Ruby-кода (http://github.com/chneukirchen/styleguide/tree/master)
211
225
 
212
226
  При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
213
227
  - он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
214
228
  разницу между двумя разными пробелами, например)
215
229
 
216
- Если вы хотите участвовать в разработке RuTils пользуйтесь версией из subversion
217
- trunk.
230
+ Если вы хотите участвовать в разработке RuTils - fork us on GitHub
218
231
 
219
- http://rutils.rubyforge.org/svn/trunk
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/rutils'
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
- class KolkHoe < Hoe
25
- DOCOPTS = %w(--webcvs=http://rutils.rubyforge.org/svn/trunk/%s --charset=utf-8 --promiscuous)
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
@@ -2,6 +2,5 @@
2
2
 
3
3
  ==Rails
4
4
 
5
- * i18n was merged into Rails trunk (http://github.com/svenfuchs/i18n/tree/master), (http://github.com/svenfuchs/rails/tree/i18n-merge), нужно
6
- написать i18n файлы для common stuff (datetime) и Rails.
7
-
5
+ ==Вообще
6
+ * Выносим Гиленсона в отдельный гем
@@ -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.join(File.dirname(__FILE__), 'lib', 'rutils')
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)
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  $KCODE = 'u'
2
3
  require 'yaml'
3
4
 
@@ -1,3 +1,4 @@
1
+ # -*- encoding: utf-8 -*-
1
2
  module RuTils
2
3
  module DateTime
3
4
 
@@ -0,0 +1,7 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # BlueCloth с поддержкой Gilenson
3
+ class RuTils::Gilenson::BlueClothExtra < BlueCloth
4
+ def to_html(*opts)
5
+ RuTils::Gilenson::Formatter.new(super(*opts)).to_html
6
+ end
7
+ end
@@ -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 => "&#8201;", # полукруглая шпация (тонкий пробел)
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
- # Для маркера мы применяем UTF-BOM чтобы его НЕЛЬЗЯ было перепутать с частью
188
- # любого другого мультибайтного глифа. Thanks to huNter.
189
- REPLACEMENT_MARKER = RuTils::SUBSTITUTION_MARKER.freeze #:nodoc:
190
+ # Метка на которую подменяются вынутые теги
191
+ REPLACEMENT_MARKER = RuTils::SUBSTITUTION_MARKER #:nodoc:
190
192
 
191
193
  # Кто придумал &#147;? Не учите людей плохому...
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
- FORBIDDEN_NUMERIC_ENTITIES.freeze #:nodoc:
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
- if args.last.is_a?(Hash)
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
- text = @_text.strip
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)