translit 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.markdown +26 -0
  2. data/bin/translit +17 -0
  3. data/lib/translit.rb +39 -0
  4. 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
+