rutils 0.1.2 → 0.1.3
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 +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