rutils 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,173 @@
1
+ module RuTils
2
+ module Transliteration #:nodoc:
3
+ end
4
+ end
5
+
6
+ # Реулизует простейшую транслитерацию
7
+ # "вот мы и здесь".translify => "vot my i zdes"
8
+ # "vot my i zdes".detranslify => "вот мы и здесь"
9
+ module RuTils::Transliteration::Simple
10
+ TABLE = {
11
+ "Ґ"=>"G","Ё"=>"YO","Є"=>"E","Ї"=>"YI","І"=>"I",
12
+ "і"=>"i","ґ"=>"g","ё"=>"yo","№"=>"#","є"=>"e",
13
+ "ї"=>"yi","А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
14
+ "Д"=>"D","Е"=>"E","Ж"=>"ZH","З"=>"Z","И"=>"I",
15
+ "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
16
+ "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
17
+ "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
18
+ "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"'","Ы"=>"YI","Ь"=>"",
19
+ "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
20
+ "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"zh",
21
+ "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
22
+ "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
23
+ "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
24
+ "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"'",
25
+ "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"
26
+ }.sort do | one, two|
27
+ two[1].size <=> one[1].size
28
+ end
29
+
30
+ # Заменяет кириллицу в строке на латиницу
31
+ def self.translify(str)
32
+ s = str.clone
33
+ TABLE.each do | translation |
34
+ s = s.gsub(/#{translation[0]}/, translation[1])
35
+ end
36
+ s
37
+ end
38
+
39
+ # Заменяет латиницу на кириллицу
40
+ def self.detranslify(str)
41
+ s = str.clone
42
+ TABLE.each do | translation |
43
+ s.gsub!(/#{translation[1]}/, translation[0])
44
+ end
45
+ s
46
+ end
47
+
48
+ # Транслитерирует строку, делая ее пригодной для применения как имя директории или URL
49
+ def self.dirify(string)
50
+ st = self.translify(string)
51
+ st.gsub!(/(\s\&\s)|(\s\&amp\;\s)/, ' and ') # convert & to "and"
52
+ st.gsub!(/\W/, ' ') #replace non-chars
53
+ st.gsub!(/(_)$/, '') #trailing underscores
54
+ st.gsub!(/^(_)/, '') #leading unders
55
+ st.strip.translify.gsub(/(\s)/,'-').downcase.squeeze
56
+ end
57
+ end
58
+
59
+ # Реулизует транслитерацию "в обе стороны", дающую возможность автоматически использовать URL как ключ записи
60
+ module RuTils::Transliteration::BiDi
61
+ TABLE_TO = {
62
+ "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
63
+ "Е"=>"E","Ё"=>"JO","Ж"=>"ZH","З"=>"Z","И"=>"I",
64
+ "Й"=>"JJ","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
65
+ "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
66
+ "У"=>"U","Ф"=>"F","Х"=>"KH","Ц"=>"C","Ч"=>"CH",
67
+ "Ш"=>"SH","Щ"=>"SHH","Ъ"=>"_~","Ы"=>"Y","Ь"=>"_'",
68
+ "Э"=>"EH","Ю"=>"JU","Я"=>"JA","а"=>"a","б"=>"b",
69
+ "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"jo",
70
+ "ж"=>"zh","з"=>"z","и"=>"i","й"=>"jj","к"=>"k",
71
+ "л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
72
+ "р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f",
73
+ "х"=>"kh","ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh",
74
+ "ъ"=>"~","ы"=>"y","ь"=>"'","э"=>"eh","ю"=>"ju",
75
+ "я"=>"ja"," "=>"__","_"=>"__"
76
+ }.sort do |one, two|
77
+ two[1].jsize <=> one[1].jsize
78
+ end
79
+
80
+ #
81
+ # TABLE_FROM = TABLE_TO.clone.reject{|i| i[0] == '_' } или какньть еще - покрасившее
82
+ #
83
+ TABLE_FROM = TABLE_TO.clone
84
+ TABLE_FROM.slice!(6) # remove "_"=>"__" from "Hash"
85
+
86
+ def self.translify(str, allow_slashes = true)
87
+ slash = allow_slashes ? '/' : '';
88
+
89
+ s = str.clone.gsub(/[^\- _0-9a-zA-ZА-ёЁ#{slash}]/, '')
90
+ lang_fr = s.scan(/[А-ёЁ ]+/)
91
+ lang_fr.each do |fr|
92
+ TABLE_TO.each do | translation |
93
+ fr.gsub!(/#{translation[0]}/, translation[1])
94
+ end
95
+ end
96
+
97
+ lang_sr = s.scan(/[0-9A-Za-z\_\-\.\/\']+/)
98
+
99
+ string = ""
100
+ if s =~ /\A[А-ёЁ ]/
101
+ lang_fr, lang_sr = lang_sr, lang_fr
102
+ string = "+"
103
+ end
104
+
105
+ 0.upto([lang_fr.length, lang_sr.length].min-1) do |x|
106
+ string += lang_sr[x] + "+" + lang_fr[x] + "+";
107
+ end
108
+
109
+ if (lang_fr.length < lang_sr.length)
110
+ string += lang_sr[lang_sr.length-1]
111
+ else
112
+ string[0, string.length-1]
113
+ end
114
+ end
115
+
116
+ def self.detranslify(str, allow_slashes = true)
117
+ slash = allow_slashes ? '/' : '';
118
+
119
+ str.split('/').inject("") do | out, pg|
120
+ strings = pg.split('+')
121
+ 1.step(strings.length-1, 2) do |x|
122
+ TABLE_FROM.each do | translation |
123
+ strings[x].gsub!(/#{translation[1]}/, translation[0])
124
+ end
125
+ end
126
+ out << slash << strings.to_s
127
+ end
128
+ out[slash.length, out.length-1]
129
+ end
130
+ end
131
+
132
+ # Реализует транслитерацию любого объекта, реализующего String или to_s
133
+ module RuTils::Transliteration::StringFormatting
134
+
135
+ #Транслитерирует строку в латиницу, и возвращает измененную строку
136
+ def translify
137
+ RuTils::Transliteration::Simple::translify(self.to_s)
138
+ end
139
+
140
+ #Транслитерирует строку, меняя объект
141
+ def translify!
142
+ self.replace(self.translify)
143
+ end
144
+
145
+ # Транслитерирует строку, делая ее пригодной для применения как имя директории или URL
146
+ def dirify
147
+ RuTils::Transliteration::Simple::dirify(self.to_s)
148
+ end
149
+
150
+ # Транслитерирует строку (взаимно-однозначный транслит), и возвращает измененную строку
151
+ def bidi_translify(allow_slashes = true)
152
+ RuTils::Transliteration::BiDi::translify(self.to_s, allow_slashes)
153
+ end
154
+
155
+ # Транслитерирует строку (взаимно-однозначный транслит), меняя объект
156
+ def bidi_translify!(allow_slashes = true)
157
+ self.replace(RuTils::Transliteration::BiDi::translify(self.to_s, allow_slashes))
158
+ end
159
+
160
+ # Заменяет латиницу на кириллицу (взаимно-однозначный транслит), меняя объект
161
+ def bidi_detranslify!(allow_slashes = true)
162
+ self.replace(RuTils::Transliteration::BiDi::detranslify(self.to_s, allow_slashes))
163
+ end
164
+
165
+ # Заменяет латиницу на кириллицу (взаимно-однозначный транслит), и возвращает измененную строку
166
+ def bidi_detranslify(allow_slashes = true)
167
+ RuTils::Transliteration::BiDi::detranslify(self.to_s, allow_slashes = true)
168
+ end
169
+ end
170
+
171
+ class String
172
+ include RuTils::Transliteration::StringFormatting
173
+ end
data/test/run_tests.rb ADDED
@@ -0,0 +1,4 @@
1
+ Dir.entries(File.dirname(__FILE__)).each do | it|
2
+ next unless it =~ /t_/
3
+ require File.dirname(__FILE__) + '/' + it.gsub(/\.rb$/, '')
4
+ end
@@ -0,0 +1,10 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+ class DistanceOfTimeTest < Test::Unit::TestCase
6
+ def test_distance_of_time_in_words
7
+ assert_equal "меньше минуты", RuTils::DateTime::distance_of_time_in_words(0, 50)
8
+ assert_equal "две минуты", RuTils::DateTime::distance_of_time_in_words(0, 140)
9
+ end
10
+ end
@@ -0,0 +1,42 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+
6
+ # Cюда идут наши тесты типографа. Мы содержим их отдельно поскольку набор тестов Типографицы нами не контролируется.
7
+ # Когда у рутилей появятся собственные баги под каждый баг следует завести тест
8
+ class GilensonOwnTest < Test::Unit::TestCase
9
+
10
+ # Проверка изъятия тагов и помещения их На Место©
11
+ # характерно что пока мы не рефакторнули все как следует можно проверять
12
+ # только конечный результат трансформации - что глючно до безобразия
13
+ def test_tag_lift
14
+ assert_equal "Вот&nbsp;такие<tag some='foo>' /> <tagmore></tagmore> дела", "Вот такие<tag some='foo>' /> <tagmore></tagmore> дела".gilensize
15
+ end
16
+
17
+ def test_byte_pass
18
+ assert_equal '<p>Теперь добираться до офиса Студии автортранспортом стало удобнее. ' +
19
+ 'Для этого мы разместили в разделе <a href="#">«Контакт»</a> окно вебкамеры, ' +
20
+ 'которая непрерывно транслирует дорожную обстановку на Садовом кольце по адресу Земляной Вал, 23. <br>' +
21
+ 'Удачной дороги! </p>',
22
+ '<p>Теперь добираться до офиса Студии автортранспортом стало удобнее. ' +
23
+ 'Для этого мы разместили в разделе <a href="#">«Контакт»</a> окно вебкамеры, ' +
24
+ 'которая непрерывно транслирует дорожную обстановку на Садовом кольце по адресу Земляной Вал, 23. <br>' +
25
+ 'Удачной дороги! </p>'.gilensize
26
+ end
27
+
28
+ end
29
+
30
+ # class TypograficaTrakoEntries < Test::Unit::TestCase
31
+ # def test_cpp
32
+ # assert_equal "C++-API", "C++-API".gilensize
33
+ # end
34
+ #
35
+ # def test_symmetricity # http://pixel-apes.com/typografica/trako/12
36
+ # assert_equal "&laquo;Справка&nbsp;09&raquo;", '"Справка 09"'.gilensize
37
+ # end
38
+ #
39
+ # def test_paths # http://pixel-apes.com/typografica/trako/13
40
+ # assert_equal "&laquo;c:\www\sites\&raquo;", '"c:\www\sites\"'.gilensize
41
+ # end
42
+ # end
@@ -0,0 +1,43 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require 'rubygems'
4
+
5
+ require_gem 'RedCloth'
6
+ require_gem 'BlueCloth'
7
+
8
+
9
+ require File.dirname(__FILE__) + '/../lib/rutils'
10
+
11
+ # Весь integration надо грузить после патчимых пакетов
12
+ load File.dirname(__FILE__) + '/../lib/integration/integration.rb'
13
+
14
+ class IntegrationTest < Test::Unit::TestCase
15
+ def setup
16
+ RuTils::overrides = true
17
+ end
18
+
19
+ def test_integration_flag
20
+ RuTils::overrides = false
21
+ assert !RuTils::overrides_enabled?
22
+ RuTils::overrides = true
23
+ assert RuTils::overrides_enabled?
24
+ end
25
+ end
26
+
27
+ # Интеграция с RedCloth - Textile.
28
+ # Нужно иметь в виду что Textile осуществляет свою обработку типографики, которую мы подменяем!
29
+ class TextileIntegrationTest < IntegrationTest
30
+ def test_integration_textile
31
+ assert_equal "<p>И&nbsp;вот &laquo;они пошли туда&raquo;, и&nbsp;шли шли&nbsp;шли</p>",
32
+ RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
33
+ end
34
+ end
35
+
36
+ # Интеграция с BlueCloth - Markdown
37
+ # Сам Markdown никакой обработки типографики не производит (это делает RubyPants, но вряд ли его кто-то юзает на практике)
38
+ class MarkdownIntegrationTest < IntegrationTest
39
+ def test_integration_markdown
40
+ assert_equal "<p>И вот&nbsp;&laquo;они пошли туда&raquo;, и&nbsp;шли шли&nbsp;шли</p>",
41
+ BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
42
+ end
43
+ end
@@ -0,0 +1,60 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+
6
+ class PropisjuTestCase < Test::Unit::TestCase
7
+ def test_ints
8
+ assert_equal "пятьсот двадцать три", 523.propisju
9
+ assert_equal "шесть тысяч семьсот двадцать семь", 6727.propisju
10
+ assert_equal "восемь миллионов шестьсот пятьдесят два", 8000652.propisju
11
+ assert_equal "восемь миллионов шестьсот пятьдесят две", 8000652.propisju(2)
12
+ assert_equal "восемь миллионов шестьсот пятьдесят два", 8000652.propisju(3)
13
+ assert_equal "сорок пять", 45.propisju
14
+ assert_equal "пять", 5.propisju
15
+ assert_equal "шестьсот двенадцать", 612.propisju
16
+ assert_equal "двадцать пять колес", 25.propisju_items(3, "колесо", "колеса", "колес")
17
+ assert_equal "двадцать одна подстава", 21.propisju_items(2, "подстава", "подставы", "подстав")
18
+ end
19
+
20
+ def test_floats
21
+ assert_equal "шесть целых пять десятых", (6.50).propisju
22
+ assert_equal "триста сорок одна целая девять десятых", (341.9).propisju
23
+ assert_equal "триста сорок одна целая двести сорок пять тысячных", (341.245).propisju
24
+ assert_equal "двести три целых сорок одна сотая", (203.41).propisju
25
+ assert_equal "четыреста сорок две целых пять десятых", (442.50000).propisju
26
+ end
27
+
28
+ def test_items
29
+ assert_equal "чемодана", 523.items("чемодан", "чемодана", "чемоданов")
30
+ assert_equal "партий", 6727.items("партия", "партии", "партий")
31
+ assert_equal "козлов", 45.items("козел", "козла", "козлов")
32
+ assert_equal "колес", 260.items("колесо", "колеса", "колес")
33
+ end
34
+ end
35
+
36
+ #class PluralizeTestCase < Test::Unit::TestCase
37
+ #
38
+ # def test_males
39
+ # assert_equal "гада", "гад".ru_pluralize(3)
40
+ # assert_equal "враг", "враг".ru_pluralize(1)
41
+ # assert_equal "сцепа", "сцеп".ru_pluralize(2)
42
+ # assert_equal "огня", "огонь".ru_pluralize(2)
43
+ # assert_equal "огней", "огонь".ru_pluralize(6)
44
+ # end
45
+ #
46
+ # def test_females
47
+ # assert_equal "сволочей", "сволочь".ru_pluralize(6)
48
+ # assert_equal "весны", "весна".ru_pluralize(3)
49
+ # assert_equal "чета", "четы".ru_pluralize(2)
50
+ # assert_equal "чета", "чет".ru_pluralize(5)
51
+ # assert_equal "вони", "вонь".ru_pluralize(3)
52
+ # assert_equal "воней", "вонь".ru_pluralize(6)
53
+ # end
54
+ #
55
+ # def test_middles
56
+ # assert_equal "окна", "окно".ru_pluralize(2)
57
+ # assert_equal "колес", "колесо".ru_pluralize(15)
58
+ # assert_equal "насилий", "насилие".ru_pluralize(5)
59
+ # end
60
+ #end
@@ -0,0 +1,25 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+
6
+ class TranslitTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @string = "Это кусок строки русских букв v peremshku s latinizey i амперсандом (pozor!) & something"
10
+ end
11
+
12
+ def test_translify
13
+ assert_equal "sch", 'щ'.translify
14
+ assert_equal "upuschenie", 'упущение'.translify
15
+ assert_equal "sh", 'ш'.translify
16
+ assert_equal "ts", 'ц'.translify
17
+ assert_equal "Eto kusok stroki russkih bukv v peremshku s latinizey i ampersandom (pozor!) & something", @string.translify
18
+ assert_equal "Это просто некий текст".translify, "Eto prosto nekiy tekst"
19
+ end
20
+
21
+ def test_dirify
22
+ assert_equal "eto-kusok-stroki-ruskih-bukv-v-peremshku-s-latinizey-i-ampersandom-pozor-and-something", @string.dirify
23
+ assert_equal "esche-ruskiy-tekst", "Еще РусСКий теКст".dirify
24
+ end
25
+ end
@@ -0,0 +1,57 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+ # Тесты Гиленсона - обычный набор тестов к Тыпографице с сайта pixel-apes. Все "наши" тесты Гиленсона идут в другой test case!
6
+ class TypograficaComplianceTest < Test::Unit::TestCase
7
+
8
+ def test_phones
9
+ assert_equal '<nobr>3&ndash;12&ndash;30</nobr>', '3-12-30'.gilensize
10
+ assert_equal '<nobr>12&ndash;34&ndash;56</nobr>', '12-34-56'.gilensize
11
+ assert_equal '<nobr>88&ndash;25&ndash;04</nobr>', '88-25-04'.gilensize
12
+ assert_equal '+7 <nobr>(99284)&nbsp;65&ndash;818</nobr>', '+7 (99284) 65-818'.gilensize
13
+ assert_equal '<nobr>725&ndash;01&ndash;10</nobr>', '725-01-10'.gilensize
14
+ end
15
+
16
+ def test_address
17
+ assert_equal 'табл.&nbsp;2, рис.&nbsp;2.10', 'табл. 2, рис. 2.10'.gilensize
18
+ assert_equal 'офис&nbsp;415, оф.340, д.5, ул.&nbsp;Народной Воли, пл. Малышева', 'офис 415, оф.340, д.5, ул. Народной Воли, пл. Малышева'.gilensize
19
+ end
20
+
21
+ def test_specials
22
+ assert_equal '&copy; 2002, &copy; 2003, &copy; 2004, &copy; 2005 &mdash; тоже без&nbsp;пробелов: &copy;2002, &copy;Кукуц. однако: варианты (а) и&nbsp;(с)', '(с) 2002, (С) 2003, (c) 2004, (C) 2005 -- тоже без пробелов: (с)2002, (c)Кукуц. однако: варианты (а) и (с)'.gilensize
23
+ assert_equal '+5&#176С, +7&#176C, &ndash;5&#176F', '+5^С, +17^C, -275^F'.gilensize
24
+ assert_equal 'об&nbsp;этом подробнее &mdash; читай &#167;25', 'об этом подробнее -- читай (p)25'.gilensize
25
+ assert_equal 'один же&nbsp;минус &ndash; краткое тире', 'один же минус - краткое тире'.gilensize
26
+ assert_equal 'Sharpdesign&#153;, Microsoft<sup>&#174;</sup>', 'Sharpdesign(tm), Microsoft(r)'.gilensize
27
+ end
28
+
29
+ def test_breaking
30
+ assert_equal 'скажи, мне, ведь не&nbsp;даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.gilensize
31
+ assert_equal 'so&nbsp;be it, my&nbsp;liege. Tiny dwellers roam thru midnight! Hell raised, the&nbsp;Balrog is&nbsp;hiding in&nbsp;your backyard!', 'so be it ,my liege .Tiny dwellers roam thru midnight !Hell raised, the Balrog is hiding in your backyard!'.gilensize
32
+ assert_equal 'при&nbsp;установке командой строки в&nbsp;?page=help <nobr>бла-бла-бла-бла</nobr>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
33
+ assert_equal 'как&nbsp;интересно будет переноситься со&nbsp;строки на&nbsp;строку <nobr>что-то</nobr> разделённое дефисом, ведь дефис тот&nbsp;тоже ведь из&nbsp;наших. <nobr>Какие-то</nobr> браузеры думают, что&nbsp;следует переносить и&nbsp;его...', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
34
+ end
35
+
36
+ def test_quotes
37
+ assert_equal 'english &#147;quotes&#148; should be&nbsp;quite like this', 'english "quotes" should be quite like this'.gilensize
38
+ assert_equal 'русские же&nbsp;&laquo;оформляются&raquo; подобным образом', 'русские же "оформляются" подобным образом'.gilensize
39
+ assert_equal 'кавычки &laquo;расставлены&raquo; &#147;in a&nbsp;chaotic order&#148;', 'кавычки "расставлены" "in a chaotic order"'.gilensize
40
+ assert_equal 'диагональ моего монитора &mdash; 17&quot;, а&nbsp;размер пениса &mdash; 1,5&quot;', 'диагональ моего монитора -- 17", а размер пениса -- 1,5"'.gilensize
41
+ assert_equal 'в&nbsp;толщину, &laquo;вложенные &#147;quotes&#148; вот&nbsp;так&raquo;, &#147;or it&nbsp;&laquo;будет вложено&raquo; elsewhere&#148;', 'в толщину, "вложенные "quotes" вот так", "or it "будет вложено" elsewhere"'.gilensize
42
+ assert_equal '&#147;complicated &laquo;кавычки&raquo;, &laquo;странные &#147;includements&#148; кавычек&raquo;', '"complicated "кавычки", "странные "includements" кавычек"'.gilensize
43
+ assert_equal '&#147;double &#147;quotes&#148;', '"double "quotes"'.gilensize
44
+ assert_equal '&laquo;дважды вложенные &laquo;кавычки&raquo;', '"дважды вложенные "кавычки"'.gilensize
45
+ assert_equal '&laquo;01/02/03&raquo;, дискеты в&nbsp;5.25&quot;', '"01/02/03", дискеты в 5.25"'.gilensize
46
+ assert_equal 'после троеточия правая кавычка &mdash; &laquo;Вот...&raquo;', 'после троеточия правая кавычка -- "Вот..."'.gilensize
47
+ assert_equal 'setlocale(LC_ALL, &#147;ru_RU.UTF8&#148;);', 'setlocale(LC_ALL, "ru_RU.UTF8");'.gilensize
48
+ assert_equal '&#147;read, write, delete&#148; с&nbsp;флагом &#147;only_mine&#148;', '"read, write, delete" с флагом "only_mine"'.gilensize
49
+ assert_equal '&laquo;Двоеточие:&raquo;, &laquo;такую умную тему должен писать чувак умеющий скрипты скриптить.&raquo;', '"Двоеточие:", "такую умную тему должен писать чувак умеющий скрипты скриптить."'.gilensize
50
+ assert_equal '(&laquo;Вики != HTML&raquo; &mdash; &laquo;Вики != HTML&raquo; &mdash; (&laquo;всякая чушь&raquo;))', '("Вики != HTML" -- "Вики != HTML" -- ("всякая чушь"))'.gilensize
51
+ assert_equal '&laquo;фигня123&raquo;, &#147;fignya123&#148;', '"фигня123", "fignya123"'.gilensize
52
+ # assert_equal '&laquo;сбалансированные &laquo;кавычки<!--notypo--><!--/notypo--> (четыре в&nbsp;конце) &mdash; связано с&nbsp;синтаксисом ваки', '"сбалансированные "кавычки"""" (четыре в конце) -- связано с синтаксисом ваки'.gilensize
53
+ assert_equal '&laquo;несбалансированные &laquo;кавычки&quot;&quot;" (три в&nbsp;конце) &mdash; связано с&nbsp;синтаксисом ваки', '"несбалансированные "кавычки""" (три в конце) -- связано с синтаксисом ваки'.gilensize
54
+ assert_equal '&laquo;разноязыкие quotes&raquo;', '"разноязыкие quotes"'.gilensize
55
+ assert_equal '&laquo;multilanguage кавычки&raquo;', '"multilanguage кавычки"'.gilensize
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.11
3
+ specification_version: 1
4
+ name: rutils
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.3
7
+ date: 2005-10-19 00:00:00 +02:00
8
+ summary: Simple processing of russian strings
9
+ require_paths:
10
+ - lib
11
+ email: me@julik.nl
12
+ homepage: http://rubyforge.org/projects/rutils
13
+ rubyforge_project: rutils
14
+ description: "Allows simple processing of russian strings - transliteration, numerals as text
15
+ and HTML beautification"
16
+ autorequire: rutils
17
+ default_executable:
18
+ bindir: bin
19
+ has_rdoc: true
20
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
21
+ requirements:
22
+ -
23
+ - ">"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.0.0
26
+ version:
27
+ platform: ruby
28
+ signing_key:
29
+ cert_chain:
30
+ authors:
31
+ - Julian "Julik" Tarkhanov
32
+ files:
33
+ - bin/gilensize
34
+ - test/run_tests.rb
35
+ - test/t_datetime.rb
36
+ - test/t_gilenson.rb
37
+ - test/t_integration.rb
38
+ - test/t_pluralize.rb
39
+ - test/t_transliteration.rb
40
+ - test/t_typografica.rb
41
+ - lib/datetime
42
+ - lib/gilenson
43
+ - lib/integration
44
+ - lib/pluralizer
45
+ - lib/rutils.rb
46
+ - lib/transliteration
47
+ - lib/datetime/datetime.rb
48
+ - lib/gilenson/gilenson.rb
49
+ - lib/gilenson/gilenson_port.rb
50
+ - lib/integration/blue_cloth_override.rb
51
+ - lib/integration/integration.rb
52
+ - lib/integration/rails_date_helper_override.rb
53
+ - lib/integration/red_cloth_override.rb
54
+ - lib/pluralizer/pluralizer.rb
55
+ - lib/transliteration/transliteration.rb
56
+ - README
57
+ - TODO
58
+ - CHANGELOG
59
+ test_files:
60
+ - test/run_tests.rb
61
+ rdoc_options:
62
+ - "--main=README"
63
+ - "--line-numbers"
64
+ - "--charset=utf-8"
65
+ extra_rdoc_files:
66
+ - README
67
+ - TODO
68
+ - CHANGELOG
69
+ executables:
70
+ - gilensize
71
+ extensions: []
72
+ requirements: []
73
+ dependencies: []