rutils 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +10 -1
- data/TODO +0 -6
- data/lib/datetime/datetime.rb +1 -0
- data/lib/gilenson/gilenson.rb +10 -19
- data/lib/integration/integration.rb +3 -1
- data/lib/integration/red_cloth_override.rb +2 -2
- data/lib/rutils.rb +5 -7
- data/lib/transliteration/bidi.rb +1 -1
- data/lib/transliteration/simple.rb +42 -22
- data/test/t_datetime.rb +2 -1
- data/test/t_integration.rb +23 -3
- data/test/t_transliteration.rb +18 -1
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
|
1
|
+
CVS
|
2
|
+
|
3
|
+
Версия 0.1.6 - 18.08.2006
|
4
|
+
* Удалили jcode, он нам не сильно нужен (julik)
|
5
|
+
* В простом транслите Шипилов - Schipilov вместо SCHipilov (julik)
|
6
|
+
* Тесты интеграции валятся явно и громко если зависимые модули на машине отсутствуют (julik)
|
7
|
+
* Масса крошечных твиков чтобы сделать все немножко аккуратнее (julik)
|
8
|
+
* Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B == 31 декабря) в strftime (mash)
|
9
|
+
|
10
|
+
Версия 0.1.5 - 08.05.2006
|
2
11
|
* Транслитераторы вынесены в отдельные файлы (julik)
|
3
12
|
* Починен баг с передачей часа в нужном падеже в distance_of_time (anonyomous)
|
4
13
|
* Добавлены корректные методы публикации доков, сменены параметры их генерации (julik)
|
data/TODO
CHANGED
@@ -2,16 +2,10 @@
|
|
2
2
|
|
3
3
|
==Даты
|
4
4
|
|
5
|
-
* Применять INFLECTED_MONTHNAMES если имя месяца следует за днем
|
6
|
-
|
7
5
|
==Gilenson
|
8
6
|
|
9
|
-
* Пара красивых примеров в README
|
10
|
-
|
11
7
|
==Pluralization
|
12
8
|
|
13
9
|
* Истинная плюрализация без передачи рода и вариантов (как в Rails)
|
14
10
|
|
15
11
|
==Rails
|
16
|
-
|
17
|
-
* закончить меню выбора стран и начинать помогать делать Multilingual Rails
|
data/lib/datetime/datetime.rb
CHANGED
@@ -39,6 +39,7 @@ module RuTils
|
|
39
39
|
date.gsub!(/%a/, Date::RU_ABBR_DAYNAMES[time.wday])
|
40
40
|
date.gsub!(/%A/, Date::RU_DAYNAMES[time.wday])
|
41
41
|
date.gsub!(/%b/, Date::RU_ABBR_MONTHNAMES[time.mon])
|
42
|
+
date.gsub!(/%d(\s)*%B/, time.day.to_s + '\1' + Date::RU_INFLECTED_MONTHNAMES[time.mon])
|
42
43
|
date.gsub!(/%B/, Date::RU_MONTHNAMES[time.mon])
|
43
44
|
date.gsub!(@@ignored, '%%')
|
44
45
|
end
|
data/lib/gilenson/gilenson.rb
CHANGED
@@ -183,7 +183,7 @@ class RuTils::Gilenson::Formatter
|
|
183
183
|
|
184
184
|
# Для маркера мы применяем invalid UTF-sequence чтобы его НЕЛЬЗЯ было перепутать с частью
|
185
185
|
# любого другого мультибайтного глифа. Thanks to huNter.
|
186
|
-
REPLACEMENT_MARKER =
|
186
|
+
REPLACEMENT_MARKER = RuTils::SUBSTITUTION_MARKER #:nodoc:
|
187
187
|
|
188
188
|
# Кто придумал “? Не учите людей плохому...
|
189
189
|
# Привет А.Лебедеву http://www.artlebedev.ru/kovodstvo/62/
|
@@ -375,8 +375,7 @@ class RuTils::Gilenson::Formatter
|
|
375
375
|
|
376
376
|
# Позволяет получить процедуру, при вызове возвращающую значение глифа
|
377
377
|
def lookup(glyph_to_lookup)
|
378
|
-
|
379
|
-
return Proc.new { gil.glyph[glyph_to_lookup] }
|
378
|
+
return Proc.new { self.glyph[glyph_to_lookup] }
|
380
379
|
end
|
381
380
|
|
382
381
|
# Подставляет "символы" (двоеточие + имя глифа) на нужное значение глифа заданное в данном форматтере
|
@@ -411,7 +410,7 @@ class RuTils::Gilenson::Formatter
|
|
411
410
|
|
412
411
|
# Кинуть ошибку если настройка нам неизвестна
|
413
412
|
unknown_settings = args_hash.keys.collect{|k|k.to_s} - @settings.keys.collect { |k| k.to_s }
|
414
|
-
raise RuTils::Gilenson::UnknownSetting, unknown_settings
|
413
|
+
raise RuTils::Gilenson::UnknownSetting, unknown_settings if unknown_settings.any?
|
415
414
|
|
416
415
|
args_hash.each_pair do | key, value |
|
417
416
|
@settings[key.to_s] = (value ? true : false)
|
@@ -517,15 +516,11 @@ class RuTils::Gilenson::Formatter
|
|
517
516
|
def process_laquo(text)
|
518
517
|
text.gsub!( /\"\"/ui, self.glyph[:quot]*2);
|
519
518
|
text.gsub!( /(^|\s|#{@mark_tag}|>|\()\"((#{@mark_tag})*[~0-9ёЁA-Za-zА-Яа-я\-:\/\.])/ui, '\1'+self.glyph[:laquo]+'\2');
|
520
|
-
# nb: wacko only regexp follows:
|
521
|
-
# text.gsub!( /(^|\s|#{@mark_tag}|>|\()\"((#{#{@mark_tag}|\/#{self.glyph[:nbsp]}|\/|\!)*[~0-9ёЁA-Za-zА-Яа-я\-:\/\.])/ui, '\1'+self.glyph[:laquo]+'\2')
|
522
519
|
_text = '""';
|
523
520
|
until _text == text do
|
524
521
|
_text = text;
|
525
|
-
text.gsub!( /(#{self.glyph[:laquo]}([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/\?\!](#{@mark_tag})*)\"/sui,
|
526
|
-
|
527
|
-
#text.gsub!( /(#{self.glyph[:laquo]}([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/](#{@mark_tag})*\?(#{#{@mark_tag})*)\"/sui, '\1'+self.glyph[:raquo])
|
528
|
-
# text.gsub!( /(#{self.glyph[:raquo]}([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/](#{@mark_tag}|\/|\!)*)\"/sui, '\1'+self.glyph[:raquo])
|
522
|
+
text.gsub!( /(#{self.glyph[:laquo]}([^\"]*)[ёЁA-Za-zА-Яа-я0-9\.\-:\/\?\!](#{@mark_tag})*)\"/sui,
|
523
|
+
'\1'+self.glyph[:raquo])
|
529
524
|
end
|
530
525
|
end
|
531
526
|
|
@@ -563,13 +558,9 @@ class RuTils::Gilenson::Formatter
|
|
563
558
|
|
564
559
|
text.gsub!(/(\s+)([a-zа-яА-Я]{1,2}[\)\]\!\?,\.;]{0,3}\s$)/ui, self.glyph[:nbsp]+'\2')
|
565
560
|
|
566
|
-
|
567
|
-
text.gsub!( /(\s)(#{i})(\s+)/sui, '\1\2' + self.glyph[:nbsp])
|
568
|
-
end
|
561
|
+
@glueleft.each { | i | text.gsub!( /(\s)(#{i})(\s+)/sui, '\1\2' + self.glyph[:nbsp]) }
|
569
562
|
|
570
|
-
|
571
|
-
text.gsub!( /(\s)(#{i})(\s+)/sui, self.glyph[:nbsp]+'\2\3')
|
572
|
-
end
|
563
|
+
@glueright.each { | i | text.gsub!( /(\s)(#{i})(\s+)/sui, self.glyph[:nbsp]+'\2\3') }
|
573
564
|
|
574
565
|
text.strip!
|
575
566
|
end
|
@@ -594,7 +585,6 @@ class RuTils::Gilenson::Formatter
|
|
594
585
|
# Все глифы
|
595
586
|
@glyph.values.each do | entity |
|
596
587
|
next unless entity =~ /^&#(\d+);/
|
597
|
-
|
598
588
|
text.gsub!(/#{entity}/, entity_to_raw_utf8(entity))
|
599
589
|
end
|
600
590
|
end
|
@@ -606,10 +596,11 @@ class RuTils::Gilenson::Formatter
|
|
606
596
|
end
|
607
597
|
end #end Gilenson
|
608
598
|
|
609
|
-
|
599
|
+
# Выбрасывается если форматтеру задается неизвестная настройка
|
600
|
+
class RuTils::Gilenson::UnknownSetting < RuntimeError
|
610
601
|
end
|
611
602
|
|
612
|
-
module RuTils::Gilenson::StringFormatting
|
603
|
+
module RuTils::Gilenson::StringFormatting
|
613
604
|
# Форматирует строку с помощью Gilenson::Formatter. Все дополнительные опции передаются форматтеру.
|
614
605
|
def gilensize(*args)
|
615
606
|
opts = args.last.is_a?(Hash) ? args.last : {}
|
@@ -4,7 +4,9 @@ module RuTils
|
|
4
4
|
# Метод позволяет проверить, включена ли перегрузка функций других модулей.
|
5
5
|
# Попутно он спрашивает модуль Locale (если таковой имеется) является ли русский
|
6
6
|
# текущим языком, и если является, включает перегрузку функций имплицитно.
|
7
|
-
#
|
7
|
+
# Это позволяет подчинить настройку перегруженных функций настроенной локали.
|
8
|
+
# Модуль Locale можно получить как часть Multilingual Rails, как часть Ruby-Gettext или как отдельный
|
9
|
+
# модуль ruby-locale. Мы поддерживаем все три.
|
8
10
|
def self.overrides_enabled?
|
9
11
|
if defined?(Locale) and Locale.respond_to?(:current)
|
10
12
|
return true if Locale.current.to_s.split('_').first == 'ru'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
if defined?(Object::RedCloth) and (!RedCloth.instance_methods.include?(:stock_pgl))
|
2
2
|
# RuTils выполняет перегрузку Textile Glyphs в RedCloth, перенося форматирование спецсимволов на Gilenson.
|
3
|
-
class Object::RedCloth < String #:nodoc:
|
3
|
+
class ::Object::RedCloth < String #:nodoc:
|
4
4
|
|
5
5
|
# Этот метод в RedCloth при наличии Гиленсона надо отключать
|
6
6
|
alias_method :stock_htmlesc, :htmlesc
|
@@ -9,7 +9,7 @@ if defined?(Object::RedCloth) and (!RedCloth.instance_methods.include?(:stock_pg
|
|
9
9
|
end
|
10
10
|
|
11
11
|
# А этот метод обрабатывает Textile Glyphs - ту самую типографицу.
|
12
|
-
# Вместо того чтобы влезать в таблицы мы просто заменим Textile Glyphs - и все будут рады.
|
12
|
+
# Вместо того чтобы влезать в чужие таблицы мы просто заменим Textile Glyphs на Gilenson - и все будут рады.
|
13
13
|
alias_method :stock_pgl, :pgl
|
14
14
|
def pgl(text) #:nodoc:
|
15
15
|
RuTils::overrides_enabled? ? text.replace(RuTils::Gilenson::Formatter.new(text).to_html) : stock_pgl(text)
|
data/lib/rutils.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
$KCODE = 'u'
|
2
|
-
require 'jcode' # вот от этого надо бы избавиться - скопировать jsize из jcode и поместить его в свой namespace
|
3
|
-
|
4
2
|
|
5
3
|
# Главный контейнер модуля
|
6
4
|
module RuTils
|
@@ -8,20 +6,20 @@ module RuTils
|
|
8
6
|
INSTALLATION_DIRECTORY = File.expand_path(File.dirname(__FILE__) + '/../') #:nodoc:
|
9
7
|
MAJOR = 0
|
10
8
|
MINOR = 1
|
11
|
-
TINY =
|
9
|
+
TINY = 6
|
12
10
|
|
13
11
|
# Версия RuTils
|
14
12
|
VERSION = [MAJOR, MINOR ,TINY].join('.') #:nodoc:
|
15
13
|
|
16
|
-
# Стандартный маркер для подстановок
|
17
|
-
SUBSTITUTION_MARKER = "\
|
14
|
+
# Стандартный маркер для подстановок - invalid UTF sequence
|
15
|
+
SUBSTITUTION_MARKER = "\xF0\xF0\xF0\xF0" #:nodoc:
|
18
16
|
|
19
17
|
def self.load_component(name) #:nodoc:
|
20
|
-
require RuTils::INSTALLATION_DIRECTORY
|
18
|
+
require File.join(RuTils::INSTALLATION_DIRECTORY, "lib", name.to_s, name.to_s)
|
21
19
|
end
|
22
20
|
|
23
21
|
def self.reload_component(name) #:nodoc:
|
24
|
-
load RuTils::INSTALLATION_DIRECTORY
|
22
|
+
load File.join(RuTils::INSTALLATION_DIRECTORY, "lib", name.to_s, "#{name}.rb")
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
data/lib/transliteration/bidi.rb
CHANGED
@@ -18,7 +18,7 @@ module RuTils::Transliteration::BiDi
|
|
18
18
|
# " "=>"__","_"=>"__"
|
19
19
|
# так сразу не получится, будут проблемы с "Ь"=>"_'"
|
20
20
|
}.sort do |one, two|
|
21
|
-
two[1].
|
21
|
+
two[1].split(//).size <=> one[1].split(//).size
|
22
22
|
end
|
23
23
|
|
24
24
|
TABLE_FROM = TABLE_TO.unshift([" ","__"]).clone
|
@@ -2,16 +2,9 @@
|
|
2
2
|
# "вот мы и здесь".translify => "vot my i zdes"
|
3
3
|
# "vot my i zdes".detranslify => "вот мы и здесь"
|
4
4
|
module RuTils::Transliteration::Simple
|
5
|
-
|
6
|
-
"Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
|
5
|
+
TABLE_LOWER = {
|
7
6
|
"і"=>"i","ґ"=>"g","ё"=>"yo","№"=>"#","є"=>"e",
|
8
|
-
"ї"=>"yi","
|
9
|
-
"Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
|
10
|
-
"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
|
11
|
-
"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
|
12
|
-
"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
|
13
|
-
"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"YI","Ь"=>"",
|
14
|
-
"Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
|
7
|
+
"ї"=>"yi","а"=>"a","б"=>"b",
|
15
8
|
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"zh",
|
16
9
|
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
|
17
10
|
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
|
@@ -22,22 +15,49 @@ module RuTils::Transliteration::Simple
|
|
22
15
|
two[1].size <=> one[1].size
|
23
16
|
end
|
24
17
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
18
|
+
TABLE_UPPER = {
|
19
|
+
"Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
|
20
|
+
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
|
21
|
+
"Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
|
22
|
+
"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
|
23
|
+
"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
|
24
|
+
"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
|
25
|
+
"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"YI","Ь"=>"",
|
26
|
+
"Э"=>"E","Ю"=>"YU","Я"=>"YA",
|
27
|
+
}.sort do | one, two|
|
28
|
+
two[1].size <=> one[1].size
|
32
29
|
end
|
33
30
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
31
|
+
TABLE = TABLE_UPPER + TABLE_LOWER
|
32
|
+
|
33
|
+
# Заменяет кириллицу в строке на латиницу
|
34
|
+
def self.translify(str)
|
35
|
+
chars = str.split(//)
|
36
|
+
|
37
|
+
lowers = TABLE_LOWER.map{|e| e[0] }
|
38
|
+
uppers = TABLE_UPPER.map{|e| e[0] }
|
39
|
+
|
40
|
+
hashtable = {}
|
41
|
+
TABLE.each do | item |
|
42
|
+
hashtable[item[0]] = item[1]
|
43
|
+
end
|
44
|
+
|
45
|
+
result = ''
|
46
|
+
chars.each_with_index do | char, index |
|
47
|
+
if uppers.include?(char) && lowers.include?(chars[index+1])
|
48
|
+
# Combined case. Here we deal with Latin letters so there is no problem to use
|
49
|
+
# Ruby's builtin upcase_downcase
|
50
|
+
ch = hashtable[char].downcase.capitalize
|
51
|
+
result << ch
|
52
|
+
elsif uppers.include?(char)
|
53
|
+
result << hashtable[char]
|
54
|
+
elsif lowers.include?(char)
|
55
|
+
result << hashtable[char]
|
56
|
+
else
|
57
|
+
result << char
|
58
|
+
end
|
39
59
|
end
|
40
|
-
|
60
|
+
return result
|
41
61
|
end
|
42
62
|
|
43
63
|
# Транслитерирует строку, делая ее пригодной для применения как имя директории или URL
|
data/test/t_datetime.rb
CHANGED
@@ -20,7 +20,8 @@ class StrftimeRuTest < Test::Unit::TestCase
|
|
20
20
|
assert_equal "сб, суббота, дек, декабрь", Time.local(2005,"dec",31).strftime("%a, %A, %b, %B")
|
21
21
|
assert_equal "%a, %A, %b, %B", Time.local(2005,"dec",31).strftime("%%a, %%A, %%b, %%B")
|
22
22
|
assert_equal "%сб, %суббота, %дек, %декабрь", Time.local(2005,"dec",31).strftime("%%%a, %%%A, %%%b, %%%B")
|
23
|
-
assert_equal "Сегодня: 31
|
23
|
+
assert_equal "Сегодня: 31 декабря, суббота, 2005 года", Time.local(2005,"dec",31).strftime("Сегодня: %d %B, %A, %Y года")
|
24
|
+
assert_equal "Сегодня: ноябрь, 30 число, дождик в четверг, а год у нас - 2006", Time.local(2006,11,30).strftime("Сегодня: %B, %d число, дождик в %A, а год у нас - %Y")
|
24
25
|
|
25
26
|
date = Date.new(2005, 11, 9)
|
26
27
|
assert_equal "ноя ноябрь ср среда", "#{Date::RU_ABBR_MONTHNAMES[date.mon]} #{Date::RU_MONTHNAMES[date.mon]} #{Date::RU_ABBR_DAYNAMES[date.wday]} #{Date::RU_DAYNAMES[date.wday]}"
|
data/test/t_integration.rb
CHANGED
@@ -2,9 +2,23 @@ $KCODE = 'u'
|
|
2
2
|
require 'test/unit'
|
3
3
|
require 'rubygems'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
begin
|
6
|
+
require 'action_view' unless defined?(ActionView)
|
7
|
+
rescue LoadError
|
8
|
+
$skip_rails = true
|
9
|
+
end
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'RedCloth' unless defined?(RedCloth)
|
13
|
+
rescue LoadError
|
14
|
+
$skip_redcloth = true
|
15
|
+
end
|
16
|
+
|
17
|
+
begin
|
18
|
+
require 'BlueCloth' unless defined?(BlueCloth)
|
19
|
+
rescue LoadError
|
20
|
+
$skip_bluecloth = true
|
21
|
+
end
|
8
22
|
|
9
23
|
require File.dirname(__FILE__) + '/../lib/rutils'
|
10
24
|
load File.dirname(__FILE__) + '/../lib/integration/integration.rb'
|
@@ -26,6 +40,8 @@ end
|
|
26
40
|
# Нужно иметь в виду что Textile осуществляет свою обработку типографики, которую мы подменяем!
|
27
41
|
class TextileIntegrationTest < Test::Unit::TestCase
|
28
42
|
def test_integration_textile
|
43
|
+
raise "You must have RedCloth to test Textile integration" and return if $skip_redcloth
|
44
|
+
|
29
45
|
RuTils::overrides = true
|
30
46
|
assert RuTils.overrides_enabled?
|
31
47
|
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
@@ -42,6 +58,8 @@ end
|
|
42
58
|
# Сам Markdown никакой обработки типографики не производит (это делает RubyPants, но вряд ли его кто-то юзает на практике)
|
43
59
|
class MarkdownIntegrationTest < Test::Unit::TestCase
|
44
60
|
def test_integration_markdown
|
61
|
+
raise "You must have BlueCloth to test Markdown integration" and return if $skip_bluecloth
|
62
|
+
|
45
63
|
RuTils::overrides = true
|
46
64
|
assert RuTils.overrides_enabled?
|
47
65
|
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
@@ -57,6 +75,8 @@ end
|
|
57
75
|
# Перегрузка helper'ов Rails
|
58
76
|
class RailsHelpersOverrideTest < Test::Unit::TestCase
|
59
77
|
def test_distance_of_time_in_words
|
78
|
+
raise "You must have Rails to test ActionView integration" and return if $skip_rails
|
79
|
+
|
60
80
|
eval 'class Foo
|
61
81
|
include ActionView::Helpers::DateHelper
|
62
82
|
def get_dst
|
data/test/t_transliteration.rb
CHANGED
@@ -11,12 +11,29 @@ class TranslitTest < Test::Unit::TestCase
|
|
11
11
|
|
12
12
|
def test_translify
|
13
13
|
assert_equal "sch", 'щ'.translify
|
14
|
-
assert_equal "
|
14
|
+
assert_equal "stansyi", "стансы".translify
|
15
|
+
assert_equal "upuschenie", 'упущение'.translify
|
15
16
|
assert_equal "sh", 'ш'.translify
|
17
|
+
assert_equal "SH", 'Ш'.translify
|
16
18
|
assert_equal "ts", 'ц'.translify
|
17
19
|
assert_equal "Eto kusok stroki russkih bukv v peremshku s latinizey i ampersandom (pozor!) & something", @string.translify
|
18
20
|
assert_equal "Это просто некий текст".translify, "Eto prosto nekiy tekst"
|
21
|
+
|
22
|
+
assert_equal "NEVEROYATNOE UPUSCHENIE", 'НЕВЕРОЯТНОЕ УПУЩЕНИЕ'.translify
|
23
|
+
assert_equal "Neveroyatnoe Upuschenie", 'Невероятное Упущение'.translify
|
24
|
+
assert_equal "Sherstyanoy Zayats", 'Шерстяной Заяц'.translify
|
25
|
+
assert_equal "N.P. Sherstyakov", 'Н.П. Шерстяков'.translify
|
26
|
+
assert_equal "SHAROVARYI", 'ШАРОВАРЫ'.translify
|
19
27
|
end
|
28
|
+
|
29
|
+
# def test_detranslify
|
30
|
+
# puts "Шерстяной негодяй"
|
31
|
+
# assert_equal "щ", "sch".detranslify
|
32
|
+
# assert_equal "Щ", "SCH".detranslify
|
33
|
+
# assert_equal "Щ", "Sch".detranslify
|
34
|
+
# assert_equal "Щукин", "Schukin".detranslify
|
35
|
+
# assert_equal "Шерстяной негодяй", "Scherstyanoy negodyay".detranslify
|
36
|
+
# end
|
20
37
|
|
21
38
|
def test_dirify
|
22
39
|
assert_equal "eto-kusok-stroki-ruskih-bukv-v-peremshku-s-latinizey-i-ampersandom-pozor-and-something", @string.dirify
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rutils
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.1.6
|
7
|
+
date: 2006-08-18 00:00:00 +02:00
|
8
8
|
summary: Simple processing of russian strings
|
9
9
|
require_paths:
|
10
10
|
- lib
|