rutils 0.0.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.
@@ -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: []