telegraph 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/MIT-LICENSE.txt +20 -0
- data/README.rdoc +64 -0
- data/lib/morse_characters.rb +130 -0
- data/lib/telegraph.rb +134 -0
- metadata +82 -0
data/MIT-LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Juanjo Bazán
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
= Telegraph
|
2
|
+
|
3
|
+
Telegraph is a Ruby gem that provides straightforward text-to-morse and morse-to-text translators
|
4
|
+
|
5
|
+
It uses as reference the document 'RECOMMENDATION ITU-R M.1677' from the International Telecommunication Union, Radiocommunication Sector (ITU-R), the United Nations agency for information and communication technology issues.
|
6
|
+
|
7
|
+
== Getting started
|
8
|
+
|
9
|
+
Install the gem:
|
10
|
+
$ [sudo] gem install telegraph
|
11
|
+
|
12
|
+
Then depending on your project you may:
|
13
|
+
|
14
|
+
require the gem (if a ruby project):
|
15
|
+
require 'telegraph'
|
16
|
+
or add it to your Gemfile (if you're on Rails):
|
17
|
+
gem 'telegraph', :git => 'git://github.com/xuanxu/telegraph.git'
|
18
|
+
|
19
|
+
|
20
|
+
== Usage
|
21
|
+
|
22
|
+
The simplest way to read or write morse code is using directly the two methods defined in Telegraph:
|
23
|
+
|
24
|
+
# Converts text to morse characters:
|
25
|
+
Telegraph.text_to_morse("Hello world") #=> ".... . .-.. .-.. --- .-- --- .-. .-.. -.."
|
26
|
+
|
27
|
+
# Reads morse characters into text:
|
28
|
+
Telegraph.morse_to_text(".... . .-.. .-.. --- .-- --- .-. .-.. -..") #=> hello world"
|
29
|
+
|
30
|
+
In the Telegraph module you will find defined also the most commonly used prosigns:
|
31
|
+
|
32
|
+
# Error sign:
|
33
|
+
Telegraph::Error #=> "........"
|
34
|
+
|
35
|
+
#The complete list of prosigns:
|
36
|
+
Telegraph::Error
|
37
|
+
Telegraph::Understood
|
38
|
+
Telegraph::Invitation_to_transmit
|
39
|
+
Telegraph::Wait
|
40
|
+
Telegraph::End_of_work
|
41
|
+
Telegraph::Starting_signal
|
42
|
+
|
43
|
+
All the generated morse code will use the character '.' as short signal (aka dot) and the character '-' as long signal (aka dash).
|
44
|
+
|
45
|
+
If you need to write or read using different characters as short and long signals you can do it instantiating your own Telegraph::MorseTransmission class:
|
46
|
+
|
47
|
+
# User defined dot & dash (:short and :long defaults to '.' and '-')
|
48
|
+
morser = Telegraph::MorseTransmission.new(:short =>'x', :long => '3')
|
49
|
+
|
50
|
+
and then using the methods to read/write:
|
51
|
+
|
52
|
+
# write morse code with custom signals
|
53
|
+
morser.text_to_morse("Hello world") #=> "xxxx x x3xx x3xx 333 x33 333 x3x x3xx 3xx"
|
54
|
+
|
55
|
+
# read morse code with custom signals
|
56
|
+
morser.morse_to_text("xxxx x x3xx x3xx 333 x33 333 x3x x3xx 3xx") #=> hello world"
|
57
|
+
morser.error #=> "xxxxxxxx"
|
58
|
+
|
59
|
+
== Credits
|
60
|
+
|
61
|
+
Author:: Juanjo Bazán
|
62
|
+
Copyright:: Copyright (c) 2010 Juanjo Bazán
|
63
|
+
License:: Released under the MIT license.
|
64
|
+
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MorseCharacters
|
3
|
+
|
4
|
+
# Official characters from the RECOMMENDATION ITU-R M.1677: International Morse code.
|
5
|
+
ITU_Morse = {
|
6
|
+
"a" => ".-",
|
7
|
+
"b" => "-...",
|
8
|
+
"c" => "-.-.",
|
9
|
+
"d" => "-..",
|
10
|
+
"e" => ".",
|
11
|
+
"f" => "..-.",
|
12
|
+
"g" => "--.",
|
13
|
+
"h" => "....",
|
14
|
+
"i" => "..",
|
15
|
+
"j" => ".---",
|
16
|
+
"k" => "-.-",
|
17
|
+
"l" => ".-..",
|
18
|
+
"m" => "--",
|
19
|
+
"n" => "-.",
|
20
|
+
"o" => "---",
|
21
|
+
"p" => ".--.",
|
22
|
+
"q" => "--.-",
|
23
|
+
"r" => ".-.",
|
24
|
+
"s" => "...",
|
25
|
+
"t" => "-",
|
26
|
+
"u" => "..-",
|
27
|
+
"v" => "...-",
|
28
|
+
"w" => ".--",
|
29
|
+
"x" => "-..-",
|
30
|
+
"y" => "-.--",
|
31
|
+
"z" => "--..",
|
32
|
+
"0" => "-----",
|
33
|
+
"1" => ".----",
|
34
|
+
"2" => "..---",
|
35
|
+
"3" => "...--",
|
36
|
+
"4" => "....-",
|
37
|
+
"5" => ".....",
|
38
|
+
"6" => "-....",
|
39
|
+
"7" => "--...",
|
40
|
+
"8" => "---..",
|
41
|
+
"9" => "----.",
|
42
|
+
"." => ".-.-.-",
|
43
|
+
"," => "--..--",
|
44
|
+
":" => "---...",
|
45
|
+
"?" => "..--..",
|
46
|
+
"’" => ".----.",
|
47
|
+
"–" => "-....-",
|
48
|
+
"-" => "-....-",
|
49
|
+
"/" => "-..-.",
|
50
|
+
"(" => "-.--.",
|
51
|
+
")" => "-.--.-",
|
52
|
+
"“" => ".-..-.",
|
53
|
+
"”" => ".-..-.",
|
54
|
+
"\""=> ".-..-.",
|
55
|
+
"=" => "-...-",
|
56
|
+
"+" => ".-.-.",
|
57
|
+
"@" => ".--.-."}
|
58
|
+
|
59
|
+
# Some international characters not included in the ITU-R specification.
|
60
|
+
International_extensions = {
|
61
|
+
"ä" => ".-.-",
|
62
|
+
"æ" => ".-.-",
|
63
|
+
"ą" => ".-.-",
|
64
|
+
"à" => ".--.-",
|
65
|
+
"å" => ".--.-",
|
66
|
+
"ç" => "-.-..",
|
67
|
+
"ĉ" => "-.-..",
|
68
|
+
"ć" => "-.-..",
|
69
|
+
"š" => "----",
|
70
|
+
"ĥ" => "----",
|
71
|
+
"ð" => "..--.",
|
72
|
+
"ś" => "...-...",
|
73
|
+
"è" => ".-..-",
|
74
|
+
"ł" => ".-..-",
|
75
|
+
"é" => "..-..",
|
76
|
+
"đ" => "..-..",
|
77
|
+
"ę" => "..-..",
|
78
|
+
"ĝ" => "--.-.",
|
79
|
+
"ĵ" => ".---.",
|
80
|
+
"ź" => "--..-.",
|
81
|
+
"ñ" => "--.--",
|
82
|
+
"Ñ" => "--.--",
|
83
|
+
"ń" => "--.--",
|
84
|
+
"ö" => "---.",
|
85
|
+
"ø" => "---.",
|
86
|
+
"ó" => "---.",
|
87
|
+
"ŝ" => "...-.",
|
88
|
+
"þ" => ".--..",
|
89
|
+
"ü" => "..--",
|
90
|
+
"ŭ" => "..--",
|
91
|
+
"ż" => "--..-"
|
92
|
+
}
|
93
|
+
|
94
|
+
# The space between morse words is seven spaces.
|
95
|
+
Space_between_words = {" " => " "}
|
96
|
+
|
97
|
+
# Default dot signal: '.'
|
98
|
+
DOT = '.'
|
99
|
+
|
100
|
+
# Default dot signal: '-'
|
101
|
+
DASH = '-'
|
102
|
+
|
103
|
+
# Character mapping to write morse code.
|
104
|
+
LETTERS_TO_MORSE = Space_between_words.merge(International_extensions).merge(ITU_Morse)
|
105
|
+
|
106
|
+
# Character mapping to read morse code.
|
107
|
+
MORSE_TO_LETTERS = (Space_between_words.merge(ITU_Morse)).invert
|
108
|
+
|
109
|
+
MORSE_TO_LETTERS.default = ""
|
110
|
+
LETTERS_TO_MORSE.default = ""
|
111
|
+
|
112
|
+
# Prosign for 'Error'
|
113
|
+
Error = "........"
|
114
|
+
|
115
|
+
# Prosign for 'Understood'
|
116
|
+
Understood = "...-."
|
117
|
+
|
118
|
+
# Prosign for 'Invitation to transmit'
|
119
|
+
Invitation_to_transmit = "-.-"
|
120
|
+
|
121
|
+
# Prosign for 'Wait'
|
122
|
+
Wait = ".-..."
|
123
|
+
|
124
|
+
# Prosign for 'End of work'
|
125
|
+
End_of_work = "...-.-"
|
126
|
+
|
127
|
+
# Prosign for 'Starting signal'
|
128
|
+
Starting_signal = "-.-.-"
|
129
|
+
|
130
|
+
end
|
data/lib/telegraph.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Telegraph module provides a simple text-to-morse, morse-to-text translator.
|
4
|
+
#
|
5
|
+
# It uses as reference the document <t>RECOMMENDATION ITU-R M.1677</t> from the
|
6
|
+
# International Telecommunication Union, Radiocommunication Sector (ITU-R), the United
|
7
|
+
# Nations agency for information and communication technology issues.
|
8
|
+
#
|
9
|
+
module Telegraph
|
10
|
+
include MorseCharacters
|
11
|
+
|
12
|
+
# Transforms a string of plain text into a string of morse code
|
13
|
+
# using the character '.' as the short signal and the character '-' as the long signal.
|
14
|
+
# The encode is made following the official RECOMMENDATION ITU-R M.1677.
|
15
|
+
# The returned string uses a single space as letter separator and a seven spaces gap as word separator.
|
16
|
+
#
|
17
|
+
# Telegraph.text_to_morse("Hello world") #=> ".... . .-.. .-.. --- .-- --- .-. .-.. -.."
|
18
|
+
#
|
19
|
+
def self.text_to_morse(text)
|
20
|
+
text.strip.downcase.split(" ").inject([]){|morse_words, word|
|
21
|
+
morse_words << word.chars.inject(""){|morse_word, character| [morse_word, LETTERS_TO_MORSE[character]].join(" ").strip}
|
22
|
+
}.join(LETTERS_TO_MORSE[" "]).strip
|
23
|
+
end
|
24
|
+
|
25
|
+
# Transforms a string of morse code into a string of text decoding using the RECOMMENDATION ITU-R M.1677.
|
26
|
+
#
|
27
|
+
# It expects the character '.' as the short signal, the character '-' as the long signal,
|
28
|
+
# a space as separation between letters and seven spaces as separation between words.
|
29
|
+
#
|
30
|
+
# The returned string is completly downcased.
|
31
|
+
#
|
32
|
+
# Telegraph.morse_to_text(".... . .-.. .-.. --- .-- --- .-. .-.. -..") #=> hello world"
|
33
|
+
#
|
34
|
+
def self.morse_to_text(morse)
|
35
|
+
morse.split(LETTERS_TO_MORSE[" "]).inject([]){|words, morse_word|
|
36
|
+
words << morse_word.split(" ").inject(""){|word, morse_char| word + MORSE_TO_LETTERS[morse_char]}
|
37
|
+
}.join(" ")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Telegraph::MorseTransmission class provides a simple text-to-morse, morse-to-text translator using
|
41
|
+
# user defined characters for short and long signals (defaults to '.' and '-').
|
42
|
+
#
|
43
|
+
# It uses as reference the document <t>RECOMMENDATION ITU-R M.1677</t> from the
|
44
|
+
# International Telecommunication Union, Radiocommunication Sector (ITU-R), the United
|
45
|
+
# Nations agency for information and communication technology issues.
|
46
|
+
#
|
47
|
+
class MorseTransmission
|
48
|
+
attr_accessor(:short, :long)
|
49
|
+
|
50
|
+
# When instantiating the class two options can be provided to set the signals
|
51
|
+
# to use by the new instance when reading and writing morse code:
|
52
|
+
#
|
53
|
+
# * <tt>:short</tt> - The character to use as dot or short signal. Default: '.'
|
54
|
+
# * <tt>:long</tt> - The character to use as dash or long signal. Default: '-'
|
55
|
+
#
|
56
|
+
def initialize(signals={})
|
57
|
+
@short = signals[:short] || Telegraph::DOT
|
58
|
+
@long = signals[:long] || Telegraph::DASH
|
59
|
+
end
|
60
|
+
|
61
|
+
# Transforms a string of plain text into a string of morse code
|
62
|
+
# using as short and long signals the characters defined by the user when the class was instantiated.
|
63
|
+
#
|
64
|
+
# The returned string uses a single space as letter separator and a seven spaces gap as word separator.
|
65
|
+
#
|
66
|
+
# morser = Telegraph::MorseTransmission.new(:short =>'x', :long => '3')
|
67
|
+
# morser.text_to_morse("Hello world") #=> "xxxx x x3xx x3xx 333 x33 333 x3x x3xx 3xx"
|
68
|
+
#
|
69
|
+
def text_to_morse(text)
|
70
|
+
morse = Telegraph.text_to_morse(text)
|
71
|
+
dot_dash(morse)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Transforms a string of morse code into a string of text decoding using the RECOMMENDATION ITU-R M.1677.
|
75
|
+
#
|
76
|
+
# It expects as short and long signals the characters defined by the user when the class was instantiated,
|
77
|
+
# a space as separation between letters and seven spaces as separation between words.
|
78
|
+
#
|
79
|
+
# The returned string is completly downcased.
|
80
|
+
#
|
81
|
+
# morser = Telegraph::MorseTransmission.new(:short =>'x', :long => '3')
|
82
|
+
# morser.morse_to_text("xxxx x x3xx x3xx 333 x33 333 x3x x3xx 3xx") #=> hello world"
|
83
|
+
#
|
84
|
+
def morse_to_text(morse)
|
85
|
+
morse = undo_dot_dash(morse.strip)
|
86
|
+
Telegraph.morse_to_text(morse)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns the 'Error' sign using the signal characters defined for this instance.
|
90
|
+
def error
|
91
|
+
dot_dash(Telegraph::Error)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Returns the 'Understood' sign using the signal characters defined for this instance.
|
95
|
+
def understood
|
96
|
+
dot_dash(Telegraph::Understood)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Returns the 'Invitation to transmit' sign using the signal characters defined for this instance.
|
100
|
+
def invitation_to_transmit
|
101
|
+
dot_dash(Telegraph::Invitation_to_transmit)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns the 'Wait' sign using the signal characters defined for this instance.
|
105
|
+
def wait
|
106
|
+
dot_dash(Telegraph::Wait)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Returns the 'End of work' sign using the signal characters defined for this instance.
|
110
|
+
def end_of_work
|
111
|
+
dot_dash(Telegraph::End_of_work)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Returns the 'Starting signal' sign using the signal characters defined for this instance.
|
115
|
+
def starting_signal
|
116
|
+
dot_dash(Telegraph::Starting_signal)
|
117
|
+
end
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
def dot_dash(text) #:nodoc:
|
122
|
+
text = text.gsub(Telegraph::DOT, @short) unless @short == Telegraph::DOT
|
123
|
+
text = text.gsub(Telegraph::DASH, @long) unless @long == Telegraph::DASH
|
124
|
+
text
|
125
|
+
end
|
126
|
+
|
127
|
+
def undo_dot_dash(morse) #:nodoc:
|
128
|
+
morse = morse.gsub(@short, Telegraph::DOT) unless @short == Telegraph::DOT
|
129
|
+
morse = morse.gsub(@long, Telegraph::DASH) unless @long == Telegraph::DASH
|
130
|
+
morse
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: telegraph
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
version: "1.0"
|
9
|
+
platform: ruby
|
10
|
+
authors:
|
11
|
+
- "Juanjo Baz\xC3\xA1n"
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
cert_chain: []
|
15
|
+
|
16
|
+
date: 2010-11-09 00:00:00 +01:00
|
17
|
+
default_executable:
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
20
|
+
name: rspec
|
21
|
+
prerelease: false
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 1
|
30
|
+
- 0
|
31
|
+
version: 2.1.0
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
description: Telegraph provides a simple text-to-morse, morse-to-text translator.
|
35
|
+
email: jjbazan@gmail.com
|
36
|
+
executables: []
|
37
|
+
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
|
+
files:
|
43
|
+
- MIT-LICENSE.txt
|
44
|
+
- README.rdoc
|
45
|
+
- lib/morse_characters.rb
|
46
|
+
- lib/telegraph.rb
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://github.com/xuanxu/telegraph
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options:
|
53
|
+
- --main
|
54
|
+
- README.rdoc
|
55
|
+
- --charset=UTF-8
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 1.3.7
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Ruby gem to read and write Morse code
|
81
|
+
test_files: []
|
82
|
+
|