ruslat 0.1.1 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2d12332a3de9c93d08681b318b4683dc4d6be2a8
4
- data.tar.gz: b73d5515393dfd86029ac8a840a86ed44d0cd123
2
+ SHA256:
3
+ metadata.gz: ccb4c8190c8faa4cd39922f2233c0238581e787ee1dec17401c3da00e3a02818
4
+ data.tar.gz: 432d43453786f1f7c0335bc0555240cfec0142a9915a1effd568aacf61e0ea4c
5
5
  SHA512:
6
- metadata.gz: ddc4cd25cd7717d0860aeb2aaf02c080c330a92b8a48d973f526a4c30367940eabb8af0ec7515155a1149858b034b8ae8aed6ac1fef45f39c566d96bf263e766
7
- data.tar.gz: 5d5a6bd7bdcad02e60c261ac3fd1991b0b3eb7969221c019c51db7f3caf911068245ed281ba3beab3dabefb3d0fac4dd094bcb16baf0670d66d6260479c37d98
6
+ metadata.gz: 7e402e50bef7126530534283b20c26994f2f8adf8c6488d8bad40770d7c2fdf0c13384b8045e5ab866e2009e5c3f6c2d4855a04771b0dafc1d4be73289bbb33d
7
+ data.tar.gz: 63a67746382d3d29e0df40a6d9be5803895031947e8fc35b7b6b858f3f2d9e6da847e181af8f9a75d562f436d7287d8b09587d510ed7ecc0e654279ec1f5c0da
data/README.md CHANGED
@@ -2,14 +2,15 @@
2
2
 
3
3
  Ruslat is library for bidirectional transliteration for russian to latin.
4
4
 
5
- It is Ruby implementation of Andrey V. Lukyanov transliteration system. See http://tapemark.narod.ru/ruslat.html for more info.
5
+ It is Ruby implementation of Andrey V. Lukyanov transliteration system.
6
+ See <http://tapemark.narod.ru/ruslat.html> for more info.
6
7
 
7
8
  ## Installation
8
9
 
9
10
  Add this line to your application's Gemfile:
10
11
 
11
12
  ```ruby
12
- gem 'ruslat'
13
+ gem "ruslat"
13
14
  ```
14
15
 
15
16
  And then execute:
@@ -23,25 +24,47 @@ Or install it yourself as:
23
24
  ## Usage
24
25
 
25
26
  ```ruby
26
- require 'ruslat'
27
+ require "ruslat"
27
28
 
28
- extend Ruslat::Core
29
+ Ruslat.rus_to_lat("Привет Мир!") # => "Privet Mir!"
30
+ Ruslat.lat_to_rus("Privet Mir!") # => "Привет Мир!"
29
31
 
30
- puts rus_to_lat('Привет Мир!')
31
- puts lat_to_rus(rus_to_lat('Привет Мир!'))
32
+ Ruslat.rus_to_lat("АЛЁША") # => "ALYoShA"
33
+ Ruslat.case_correct("ALYoShA") # => "ALYOSHA"
34
+
35
+ typo = "CAPA"
36
+ typo.bytes # => [67, 65, 80, 65]
37
+ Ruslat.rus_typo_correct(typo) # => "САРА"
38
+ Ruslat.rus_typo_correct(typo).bytes # => [208, 161, 208, 144, 208, 160, 208, 144]
39
+
40
+ typo = "Sаrа"
41
+ typo.bytes # => [83, 208, 176, 114, 208, 176]
42
+ Ruslat.lat_typo_correct(typo) # => "Sara"
43
+ Ruslat.lat_typo_correct(typo).bytes # => [83, 97, 114, 97]
32
44
  ```
33
45
 
34
46
  ## Development
35
47
 
36
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
48
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
49
+ `rake spec` to run the tests. You can also run `bin/console` for an interactive
50
+ prompt that will allow you to experiment.
37
51
 
38
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
52
+ To install this gem onto your local machine, run `bundle exec rake install`. To
53
+ release a new version, update the version number in `version.rb`, and then run
54
+ `bundle exec rake release`, which will create a git tag for the version, push
55
+ git commits and tags, and push the `.gem` file to
56
+ [rubygems.org](https://rubygems.org).
39
57
 
40
58
  ## Contributing
41
59
 
42
- Bug reports and pull requests are welcome on GitHub at [https://github.com/vsuhachev/ruslat](https://github.com/vsuhachev/ruslat). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
60
+ Bug reports and pull requests are welcome on GitHub at
61
+ [https://github.com/vsuhachev/ruslat](https://github.com/vsuhachev/ruslat). This
62
+ project is intended to be a safe, welcoming space for collaboration, and
63
+ contributors are expected to adhere to the
64
+ [Contributor Covenant](http://contributor-covenant.org) code of conduct.
43
65
 
44
66
 
45
67
  ## License
46
68
 
47
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
69
+ The gem is available as open source under the terms of the
70
+ [MIT License](http://opensource.org/licenses/MIT).
data/exe/ruslat CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'ruslat'
3
+ require "ruslat"
data/lib/ruslat/core.rb CHANGED
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  module Ruslat
4
2
  # (c) 2008 Andrey V. Lukyanov (e-mail: land@long.yar.ru)
5
3
  # License: I grant anyone the right to use this program
@@ -45,246 +43,271 @@ module Ruslat
45
43
  module Core
46
44
  # Russian to Latin converter
47
45
  def rus_to_lat(string)
48
- string.dup.tap do |str|
49
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьй([аоуАОУ])/, '\1jy\2')
50
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ьй([аоуАОУ])/, '\1Jy\2')
51
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЙ([аоуАОУ])/, '\1jY\2')
52
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЙ([аоуАОУ])/, '\1JY\2')
53
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьйе/, '\1jye')
54
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЙе/, '\1jYe')
55
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьйЕ/, '\1jyE')
56
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЙЕ/, '\1jYE')
57
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ьйе/, '\1Jye')
58
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЙе/, '\1JYe')
59
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬйЕ/, '\1JyE')
60
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЙЕ/, '\1JYE')
61
-
62
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])й([аоуАОУ])/, '\1y\2')
63
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])й([аоуАОУ])/, '\1y\2')
64
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])Й([аоуАОУ])/, '\1Y\2')
65
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])Й([аоуАОУ])/, '\1Y\2')
66
-
67
- str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])й([аоуАОУ])/, '\1y\2')
68
- str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])Й([аоуАОУ])/, '\1Y\2')
69
- str.gsub!(/^й([аоуАОУ])/, 'y\1')
70
- str.gsub!(/^Й([аоуАОУ])/, 'Y\1')
71
-
72
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])йе/, '\1ye')
73
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])Йе/, '\1Ye')
74
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])йЕ/, '\1yE')
75
- str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])ЙЕ/, '\1YE')
76
-
77
- str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])йе/, '\1ye')
78
- str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])Йе/, '\1Ye')
79
- str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])йЕ/, '\1yE')
80
- str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])ЙЕ/, '\1YE')
81
- str.gsub!(/^йе/, 'ye')
82
- str.gsub!(/^Йе/, 'Ye')
83
- str.gsub!(/^йЕ/, 'yE')
84
- str.gsub!(/^ЙЕ/, 'YE')
85
-
86
- str.gsub!(/йэ/, 'йeh')
87
- str.gsub!(/Йэ/, 'Йeh')
88
- str.gsub!(/йЭ/, 'йEh')
89
- str.gsub!(/ЙЭ/, 'ЙEH')
90
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])й/, '\1ih')
91
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Й/, '\1Ih')
92
-
93
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ье/, '\1je')
94
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ье/, '\1Je')
95
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЕ/, '\1jE')
96
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЕ/, '\1JE')
97
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьё/, '\1jo')
98
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ьё/, '\1Jo')
99
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЁ/, '\1jO')
100
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЁ/, '\1JO')
101
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ью/, '\1ju')
102
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ью/, '\1Ju')
103
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЮ/, '\1jU')
104
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЮ/, '\1JU')
105
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ья/, '\1ja')
106
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ья/, '\1Ja')
107
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЯ/, '\1jA')
108
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЯ/, '\1JA')
109
-
110
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ь([бвгджзийклмнпрстфхцчшщБВГДЖЗИЙКЛМНПРСТФХЦЧШЩ])/, '\1j\2')
111
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ь([бвгджзийклмнпрстфхцчшщБВГДЖЗИЙКЛМНПРСТФХЦЧШЩ])/, '\1J\2')
112
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ь$/, '\1j')
113
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ь$/, '\1J')
114
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ь([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])/, '\1j\2')
115
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ь([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])/, '\1J\2')
116
- str.gsub!(/ь/, 'jh')
117
- str.gsub!(/Ь/, 'Jh')
118
-
119
- str.gsub!(/й/, 'j')
120
- str.gsub!(/Й/, 'J')
121
-
122
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])е/, '\1e')
123
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Е/, '\1E')
124
- str.gsub!(/е/, 'je')
125
- str.gsub!(/Е/, 'Je')
126
-
127
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ё/, '\1yo')
128
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ё/, '\1Yo')
129
- str.gsub!(/ё/, 'jo')
130
- str.gsub!(/Ё/, 'Jo')
131
-
132
- str.gsub!(/ы([аоуэАОУЭ])/, 'yh\1')
133
- str.gsub!(/Ы([аоуэАОУЭ])/, 'Yh\1')
134
- str.gsub!(/ы/, 'y')
135
- str.gsub!(/Ы/, 'Y')
136
-
137
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])э/, '\1eh')
138
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Э/, '\1Eh')
139
- str.gsub!(/э/, 'e')
140
- str.gsub!(/Э/, 'E')
141
-
142
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ю/, '\1yu')
143
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ю/, '\1Yu')
144
- str.gsub!(/ю/, 'ju')
145
- str.gsub!(/Ю/, 'Ju')
146
-
147
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])я/, '\1ya')
148
- str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Я/, '\1Ya')
149
- str.gsub!(/я/, 'ja')
150
- str.gsub!(/Я/, 'Ja')
151
-
152
- str.gsub!(/ж/, 'zh')
153
- str.gsub!(/ч/, 'ch')
154
- str.gsub!(/ш/, 'sh')
155
- str.gsub!(/щ/, 'xh')
156
- str.gsub!(/Ж/, 'Zh')
157
- str.gsub!(/Ч/, 'Ch')
158
- str.gsub!(/Ш/, 'Sh')
159
- str.gsub!(/Щ/, 'Xh')
160
-
161
- str.tr!('абвгдзиклмнопрстуфхцъАБВГДЗИКЛМНОПРСТУФХЦЪ', 'abvgdziklmnoprstufxcqABVGDZIKLMNOPRSTUFXCQ')
162
-
163
- str.gsub!(/№/, 'Nh')
164
- end
46
+ str = string.dup
47
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьй([аоуАОУ])/, '\1jy\2')
48
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ьй([аоуАОУ])/, '\1Jy\2')
49
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЙ([аоуАОУ])/, '\1jY\2')
50
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЙ([аоуАОУ])/, '\1JY\2')
51
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьйе/, '\1jye')
52
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЙе/, '\1jYe')
53
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьйЕ/, '\1jyE')
54
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЙЕ/, '\1jYE')
55
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ьйе/, '\1Jye')
56
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЙе/, '\1JYe')
57
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬйЕ/, '\1JyE')
58
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЙЕ/, '\1JYE')
59
+
60
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])й([аоуАОУ])/, '\1y\2')
61
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])й([аоуАОУ])/, '\1y\2')
62
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])Й([аоуАОУ])/, '\1Y\2')
63
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])Й([аоуАОУ])/, '\1Y\2')
64
+
65
+ str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])й([аоуАОУ])/, '\1y\2')
66
+ str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])Й([аоуАОУ])/, '\1Y\2')
67
+ str.gsub!(/^й([аоуАОУ])/, 'y\1')
68
+ str.gsub!(/^Й([аоуАОУ])/, 'Y\1')
69
+
70
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])йе/, '\1ye')
71
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])Йе/, '\1Ye')
72
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])йЕ/, '\1yE')
73
+ str.gsub!(/([аеёийоуъыьэюяАЕЁИЙОУЪЫЬЭЮЯEe])ЙЕ/, '\1YE')
74
+
75
+ str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])йе/, '\1ye')
76
+ str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])Йе/, '\1Ye')
77
+ str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])йЕ/, '\1yE')
78
+ str.gsub!(/([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])ЙЕ/, '\1YE')
79
+ str.gsub!(/^йе/, "ye")
80
+ str.gsub!(/^Йе/, "Ye")
81
+ str.gsub!(/^йЕ/, "yE")
82
+ str.gsub!(/^ЙЕ/, "YE")
83
+
84
+ str.gsub!(/йэ/, "йeh")
85
+ str.gsub!(/Йэ/, "Йeh")
86
+ str.gsub!(/йЭ/, "йEh")
87
+ str.gsub!(/ЙЭ/, "ЙEH")
88
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])й/, '\1ih')
89
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Й/, '\1Ih')
90
+
91
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ье/, '\1je')
92
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ье/, '\1Je')
93
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЕ/, '\1jE')
94
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЕ/, '\1JE')
95
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьё/, '\1jo')
96
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ьё/, '\1Jo')
97
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЁ/, '\1jO')
98
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЁ/, '\1JO')
99
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ью/, '\1ju')
100
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ью/, '\1Ju')
101
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЮ/, '\1jU')
102
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЮ/, '\1JU')
103
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ья/, '\1ja')
104
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ья/, '\1Ja')
105
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ьЯ/, '\1jA')
106
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ЬЯ/, '\1JA')
107
+
108
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ь([бвгджзийклмнпрстфхцчшщБВГДЖЗИЙКЛМНПРСТФХЦЧШЩ])/, '\1j\2')
109
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ь([бвгджзийклмнпрстфхцчшщБВГДЖЗИЙКЛМНПРСТФХЦЧШЩ])/, '\1J\2')
110
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ь$/, '\1j')
111
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ь$/, '\1J')
112
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ь([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])/, '\1j\2')
113
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ь([^абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯeEyY])/, '\1J\2')
114
+ str.gsub!(/ь/, "jh")
115
+ str.gsub!(/Ь/, "Jh")
116
+
117
+ str.gsub!(/й/, "j")
118
+ str.gsub!(/Й/, "J")
119
+
120
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])е/, '\1e')
121
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Е/, '\1E')
122
+ str.gsub!(/е/, "je")
123
+ str.gsub!(/Е/, "Je")
124
+
125
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ё/, '\1yo')
126
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ё/, '\1Yo')
127
+ str.gsub!(/ё/, "jo")
128
+ str.gsub!(/Ё/, "Jo")
129
+
130
+ str.gsub!(/ы([аоуэАОУЭ])/, 'yh\1')
131
+ str.gsub!(/Ы([аоуэАОУЭ])/, 'Yh\1')
132
+ str.gsub!(/ы/, "y")
133
+ str.gsub!(/Ы/, "Y")
134
+
135
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])э/, '\1eh')
136
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Э/, '\1Eh')
137
+ str.gsub!(/э/, "e")
138
+ str.gsub!(/Э/, "E")
139
+
140
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])ю/, '\1yu')
141
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Ю/, '\1Yu')
142
+ str.gsub!(/ю/, "ju")
143
+ str.gsub!(/Ю/, "Ju")
144
+
145
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])я/, '\1ya')
146
+ str.gsub!(/([бвгджзклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩ])Я/, '\1Ya')
147
+ str.gsub!(/я/, "ja")
148
+ str.gsub!(/Я/, "Ja")
149
+
150
+ str.gsub!(/ж/, "zh")
151
+ str.gsub!(/ч/, "ch")
152
+ str.gsub!(/ш/, "sh")
153
+ str.gsub!(/щ/, "xh")
154
+ str.gsub!(/Ж/, "Zh")
155
+ str.gsub!(/Ч/, "Ch")
156
+ str.gsub!(/Ш/, "Sh")
157
+ str.gsub!(/Щ/, "Xh")
158
+
159
+ str.tr!(
160
+ "абвгдзиклмнопрстуфхцъАБВГДЗИКЛМНОПРСТУФХЦЪ",
161
+ "abvgdziklmnoprstufxcqABVGDZIKLMNOPRSTUFXCQ"
162
+ )
163
+
164
+ str.gsub!(/№/, "Nh")
165
+
166
+ str
165
167
  end
166
168
 
167
169
  # Latin to Russian converter
168
170
  def lat_to_rus(string)
169
- string.dup.tap do |str|
170
- str.gsub!(/[nN][hH]/, '№')
171
- str.gsub!(/e[hH]/, 'э')
172
- str.gsub!(/E[hH]/, 'Э')
173
- str.gsub!(/i[hH]/, 'й')
174
- str.gsub!(/I[hH]/, 'Й')
175
- str.gsub!(/j[hH]/, 'ь')
176
- str.gsub!(/J[hH]/, 'Ь')
177
- str.gsub!(/y[hH]/, 'ы')
178
- str.gsub!(/Y[hH]/, 'Ы')
179
-
180
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])ja/, '\1ья')
181
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jA/, '\1ьЯ')
182
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Ja/, '\1Ья')
183
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JA/, '\1ЬЯ')
184
- str.gsub!(/j[aA]/, 'я')
185
- str.gsub!(/J[aA]/, 'Я')
186
-
187
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])je/, '\1ье')
188
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jE/, '\1ьЕ')
189
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Je/, '\1Ье')
190
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JE/, '\1ЬЕ')
191
- str.gsub!(/j[eE]/, 'е')
192
- str.gsub!(/J[eE]/, 'Е')
193
-
194
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])ji/, '\1ьи')
195
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jI/, '\1ьИ')
196
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Ji/, '\1Ьи')
197
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JI/, '\1ЬИ')
198
- str.gsub!(/ji/, 'йи')
199
- str.gsub!(/jI/, 'йИ')
200
- str.gsub!(/Ji/, 'Йи')
201
- str.gsub!(/JI/, 'ЙИ')
202
-
203
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jo/, '\1ьё')
204
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jO/, '\1ьЁ')
205
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Jo/, '\1Ьё')
206
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JO/, '\1ЬЁ')
207
- str.gsub!(/j[oO]/, 'ё')
208
- str.gsub!(/J[oO]/, 'Ё')
209
-
210
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])ju/, '\1ью')
211
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jU/, '\1ьЮ')
212
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Ju/, '\1Ью')
213
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JU/, '\1ЬЮ')
214
- str.gsub!(/j[uU]/, 'ю')
215
- str.gsub!(/J[uU]/, 'Ю')
216
-
217
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[aA]/, '\1я')
218
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[aA]/, '\1Я')
219
- str.gsub!(/ya/, 'йа')
220
- str.gsub!(/yA/, 'йА')
221
- str.gsub!(/Ya/, 'Йа')
222
- str.gsub!(/YA/, 'ЙА')
223
-
224
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[eE]/, '\1е')
225
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[eE]/, '\1Е')
226
- str.gsub!(/ye/, 'йе')
227
- str.gsub!(/yE/, 'йЕ')
228
- str.gsub!(/Ye/, 'Йе')
229
- str.gsub!(/YE/, 'ЙЕ')
230
-
231
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[oO]/, '\1ё')
232
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[oO]/, '\1Ё')
233
- str.gsub!(/yo/, 'йо')
234
- str.gsub!(/yO/, 'йО')
235
- str.gsub!(/Yo/, 'Йо')
236
- str.gsub!(/YO/, 'ЙО')
237
-
238
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[uU]/, '\1ю')
239
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[uU]/, '\1Ю')
240
- str.gsub!(/yu/, 'йу')
241
- str.gsub!(/yU/, 'йУ')
242
- str.gsub!(/Yu/, 'Йу')
243
- str.gsub!(/YU/, 'ЙУ')
244
-
245
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])e/, '\1е')
246
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])E/, '\1Е')
247
- str.gsub!(/e/, 'э')
248
- str.gsub!(/E/, 'Э')
249
-
250
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])j/, '\1ь')
251
- str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])J/, '\1Ь')
252
- str.gsub!(/j/, 'й')
253
- str.gsub!(/J/, 'Й')
254
-
255
- str.gsub!(/c[hH]/, 'ч')
256
- str.gsub!(/s[hH]/, 'ш')
257
- str.gsub!(/x[hH]/, 'щ')
258
- str.gsub!(/z[hH]/, 'ж')
259
-
260
- str.gsub!(/C[hH]/, 'Ч')
261
- str.gsub!(/S[hH]/, 'Ш')
262
- str.gsub!(/X[hH]/, 'Щ')
263
- str.gsub!(/Z[hH]/, 'Ж')
264
-
265
- str.tr!('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'абцдэфгхийклмнопърстуввхызАБЦДЭФГХИЙКЛМНОПЪРСТУВВХЫЗ')
266
- end
171
+ str = string.dup
172
+
173
+ str.gsub!(/[nN][hH]/, "№")
174
+ str.gsub!(/e[hH]/, "э")
175
+ str.gsub!(/E[hH]/, "Э")
176
+ str.gsub!(/i[hH]/, "й")
177
+ str.gsub!(/I[hH]/, "Й")
178
+ str.gsub!(/j[hH]/, "ь")
179
+ str.gsub!(/J[hH]/, "Ь")
180
+ str.gsub!(/y[hH]/, "ы")
181
+ str.gsub!(/Y[hH]/, "Ы")
182
+
183
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])ja/, '\1ья')
184
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jA/, '\1ьЯ')
185
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Ja/, '\1Ья')
186
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JA/, '\1ЬЯ')
187
+ str.gsub!(/j[aA]/, "я")
188
+ str.gsub!(/J[aA]/, "Я")
189
+
190
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])je/, '\1ье')
191
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jE/, '\1ьЕ')
192
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Je/, '\1Ье')
193
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JE/, '\1ЬЕ')
194
+ str.gsub!(/j[eE]/, "е")
195
+ str.gsub!(/J[eE]/, "Е")
196
+
197
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])ji/, '\1ьи')
198
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jI/, '\1ьИ')
199
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Ji/, '\1Ьи')
200
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JI/, '\1ЬИ')
201
+ str.gsub!(/ji/, "йи")
202
+ str.gsub!(/jI/, "йИ")
203
+ str.gsub!(/Ji/, "Йи")
204
+ str.gsub!(/JI/, "ЙИ")
205
+
206
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jo/, '\1ьё')
207
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jO/, '\1ьЁ')
208
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Jo/, '\1Ьё')
209
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JO/, '\1ЬЁ')
210
+ str.gsub!(/j[oO]/, "ё")
211
+ str.gsub!(/J[oO]/, "Ё")
212
+
213
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])ju/, '\1ью')
214
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])jU/, '\1ьЮ')
215
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Ju/, '\1Ью')
216
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])JU/, '\1ЬЮ')
217
+ str.gsub!(/j[uU]/, "ю")
218
+ str.gsub!(/J[uU]/, "Ю")
219
+
220
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[aA]/, '\1я')
221
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[aA]/, '\1Я')
222
+ str.gsub!(/ya/, "йа")
223
+ str.gsub!(/yA/, "йА")
224
+ str.gsub!(/Ya/, "Йа")
225
+ str.gsub!(/YA/, "ЙА")
226
+
227
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[eE]/, '\1е')
228
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[eE]/, '\1Е')
229
+ str.gsub!(/ye/, "йе")
230
+ str.gsub!(/yE/, "йЕ")
231
+ str.gsub!(/Ye/, "Йе")
232
+ str.gsub!(/YE/, "ЙЕ")
233
+
234
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[oO]/, '\1ё')
235
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[oO]/, '\1Ё')
236
+ str.gsub!(/yo/, "йо")
237
+ str.gsub!(/yO/, "йО")
238
+ str.gsub!(/Yo/, "Йо")
239
+ str.gsub!(/YO/, "ЙО")
240
+
241
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])y[uU]/, '\1ю')
242
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])Y[uU]/, '\1Ю')
243
+ str.gsub!(/yu/, "йу")
244
+ str.gsub!(/yU/, "йУ")
245
+ str.gsub!(/Yu/, "Йу")
246
+ str.gsub!(/YU/, "ЙУ")
247
+
248
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])e/, '\1е')
249
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])E/, '\1Е')
250
+ str.tr!("e", "э")
251
+ str.tr!("E", "Э")
252
+
253
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])j/, '\1ь')
254
+ str.gsub!(/([bcdfghklmnprstvwxzBCDFGHKLMNPRSTVWXZ])J/, '\1Ь')
255
+ str.tr!("j", "й")
256
+ str.tr!("J", "Й")
257
+
258
+ str.gsub!(/c[hH]/, "ч")
259
+ str.gsub!(/s[hH]/, "ш")
260
+ str.gsub!(/x[hH]/, "щ")
261
+ str.gsub!(/z[hH]/, "ж")
262
+
263
+ str.gsub!(/C[hH]/, "Ч")
264
+ str.gsub!(/S[hH]/, "Ш")
265
+ str.gsub!(/X[hH]/, "Щ")
266
+ str.gsub!(/Z[hH]/, "Ж")
267
+
268
+ str.tr!(
269
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
270
+ "абцдэфгхийклмнопърстуввхызАБЦДЭФГХИЙКЛМНОПЪРСТУВВХЫЗ"
271
+ )
272
+ str
267
273
  end
268
274
 
269
275
  # Case correct, example: АЛЁША (rus_to_lat)→ ALYoShA (case_correct)→ ALYOSHA
270
276
  def case_correct(string)
271
- string.dup.tap do |str|
272
- str.gsub!(/([A-Z])h([A-Z])/) { |s| s.upcase }
273
- str.gsub!(/J([aeou])([A-Z])/) { |s| s.upcase }
274
-
275
- str.gsub!(/([A-Z])([A-Z])h/) { |s| s.upcase }
276
- str.gsub!(/([A-Z])J([aeou])/) { |s| s.upcase }
277
- str.gsub!(/([BCDFGHKLMNPRSTVWXZ])Y([aeou])/) { |s| s.upcase }
278
-
279
- str.gsub!(/([A-Z])h\s+([A-Z][A-Z])/) { |s| s.upcase }
280
- str.gsub!(/J([aeou])\s+([A-Z][A-Z])/) { |s| s.upcase }
281
- str.gsub!(/([BCDFGHKLMNPRSTVWXZ])Y([aeou])\s+([A-Z][A-Z])/) { |s| s.upcase }
282
- end
277
+ str = string.dup
278
+ str.gsub!(/([A-Z])h([A-Z])/, &:upcase)
279
+ str.gsub!(/J([aeou])([A-Z])/, &:upcase)
280
+
281
+ str.gsub!(/([A-Z])([A-Z])h/, &:upcase)
282
+ str.gsub!(/([A-Z])J([aeou])/, &:upcase)
283
+ str.gsub!(/([BCDFGHKLMNPRSTVWXZ])Y([aeou])/, &:upcase)
284
+
285
+ str.gsub!(/([A-Z])h\s+([A-Z][A-Z])/, &:upcase)
286
+ str.gsub!(/J([aeou])\s+([A-Z][A-Z])/, &:upcase)
287
+ str.gsub!(/([BCDFGHKLMNPRSTVWXZ])Y([aeou])\s+([A-Z][A-Z])/, &:upcase)
288
+ str
289
+ end
290
+
291
+ # Typo correct replaces 'cyrillic-look-like' latin symbols to cyrillic ones
292
+ def rus_typo_correct(string)
293
+ string.tr(
294
+ "acekopuxyABCEHKMOPTXY",
295
+ "асекорихуАВСЕНКМОРТХУ"
296
+ )
297
+ end
298
+
299
+ # Deprecated, use `rus_typo_correct` instead
300
+ def typo_correct(*args)
301
+ warn("DEPRECATION WARNING: Usage of `typo_correct` deprecated, use `rus_typo_correct` instead")
302
+ rus_typo_correct(*args)
283
303
  end
284
304
 
285
305
  # Typo correct replaces 'cyrillic-look-like' latin symbols to cyrillic ones
286
- def typo_correct(string)
287
- string.tr('acekopuxyABCEHKMOPTXY', 'асекорихуАВСЕНКМОРТХУ')
306
+ def lat_typo_correct(string)
307
+ string.tr(
308
+ "асекорихуАВСЕНКМОРТХУ",
309
+ "acekopuxyABCEHKMOPTXY"
310
+ )
288
311
  end
289
312
  end
290
313
  end
@@ -1,3 +1,3 @@
1
1
  module Ruslat
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = "1.0.1".freeze
3
3
  end
data/lib/ruslat.rb CHANGED
@@ -1,9 +1,6 @@
1
- require 'ruslat/version'
2
- require 'ruslat/core'
1
+ require "ruslat/version"
2
+ require "ruslat/core"
3
3
 
4
4
  module Ruslat
5
- def self.included(base)
6
- puts "blah #{base.inspect}"
7
- base.extend(Core)
8
- end
5
+ extend Core
9
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruslat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasiliy Sukhachev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-11 00:00:00.000000000 Z
11
+ date: 2022-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: '2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '3'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rubocop
56
+ name: standard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.44'
61
+ version: '1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.44'
68
+ version: '1'
69
69
  description:
70
70
  email:
71
71
  - vsuhachev@yandex.ru
@@ -101,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  requirements: []
104
- rubyforge_project:
105
- rubygems_version: 2.5.1
104
+ rubygems_version: 3.3.16
106
105
  signing_key:
107
106
  specification_version: 4
108
107
  summary: Bidirectional russian transliteration library