rutils-1.0.3 Documentation

rutils.rubyforge.org

RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же простой как и разработку оных на английском).

Шеф! все пропало! я обновил RuTils и он работает совершенно по-другому!

Раздел также известен под именем “Что поменялось в RuTils 1.0.0”. Вам сюда.

Чье это

Разработчики RuTils - Julik, Mash, Yaroslav Markin

Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за реализацию большинства алгоритмов на PHP.

Как воспользоваться

Просто включите rutils в свою программу как библиотеку

require 'rutils'

Для использования с Ruby on Rails установите RuTils как плагин (скопируйте библиотеку в vendor/plugins приложения).

Что оно делает

Cумма прописью и выбор числительного

RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным учетом рода. Например:

4.propisju => "четыре"
345.propisju => "триста сорок пять"
231.propisju(2) => "двести тридцать одна"
341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
(212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
    четыре десятых сволочи"

Также реализуется выбор варианта числительного в зависимости от числа

15.items("кодер", "кодера", "кодеров") => "кодеров"

и вывод “суммы прописью” для денежных сумм в рублях

(413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
1.rubl         => "один рубль"
22.rublja      => "двадцать два рубля"

Если вы храните денежные единицы в целочисленных типах, пользуйтесь “копеечными” вариантами:

300.kopeek     => "три рубля"
121.kopeika    => "один рубль двадцать одна копейка"

Транслит

RuTils на данный момент реализует простейший транслит “в одну сторону”. “Взаимно-однозначный транслит” (BiDi-транслит) больше не поддерживается.

"Вот такое вот дело".translify => "Vot takoye vot delo" 
"Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"

Обработка русской типографики в HTML

Gilenson - порт Typografica от Pixel Apes. Тыпографица - механизм автоматической расстановки подстановок в тексте перед его выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому подобные “украшательства”.

Gilenson расставит в тексте “умные” правильные кавычки (русские - для кириллицы, английские - для латиницы), заменит “хитрые” пунктуационные символы на entities и отформатирует знаки типа ©, (tm), телефоны и адреса.

%q{"И это называется языком?", -- таков был его вопрос}.gilensize => "«И
это называется языком?», — таков был его вопрос"

Более подробная документация по Gilenson доступна в документах к RuTils::Gilenson::Formatter

В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать Unicode-тексты в среде UNIX пользуясь стандартным выводом

$ cat myfile.txt | gilensize > myfile.html

Даты

В класс Date введены следующие константы:

Пример использования:

require 'date' date = Date.new(2005, 11, 9)
puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда

При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется “покрытие” стандартной функции Time#strftime (“родную” strftime можно продолжать использовать через alias-метод strftime_norutils):

Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь" 
Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"

Интеграция с RedCloth и BlueCloth

RuTils в первую очередь задумывался как максимально “прозрачный” механизм обработки русского текста в контексте Rails-приложения.

Если вы используете RuTils в одном приложении со стандартными форматтерами (RedCloth, BlueCloth…) воспользуйтесь дополнительными модулями которые выводят отформатированный Гиленсоном результат работы форматтеров

Gilenson определяет следующие дополнительные форматтеры (они работают так же как и их базовые классы)

В этих классах Gilenson будет обрабатывать типографику во всех текстах, пропускаемых через них. Эти классы при включенном флаге RuTils.overrides автоматически подключаются в хелперы markdown и textilize.

Интеграция с Rails версии 2.2.2 и выше

Используйте гем russian для дат и RuTils как дополнение (для транслита, функций kopeek и так далее)

Интеграция с Rails версий 1.2 - 2.1.1

RuTils заставляет следующие функции старых (pre-i18n) версий Rails говорить по-русски:

Управление оверрайдами

Перегрузку всех функций других модулей можно включать и отключать в любое время с помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние хелперы будут работать в стандартном режиме (например, даты и время будут выводиться по-русски). Это нужно когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.

Рекомендуемый способ использования RuTils с Ruby on Rails приложением – установка RuTils плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего приложения или воспользуйтесь командой rutilize путь_кrailsприложению чтобы сделать это автоматически. После этого вы сможете использовать RuTils без необходимости установки gem на вашем сервере (не забудьте перезапустить приложение чтобы вгрузить в него RuTils).

$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app

Распространения

Вы можете свободно распространять RuTils со своим приложением при условии сохранения структуры и файла README.

Совместимость

Требования

Rails, RedCloth и BlueCloth для выполнения тестов.

Работает ли это с текстом в кодировке отличной от UTF-8 (Windows-1251, KOI-8)

Нет и никогда не будет.

Как получить помощь

Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode ‘u’). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:

Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой RubyKanjiCode в своем httpd.conf.

Если вы все сделали правильно но что-то не работает

Сообщите об ошибке на странице проекта на RubyForge Не забудьте указать версию, ее всегда можно узнать в константе

RuTils::VERSION

Как ускорить реализацию новых функций

Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы можете скопировать из собственных тестов RuTils.

Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы, пожалуйста следуйте следующим правилам оформления кода:

При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp

разницу между двумя разными пробелами, например)

Если вы хотите участвовать в разработке RuTils - fork us on GitHub

git clone git://github.com/julik/rutils.git

Files

Classes/Modules

Methods

[Validate]

Generated with the Darkfish Rdoc Generator 2.