rutils 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +45 -0
- data/README +97 -36
- data/TODO +1 -16
- data/bin/gilensize +1 -1
- data/lib/countries/countries.rb +1772 -0
- data/lib/datetime/datetime.rb +60 -43
- data/lib/gilenson/gilenson.rb +594 -249
- data/lib/gilenson/gilenson_port.rb +287 -307
- data/lib/integration/rails_date_helper_override.rb +9 -31
- data/lib/integration/red_cloth_override.rb +2 -1
- data/lib/pluralizer/pluralizer.rb +213 -192
- data/lib/rutils.rb +23 -11
- data/lib/transliteration/transliteration.rb +148 -148
- data/test/run_tests.rb +2 -2
- data/test/t_datetime.rb +32 -6
- data/test/t_gilenson.rb +291 -29
- data/test/t_integration.rb +33 -33
- data/test/t_pluralize.rb +56 -49
- data/test/t_transliteration.rb +68 -68
- data/test/t_typografica.rb +46 -46
- metadata +5 -4
- data/test/t_binaries.rb +0 -26
data/CHANGELOG
CHANGED
@@ -1,3 +1,48 @@
|
|
1
|
+
Версия 0.1.3 - 14.11.2005
|
2
|
+
* Gilenson - замена троеточий на ellipsis (julik)
|
3
|
+
* Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
|
4
|
+
меняется на glyph[:nbsp]. Сделано через регексп-костыль в #process_wordglue:
|
5
|
+
text.gsub!(/(\s+)([a-zа-яА-Я]{1,2}[\)\]\!\?,\.;]{0,3}\s$)/ui, self.glyph[:nbsp]+'\2') (mash)
|
6
|
+
* Gilenson - починен баг из-за которого не типографилась закрывающая кавычка после вопросительного
|
7
|
+
и восклицательного знака (julik)
|
8
|
+
* По умолчанию используется новый Gilenson (Gilenson::Formatter). Старый доступен как Gilenson::Obsolete и через
|
9
|
+
String#o_gilensize и грузится только в случае необходимости. Если у вас были тесты провеяющие gilensize
|
10
|
+
скорее всего они "полетели" (julik)
|
11
|
+
* Gilenson - дополнительная фича, не связанная с типографикой: замена амперсанда в следующих атрибутах
|
12
|
+
тагов: href, src, data. Пример: <a href="?x=1&y=2&z=3"> => <a href="?x=1&y=2&z=3"> (mash)
|
13
|
+
* Gilenson - изменён метод process_ampersands (стало process_escape_html), меняющий &,<,> на глифы :amp,:lt,:gt
|
14
|
+
при запрете HTML (@settings[:html]=>false). По-умолчанию Гиленсон разрешает использование HTML.
|
15
|
+
В иерархии метод выставлен первым для корректной обработки случаев вида
|
16
|
+
%{Используйте & вместо &}.gilensize(:html=>false) (mash)
|
17
|
+
* Gilenson - добавлены :skip_attr=>false и :skip_code=>true для управления обработкой типографики атрибутов тегов title, alt и содержимого <code/>, <tt/>, <![CDATA[...]]> (mash)
|
18
|
+
* Gilenson - добавлен :raw_output=>true для вывода обычных UTF-8 chars вместо entities (julik)
|
19
|
+
* Смена структуры модулей Gilenson (julik)
|
20
|
+
RuTils::Gilenson::Obsolete - старый класс форматтера
|
21
|
+
RuTils::Gilenson::Formatter - новый класс форматтера
|
22
|
+
При вызове RuTils::Gilenson.new возвращается новый Formatter
|
23
|
+
* Gilenson - документация (julik)
|
24
|
+
* Gilenson - основные группы настроек "по-умолчанию" выносятся в константы (julik)
|
25
|
+
* Gilenson - фильтры выносятся в методы типа process_фильтр и их можно применять по отдельности через Formatter#apply (julik)
|
26
|
+
* Gilenson - добавлены ¶ и № (последний - не стандарт, но нужен для преобразований символа "номер") (mash)
|
27
|
+
* Gilenson - добавлен хэш @glyph_copy_paste для подмены юникодных типографских символов на entities
|
28
|
+
(опционально, через @settings[:copypaste]=>true) (mash)
|
29
|
+
* Gilenson - добавлена "склейка" инициалов полукруглой шпацией (thin space)
|
30
|
+
* Gilenson - добавлен Formatter#process чтобы обрабатывать строки поточно, и сделан удобный доступ к настройкам
|
31
|
+
через "хвост" метода (julik)
|
32
|
+
* Во всех внутренних строковых подстановках Gilenson используются указатели на глифы с двоеточием в начале (julik)
|
33
|
+
* Gilenson - введен DOUBLE PRIME (″) для знаков дюйма (julik)
|
34
|
+
http://en.wikipedia.org/wiki/Prime_%28mark%29
|
35
|
+
Согласно изощренным правилам скошенный prime правильней чем "
|
36
|
+
* Новый Гиленсон lib/gilenson/gilenson.rb (mash)
|
37
|
+
RuTils::GilensonNew::Typografica.new('какой-то текст')
|
38
|
+
%q{"какой-то текст"}.n_gilensize
|
39
|
+
* Код приведён к "2 spaces - no tabs", частично полетели дифы (mash)
|
40
|
+
* Изменены константы дат, используемые в lib/integration/rails_date_helper_override.rb:
|
41
|
+
Было: RuTils::DateTime::ABBR_MONTHNAMES, RuTils::DateTime::INFLECTED_MONTHNAMES
|
42
|
+
Стало: Date::RU_ABBR_MONTHNAMES, Date::RU_INFLECTED_MONTHNAMES (mash)
|
43
|
+
* Добавлена функциия Numeric#rublej (julik)
|
44
|
+
* Добавлена русская версия Time#ru_strftime и Date#ru_strftime (mash)
|
45
|
+
|
1
46
|
Версия 0.1.2 - 01.11.2005
|
2
47
|
* Добавлен BiDi-транслит c тестами (mash)
|
3
48
|
|
data/README
CHANGED
@@ -7,7 +7,7 @@ RuTils - простой обработчик русского текста на
|
|
7
7
|
Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode 'u'). Стандартно работа RuTils проверяется
|
8
8
|
как на стандартной версии Ruby, так и на парсере регулярных выражений Oniguruma (правда имейте в виду, что с ним
|
9
9
|
Gilenson работает медленнее).
|
10
|
-
|
10
|
+
|
11
11
|
Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно узнать в константе
|
12
12
|
|
13
13
|
RuTils::VERSION
|
@@ -15,7 +15,7 @@ Gilenson работает медленнее).
|
|
15
15
|
Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
|
16
16
|
|
17
17
|
* Переменная $KCODE включена в режим 'u'
|
18
|
-
*
|
18
|
+
* Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
|
19
19
|
|
20
20
|
Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой RubyKanjiCode в своем httpd.conf.
|
21
21
|
|
@@ -28,15 +28,19 @@ Gilenson работает медленнее).
|
|
28
28
|
|
29
29
|
RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным учетом рода. Например:
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
4.propisju => "четыре"
|
32
|
+
345.propisju => "триста сорок пять"
|
33
|
+
231.propisju(2) => "двести тридцать одна"
|
34
|
+
341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
|
35
|
+
(212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых четыре десятых сволочи"
|
36
|
+
|
37
37
|
Также реализуется выбор варианта числительного в зависимости от числа
|
38
38
|
|
39
|
-
|
39
|
+
15.items("кодер", "кодера", "кодеров") => "кодеров"
|
40
|
+
|
41
|
+
и вывод "суммы прописью" для денежных сумм
|
42
|
+
|
43
|
+
(413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
|
40
44
|
|
41
45
|
== Транслит
|
42
46
|
|
@@ -44,10 +48,10 @@ RuTils на данный момент реализует простейший т
|
|
44
48
|
|
45
49
|
Простейший транслит "в одну сторону".
|
46
50
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
== BiDi
|
51
|
+
"Вот такое вот дело".translify => "Vot takoye vot delo"
|
52
|
+
"Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
|
53
|
+
|
54
|
+
== BiDi-транслит
|
51
55
|
|
52
56
|
Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
|
53
57
|
Реализует транслитерацию "в обе стороны", предоставляя возможность получить валидный URL
|
@@ -59,48 +63,80 @@ RuTils на данный момент реализует простейший т
|
|
59
63
|
* Уничтожение всех слешей, которые встретятся во входной строке. В этом случае методы вызываются с передачей в них false. Например, "Web/Скрипты".bidi_translify(false)
|
60
64
|
* Пропуск слэшей (используется по умолчанию). Например, "Web/+Skripty".bidi_detranslify
|
61
65
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
"WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
|
67
|
+
"+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
|
68
|
+
"WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
|
69
|
+
"+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
|
66
70
|
|
67
71
|
== Обработка русской типографики в HTML
|
68
72
|
|
69
73
|
Gilenson - порт Typografica[http://pixel-apes.com/typografica] от
|
70
74
|
Pixel Apes. Тыпографица - механизм автоматической расстановки подстановок в тексте
|
71
75
|
перед его выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки
|
72
|
-
и
|
76
|
+
и тому подобные "украшательства".
|
77
|
+
|
78
|
+
Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы, английские - для латиницы),
|
79
|
+
заменит "хитрые" пунктуационные символы на entities и отформатирует знаки типа (c), (tm), телефоны и адреса.
|
80
|
+
|
81
|
+
%q{"И это называется языком?", -- таков был его вопрос}.gilensize =>
|
82
|
+
"«И это называется языком?», — таков был его вопрос"
|
73
83
|
|
74
|
-
|
75
|
-
они вас не поймут и будут правы. Поддержку Gilenson PixelApes не осуществляют.
|
84
|
+
Более подробная документация по Gilenson доступна в документах к RuTils::Gilenson::Formatter
|
76
85
|
|
77
86
|
В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать Unicode-тексты в среде UNIX
|
78
87
|
пользуясь стандартным выводом
|
79
88
|
|
80
|
-
|
89
|
+
$ cat myfile.txt | gilensize > myfile.html
|
90
|
+
|
91
|
+
== Даты
|
92
|
+
|
93
|
+
В класс Date введены следующие константы:
|
94
|
+
* RU_MONTHNAMES (Январь Февраль Март...)
|
95
|
+
* RU_DAYNAMES (Воскресенье Понедельник...)
|
96
|
+
* RU_ABBR_MONTHNAMES (Янв Фев Мар...)
|
97
|
+
* RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
|
98
|
+
* RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
|
99
|
+
* RU_DAYNAMES_E (первое второе третье...)
|
100
|
+
|
101
|
+
Пример использования:
|
102
|
+
|
103
|
+
require 'date'
|
104
|
+
date = Date.new(2005, 11, 9)
|
105
|
+
puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
|
106
|
+
puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
|
107
|
+
puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
|
108
|
+
puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
|
109
|
+
|
110
|
+
При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется "покрытие" стандартной
|
111
|
+
функции Time#strftime ("родную" #strftime можно продолжать использовать через alias-метод #strftime_norutils):
|
112
|
+
|
113
|
+
Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
|
114
|
+
Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
|
81
115
|
|
82
116
|
== Интеграция с Rails, RedCloth и BlueCloth
|
83
117
|
|
84
118
|
RuTils в первую очередь задумывался как максимально "прозрачный" механизм обработки русского текста
|
85
|
-
в контексте Rails-приложения.
|
119
|
+
в контексте Rails-приложения. В связи с этим RuTils "вторгается" в работу других Ruby-модулей
|
120
|
+
и изменяет механизм их работы.
|
121
|
+
|
122
|
+
Если вы используете RuTils в одном приложении с RedCloth или BlueCloth,
|
86
123
|
RuTils автоматически будет обрабатывать типографику во всех текстах, пропускаемых через них. Имейте в виду, что для
|
87
|
-
корректной работы этой функции RuTils надо загружать
|
124
|
+
корректной работы этой функции RuTils надо загружать *после* модулей RedCloth и BlueCloth.
|
88
125
|
|
126
|
+
Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
|
89
127
|
|
90
|
-
|
91
|
-
|
92
|
-
Textile английские кавычки и типографские знаки на свои - русские. В случае BlueCloth Gilenson используется
|
93
|
-
как "декоратор" Markdown.
|
128
|
+
* Меню выбора даты (+date_select+ и +datetime_select+) будут выводиться с русскими именами месяцев
|
129
|
+
* +distance_of_time_in_words+ будет выводить русские описания длительности ("более 2 часов")
|
94
130
|
|
95
|
-
Перегрузку всех функций
|
96
|
-
с помощью метода overrides
|
131
|
+
Перегрузку всех функций других модулей можно включать и отключать в любое время
|
132
|
+
с помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние библиотеки будут работать
|
97
133
|
в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно
|
98
134
|
когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
|
99
135
|
|
100
|
-
Если вы хотите использовать rutils как
|
136
|
+
Если вы хотите использовать rutils как дополнение к Rails в одном конкретном приложении, скопируйте
|
101
137
|
директорию rutils в папку vendor/plugins вашего приложения. Вы можете воспользоваться командой
|
102
138
|
rutilize чтобы сделать это автоматически. После этого вы сможете использовать RuTils без
|
103
|
-
необходимости установки gem'а на вашем
|
139
|
+
необходимости установки gem'а на вашем сервере (не забудьте перезапустить приложение чтобы вгрузить в него RuTils).
|
104
140
|
|
105
141
|
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
|
106
142
|
|
@@ -116,16 +152,41 @@ rutilize чтобы сделать это автоматически. После
|
|
116
152
|
|
117
153
|
Просто включите rutils в свою программу как gem
|
118
154
|
|
119
|
-
|
120
|
-
|
155
|
+
require_gem 'rutils'
|
156
|
+
|
121
157
|
или как библиотеку
|
122
158
|
|
123
|
-
|
124
|
-
|
159
|
+
require 'rutils'
|
160
|
+
|
125
161
|
== Где получить помощь
|
126
162
|
|
127
163
|
На странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
|
128
164
|
|
129
165
|
== Работает ли это с текстом в кодировке Windows-1251
|
130
166
|
|
131
|
-
Нет и никогда не будет.
|
167
|
+
Нет и никогда не будет.
|
168
|
+
|
169
|
+
== Реальные проекты
|
170
|
+
|
171
|
+
В настоящее время RuTils используется на следующих сайтах:
|
172
|
+
|
173
|
+
* http://artonica.ru
|
174
|
+
* http://radar.cinemac.ru
|
175
|
+
|
176
|
+
Если вы используете RuTils в своей работе пожалуйста сообщайте нам об этом чтобы мы могли включить ваши приложения и сайты в список.
|
177
|
+
|
178
|
+
== Как ускорить реализацию новых функций
|
179
|
+
|
180
|
+
Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите (по возможности) тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы можете скопировать из собственных тестов RuTils.
|
181
|
+
|
182
|
+
Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы, пожалуйста следуйте следующим правилам оформления кода:
|
183
|
+
|
184
|
+
* Unix line breaks (LF)
|
185
|
+
* Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
|
186
|
+
* Отступы в 2 пробела, без табуляций.
|
187
|
+
* Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
|
188
|
+
* Все другие конвенции нормального написания Ruby-кода (http://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
|
189
|
+
|
190
|
+
Мы используем пробелы поскольку табулятор означает автозаполнение в IRB (Interactive Ruby Shell)
|
191
|
+
|
192
|
+
Если вы хотите участвовать в разработке RuTils пользуйтесь CVS проекта.
|
data/TODO
CHANGED
@@ -2,25 +2,10 @@
|
|
2
2
|
|
3
3
|
==Gilenson
|
4
4
|
|
5
|
-
* Заменить все entities в Гиленсоне на UTF-эквиваленты (в том числе и в тестах)
|
6
|
-
(пока генерируемый им код содержит, например, raquo и nbsp - неприменимо для XML)
|
7
|
-
* Выяснить, стоит ли отрабатывать типографику в атрибутах тегов
|
8
|
-
* Полностью рефакторнуть (вынести каждую трансформацию в метод)
|
9
|
-
* чтобы тестить трансформации по одной
|
10
|
-
* чтобы применять трансформации по одной буде на то нужда
|
11
|
-
|
12
5
|
==Pluralization
|
13
6
|
|
14
7
|
* Истинная плюрализация без передачи рода и вариантов (как в Rails)
|
15
8
|
|
16
|
-
==Даты
|
17
|
-
|
18
|
-
* В принципе нужно обеспечить полноценное покрытие stfmt
|
19
|
-
|
20
9
|
==Rails
|
21
10
|
|
22
|
-
*
|
23
|
-
|
24
|
-
==Транслит
|
25
|
-
|
26
|
-
* bidi-транслит (Данил)
|
11
|
+
* закончить меню выбора стран и начинать помогать делать Multilingual Rails
|
data/bin/gilensize
CHANGED