rutils 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/{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
|
|