rotuka-rutils 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,110 @@
1
+ * До свидания, <nobr>. Указывайте .nobr { text-wrap: nowrap } в своих стилевых таблицах.
2
+
3
+ Версия 0.2.3 - 27.09.2007
4
+ * Кошмар - в новой версии rubygems изменилась семантика s.files из-за чего мы забыли
5
+ все файлы в корневой директории - включая init.rb (julik)
6
+
7
+ Версия 0.2.2 - 24.09.2007
8
+ * Gilenson - обрабатываем акронимы по принципу Textile (zajats, julik)
9
+ * Gilenson - отформатирован под 2 пробела (julik)
10
+ * В тестах пользуйтесь assert_equal_cp (julik)
11
+ * Welcome to subversion (julik)
12
+
13
+ Версия 0.2.1 - 02.04.2007
14
+ * Восстановлен в gemspec gilenson.rb (Сергей Барабаш)
15
+
16
+ Версия 0.2.0 - 02.04.2007
17
+ * Фикс squeeze в dirify (Сергей Барабаш)
18
+ * Формат даты по умолчанию - %F (Сергей Барабаш)
19
+
20
+ Версия 0.1.9 - 17.02.2007
21
+ * Gilenson integration - не съедаем пробелы между тегами при прогоне текста через Textile
22
+
23
+ Версия 0.1.8 - 05.02.2007
24
+ * Gilenson - расстановка инициалов не должна цеплять аббревиатуры (julik)
25
+
26
+ Версия 0.1.7 - 05.02.2007
27
+ * Date helpers приведены в более веселый вид (и в соответствие с Rails 1.2.1) (julik)
28
+ * date_helper надо поменять чтобы передавать рельсовому хелперу весь массив options в хеше (julik)
29
+
30
+ Версия 0.1.6 - 18.08.2006
31
+ * Удалили jcode, он нам не сильно нужен (julik)
32
+ * В простом транслите Шипилов - Schipilov вместо SCHipilov (julik)
33
+ * Тесты интеграции валятся явно и громко если зависимые модули на машине отсутствуют (julik)
34
+ * Масса крошечных твиков чтобы сделать все немножко аккуратнее (julik)
35
+ * Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B == 31 декабря) в strftime (mash)
36
+
37
+ Версия 0.1.5 - 08.05.2006
38
+ * Транслитераторы вынесены в отдельные файлы (julik)
39
+ * Починен баг с передачей часа в нужном падеже в distance_of_time (anonyomous)
40
+ * Добавлены корректные методы публикации доков, сменены параметры их генерации (julik)
41
+ * cp -r заменен на cp_r чтобы rutilize работал в Windows (anonymous)
42
+ * Имена месяцев со строчной буквы (sgt - http://rubyforge.org/users/sgt)
43
+ * Поддерживаем оба класса Locale (из ruby-locale и gettext - они немного отличаются по семантике) (julik)
44
+
45
+
46
+ Версия 0.1.4 - 02.12.2005
47
+ * Поправлен импорт Rails-плагина (julik)
48
+ * Поправлен паттерн сбора тестируемых файлов (julik)
49
+ * Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
50
+ * Gilenson - в тестах произведена замена <cOdE> на <code> и <TT> на <tt> (mash)
51
+ * Gilenson - в двух регулярных выражениях (в "def process_quotes") изменен #{@mark_tag} на
52
+ \#{@mark_tag} чтобы предотвратить segfault ruby 1.8.2 (2004-12-25) на [i386-mswin32] (mash)
53
+ * Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
54
+ * DateTime - RU_INFLECTED_MONTHNAMES => Авгуса --> Августа (mash)
55
+
56
+ Версия 0.1.3 - 14.11.2005
57
+ * Gilenson - замена троеточий на ellipsis (julik)
58
+ * Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
59
+ меняется на glyph[:nbsp]. (mash)
60
+ * Gilenson - починен баг из-за которого не типографилась закрывающая кавычка после вопросительного
61
+ и восклицательного знака (julik)
62
+ * По умолчанию используется новый Gilenson (Gilenson::Formatter). Старый доступен как Gilenson::Obsolete и через
63
+ String#o_gilensize и грузится только в случае необходимости. Если у вас были тесты провеяющие gilensize
64
+ скорее всего они "полетели" (julik)
65
+ * Gilenson - дополнительная фича, не связанная с типографикой: замена амперсанда в следующих атрибутах
66
+ тагов: href, src, data. Пример: <a href="?x=1&y=2&#38;z=3"> => <a href="?x=1&#38;y=2&#38;z=3"> (mash)
67
+ * Gilenson - изменён метод process_ampersands (стало process_escape_html), меняющий &,<,> на глифы :amp,:lt,:gt
68
+ при запрете HTML (@settings[:html]=>false). По-умолчанию Гиленсон разрешает использование HTML.
69
+ В иерархии метод выставлен первым для корректной обработки случаев вида
70
+ %{Используйте &#38; вместо &amp;}.gilensize(:html=>false) (mash)
71
+ * Gilenson - добавлены :skip_attr=>false и :skip_code=>true для управления обработкой типографики атрибутов тегов title, alt и содержимого <code/>, <tt/>, <![CDATA[...]]> (mash)
72
+ * Gilenson - добавлен :raw_output=>true для вывода обычных UTF-8 chars вместо entities (julik)
73
+ * Смена структуры модулей Gilenson (julik)
74
+ RuTils::Gilenson::Obsolete - старый класс форматтера
75
+ RuTils::Gilenson::Formatter - новый класс форматтера
76
+ При вызове RuTils::Gilenson.new возвращается новый Formatter
77
+ * Gilenson - документация (julik)
78
+ * Gilenson - основные группы настроек "по-умолчанию" выносятся в константы (julik)
79
+ * Gilenson - фильтры выносятся в методы типа process_фильтр и их можно применять по отдельности через Formatter#apply (julik)
80
+ * Gilenson - добавлены &para; и &numero; (последний - не стандарт, но нужен для преобразований символа "номер") (mash)
81
+ * Gilenson - добавлен хэш @glyph_copy_paste для подмены юникодных типографских символов на entities
82
+ (опционально, через @settings[:copypaste]=>true) (mash)
83
+ * Gilenson - добавлена "склейка" инициалов полукруглой шпацией (thin space)
84
+ * Gilenson - добавлен Formatter#process чтобы обрабатывать строки поточно, и сделан удобный доступ к настройкам
85
+ через "хвост" метода (julik)
86
+ * Во всех внутренних строковых подстановках Gilenson используются указатели на глифы с двоеточием в начале (julik)
87
+ * Gilenson - введен DOUBLE PRIME (&#8243;) для знаков дюйма (julik)
88
+ http://en.wikipedia.org/wiki/Prime_%28mark%29
89
+ Согласно изощренным правилам скошенный prime правильней чем "
90
+ * Новый Гиленсон lib/gilenson/gilenson.rb (mash)
91
+ RuTils::GilensonNew::Typografica.new('какой-то текст')
92
+ %q{"какой-то текст"}.n_gilensize
93
+ * Код приведён к "2 spaces - no tabs", частично полетели дифы (mash)
94
+ * Изменены константы дат, используемые в lib/integration/rails_date_helper_override.rb:
95
+ Было: RuTils::DateTime::ABBR_MONTHNAMES, RuTils::DateTime::INFLECTED_MONTHNAMES
96
+ Стало: Date::RU_ABBR_MONTHNAMES, Date::RU_INFLECTED_MONTHNAMES (mash)
97
+ * Добавлена функциия Numeric#rublej (julik)
98
+ * Добавлена русская версия Time#ru_strftime и Date#ru_strftime (mash)
99
+
100
+ Версия 0.1.2 - 01.11.2005
101
+ * Добавлен BiDi-транслит c тестами (mash)
102
+
103
+ Версия 0.04 - 20.10.2005
104
+ * Чистка документации
105
+
106
+ Версия 0.03 - 18.10.2005
107
+ * Легкий рефакторинг и чистка документации, добавлена реализация BiDi-транслита
108
+
109
+ Версия 0.02 - 12.07.2005
110
+ * Заменен маркер подстановки тегов в Gilenson. Ранее без oniguruma из-за его применения "проглатывалась" буква "р"
data/README ADDED
@@ -0,0 +1,202 @@
1
+ == Добро пожаловать в RuTils
2
+
3
+ RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils -
4
+ сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
5
+ и приятной (в идеале - столь же простой как и разработку оных на английском)
6
+
7
+ Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode
8
+ 'u').
9
+
10
+ Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно
11
+ узнать в константе
12
+
13
+ RuTils::VERSION
14
+
15
+ Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
16
+
17
+ * Переменная $KCODE включена в режим 'u'
18
+ * Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
19
+
20
+ Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой
21
+ RubyKanjiCode в своем httpd.conf.
22
+
23
+ Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за
24
+ реализацию большинства алгоритмов на PHP.
25
+
26
+ Разработку RuTils ведут Julik[http://julik.nl] и Mash[http://imfo.ru]
27
+
28
+ == Cумма прописью и выбор числительного
29
+
30
+ RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным
31
+ учетом рода. Например:
32
+
33
+ 4.propisju => "четыре"
34
+ 345.propisju => "триста сорок пять"
35
+ 231.propisju(2) => "двести тридцать одна"
36
+ 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
37
+ (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
38
+ четыре десятых сволочи"
39
+
40
+ Также реализуется выбор варианта числительного в зависимости от числа
41
+
42
+ 15.items("кодер", "кодера", "кодеров") => "кодеров"
43
+
44
+ и вывод "суммы прописью" для денежных сумм в рублях
45
+
46
+ (413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
47
+
48
+ == Транслит
49
+
50
+ RuTils на данный момент реализует простейший транслит "в одну сторону" и
51
+ "взаимно-однозначный транслит" (BiDi-транслит).
52
+
53
+ Простейший транслит "в одну сторону".
54
+
55
+ "Вот такое вот дело".translify => "Vot takoye vot delo" "Несомненный прогресс по
56
+ сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
57
+
58
+ == BiDi-транслит
59
+
60
+ Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
61
+ Реализует транслитерацию "в обе стороны", предоставляя возможность получить
62
+ валидный URL из строки, содержащей русские и английские буквы. С некоторыми
63
+ потерями (запятых и прочих "слабозначащих" символов) возможно восстановление
64
+ исходной строки.
65
+
66
+ Два режима работы:
67
+
68
+ * Уничтожение всех слешей, которые встретятся во входной строке. В этом случае
69
+ методы вызываются с передачей в них false. Например,
70
+ "Web/Скрипты".bidi_translify(false) * Пропуск слэшей (используется по умолчанию).
71
+ Например, "Web/+Skripty".bidi_detranslify
72
+
73
+ "WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
74
+ "+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
75
+ "WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
76
+ "+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
77
+
78
+ == Обработка русской типографики в HTML
79
+
80
+ Gilenson - порт Typografica[http://pixel-apes.com/typografica] от Pixel Apes.
81
+ Тыпографица - механизм автоматической расстановки подстановок в тексте перед его
82
+ выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому
83
+ подобные "украшательства".
84
+
85
+ Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы,
86
+ английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и
87
+ отформатирует знаки типа (c), (tm), телефоны и адреса.
88
+
89
+ %q{"И это называется языком?", -- таков был его вопрос}.gilensize => "&#171;И
90
+ это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос"
91
+
92
+ Более подробная документация по Gilenson доступна в документах к
93
+ RuTils::Gilenson::Formatter
94
+
95
+ В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать
96
+ Unicode-тексты в среде UNIX пользуясь стандартным выводом
97
+
98
+ $ cat myfile.txt | gilensize > myfile.html
99
+
100
+ == Даты
101
+
102
+ В класс Date введены следующие константы:
103
+
104
+ * RU_MONTHNAMES (Январь Февраль Март...)
105
+ * RU_DAYNAMES (Воскресенье Понедельник...)
106
+ * RU_ABBR_MONTHNAMES (Янв Фев Мар...)
107
+ * RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
108
+ * RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
109
+ * RU_DAYNAMES_E (первое второе третье...)
110
+
111
+ Пример использования:
112
+
113
+ require 'date' date = Date.new(2005, 11, 9)
114
+ puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя puts
115
+ puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
116
+ puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
117
+ puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
118
+
119
+ При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется
120
+ "покрытие" стандартной функции Time#strftime ("родную" #strftime можно продолжать
121
+ использовать через alias-метод #strftime_norutils):
122
+
123
+ Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
124
+ Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
125
+
126
+ == Интеграция с Rails, RedCloth и BlueCloth
127
+
128
+ RuTils в первую очередь задумывался как максимально "прозрачный" механизм
129
+ обработки русского текста в контексте Rails-приложения. В связи с этим RuTils
130
+ "вторгается" в работу других Ruby-модулей и изменяет механизм их работы.
131
+
132
+ Если вы используете RuTils в одном приложении с RedCloth или BlueCloth, RuTils
133
+ автоматически будет обрабатывать типографику во всех текстах, пропускаемых через
134
+ них. Имейте в виду, что для корректной работы этой функции RuTils надо загружать
135
+ *после* модулей RedCloth и BlueCloth.
136
+
137
+ Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
138
+
139
+ * Меню выбора даты (+date_select+ и +datetime_select+)
140
+ будут выводиться с русскими именами месяцев
141
+ * +distance_of_time_in_words+ будет выводить
142
+ русские описания длительности ("более 2 часов")
143
+
144
+ Перегрузку всех функций других модулей можно включать и отключать в любое время с
145
+ помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
146
+ библиотеки будут работать в стандартном режиме (например, RedCloth будет
147
+ расставлять английские типографские кавычки). Это нужно когда вам нужно
148
+ переключиться на английский (или любой другой язык) без перезапуска приложения.
149
+
150
+ Если вы хотите использовать rutils как дополнение к Rails в одном конкретном
151
+ приложении, скопируйте директорию rutils в папку vendor/plugins вашего
152
+ приложения. Вы можете воспользоваться командой rutilize чтобы сделать это
153
+ автоматически. После этого вы сможете использовать RuTils без необходимости
154
+ установки gem на вашем сервере (не забудьте перезапустить приложение чтобы
155
+ вгрузить в него RuTils).
156
+
157
+ $ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
158
+
159
+ Вы можете свободно распространять RuTils со своим Rails-приложением при условии
160
+ сохранения структуры и файла README.
161
+
162
+ == Требования
163
+
164
+ * Ruby 1.8.2, немного прямых рук.
165
+ * Rake[http://rake.rubyforge.org],
166
+
167
+ Rails[http://rubyonrails.org],
168
+ RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
169
+ BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов
170
+
171
+ == Как использовать
172
+
173
+ Просто включите rutils в свою программу как библиотеку
174
+
175
+ require 'rutils'
176
+
177
+ == Где получить помощь
178
+
179
+ На странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
180
+
181
+ == Работает ли это с текстом в кодировке Windows-1251
182
+
183
+ Нет и никогда не будет.
184
+
185
+ == Как ускорить реализацию новых функций
186
+
187
+ Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите
188
+ тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы
189
+ можете скопировать из собственных тестов RuTils.
190
+
191
+ Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы,
192
+ пожалуйста следуйте следующим правилам оформления кода:
193
+
194
+ * Unix line breaks (LF)
195
+ * Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
196
+ * Отступы в 2 пробела, без табуляций.
197
+ * Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
198
+ * Все другие конвенции нормального написания
199
+ Ruby-кода (http://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
200
+
201
+ Если вы хотите участвовать в разработке RuTils пользуйтесь версией из subversion
202
+ trunk.
@@ -0,0 +1,128 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/rdoctask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/contrib/rubyforgepublisher'
8
+ require 'fileutils'
9
+ require 'lib/rutils'
10
+
11
+ begin
12
+ require 'xforge'
13
+ rescue LoadError
14
+ end
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),
119
+
120
+ ].each { |p| p.upload }
121
+ end
122
+
123
+
124
+ desc "Publish the release files to RubyForge."
125
+ task :release => [:clobber, :package] do
126
+ cvs_aware_revision = 'r_' + PKG_VERSION.gsub(/-|\./, '_')
127
+ `cvs tag #{cvs_aware_revision} .`
128
+ end
data/TODO ADDED
@@ -0,0 +1,11 @@
1
+ =TODO
2
+
3
+ ==Даты
4
+
5
+ ==Gilenson
6
+
7
+ ==Pluralization
8
+
9
+ * Истинная плюрализация без передачи рода и вариантов (как в Rails)
10
+
11
+ ==Rails