rutils 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/{CHANGELOG → History.txt} +49 -18
- data/Manifest.txt +27 -0
- data/README.txt +214 -0
- data/Rakefile.rb +48 -120
- data/{TODO → TODO.txt} +1 -4
- data/bin/gilensize +8 -4
- data/bin/rutilize +0 -0
- data/lib/datetime/datetime.rb +15 -17
- data/lib/gilenson/gilenson.rb +74 -60
- data/lib/integration/blue_cloth_override.rb +7 -3
- data/lib/integration/integration.rb +2 -2
- data/lib/integration/rails_date_helper_override.rb +91 -57
- data/lib/integration/red_cloth_override.rb +8 -8
- data/lib/pluralizer/pluralizer.rb +4 -0
- data/lib/rutils.rb +11 -6
- data/lib/transliteration/bidi.rb +8 -1
- data/test/t_datetime.rb +16 -1
- data/test/t_gilenson.rb +45 -23
- data/test/t_integration.rb +73 -29
- data/test/t_pluralize.rb +2 -0
- metadata +78 -62
- data/README +0 -192
- data/lib/gilenson/gilenson_port.rb +0 -321
- data/test/t_typografica.rb +0 -57
data/{CHANGELOG → History.txt}
RENAMED
@@ -1,38 +1,63 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
=== 0.2.4 - 10.07.2008
|
2
|
+
|
3
|
+
* Форматтер даты-времени должен гарантированно возвращать результат (Eugene Pimenov + julik)
|
4
|
+
* Передаваемый формат даты-времени не должен мутировать в пути (Eugene Pimenov)
|
5
|
+
* В Gilenson закрывающая латинская кавычка не принимается за знак дюйма
|
6
|
+
* В Gilenson корректно обрабатываются неразрывные пробелы если в сегменте присутствуют пунктуация из глифов
|
7
|
+
* В Gilenson добавлены настройки force_en_quotes и force_ru_quotes (если нужно свести все кавычки к одной форме)
|
8
|
+
* До свидания, Gilenson::Obsolete (julik)
|
9
|
+
* Небольшая чистка инфраструктуры билдов (julik)
|
10
|
+
* strftime("%d %B") теперь возвращает день в двузначном формате (например, 01 декабря) (Anonymous)
|
11
|
+
* добавлены алиасы #rubl и #rublja для Numeric#rublej. Теперь можно писать: 1.rubl, 3.rublja. (Yaroslav Markin)
|
12
|
+
* Переписаны Date хелперы для Rails. Теперь поддерживаются все опции Rails 1.2--2.0 и
|
13
|
+
Rails 2.1+ (Yaroslav Markin)
|
14
|
+
* Переписаны и дополнены тесты на перегрузку Date хелперов Rails (Yaroslav Markin)
|
15
|
+
* Для тестирования оверрайдов Rails используется gem multi_rail10s
|
16
|
+
* До свидания, <nobr>. Указывайте .nobr { text-wrap: nowrap } в своих стилевых таблицах.
|
17
|
+
|
18
|
+
=== 0.2.3 - 27.09.2007
|
19
|
+
|
20
|
+
* Кошмар - в новой версии rubygems изменилась семантика s.files из-за чего мы забыли
|
21
|
+
все файлы в корневой директории - включая init.rb (julik)
|
22
|
+
|
23
|
+
=== 0.2.2 - 24.09.2007
|
4
24
|
|
5
|
-
Версия 0.2.2 - 24.09.2007
|
6
25
|
* Gilenson - обрабатываем акронимы по принципу Textile (zajats, julik)
|
7
26
|
* Gilenson - отформатирован под 2 пробела (julik)
|
8
27
|
* В тестах пользуйтесь assert_equal_cp (julik)
|
9
28
|
* Welcome to subversion (julik)
|
10
29
|
|
11
|
-
|
30
|
+
=== 0.2.1 - 02.04.2007
|
31
|
+
|
12
32
|
* Восстановлен в gemspec gilenson.rb (Сергей Барабаш)
|
13
33
|
|
14
|
-
|
34
|
+
=== 0.2.0 - 02.04.2007
|
35
|
+
|
15
36
|
* Фикс squeeze в dirify (Сергей Барабаш)
|
16
37
|
* Формат даты по умолчанию - %F (Сергей Барабаш)
|
17
38
|
|
18
|
-
|
39
|
+
=== 0.1.9 - 17.02.2007
|
40
|
+
|
19
41
|
* Gilenson integration - не съедаем пробелы между тегами при прогоне текста через Textile
|
20
42
|
|
21
|
-
|
43
|
+
=== 0.1.8 - 05.02.2007
|
44
|
+
|
22
45
|
* Gilenson - расстановка инициалов не должна цеплять аббревиатуры (julik)
|
23
46
|
|
24
|
-
|
47
|
+
=== 0.1.7 - 05.02.2007
|
25
48
|
* Date helpers приведены в более веселый вид (и в соответствие с Rails 1.2.1) (julik)
|
26
49
|
* date_helper надо поменять чтобы передавать рельсовому хелперу весь массив options в хеше (julik)
|
27
50
|
|
28
|
-
|
51
|
+
=== 0.1.6 - 18.08.2006
|
52
|
+
|
29
53
|
* Удалили jcode, он нам не сильно нужен (julik)
|
30
54
|
* В простом транслите Шипилов - Schipilov вместо SCHipilov (julik)
|
31
55
|
* Тесты интеграции валятся явно и громко если зависимые модули на машине отсутствуют (julik)
|
32
56
|
* Масса крошечных твиков чтобы сделать все немножко аккуратнее (julik)
|
33
|
-
* Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B
|
57
|
+
* Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B === 31 декабря) в strftime (mash)
|
58
|
+
|
59
|
+
=== 0.1.5 - 08.05.2006
|
34
60
|
|
35
|
-
Версия 0.1.5 - 08.05.2006
|
36
61
|
* Транслитераторы вынесены в отдельные файлы (julik)
|
37
62
|
* Починен баг с передачей часа в нужном падеже в distance_of_time (anonyomous)
|
38
63
|
* Добавлены корректные методы публикации доков, сменены параметры их генерации (julik)
|
@@ -41,7 +66,8 @@
|
|
41
66
|
* Поддерживаем оба класса Locale (из ruby-locale и gettext - они немного отличаются по семантике) (julik)
|
42
67
|
|
43
68
|
|
44
|
-
|
69
|
+
=== 0.1.4 - 02.12.2005
|
70
|
+
|
45
71
|
* Поправлен импорт Rails-плагина (julik)
|
46
72
|
* Поправлен паттерн сбора тестируемых файлов (julik)
|
47
73
|
* Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
|
@@ -51,7 +77,8 @@
|
|
51
77
|
* Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
|
52
78
|
* DateTime - RU_INFLECTED_MONTHNAMES => Авгуса --> Августа (mash)
|
53
79
|
|
54
|
-
|
80
|
+
=== 0.1.3 - 14.11.2005
|
81
|
+
|
55
82
|
* Gilenson - замена троеточий на ellipsis (julik)
|
56
83
|
* Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
|
57
84
|
меняется на glyph[:nbsp]. (mash)
|
@@ -95,14 +122,18 @@
|
|
95
122
|
* Добавлена функциия Numeric#rublej (julik)
|
96
123
|
* Добавлена русская версия Time#ru_strftime и Date#ru_strftime (mash)
|
97
124
|
|
98
|
-
|
125
|
+
=== 0.1.2 - 01.11.2005
|
126
|
+
|
99
127
|
* Добавлен BiDi-транслит c тестами (mash)
|
100
128
|
|
101
|
-
|
129
|
+
=== 0.04 - 20.10.2005
|
130
|
+
|
102
131
|
* Чистка документации
|
103
132
|
|
104
|
-
|
133
|
+
=== 0.03 - 18.10.2005
|
134
|
+
|
105
135
|
* Легкий рефакторинг и чистка документации, добавлена реализация BiDi-транслита
|
106
136
|
|
107
|
-
|
137
|
+
=== 0.02 - 12.07.2005
|
138
|
+
|
108
139
|
* Заменен маркер подстановки тегов в Gilenson. Ранее без oniguruma из-за его применения "проглатывалась" буква "р"
|
data/Manifest.txt
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile.rb
|
5
|
+
TODO.txt
|
6
|
+
bin/gilensize
|
7
|
+
bin/rutilize
|
8
|
+
init.rb
|
9
|
+
lib/countries/countries.rb
|
10
|
+
lib/datetime/datetime.rb
|
11
|
+
lib/gilenson/gilenson.rb
|
12
|
+
lib/integration/blue_cloth_override.rb
|
13
|
+
lib/integration/integration.rb
|
14
|
+
lib/integration/rails_date_helper_override.rb
|
15
|
+
lib/integration/red_cloth_override.rb
|
16
|
+
lib/pluralizer/pluralizer.rb
|
17
|
+
lib/rutils.rb
|
18
|
+
lib/transliteration/bidi.rb
|
19
|
+
lib/transliteration/simple.rb
|
20
|
+
lib/transliteration/transliteration.rb
|
21
|
+
test/run_tests.rb
|
22
|
+
test/t_datetime.rb
|
23
|
+
test/t_gilenson.rb
|
24
|
+
test/t_integration.rb
|
25
|
+
test/t_pluralize.rb
|
26
|
+
test/t_rutils_base.rb
|
27
|
+
test/t_transliteration.rb
|
data/README.txt
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
= RuTils
|
2
|
+
|
3
|
+
RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils -
|
4
|
+
сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
|
5
|
+
и приятной (в идеале - столь же простой как и разработку оных на английском).
|
6
|
+
|
7
|
+
== Чье это
|
8
|
+
|
9
|
+
Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за
|
10
|
+
реализацию большинства алгоритмов на PHP.
|
11
|
+
|
12
|
+
Разработчики RuTils - Julik[http://julik.nl], Mash[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
|
13
|
+
|
14
|
+
= Как воспользоваться
|
15
|
+
|
16
|
+
Просто включите rutils в свою программу как библиотеку
|
17
|
+
|
18
|
+
require 'rutils'
|
19
|
+
|
20
|
+
Для использования с Ruby on Rails установите RuTils как плагин
|
21
|
+
(скопируйте библиотеку в vendor/plugins приложения).
|
22
|
+
|
23
|
+
= Что оно делает
|
24
|
+
|
25
|
+
== Cумма прописью и выбор числительного
|
26
|
+
|
27
|
+
RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным
|
28
|
+
учетом рода. Например:
|
29
|
+
|
30
|
+
4.propisju => "четыре"
|
31
|
+
345.propisju => "триста сорок пять"
|
32
|
+
231.propisju(2) => "двести тридцать одна"
|
33
|
+
341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
|
34
|
+
(212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
|
35
|
+
четыре десятых сволочи"
|
36
|
+
|
37
|
+
Также реализуется выбор варианта числительного в зависимости от числа
|
38
|
+
|
39
|
+
15.items("кодер", "кодера", "кодеров") => "кодеров"
|
40
|
+
|
41
|
+
и вывод "суммы прописью" для денежных сумм в рублях
|
42
|
+
|
43
|
+
(413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
|
44
|
+
1.rubl => "один рубль"
|
45
|
+
22.rublja => "двадцать два рубля"
|
46
|
+
|
47
|
+
== Транслит
|
48
|
+
|
49
|
+
RuTils на данный момент реализует простейший транслит "в одну сторону" и
|
50
|
+
"взаимно-однозначный транслит" (BiDi-транслит).
|
51
|
+
|
52
|
+
Простейший транслит "в одну сторону".
|
53
|
+
|
54
|
+
"Вот такое вот дело".translify => "Vot takoye vot delo"
|
55
|
+
"Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
|
56
|
+
|
57
|
+
== BiDi-транслит
|
58
|
+
|
59
|
+
Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
|
60
|
+
Реализует транслитерацию "в обе стороны", предоставляя возможность получить
|
61
|
+
валидный URL из строки, содержащей русские и английские буквы. С некоторыми
|
62
|
+
потерями (запятых и прочих "слабозначащих" символов) возможно восстановление
|
63
|
+
исходной строки.
|
64
|
+
|
65
|
+
Два режима работы:
|
66
|
+
|
67
|
+
1. Уничтожение всех слешей, которые встретятся во входной строке. В этом случае методы вызываются с передачей в них false. Например, <tt>"Web/Скрипты".bidi_translify(false)</tt>
|
68
|
+
2. Пропуск слэшей (используется по умолчанию). Например,
|
69
|
+
|
70
|
+
"WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
|
71
|
+
"+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
|
72
|
+
"WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
|
73
|
+
"+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
|
74
|
+
|
75
|
+
== Обработка русской типографики в HTML
|
76
|
+
|
77
|
+
Gilenson - порт Typografica[http://pixel-apes.com/typografica] от Pixel Apes.
|
78
|
+
Тыпографица - механизм автоматической расстановки подстановок в тексте перед его
|
79
|
+
выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому
|
80
|
+
подобные "украшательства".
|
81
|
+
|
82
|
+
Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы,
|
83
|
+
английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и
|
84
|
+
отформатирует знаки типа (c), (tm), телефоны и адреса.
|
85
|
+
|
86
|
+
%q{"И это называется языком?", -- таков был его вопрос}.gilensize => "«И
|
87
|
+
это называется языком?», — таков был его вопрос"
|
88
|
+
|
89
|
+
Более подробная документация по Gilenson доступна в документах к
|
90
|
+
RuTils::Gilenson::Formatter
|
91
|
+
|
92
|
+
В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать
|
93
|
+
Unicode-тексты в среде UNIX пользуясь стандартным выводом
|
94
|
+
|
95
|
+
$ cat myfile.txt | gilensize > myfile.html
|
96
|
+
|
97
|
+
== Даты
|
98
|
+
|
99
|
+
В класс Date введены следующие константы:
|
100
|
+
|
101
|
+
* RU_MONTHNAMES (Январь Февраль Март...)
|
102
|
+
* RU_DAYNAMES (Воскресенье Понедельник...)
|
103
|
+
* RU_ABBR_MONTHNAMES (Янв Фев Мар...)
|
104
|
+
* RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
|
105
|
+
* RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
|
106
|
+
* RU_DAYNAMES_E (первое второе третье...)
|
107
|
+
|
108
|
+
Пример использования:
|
109
|
+
|
110
|
+
require 'date' date = Date.new(2005, 11, 9)
|
111
|
+
puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя puts
|
112
|
+
puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
|
113
|
+
puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
|
114
|
+
puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
|
115
|
+
|
116
|
+
При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется
|
117
|
+
"покрытие" стандартной функции Time#strftime ("родную" #strftime можно продолжать
|
118
|
+
использовать через alias-метод #strftime_norutils):
|
119
|
+
|
120
|
+
Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
|
121
|
+
Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
|
122
|
+
|
123
|
+
== Интеграция с Rails, RedCloth и BlueCloth
|
124
|
+
|
125
|
+
RuTils в первую очередь задумывался как максимально "прозрачный" механизм
|
126
|
+
обработки русского текста в контексте Rails-приложения. В связи с этим RuTils
|
127
|
+
"вторгается" в работу других Ruby-модулей и изменяет механизм их работы.
|
128
|
+
|
129
|
+
Если вы используете RuTils в одном приложении с RedCloth или BlueCloth, RuTils
|
130
|
+
автоматически будет обрабатывать типографику во всех текстах, пропускаемых через
|
131
|
+
них. Имейте в виду, что для корректной работы этой функции RuTils надо загружать
|
132
|
+
*после* модулей RedCloth и BlueCloth.
|
133
|
+
|
134
|
+
Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
|
135
|
+
|
136
|
+
* Меню выбора даты (+date_select+ и +datetime_select+) и связанные с этим хелперы
|
137
|
+
будут выводиться с русскими именами месяцев, и учитывая локализованный порядок дат
|
138
|
+
(сначала число, потом месяц, потом год)
|
139
|
+
* +distance_of_time_in_words+ будет выводить
|
140
|
+
русские описания длительности ("более 2 часов")
|
141
|
+
|
142
|
+
Перегрузку всех функций других модулей можно включать и отключать в любое время с
|
143
|
+
помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
|
144
|
+
библиотеки будут работать в стандартном режиме (например, RedCloth будет
|
145
|
+
расставлять английские типографские кавычки). Это нужно когда вам нужно
|
146
|
+
переключиться на английский (или любой другой язык) без перезапуска приложения.
|
147
|
+
|
148
|
+
Рекомендуемый способ использования RuTils с Ruby on Rails приложением -- установка RuTils
|
149
|
+
плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего
|
150
|
+
приложения или воспользуйтесь командой rutilize путь_к_rails_приложению чтобы сделать это
|
151
|
+
автоматически. После этого вы сможете использовать RuTils без необходимости
|
152
|
+
установки gem на вашем сервере (не забудьте перезапустить приложение чтобы
|
153
|
+
вгрузить в него RuTils).
|
154
|
+
|
155
|
+
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
|
156
|
+
|
157
|
+
Вы можете свободно распространять RuTils со своим Rails-приложением при условии
|
158
|
+
сохранения структуры и файла README.
|
159
|
+
|
160
|
+
== Требования
|
161
|
+
|
162
|
+
* Ruby 1.8.2 или выше, немного прямых рук.
|
163
|
+
* Rake[http://rake.rubyforge.org],
|
164
|
+
|
165
|
+
Rails[http://rubyonrails.org],
|
166
|
+
RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
|
167
|
+
BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов.
|
168
|
+
|
169
|
+
== Работает ли это с текстом в кодировке отличной от UTF-8 (Windows-1251, KOI-8)
|
170
|
+
|
171
|
+
Нет и никогда не будет.
|
172
|
+
|
173
|
+
== Как получить помощь
|
174
|
+
|
175
|
+
Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode
|
176
|
+
'u'). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
|
177
|
+
|
178
|
+
* Переменная $KCODE включена в режим 'u'
|
179
|
+
* Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
|
180
|
+
|
181
|
+
Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой
|
182
|
+
RubyKanjiCode в своем httpd.conf.
|
183
|
+
|
184
|
+
== Если вы все сделали правильно но что-то не работает
|
185
|
+
|
186
|
+
Сообщите об ошибке на странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
|
187
|
+
Не забудьте указать версию, ее всегда можно узнать в константе
|
188
|
+
|
189
|
+
RuTils::VERSION
|
190
|
+
|
191
|
+
== Как ускорить реализацию новых функций
|
192
|
+
|
193
|
+
Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите
|
194
|
+
тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы
|
195
|
+
можете скопировать из собственных тестов RuTils.
|
196
|
+
|
197
|
+
Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы,
|
198
|
+
пожалуйста следуйте следующим правилам оформления кода:
|
199
|
+
|
200
|
+
* Unix line breaks (LF)
|
201
|
+
* Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
|
202
|
+
* Отступы в 2 пробела, без табуляций.
|
203
|
+
* Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
|
204
|
+
* Все другие конвенции нормального написания
|
205
|
+
Ruby-кода (http://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
|
206
|
+
|
207
|
+
При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
|
208
|
+
- он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
|
209
|
+
разницу между двумя разными пробелами, например)
|
210
|
+
|
211
|
+
Если вы хотите участвовать в разработке RuTils пользуйтесь версией из subversion
|
212
|
+
trunk.
|
213
|
+
|
214
|
+
http://rutils.rubyforge.org/svn/trunk
|
data/Rakefile.rb
CHANGED
@@ -1,128 +1,56 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rake/testtask'
|
4
|
-
require 'rake/rdoctask'
|
5
|
-
require 'rake/packagetask'
|
6
|
-
require 'rake/gempackagetask'
|
7
|
-
require 'rake/contrib/rubyforgepublisher'
|
8
|
-
require 'fileutils'
|
1
|
+
$KCODE = 'u'
|
2
|
+
|
9
3
|
require 'lib/rutils'
|
4
|
+
require 'rubygems'
|
10
5
|
|
11
6
|
begin
|
12
|
-
require '
|
7
|
+
require 'hoe'
|
8
|
+
|
9
|
+
# Disable spurious warnings when running tests, ActiveMagic cannot stand -w
|
10
|
+
Hoe::RUBY_FLAGS.replace ENV['RUBY_FLAGS'] || "-I#{%w(lib test).join(File::PATH_SEPARATOR)}" +
|
11
|
+
(Hoe::RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
|
12
|
+
|
13
|
+
# Hoe minus dependency pollution plus unidocs plus rdoc fix. Kommunizm, perestroika.
|
14
|
+
class KolkHoe < Hoe
|
15
|
+
DOCOPTS = %w(--webcvs=http://rutils.rubyforge.org/svn/trunk/%s --charset=utf-8 --promiscuous)
|
16
|
+
Rake::RDocTask.class_eval do
|
17
|
+
alias_method :_odefine, :define
|
18
|
+
def define; @options.unshift(*DOCOPTS); _odefine; end
|
19
|
+
end
|
20
|
+
|
21
|
+
def define_tasks
|
22
|
+
extra_deps.reject! {|e| e[0] == 'hoe' }
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
KolkHoe.new('rutils', RuTils::VERSION) do |p|
|
28
|
+
p.name = "rutils"
|
29
|
+
p.author = ["Julian 'Julik' Tarkhanov", "Danil Ivanov", "Yaroslav Markin"]
|
30
|
+
p.email = ['me@julik.nl', 'yaroslav@markin.net']
|
31
|
+
p.description = 'Simple processing of russian strings'
|
32
|
+
p.summary = 'Simple processing of russian strings'
|
33
|
+
p.url = "http://rutils.rubyforge.org"
|
34
|
+
p.test_globs = 'test/t_*.rb'
|
35
|
+
p.need_zip = true
|
36
|
+
p.remote_rdoc_dir = ''
|
37
|
+
end
|
38
|
+
|
13
39
|
rescue LoadError
|
14
|
-
|
15
|
-
|
16
|
-
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
17
|
-
PKG_NAME = 'rutils'
|
18
|
-
PKG_VERSION = RuTils::VERSION
|
19
|
-
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
20
|
-
PKG_DESTINATION = "../#{PKG_NAME}"
|
21
|
-
PKG_SUMMARY = %q{ Simple processing of russian strings }
|
22
|
-
PKG_DESCRIPTION = %q{ Allows simple processing of russian strings - transliteration, numerals as text and HTML beautification }
|
23
|
-
PKG_HOMEPAGE = 'http://rubyforge.org/projects/rutils'
|
24
|
-
PKG_EMAIL = 'me@julik.nl'
|
25
|
-
PKG_MAINTAINER = 'Julian "Julik" Tarkhanov'
|
26
|
-
|
27
|
-
RELEASE_NAME = "rutils-#{PKG_VERSION}"
|
28
|
-
|
29
|
-
RUBY_FORGE_PROJECT = "rutils"
|
30
|
-
RUBY_FORGE_USER = ENV['RUBY_FORGE_USER'] ? ENV['RUBY_FORGE_USER'] : "julik"
|
31
|
-
|
32
|
-
# нам нужна документация в Юникоде. А вы думали?
|
33
|
-
PKG_RDOC_OPTS = ['--main=README',
|
34
|
-
'--line-numbers',
|
35
|
-
'--webcvs=http://rubyforge.org/cgi-bin/viewcvs.cgi/rutils/%s?cvsroot=rutils',
|
36
|
-
'--charset=utf-8',
|
37
|
-
'--promiscuous']
|
38
|
-
|
39
|
-
task :default => [ :test ]
|
40
|
-
|
41
|
-
desc "Run all tests (requires BlueCloth, RedCloth and Rails for integration tests)"
|
42
|
-
Rake::TestTask.new("test") { |t|
|
43
|
-
t.libs << "test"
|
44
|
-
t.pattern = 'test/t_*.rb'
|
45
|
-
t.verbose = true
|
46
|
-
}
|
47
|
-
|
48
|
-
desc "Report KLOCs"
|
49
|
-
task :stats do
|
50
|
-
require 'code_statistics'
|
51
|
-
CodeStatistics.new(
|
52
|
-
["Libraries", "lib"],
|
53
|
-
["Units", "test"]
|
54
|
-
).to_s
|
55
|
-
end
|
56
|
-
|
57
|
-
desc "Generate RDoc documentation"
|
58
|
-
Rake::RDocTask.new("doc") do |rdoc|
|
59
|
-
rdoc.rdoc_dir = 'doc'
|
60
|
-
rdoc.title = PKG_SUMMARY
|
61
|
-
rdoc.rdoc_files.include('README')
|
62
|
-
rdoc.rdoc_files.include('CHANGELOG')
|
63
|
-
rdoc.rdoc_files.include('TODO')
|
64
|
-
rdoc.options = PKG_RDOC_OPTS
|
65
|
-
rdoc.rdoc_files.include FileList['lib/*.rb', 'lib/**/*.rb']
|
66
|
-
end
|
67
|
-
|
68
|
-
spec = Gem::Specification.new do |s|
|
69
|
-
s.platform = Gem::Platform::RUBY
|
70
|
-
s.name = PKG_NAME
|
71
|
-
s.summary = PKG_SUMMARY
|
72
|
-
s.description = PKG_DESCRIPTION
|
73
|
-
s.version = PKG_VERSION
|
74
|
-
|
75
|
-
s.author = PKG_MAINTAINER
|
76
|
-
s.email = PKG_EMAIL
|
77
|
-
s.rubyforge_project = RUBY_FORGE_PROJECT
|
78
|
-
s.homepage = PKG_HOMEPAGE
|
79
|
-
|
80
|
-
s.has_rdoc = true
|
81
|
-
s.files = FileList["{bin,test,lib}/**/*"].exclude("rdoc").exclude(".svn").exclude(".CVS").exclude(".DS_Store").to_a +
|
82
|
-
%w(CHANGELOG init.rb Rakefile.rb README TODO)
|
83
|
-
s.require_path = "lib"
|
84
|
-
s.autorequire = "rutils"
|
85
|
-
s.test_file = "test/run_tests.rb"
|
86
|
-
s.has_rdoc = true
|
87
|
-
s.extra_rdoc_files = ["README", "TODO", "CHANGELOG"]
|
88
|
-
s.rdoc_options = PKG_RDOC_OPTS
|
89
|
-
s.executables << 'gilensize'
|
90
|
-
s.executables << 'rutilize'
|
91
|
-
end
|
92
|
-
|
93
|
-
Rake::GemPackageTask.new(spec) do |p|
|
94
|
-
p.gem_spec = spec
|
95
|
-
p.need_tar = true
|
96
|
-
p.need_zip = true
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
desc "Remove packaging products (doc and pkg) - they are not source-managed"
|
101
|
-
task :clobber do
|
102
|
-
`rm -rf ./doc`
|
103
|
-
`rm -rf ./pkg`
|
104
|
-
end
|
105
|
-
|
106
|
-
desc "Publish the new docs"
|
107
|
-
task :publish_docs => [:clobber, :doc] do
|
108
|
-
push_docs
|
109
|
-
end
|
110
|
-
|
111
|
-
desc "Push docs to servers"
|
112
|
-
task :push_docs do
|
113
|
-
user = "#{ENV['USER']}@rubyforge.org"
|
114
|
-
project = '/var/www/gforge-projects/rutils'
|
115
|
-
local_dir = 'doc'
|
116
|
-
[
|
117
|
-
Rake::SshDirPublisher.new( user, project, local_dir),
|
118
|
-
Rake::SshDirPublisher.new('julik', '~/www/code/rutils', local_dir),
|
40
|
+
$stderr.puts "Meta-operations on this package require Hoe and multi_rails"
|
41
|
+
task :default => [ :test ]
|
119
42
|
|
120
|
-
|
43
|
+
require 'rake/testtask'
|
44
|
+
desc "Run all tests (requires BlueCloth, RedCloth and Rails for integration tests)"
|
45
|
+
Rake::TestTask.new("test") do |t|
|
46
|
+
t.libs << "test"
|
47
|
+
t.pattern = 'test/t_*.rb'
|
48
|
+
t.verbose = true
|
49
|
+
end
|
121
50
|
end
|
122
51
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
`cvs tag #{cvs_aware_revision} .`
|
52
|
+
begin
|
53
|
+
require 'load_multi_rails_rake_tasks'
|
54
|
+
rescue LoadError
|
55
|
+
$stderr.puts "Proper testing of this package with Rails requires multi_rails"
|
128
56
|
end
|
data/{TODO → TODO.txt}
RENAMED
data/bin/gilensize
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
$KCODE = 'u'
|
3
|
-
require File.dirname(__FILE__) + '/../lib/rutils'
|
4
|
-
|
5
2
|
# == Synopsis
|
6
3
|
#
|
7
|
-
# Processes text on standard input with
|
4
|
+
# Processes text on standard input with Gilenson. Please feed it UTF-8!
|
8
5
|
#
|
9
6
|
# == Usage
|
10
7
|
#
|
@@ -13,6 +10,13 @@ require File.dirname(__FILE__) + '/../lib/rutils'
|
|
13
10
|
# == Author
|
14
11
|
# Julik <me@julik.nl>
|
15
12
|
|
13
|
+
$KCODE = 'u'
|
14
|
+
require File.dirname(__FILE__) + '/../lib/rutils'
|
15
|
+
require 'optparse'
|
16
|
+
OptionParser.new do | p |
|
17
|
+
p.on(" -h", "--help") { require 'rdoc/usage'; RDoc::usage }
|
18
|
+
end.parse!
|
19
|
+
|
16
20
|
while st = gets do
|
17
21
|
puts RuTils::Gilenson.new(st).to_html
|
18
22
|
end
|
data/bin/rutilize
CHANGED
File without changes
|
data/lib/datetime/datetime.rb
CHANGED
@@ -32,16 +32,17 @@ module RuTils
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
def self.ru_strftime(time, format_str='%d.%m.%Y')
|
36
|
+
clean_fmt = format_str.gsub(/%{2}/, RuTils::SUBSTITUTION_MARKER).
|
37
|
+
gsub(/%a/, Date::RU_ABBR_DAYNAMES[time.wday]).
|
38
|
+
gsub(/%A/, Date::RU_DAYNAMES[time.wday]).
|
39
|
+
gsub(/%b/, Date::RU_ABBR_MONTHNAMES[time.mon]).
|
40
|
+
gsub(/%d(\s)*%B/, '%02d' % time.day + '\1' + Date::RU_INFLECTED_MONTHNAMES[time.mon]).
|
41
|
+
gsub(/%B/, Date::RU_MONTHNAMES[time.mon]).
|
42
|
+
gsub(/#{RuTils::SUBSTITUTION_MARKER}/, '%%')
|
43
|
+
|
44
|
+
# Теперь когда все нужные нам маркеры заменены можно отдать это стандартному strftime
|
45
|
+
time.respond_to?(:strftime_norutils) ? time.strftime_norutils(clean_fmt) : time.to_time.strftime_norutils(clean_fmt)
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -60,8 +61,7 @@ class Time
|
|
60
61
|
alias_method :strftime_norutils, :strftime
|
61
62
|
|
62
63
|
def strftime(fmt)
|
63
|
-
RuTils::DateTime::ru_strftime(
|
64
|
-
strftime_norutils(fmt)
|
64
|
+
RuTils::overrides_enabled? ? RuTils::DateTime::ru_strftime(self, fmt) : strftime_norutils(fmt)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -71,14 +71,12 @@ class Date
|
|
71
71
|
if self.instance_methods.include?('strftime')
|
72
72
|
alias_method :strftime_norutils, :strftime
|
73
73
|
def strftime(fmt='%F')
|
74
|
-
RuTils::DateTime::ru_strftime(
|
75
|
-
strftime_norutils(fmt)
|
74
|
+
RuTils::overrides_enabled? ? RuTils::DateTime::ru_strftime(self, fmt) : strftime_norutils(fmt)
|
76
75
|
end
|
77
|
-
|
76
|
+
|
78
77
|
else
|
79
78
|
def strftime(fmt='%F')
|
80
|
-
RuTils::DateTime::ru_strftime(
|
81
|
-
self.to_time.strftime(fmt)
|
79
|
+
RuTils::overrides_enabled? ? RuTils::DateTime::ru_strftime(self, fmt) : to_time.strftime(fmt)
|
82
80
|
end
|
83
81
|
end
|
84
82
|
|