julik-rutils 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +162 -0
- data/Manifest.txt +42 -0
- data/README.txt +234 -0
- data/Rakefile.rb +41 -0
- data/TODO.txt +6 -0
- data/WHAT_HAS_CHANGED.txt +44 -0
- data/bin/gilensize +22 -0
- data/bin/rutilize +38 -0
- data/init.rb +27 -0
- data/lib/countries/countries.rb +1773 -0
- data/lib/datetime/datetime.rb +83 -0
- data/lib/gilenson/bluecloth_extra.rb +7 -0
- data/lib/gilenson/gilenson.rb +665 -0
- 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 -0
- data/lib/integration/rails_date_helper_override.rb +127 -0
- data/lib/integration/rails_pre_filter.rb +4 -0
- data/lib/pluralizer/pluralizer.rb +261 -0
- data/lib/rutils.rb +54 -0
- data/lib/transliteration/bidi.rb +21 -0
- data/lib/transliteration/simple.rb +75 -0
- data/lib/transliteration/transliteration.rb +53 -0
- data/lib/version.rb +5 -0
- data/test/extras/integration_bluecloth.rb +13 -0
- data/test/extras/integration_maruku.rb +15 -0
- data/test/extras/integration_rails_filter.rb +29 -0
- data/test/extras/integration_rails_gilenson_helpers.rb +80 -0
- data/test/extras/integration_rails_helpers.rb +85 -0
- 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 +4 -0
- data/test/test_datetime.rb +145 -0
- data/test/test_gilenson.rb +396 -0
- data/test/test_integration.rb +22 -0
- data/test/test_integration_flag.rb +18 -0
- data/test/test_pluralize.rb +84 -0
- data/test/test_rutils_base.rb +11 -0
- data/test/test_transliteration.rb +53 -0
- metadata +121 -0
data/History.txt
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
=== 1.0.2 - 09.02.2009
|
2
|
+
|
3
|
+
* В 1879 раз поправлена генерация rdoc из gems
|
4
|
+
|
5
|
+
=== 1.0.1 - 08.02.2009
|
6
|
+
|
7
|
+
* Оверрайды очищены и уничтожены, перегрузка форматтеров выполняется через наследование и рельсовый хелпер (julik)
|
8
|
+
* Протестировано на JRuby 1.1.6 (julik)
|
9
|
+
* Основные шестеренки совместимы с Ruby 1.9.1 (julik)
|
10
|
+
* BiDi транслит покидает нас. URL давно поддерживают Unicode, если нет - сохраняйте транслитерированный slug отдельно.
|
11
|
+
Если кому-то это не нравится - см. Wikipedia (julik)
|
12
|
+
|
13
|
+
=== 0.2.5 - 08.08.2008
|
14
|
+
|
15
|
+
* Поддержка Rails Edge (pre-2.2) для хелперов DateTime. RuTils при overrides_enabled пытается поставить себя выше I18n -- при overrides_enabled I18n не вызывается для datetime хелперов. (Yaroslav Markin)
|
16
|
+
* Частичная поддержка RedCloth 4 (julik)
|
17
|
+
* Фильтр для контроллера чтобы установить верный флаг для экшена, то что происходит в экшене - thread local (julik)
|
18
|
+
* Разделяем тесты и хаки (julik)
|
19
|
+
* Добавлена поддержка strftime макроса %e (номер дня в месяце без лидирующего нуля) -- по аналогии с %d, при использовании %e мы склоняем имя месяца (Yaroslav Markin)
|
20
|
+
* Использование с RedCloth 4 больше не вызывает ошибки (совместимости для перегрузки все еще нет) (Yaroslav Markin)
|
21
|
+
* Добавлен метод Fixnum#kopeek для вывода целочисленных Денег (julik)
|
22
|
+
* RuTils::overrides безопасен для нитей (julik)
|
23
|
+
|
24
|
+
=== 0.2.4 - 10.07.2008
|
25
|
+
|
26
|
+
* Форматтер даты-времени должен гарантированно возвращать результат (Eugene Pimenov + julik)
|
27
|
+
* Передаваемый формат даты-времени не должен мутировать в пути (Eugene Pimenov)
|
28
|
+
* В Gilenson закрывающая латинская кавычка не принимается за знак дюйма
|
29
|
+
* В Gilenson корректно обрабатываются неразрывные пробелы если в сегменте присутствуют пунктуация из глифов
|
30
|
+
* В Gilenson добавлены настройки force_en_quotes и force_ru_quotes (если нужно свести все кавычки к одной форме)
|
31
|
+
* До свидания, Gilenson::Obsolete (julik)
|
32
|
+
* Небольшая чистка инфраструктуры билдов (julik)
|
33
|
+
* strftime("%d %B") теперь возвращает день в двузначном формате (например, 01 декабря) (Anonymous)
|
34
|
+
* добавлены алиасы #rubl и #rublja для Numeric#rublej. Теперь можно писать: 1.rubl, 3.rublja. (Yaroslav Markin)
|
35
|
+
* Переписаны Date хелперы для Rails. Теперь поддерживаются все опции Rails 1.2--2.0 и
|
36
|
+
Rails 2.1+ (Yaroslav Markin)
|
37
|
+
* Переписаны и дополнены тесты на перегрузку Date хелперов Rails (Yaroslav Markin)
|
38
|
+
* Для тестирования оверрайдов Rails используется gem multi_rails
|
39
|
+
* До свидания, <nobr>. Указывайте .nobr { text-wrap: nowrap } в своих стилевых таблицах.
|
40
|
+
|
41
|
+
=== 0.2.3 - 27.09.2007
|
42
|
+
|
43
|
+
* Кошмар - в новой версии rubygems изменилась семантика s.files из-за чего мы забыли
|
44
|
+
все файлы в корневой директории - включая init.rb (julik)
|
45
|
+
|
46
|
+
=== 0.2.2 - 24.09.2007
|
47
|
+
|
48
|
+
* Gilenson - обрабатываем акронимы по принципу Textile (zajats, julik)
|
49
|
+
* Gilenson - отформатирован под 2 пробела (julik)
|
50
|
+
* В тестах пользуйтесь assert_equal_cp (julik)
|
51
|
+
* Welcome to subversion (julik)
|
52
|
+
|
53
|
+
=== 0.2.1 - 02.04.2007
|
54
|
+
|
55
|
+
* Восстановлен в gemspec gilenson.rb (Сергей Барабаш)
|
56
|
+
|
57
|
+
=== 0.2.0 - 02.04.2007
|
58
|
+
|
59
|
+
* Фикс squeeze в dirify (Сергей Барабаш)
|
60
|
+
* Формат даты по умолчанию - %F (Сергей Барабаш)
|
61
|
+
|
62
|
+
=== 0.1.9 - 17.02.2007
|
63
|
+
|
64
|
+
* Gilenson integration - не съедаем пробелы между тегами при прогоне текста через Textile
|
65
|
+
|
66
|
+
=== 0.1.8 - 05.02.2007
|
67
|
+
|
68
|
+
* Gilenson - расстановка инициалов не должна цеплять аббревиатуры (julik)
|
69
|
+
|
70
|
+
=== 0.1.7 - 05.02.2007
|
71
|
+
* Date helpers приведены в более веселый вид (и в соответствие с Rails 1.2.1) (julik)
|
72
|
+
* date_helper надо поменять чтобы передавать рельсовому хелперу весь массив options в хеше (julik)
|
73
|
+
|
74
|
+
=== 0.1.6 - 18.08.2006
|
75
|
+
|
76
|
+
* Удалили jcode, он нам не сильно нужен (julik)
|
77
|
+
* В простом транслите Шипилов - Schipilov вместо SCHipilov (julik)
|
78
|
+
* Тесты интеграции валятся явно и громко если зависимые модули на машине отсутствуют (julik)
|
79
|
+
* Масса крошечных твиков чтобы сделать все немножко аккуратнее (julik)
|
80
|
+
* Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B === 31 декабря) в strftime (mash)
|
81
|
+
|
82
|
+
=== 0.1.5 - 08.05.2006
|
83
|
+
|
84
|
+
* Транслитераторы вынесены в отдельные файлы (julik)
|
85
|
+
* Починен баг с передачей часа в нужном падеже в distance_of_time (anonyomous)
|
86
|
+
* Добавлены корректные методы публикации доков, сменены параметры их генерации (julik)
|
87
|
+
* cp -r заменен на cp_r чтобы rutilize работал в Windows (anonymous)
|
88
|
+
* Имена месяцев со строчной буквы (sgt - http://rubyforge.org/users/sgt)
|
89
|
+
* Поддерживаем оба класса Locale (из ruby-locale и gettext - они немного отличаются по семантике) (julik)
|
90
|
+
|
91
|
+
|
92
|
+
=== 0.1.4 - 02.12.2005
|
93
|
+
|
94
|
+
* Поправлен импорт Rails-плагина (julik)
|
95
|
+
* Поправлен паттерн сбора тестируемых файлов (julik)
|
96
|
+
* Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
|
97
|
+
* Gilenson - в тестах произведена замена <cOdE> на <code> и <TT> на <tt> (mash)
|
98
|
+
* Gilenson - в двух регулярных выражениях (в "def process_quotes") изменен #{@mark_tag} на
|
99
|
+
\#{@mark_tag} чтобы предотвратить segfault ruby 1.8.2 (2004-12-25) на [i386-mswin32] (mash)
|
100
|
+
* Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
|
101
|
+
* DateTime - RU_INFLECTED_MONTHNAMES => Авгуса --> Августа (mash)
|
102
|
+
|
103
|
+
=== 0.1.3 - 14.11.2005
|
104
|
+
|
105
|
+
* Gilenson - замена троеточий на ellipsis (julik)
|
106
|
+
* Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
|
107
|
+
меняется на glyph[:nbsp]. (mash)
|
108
|
+
* Gilenson - починен баг из-за которого не типографилась закрывающая кавычка после вопросительного
|
109
|
+
и восклицательного знака (julik)
|
110
|
+
* По умолчанию используется новый Gilenson (Gilenson::Formatter). Старый доступен как Gilenson::Obsolete и через
|
111
|
+
String#o_gilensize и грузится только в случае необходимости. Если у вас были тесты провеяющие gilensize
|
112
|
+
скорее всего они "полетели" (julik)
|
113
|
+
* Gilenson - дополнительная фича, не связанная с типографикой: замена амперсанда в следующих атрибутах
|
114
|
+
тагов: href, src, data. Пример: <a href="?x=1&y=2&z=3"> => <a href="?x=1&y=2&z=3"> (mash)
|
115
|
+
* Gilenson - изменён метод process_ampersands (стало process_escape_html), меняющий &,<,> на глифы :amp,:lt,:gt
|
116
|
+
при запрете HTML (@settings[:html]=>false). По-умолчанию Гиленсон разрешает использование HTML.
|
117
|
+
В иерархии метод выставлен первым для корректной обработки случаев вида
|
118
|
+
%{Используйте & вместо &}.gilensize(:html=>false) (mash)
|
119
|
+
* Gilenson - добавлены :skip_attr=>false и :skip_code=>true для управления обработкой типографики атрибутов тегов title, alt и содержимого <code/>, <tt/>, <![CDATA[...]]> (mash)
|
120
|
+
* Gilenson - добавлен :raw_output=>true для вывода обычных UTF-8 chars вместо entities (julik)
|
121
|
+
* Смена структуры модулей Gilenson (julik)
|
122
|
+
RuTils::Gilenson::Obsolete - старый класс форматтера
|
123
|
+
RuTils::Gilenson::Formatter - новый класс форматтера
|
124
|
+
При вызове RuTils::Gilenson.new возвращается новый Formatter
|
125
|
+
* Gilenson - документация (julik)
|
126
|
+
* Gilenson - основные группы настроек "по-умолчанию" выносятся в константы (julik)
|
127
|
+
* Gilenson - фильтры выносятся в методы типа process_фильтр и их можно применять по отдельности через Formatter#apply (julik)
|
128
|
+
* Gilenson - добавлены ¶ и № (последний - не стандарт, но нужен для преобразований символа "номер") (mash)
|
129
|
+
* Gilenson - добавлен хэш @glyph_copy_paste для подмены юникодных типографских символов на entities
|
130
|
+
(опционально, через @settings[:copypaste]=>true) (mash)
|
131
|
+
* Gilenson - добавлена "склейка" инициалов полукруглой шпацией (thin space)
|
132
|
+
* Gilenson - добавлен Formatter#process чтобы обрабатывать строки поточно, и сделан удобный доступ к настройкам
|
133
|
+
через "хвост" метода (julik)
|
134
|
+
* Во всех внутренних строковых подстановках Gilenson используются указатели на глифы с двоеточием в начале (julik)
|
135
|
+
* Gilenson - введен DOUBLE PRIME (″) для знаков дюйма (julik)
|
136
|
+
http://en.wikipedia.org/wiki/Prime_%28mark%29
|
137
|
+
Согласно изощренным правилам скошенный prime правильней чем "
|
138
|
+
* Новый Гиленсон lib/gilenson/gilenson.rb (mash)
|
139
|
+
RuTils::GilensonNew::Typografica.new('какой-то текст')
|
140
|
+
%q{"какой-то текст"}.n_gilensize
|
141
|
+
* Код приведён к "2 spaces - no tabs", частично полетели дифы (mash)
|
142
|
+
* Изменены константы дат, используемые в lib/integration/rails_date_helper_override.rb:
|
143
|
+
Было: RuTils::DateTime::ABBR_MONTHNAMES, RuTils::DateTime::INFLECTED_MONTHNAMES
|
144
|
+
Стало: Date::RU_ABBR_MONTHNAMES, Date::RU_INFLECTED_MONTHNAMES (mash)
|
145
|
+
* Добавлена функциия Numeric#rublej (julik)
|
146
|
+
* Добавлена русская версия Time#ru_strftime и Date#ru_strftime (mash)
|
147
|
+
|
148
|
+
=== 0.1.2 - 01.11.2005
|
149
|
+
|
150
|
+
* Добавлен BiDi-транслит c тестами (mash)
|
151
|
+
|
152
|
+
=== 0.04 - 20.10.2005
|
153
|
+
|
154
|
+
* Чистка документации
|
155
|
+
|
156
|
+
=== 0.03 - 18.10.2005
|
157
|
+
|
158
|
+
* Легкий рефакторинг и чистка документации, добавлена реализация BiDi-транслита
|
159
|
+
|
160
|
+
=== 0.02 - 12.07.2005
|
161
|
+
|
162
|
+
* Заменен маркер подстановки тегов в Gilenson. Ранее без oniguruma из-за его применения "проглатывалась" буква "р"
|
data/Manifest.txt
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile.rb
|
5
|
+
TODO.txt
|
6
|
+
WHAT_HAS_CHANGED.txt
|
7
|
+
bin/gilensize
|
8
|
+
bin/rutilize
|
9
|
+
init.rb
|
10
|
+
lib/countries/countries.rb
|
11
|
+
lib/datetime/datetime.rb
|
12
|
+
lib/gilenson/bluecloth_extra.rb
|
13
|
+
lib/gilenson/gilenson.rb
|
14
|
+
lib/gilenson/helper.rb
|
15
|
+
lib/gilenson/maruku_extra.rb
|
16
|
+
lib/gilenson/rdiscount_extra.rb
|
17
|
+
lib/gilenson/redcloth_extra.rb
|
18
|
+
lib/integration/integration.rb
|
19
|
+
lib/integration/rails_date_helper_override.rb
|
20
|
+
lib/integration/rails_pre_filter.rb
|
21
|
+
lib/pluralizer/pluralizer.rb
|
22
|
+
lib/rutils.rb
|
23
|
+
lib/transliteration/bidi.rb
|
24
|
+
lib/transliteration/simple.rb
|
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
|
35
|
+
test/run_tests.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
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
= RuTils
|
2
|
+
|
3
|
+
http://rutils.rubyforge.org
|
4
|
+
|
5
|
+
RuTils - простой обработчик русского текста на Ruby.
|
6
|
+
Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
|
7
|
+
и приятной (в идеале - столь же простой как и разработку оных на английском).
|
8
|
+
|
9
|
+
== Шеф! все пропало! я обновил RuTils и он работает совершенно по-другому!
|
10
|
+
|
11
|
+
Раздел также известен под именем "Что поменялось в RuTils 1.0.0". Вам {сюда.}[link:files/WHAT_HAS_CHANGED_txt.html]
|
12
|
+
|
13
|
+
== Чье это
|
14
|
+
|
15
|
+
Разработчики RuTils - {Julik}[http://julik.nl], {Mash}[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
|
16
|
+
|
17
|
+
Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за
|
18
|
+
реализацию большинства алгоритмов на PHP.
|
19
|
+
|
20
|
+
= Как воспользоваться
|
21
|
+
|
22
|
+
Просто включите rutils в свою программу как библиотеку
|
23
|
+
|
24
|
+
require 'rutils'
|
25
|
+
|
26
|
+
Для использования с Ruby on Rails установите RuTils как плагин
|
27
|
+
(скопируйте библиотеку в vendor/plugins приложения).
|
28
|
+
|
29
|
+
= Что оно делает
|
30
|
+
|
31
|
+
== Cумма прописью и выбор числительного
|
32
|
+
|
33
|
+
RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным
|
34
|
+
учетом рода. Например:
|
35
|
+
|
36
|
+
4.propisju => "четыре"
|
37
|
+
345.propisju => "триста сорок пять"
|
38
|
+
231.propisju(2) => "двести тридцать одна"
|
39
|
+
341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
|
40
|
+
(212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
|
41
|
+
четыре десятых сволочи"
|
42
|
+
|
43
|
+
Также реализуется выбор варианта числительного в зависимости от числа
|
44
|
+
|
45
|
+
15.items("кодер", "кодера", "кодеров") => "кодеров"
|
46
|
+
|
47
|
+
и вывод "суммы прописью" для денежных сумм в рублях
|
48
|
+
|
49
|
+
(413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
|
50
|
+
1.rubl => "один рубль"
|
51
|
+
22.rublja => "двадцать два рубля"
|
52
|
+
|
53
|
+
Если вы храните денежные единицы в целочисленных типах, пользуйтесь "копеечными" вариантами:
|
54
|
+
|
55
|
+
300.kopeek => "три рубля"
|
56
|
+
121.kopeika => "один рубль двадцать одна копейка"
|
57
|
+
|
58
|
+
== Транслит
|
59
|
+
|
60
|
+
RuTils на данный момент реализует простейший транслит "в одну сторону".
|
61
|
+
"Взаимно-однозначный транслит" (BiDi-транслит) больше не поддерживается.
|
62
|
+
|
63
|
+
"Вот такое вот дело".translify => "Vot takoye vot delo"
|
64
|
+
"Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
|
65
|
+
|
66
|
+
== Обработка русской типографики в HTML
|
67
|
+
|
68
|
+
Gilenson - порт Typografica[http://pixel-apes.com/typografica] от Pixel Apes.
|
69
|
+
Тыпографица - механизм автоматической расстановки подстановок в тексте перед его
|
70
|
+
выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому
|
71
|
+
подобные "украшательства".
|
72
|
+
|
73
|
+
Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы,
|
74
|
+
английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и
|
75
|
+
отформатирует знаки типа (c), (tm), телефоны и адреса.
|
76
|
+
|
77
|
+
%q{"И это называется языком?", -- таков был его вопрос}.gilensize => "«И
|
78
|
+
это называется языком?», — таков был его вопрос"
|
79
|
+
|
80
|
+
Более подробная документация по Gilenson доступна в документах к
|
81
|
+
RuTils::Gilenson::Formatter
|
82
|
+
|
83
|
+
В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать
|
84
|
+
Unicode-тексты в среде UNIX пользуясь стандартным выводом
|
85
|
+
|
86
|
+
$ cat myfile.txt | gilensize > myfile.html
|
87
|
+
|
88
|
+
== Даты
|
89
|
+
|
90
|
+
В класс Date введены следующие константы:
|
91
|
+
|
92
|
+
* RU_MONTHNAMES (Январь Февраль Март...)
|
93
|
+
* RU_DAYNAMES (Воскресенье Понедельник...)
|
94
|
+
* RU_ABBR_MONTHNAMES (Янв Фев Мар...)
|
95
|
+
* RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
|
96
|
+
* RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
|
97
|
+
* RU_DAYNAMES_E (первое второе третье...)
|
98
|
+
|
99
|
+
Пример использования:
|
100
|
+
|
101
|
+
require 'date' date = Date.new(2005, 11, 9)
|
102
|
+
puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
|
103
|
+
puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
|
104
|
+
puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
|
105
|
+
puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
|
106
|
+
|
107
|
+
При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется
|
108
|
+
"покрытие" стандартной функции Time#strftime ("родную" #strftime можно продолжать
|
109
|
+
использовать через alias-метод #strftime_norutils):
|
110
|
+
|
111
|
+
Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
|
112
|
+
Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
|
113
|
+
|
114
|
+
== Интеграция с RedCloth и BlueCloth
|
115
|
+
|
116
|
+
RuTils в первую очередь задумывался как максимально "прозрачный" механизм
|
117
|
+
обработки русского текста в контексте Rails-приложения.
|
118
|
+
|
119
|
+
Если вы используете RuTils в одном приложении со стандартными форматтерами (RedCloth, BlueCloth...) воспользуйтесь
|
120
|
+
дополнительными модулями которые выводят отформатированный Гиленсоном результат работы форматтеров
|
121
|
+
|
122
|
+
Gilenson определяет следующие дополнительные форматтеры (они работают так же как и их базовые классы)
|
123
|
+
|
124
|
+
* RuTils::Gilenson::RedClothExtra
|
125
|
+
* RuTils::Gilenson::BlueClothExtra
|
126
|
+
* RuTils::Gilenson::RDiscountExtra
|
127
|
+
* RuTils::Gilenson::MarukuExtra
|
128
|
+
|
129
|
+
В этих классах Gilenson будет обрабатывать типографику во всех текстах, пропускаемых через
|
130
|
+
них. Эти классы при включенном флаге RuTils.overrides автоматически подключаются в хелперы
|
131
|
+
+markdown+ и +textilize+.
|
132
|
+
|
133
|
+
== Интеграция с Rails версии 2.2.2 и выше
|
134
|
+
|
135
|
+
Используйте гем russian для дат и RuTils как дополнение (для транслита, функций kopeek и так далее)
|
136
|
+
|
137
|
+
== Интеграция с Rails версий 1.2 - 2.1.1
|
138
|
+
|
139
|
+
RuTils заставляет следующие функции старых (pre-i18n) версий Rails говорить по-русски:
|
140
|
+
|
141
|
+
* Меню выбора даты (+date_select+ и +datetime_select+) и связанные с этим хелперы
|
142
|
+
будут выводиться с русскими именами месяцев, и учитывая локализованный порядок дат
|
143
|
+
(сначала число, потом месяц, потом год)
|
144
|
+
* +distance_of_time_in_words+ будет выводить
|
145
|
+
русские описания длительности ("более 2 часов")
|
146
|
+
|
147
|
+
== Управление оверрайдами
|
148
|
+
|
149
|
+
Перегрузку всех функций других модулей можно включать и отключать в любое время с
|
150
|
+
помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
|
151
|
+
хелперы будут работать в стандартном режиме (например, даты и время будут выводиться по-русски).
|
152
|
+
Это нужно когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
|
153
|
+
|
154
|
+
Рекомендуемый способ использования RuTils с Ruby on Rails приложением -- установка RuTils
|
155
|
+
плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего
|
156
|
+
приложения или воспользуйтесь командой rutilize путь_к_rails_приложению чтобы сделать это
|
157
|
+
автоматически. После этого вы сможете использовать RuTils без необходимости
|
158
|
+
установки gem на вашем сервере (не забудьте перезапустить приложение чтобы
|
159
|
+
вгрузить в него RuTils).
|
160
|
+
|
161
|
+
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
|
162
|
+
|
163
|
+
== Распространения
|
164
|
+
|
165
|
+
Вы можете свободно распространять RuTils со своим приложением при условии
|
166
|
+
сохранения структуры и файла README.
|
167
|
+
|
168
|
+
== Совместимость
|
169
|
+
|
170
|
+
* Ruby 1.8.x
|
171
|
+
* Ruby 1.9.x (релизные версии начиная с 1.9.1)
|
172
|
+
* JRuby 1.1.6
|
173
|
+
|
174
|
+
== Требования
|
175
|
+
|
176
|
+
* Ruby 1.8.2 или выше, немного прямых рук
|
177
|
+
* Rake[http://rake.rubyforge.org],
|
178
|
+
|
179
|
+
|
180
|
+
Rails[http://rubyonrails.org],
|
181
|
+
RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
|
182
|
+
BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов.
|
183
|
+
|
184
|
+
== Работает ли это с текстом в кодировке отличной от UTF-8 (Windows-1251, KOI-8)
|
185
|
+
|
186
|
+
Нет и никогда не будет.
|
187
|
+
|
188
|
+
== Как получить помощь
|
189
|
+
|
190
|
+
Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode
|
191
|
+
'u'). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
|
192
|
+
|
193
|
+
* Переменная $KCODE включена в режим 'u'
|
194
|
+
* Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
|
195
|
+
|
196
|
+
Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой
|
197
|
+
RubyKanjiCode в своем httpd.conf.
|
198
|
+
|
199
|
+
== Если вы все сделали правильно но что-то не работает
|
200
|
+
|
201
|
+
Сообщите об ошибке на странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
|
202
|
+
Не забудьте указать версию, ее всегда можно узнать в константе
|
203
|
+
|
204
|
+
RuTils::VERSION
|
205
|
+
|
206
|
+
== Как ускорить реализацию новых функций
|
207
|
+
|
208
|
+
Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите
|
209
|
+
тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы
|
210
|
+
можете скопировать из собственных тестов RuTils.
|
211
|
+
|
212
|
+
Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы,
|
213
|
+
пожалуйста следуйте следующим правилам оформления кода:
|
214
|
+
|
215
|
+
* Unix line breaks (LF)
|
216
|
+
* Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
|
217
|
+
* Все файлы должны содержать emacs-прагму
|
218
|
+
# -*- encoding: utf-8 -*-
|
219
|
+
в первой строке
|
220
|
+
* Отступы в 2 пробела, без табуляций
|
221
|
+
* Только однозначный код для 1.8 и 1.9
|
222
|
+
* Без функций которые отсутствуют в 1.8 (в первую очередь encodings)
|
223
|
+
* Без функций которые убраны из 1.9
|
224
|
+
* Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
|
225
|
+
* Все другие конвенции нормального написания
|
226
|
+
Ruby-кода (http://github.com/chneukirchen/styleguide/tree/master)
|
227
|
+
|
228
|
+
При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
|
229
|
+
- он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
|
230
|
+
разницу между двумя разными пробелами, например)
|
231
|
+
|
232
|
+
Если вы хотите участвовать в разработке RuTils - fork us on GitHub
|
233
|
+
|
234
|
+
git clone git://github.com/julik/rutils.git
|
data/Rakefile.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$KCODE = 'u'
|
3
|
+
$:.reject! { |e| e.include? 'TextMate' }
|
4
|
+
|
5
|
+
require 'lib/version'
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'rubygems'
|
9
|
+
require 'hoe'
|
10
|
+
|
11
|
+
DOCOPTS = %w(--charset utf-8 --promiscuous)
|
12
|
+
|
13
|
+
# Disable spurious warnings when running tests, ActiveMagic cannot stand -w
|
14
|
+
Hoe::RUBY_FLAGS.replace ENV['RUBY_FLAGS'] || "-I#{%w(lib test).join(File::PATH_SEPARATOR)}" +
|
15
|
+
(Hoe::RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
|
16
|
+
|
17
|
+
rutils = Hoe.new('rutils', RuTils::VERSION) do |p|
|
18
|
+
p.name = "rutils"
|
19
|
+
p.author = ["Julian 'Julik' Tarkhanov", "Danil Ivanov", "Yaroslav Markin"]
|
20
|
+
p.email = ['me@julik.nl', 'yaroslav@markin.net']
|
21
|
+
p.description = 'Simple processing of russian strings'
|
22
|
+
p.summary = 'Simple processing of russian strings'
|
23
|
+
p.remote_rdoc_dir = ''
|
24
|
+
p.need_zip = true # ненвижу
|
25
|
+
end
|
26
|
+
rutils.spec.rdoc_options += DOCOPTS
|
27
|
+
|
28
|
+
require 'load_multi_rails_rake_tasks'
|
29
|
+
|
30
|
+
rescue LoadError
|
31
|
+
$stderr.puts "Meta-operations on this package require Hoe and multi_rails"
|
32
|
+
task :default => [ :test ]
|
33
|
+
|
34
|
+
require 'rake/testtask'
|
35
|
+
desc "Run all tests (requires BlueCloth, RedCloth and Rails for integration tests)"
|
36
|
+
Rake::TestTask.new("test") do |t|
|
37
|
+
t.libs << "test"
|
38
|
+
t.pattern = 'test/t_*.rb'
|
39
|
+
t.verbose = true
|
40
|
+
end
|
41
|
+
end
|