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 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&#38;z=3"> => <a href="?x=1&#38;y=2&#38;z=3"> (mash)
13
+ * Gilenson - изменён метод process_ampersands (стало process_escape_html), меняющий &,<,> на глифы :amp,:lt,:gt
14
+ при запрете HTML (@settings[:html]=>false). По-умолчанию Гиленсон разрешает использование HTML.
15
+ В иерархии метод выставлен первым для корректной обработки случаев вида
16
+ %{Используйте &#38; вместо &amp;}.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 - добавлены &para; и &numero; (последний - не стандарт, но нужен для преобразований символа "номер") (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 (&#8243;) для знаков дюйма (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
- * В скрипт загружена библиотека jcode
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
- 4.propisju => "четыре"
32
- 345.propisju => "триста сорок пять"
33
- 231.propisju(2) => "двести тридцать одна"
34
- 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
35
- (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых четыре десятых сволочи"
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
- 15.items("кодер", "кодера", "кодеров") => "кодеров"
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
- "Вот такое вот дело".translify => "Vot takoye vot delo"
48
- "Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
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
- "WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
63
- "+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
64
- "WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
65
- "+PKHP+/Scripts".bidi_translify(false) => "ПХПScripts"
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
+ "&#171;И это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос"
73
83
 
74
- Имейте в виду, что на баги в Gilenson жаловаться разработчикам Typografica не стоит -
75
- они вас не поймут и будут правы. Поддержку Gilenson PixelApes не осуществляют.
84
+ Более подробная документация по Gilenson доступна в документах к RuTils::Gilenson::Formatter
76
85
 
77
86
  В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать Unicode-тексты в среде UNIX
78
87
  пользуясь стандартным выводом
79
88
 
80
- $ cat myfile.txt | gilensize > myfile.html
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-приложения. Если вы используете RuTils в одном приложении с RedCloth или BlueCloth,
119
+ в контексте Rails-приложения. В связи с этим RuTils "вторгается" в работу других Ruby-модулей
120
+ и изменяет механизм их работы.
121
+
122
+ Если вы используете RuTils в одном приложении с RedCloth или BlueCloth,
86
123
  RuTils автоматически будет обрабатывать типографику во всех текстах, пропускаемых через них. Имейте в виду, что для
87
- корректной работы этой функции RuTils надо загружать после модулей RedCloth и BlueCloth.
124
+ корректной работы этой функции RuTils надо загружать *после* модулей RedCloth и BlueCloth.
88
125
 
126
+ Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
89
127
 
90
- В принципе если вы пользуетесь RedCloth или BlueCloth все что ими обрабатывается будет автоматически
91
- обрабатываться и Gilenson'ом тоже. В случае с RedCloth Glienson автоматически заменяет стандартные для
92
- Textile английские кавычки и типографские знаки на свои - русские. В случае BlueCloth Gilenson используется
93
- как "декоратор" Markdown.
128
+ * Меню выбора даты (+date_select+ и +datetime_select+) будут выводиться с русскими именами месяцев
129
+ * +distance_of_time_in_words+ будет выводить русские описания длительности ("более 2 часов")
94
130
 
95
- Перегрузку всех функций (RedCloth, BlueCloth и компоненты Rails) можно включать и отключать в любое время
96
- с помощью метода overrides= модуля RuTils. Когда перегрузка выключена, все сторонние библиотеки будут работать
131
+ Перегрузку всех функций других модулей можно включать и отключать в любое время
132
+ с помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние библиотеки будут работать
97
133
  в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно
98
134
  когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
99
135
 
100
- Если вы хотите использовать rutils как дополенние к Rails в одном конкретном приложении, скопируйте
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
- require_gem 'rutils'
120
-
155
+ require_gem 'rutils'
156
+
121
157
  или как библиотеку
122
158
 
123
- require 'rutils'
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
- * distance_of_time_in_words и тому подобные
23
-
24
- ==Транслит
25
-
26
- * bidi-транслит (Данил)
11
+ * закончить меню выбора стран и начинать помогать делать Multilingual Rails
data/bin/gilensize CHANGED
@@ -14,5 +14,5 @@ require File.dirname(__FILE__) + '/../lib/rutils'
14
14
  # Julik <me@julik.nl>
15
15
 
16
16
  while st = gets do
17
- puts RuTils::Gilenson::Formatter.new(st).to_html
17
+ puts RuTils::Gilenson.new(st).to_html
18
18
  end