translit 0.1.0
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.
- data/README.markdown +26 -0
- data/bin/translit +17 -0
- data/lib/translit.rb +39 -0
- metadata +78 -0
data/README.markdown
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
## What is it / Что это ##
|
2
|
+
|
3
|
+
It is a simple library allowing you to transliterate between cyrillic and latin.
|
4
|
+
R: Это простая и элегантная программа позволит вам проводить транслитерацию между кирилицой и латиницой.
|
5
|
+
|
6
|
+
It is easy to use from the command line and in your code.
|
7
|
+
R: Ее легко использовать как в коммандной строке так и в вашем коде.
|
8
|
+
|
9
|
+
Install it via:
|
10
|
+
R: Устанавливается она просто:
|
11
|
+
<code>gem install translit</code>
|
12
|
+
|
13
|
+
## USAGE ##
|
14
|
+
|
15
|
+
To use translit from the command line you just type
|
16
|
+
R: Для использовавания translit в командной строке просто напишите
|
17
|
+
<code>translit [your_input_here]</code>
|
18
|
+
where your input could be in cyrillic or latin
|
19
|
+
R: где ваш текст может быть написан успользуя русскую клавиатуру либо латинскую
|
20
|
+
|
21
|
+
Or you can translit stdin now via just:
|
22
|
+
R: Либо вы можете просто вызвать программу и передавать текст в потоке чтения данных
|
23
|
+
<code>translit</code>
|
24
|
+
|
25
|
+
To stop stdin input use .\n (press dot and then enter on the new line)
|
26
|
+
R: Чтобы прервать поток используется стандарная система .\n (напишите . и нажмите enter на чистой строке)
|
data/bin/translit
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'translit'
|
4
|
+
|
5
|
+
if ARGV[0]
|
6
|
+
puts Translit.convert ARGV.join(' ')
|
7
|
+
else
|
8
|
+
output = ""
|
9
|
+
while input = STDIN.gets
|
10
|
+
if input == ".\n"
|
11
|
+
puts output
|
12
|
+
break
|
13
|
+
else
|
14
|
+
output += Translit.convert input
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/translit.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Translit
|
2
|
+
|
3
|
+
def self.english
|
4
|
+
{ "a"=>["А","а"], "b"=>["Б","б"], "v"=>["В","в"], "g"=>["Г","г"], "d"=>["Д","д"], "e"=>["Е","е"], "jo"=>["Ё","ё"], "yo"=>["Ё","ё"], "ö"=>["Ё","ё"], "zh"=>["Ж","ж"],
|
5
|
+
"z"=>["З","з"], "i"=>["И","и"], "j"=>["Й","й"], "k"=>["К","к"], "l"=>["Л","л"], "m"=>["М","м"], "n"=>["Н","н"], "o"=>["О","о"], "p"=>["П","п"], "r"=>["Р","р"],
|
6
|
+
"s"=>["С","с"], "t"=>["Т","т"], "u"=>["У","у"], "f"=>["Ф","ф"], "h"=>["Х","х"], "x"=>["Х","х"], "c"=>["Ц","ц"], "ch"=>["Ч","ч"], "sh"=>["Ш","ш"], "w"=>["Щ","щ"],
|
7
|
+
"shh"=>["Щ","щ"], "sch"=>["Щ","щ"], "#"=>["Ъ","ъ"], "y"=>["Ы","ы"], "'"=>["Ь","ь"], "je"=>["Э","э"], "ä"=>["Э","э"], "ju"=>["Ю","ю"], "yu"=>["Ю","ю"],
|
8
|
+
"ü"=>["Ю","ю"], "ya"=>["Я","я"], "ja"=>["Я","я"], "q"=>["Я","я"]}
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.russian
|
12
|
+
@russian ||= create_russian_map
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.convert(text)
|
16
|
+
lang = detect_input_language(text.split(/\s+/).first)
|
17
|
+
map = self.send(lang.to_s).sort_by {|k,v| v.length <=> k.length}
|
18
|
+
map.each do |translit_key, translit_value|
|
19
|
+
text.gsub!(translit_key.capitalize, translit_value.first)
|
20
|
+
text.gsub!(translit_key, translit_value.last)
|
21
|
+
end
|
22
|
+
text
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def self.create_russian_map
|
27
|
+
self.english.inject({}) do |acc, tuple|
|
28
|
+
rus_up, rus_low = tuple.last
|
29
|
+
eng_value = tuple.first
|
30
|
+
acc[rus_up] ? acc[rus_up] << eng_value.capitalize : acc[rus_up] = [eng_value.capitalize]
|
31
|
+
acc[rus_low] ? acc[rus_low] << eng_value : acc[rus_low] = [eng_value]
|
32
|
+
acc
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.detect_input_language(text)
|
37
|
+
text.scan(/\w+/).empty? ? :russian : :english
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: translit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- tjbladez
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-09-28 00:00:00 -05:00
|
18
|
+
default_executable: bin/translit
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: !binary |
|
22
|
+
VHJhbnNsaXRlcmF0aW9uIGJldHdlZW4gY3lyaWxsaWMgPC0+IGxhdGluIHwg
|
23
|
+
0KLRgNCw0L3RgdC70LjRgtC10YDQsNGG0LjRjyDQvNC10LbQtNGDINC60LjR
|
24
|
+
gNC40LvQuNGG0L7QuSDQuCDQu9Cw0YLQuNC90LjRhtC+0Lkg
|
25
|
+
|
26
|
+
email: tjbladez@gmail.com
|
27
|
+
executables:
|
28
|
+
- translit
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
33
|
+
files:
|
34
|
+
- bin/translit
|
35
|
+
- lib/translit.rb
|
36
|
+
- README.markdown
|
37
|
+
has_rdoc: false
|
38
|
+
homepage: http://github.com/tjbladez/translit
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message: !binary |
|
42
|
+
WW91IGFyZSByZWFkeSB0byB0cmFuc2xpdGVyYXRlIHwg0JLRiyDQs9C+0YLQ
|
43
|
+
vtCy0Ysg0Log0YLRgNCw0L3RgdC70LjRgtC10YDQsNGG0LjQuA==
|
44
|
+
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project:
|
66
|
+
rubygems_version: 1.3.6
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: !binary |
|
70
|
+
VHJhbnNsaXRlcmF0aW9uIGJldHdlZW4gY3lyaWxsaWMgPC0+IGxhdGluIGZy
|
71
|
+
b20gY29tbWFuZC1saW5lIG9yIHlvdXIgcHJvZ3JhbSB8INCi0YDQsNC90YHQ
|
72
|
+
u9C40YLQtdGA0LDRhtC40Y8g0LzQtdC20LTRgyDQutC40YDQuNC70LjRhtC+
|
73
|
+
0Lkg0Lgg0LvQsNGC0LjQvdC40YbQvtC5INGBINC60L7QvNC80LDQvdC00L3Q
|
74
|
+
vtC5INGB0YLRgNC+0LrQuCDQuNC70Lgg0LIg0YLQstC+0LXQuSDQv9GA0L7Q
|
75
|
+
s9GA0LDQvNC80LU=
|
76
|
+
|
77
|
+
test_files: []
|
78
|
+
|