cw 0.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 +7 -0
- data/.gitignore +3 -0
- data/Gemfile +11 -0
- data/LICENSE +21 -0
- data/README.md +21 -0
- data/Rakefile +1 -0
- data/audio/audio_output.wav +0 -0
- data/audio/audio_output.wav0000.mp3 +0 -0
- data/audio/dash.wav +0 -0
- data/audio/dot.wav +0 -0
- data/audio/e_space.wav +0 -0
- data/audio/space.wav +0 -0
- data/cw.gemspec +18 -0
- data/daily.rb +182 -0
- data/data/text/abbreviations.txt +1 -0
- data/data/text/common_words.txt +90 -0
- data/data/text/cw_conversation.txt +1 -0
- data/data/text/most_common_words.txt +1 -0
- data/data/text/progress.txt +1 -0
- data/data/text/q_codes.txt +1 -0
- data/data/text/tom_sawyer.txt +6477 -0
- data/example.rb +139 -0
- data/lib/cw.rb +111 -0
- data/lib/cw/alphabet.rb +29 -0
- data/lib/cw/audio_player.rb +63 -0
- data/lib/cw/book.rb +239 -0
- data/lib/cw/book_details.rb +47 -0
- data/lib/cw/cl.rb +112 -0
- data/lib/cw/cw_dsl.rb +211 -0
- data/lib/cw/cw_encoding.rb +56 -0
- data/lib/cw/cw_params.rb +29 -0
- data/lib/cw/cw_threads.rb +36 -0
- data/lib/cw/file_details.rb +13 -0
- data/lib/cw/key_input.rb +53 -0
- data/lib/cw/monitor.rb +36 -0
- data/lib/cw/monitor_keys.rb +37 -0
- data/lib/cw/numbers.rb +29 -0
- data/lib/cw/print.rb +137 -0
- data/lib/cw/process.rb +11 -0
- data/lib/cw/progress.rb +27 -0
- data/lib/cw/randomize.rb +73 -0
- data/lib/cw/repeat_word.rb +91 -0
- data/lib/cw/rss.rb +71 -0
- data/lib/cw/sentence.rb +78 -0
- data/lib/cw/speak.rb +11 -0
- data/lib/cw/spoken.rb +11 -0
- data/lib/cw/str.rb +67 -0
- data/lib/cw/stream.rb +161 -0
- data/lib/cw/test_letters.rb +52 -0
- data/lib/cw/test_words.rb +59 -0
- data/lib/cw/tester.rb +221 -0
- data/lib/cw/timing.rb +92 -0
- data/lib/cw/tone_generator.rb +225 -0
- data/lib/cw/voice.rb +16 -0
- data/lib/cw/words.rb +182 -0
- data/read_book.rb +33 -0
- data/test/run_tests_continuously.rb +4 -0
- data/test/test_cw.rb +527 -0
- data/test/test_stream.rb +401 -0
- metadata +102 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class CWThreads
|
4
|
+
|
5
|
+
attr_accessor :threads
|
6
|
+
|
7
|
+
def initialize context, processes
|
8
|
+
@context = context
|
9
|
+
@processes = processes
|
10
|
+
end
|
11
|
+
|
12
|
+
def kill
|
13
|
+
sleep 0.2
|
14
|
+
if @threads.is_a?(Array)
|
15
|
+
@threads.each do |th|
|
16
|
+
th.exit if th.is_a? Thread
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def start_threads
|
22
|
+
@threads = @processes.collect do |th|
|
23
|
+
Thread.new{@context.send th}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def wait_for_threads
|
28
|
+
@threads.each { |th| th.join }
|
29
|
+
end
|
30
|
+
|
31
|
+
def run
|
32
|
+
start_threads
|
33
|
+
wait_for_threads
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/lib/cw/key_input.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class KeyInput
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@quit_ary = Array.new(4)
|
7
|
+
end
|
8
|
+
|
9
|
+
def char
|
10
|
+
@chr
|
11
|
+
end
|
12
|
+
|
13
|
+
def read
|
14
|
+
@chr = nil
|
15
|
+
begin
|
16
|
+
system("stty raw -echo")
|
17
|
+
@chr = STDIN.getc
|
18
|
+
ensure
|
19
|
+
system("stty raw -echo")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def is_letter?
|
24
|
+
@chr >= 'a' && @chr <= 'z'
|
25
|
+
end
|
26
|
+
|
27
|
+
def is_number?
|
28
|
+
@chr >= '0' && @chr <= '9'
|
29
|
+
end
|
30
|
+
|
31
|
+
def is_punctuation?
|
32
|
+
[' ', ',', '.', '!', '?'].detect{|letr| letr == @chr}
|
33
|
+
end
|
34
|
+
|
35
|
+
def is_relevant_char?
|
36
|
+
is_letter? || is_number? || is_punctuation? ? true : false
|
37
|
+
end
|
38
|
+
|
39
|
+
def reset_stdin
|
40
|
+
system("stty -raw echo")
|
41
|
+
end
|
42
|
+
|
43
|
+
def quit_input?
|
44
|
+
@quit_ary.rotate!
|
45
|
+
@quit_ary[3] = @chr
|
46
|
+
quit_str = @quit_ary.join.downcase
|
47
|
+
if quit_str == 'qqqq'
|
48
|
+
reset_stdin
|
49
|
+
return true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/lib/cw/monitor.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# class Monitor
|
4
|
+
|
5
|
+
class monitor
|
6
|
+
|
7
|
+
attr_accessor :quit
|
8
|
+
|
9
|
+
def initialize cw
|
10
|
+
@cw = cw
|
11
|
+
end
|
12
|
+
|
13
|
+
def cw
|
14
|
+
@cw
|
15
|
+
end
|
16
|
+
|
17
|
+
def monitor_keys
|
18
|
+
str = ' '
|
19
|
+
chr = ''
|
20
|
+
loop do
|
21
|
+
begin
|
22
|
+
system("stty raw -echo")
|
23
|
+
chr = STDIN.getc
|
24
|
+
#input_file.print chr
|
25
|
+
str[0] = str[1]
|
26
|
+
str[1] = chr
|
27
|
+
quit = true if str == 'qq'
|
28
|
+
@entered_word << chr
|
29
|
+
check_match
|
30
|
+
ensure
|
31
|
+
system("stty -raw echo")
|
32
|
+
end
|
33
|
+
break if @quit == true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'thread'
|
4
|
+
|
5
|
+
class MonitorKeys
|
6
|
+
def initialize(cw)
|
7
|
+
@cw = cw
|
8
|
+
@key_input = KeyInput.new
|
9
|
+
@queue = Queue.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def key_input
|
13
|
+
@key_input ||= KeyInput.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def empty?
|
17
|
+
@queue.empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
def have_data?
|
21
|
+
! empty?
|
22
|
+
end
|
23
|
+
|
24
|
+
def monitor_keys
|
25
|
+
loop do
|
26
|
+
get_key_input
|
27
|
+
break if check_quit_key_input?
|
28
|
+
if @cw.quit
|
29
|
+
key_input.reset
|
30
|
+
break
|
31
|
+
end
|
32
|
+
check_sentence_navigation key_chr
|
33
|
+
build_word_maybe
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/lib/cw/numbers.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#class Numbers provides the Number Testing functionality
|
4
|
+
|
5
|
+
class Numbers
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def number_list
|
12
|
+
'1234567890'
|
13
|
+
end
|
14
|
+
|
15
|
+
def reverse_numbers_maybe
|
16
|
+
@numbers.reverse! if @options[:reverse]
|
17
|
+
end
|
18
|
+
|
19
|
+
def shuffle_numbers_maybe
|
20
|
+
@numbers = @numbers.split('').shuffle.join if @options[:shuffle]
|
21
|
+
end
|
22
|
+
|
23
|
+
def generate
|
24
|
+
@numbers = number_list
|
25
|
+
shuffle_numbers_maybe
|
26
|
+
reverse_numbers_maybe
|
27
|
+
@numbers.split('').join(' ')
|
28
|
+
end
|
29
|
+
end
|
data/lib/cw/print.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'paint'
|
4
|
+
require 'io/console'
|
5
|
+
|
6
|
+
class Print
|
7
|
+
|
8
|
+
class ProgressPrint
|
9
|
+
def colour
|
10
|
+
:yellow
|
11
|
+
end
|
12
|
+
|
13
|
+
def print x
|
14
|
+
STDOUT.print Paint[x, colour]
|
15
|
+
end
|
16
|
+
def puts x
|
17
|
+
STDOUT.puts Paint[x, colour]
|
18
|
+
end
|
19
|
+
|
20
|
+
def flush
|
21
|
+
STDOUT.flush
|
22
|
+
end
|
23
|
+
|
24
|
+
def tty?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize
|
30
|
+
update_console_size
|
31
|
+
reset
|
32
|
+
end
|
33
|
+
|
34
|
+
def console_size
|
35
|
+
IO.console.winsize
|
36
|
+
rescue LoadError
|
37
|
+
[Integer(`tput li`), Integer(`tput co`)]
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_console_size
|
41
|
+
@rows, @cols = console_size
|
42
|
+
# printf "%d rows by %d columns\n", @rows, @cols
|
43
|
+
end
|
44
|
+
|
45
|
+
def reset
|
46
|
+
@print_count = 0
|
47
|
+
puts "\r"
|
48
|
+
end
|
49
|
+
|
50
|
+
def newline
|
51
|
+
reset
|
52
|
+
update_console_size
|
53
|
+
end
|
54
|
+
|
55
|
+
def force_newline_maybe
|
56
|
+
if @print_count >= (@cols - 1)
|
57
|
+
newline
|
58
|
+
true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def newline_maybe word
|
63
|
+
@print_count += word.size unless force_newline_maybe
|
64
|
+
return if((word.size == 1) && (word != ' '))
|
65
|
+
if @print_count > (@cols - 10)
|
66
|
+
newline
|
67
|
+
true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def results popped, type = :pass_and_fail
|
72
|
+
if popped
|
73
|
+
value = popped[:value]
|
74
|
+
success = popped[:success]
|
75
|
+
|
76
|
+
newline_maybe value
|
77
|
+
|
78
|
+
print Paint["#{value} ", :blue] if success
|
79
|
+
print Paint["#{value} ", :red ] unless (success || type == :pass_only)
|
80
|
+
return true
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def char_result popped
|
85
|
+
if popped
|
86
|
+
value = popped[:value]
|
87
|
+
success = popped[:success]
|
88
|
+
|
89
|
+
unless newline_maybe value
|
90
|
+
#return if @print_count == 0 && value == ' '
|
91
|
+
value = '_' if((value == ' ') && (success != true))
|
92
|
+
print Paint["#{value}", :blue] if success
|
93
|
+
print Paint["#{value}", :red ] unless success
|
94
|
+
return true
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def heading
|
100
|
+
puts ("*" * "Current Sentence is duration: secs".length) + "\r"
|
101
|
+
end
|
102
|
+
|
103
|
+
def print_blue(word)
|
104
|
+
print Paint[word, :blue]
|
105
|
+
cursor_pos = word.size
|
106
|
+
(12 - cursor_pos).times{print ' '}
|
107
|
+
end
|
108
|
+
|
109
|
+
def print_green(word)
|
110
|
+
print_blue(word)
|
111
|
+
print Paint["#{word} \r\n", :green]
|
112
|
+
end
|
113
|
+
|
114
|
+
def print_red word
|
115
|
+
print Paint["#{word }\r\n", :red]
|
116
|
+
end
|
117
|
+
|
118
|
+
def prn_red word
|
119
|
+
print Paint["#{word}", :red]
|
120
|
+
end
|
121
|
+
|
122
|
+
def print_fail(word, attempt)
|
123
|
+
print_blue(word)
|
124
|
+
print Paint["#{attempt }\r\n", :red]
|
125
|
+
end
|
126
|
+
|
127
|
+
def prn(word)
|
128
|
+
newline_maybe word
|
129
|
+
return if(@print_count == 0 && word == ' ')
|
130
|
+
print Paint["#{word}", :blue]
|
131
|
+
end
|
132
|
+
|
133
|
+
def print_advice name
|
134
|
+
puts "#{name.to_s}: Press Q 4 times to Exit"
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
data/lib/cw/process.rb
ADDED
data/lib/cw/progress.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'ruby-progressbar'
|
4
|
+
#require 'paint'
|
5
|
+
|
6
|
+
class Progress
|
7
|
+
|
8
|
+
def initialize(title)
|
9
|
+
@title = title
|
10
|
+
end
|
11
|
+
|
12
|
+
def init size
|
13
|
+
@progress =
|
14
|
+
ProgressBar.
|
15
|
+
create(total: size,
|
16
|
+
title: 'Compiling',
|
17
|
+
progress_mark: '.',
|
18
|
+
length: 40,
|
19
|
+
output: Print::ProgressPrint.new,
|
20
|
+
format: "%t: |%B| %p% ")
|
21
|
+
end
|
22
|
+
|
23
|
+
def increment
|
24
|
+
@progress.increment
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/cw/randomize.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#class Randomize provides character randomising
|
4
|
+
|
5
|
+
class Randomize
|
6
|
+
|
7
|
+
def initialize(options, chars)
|
8
|
+
@options = options
|
9
|
+
@chars = chars
|
10
|
+
end
|
11
|
+
|
12
|
+
def word_count
|
13
|
+
@options[:count] ? @options[:count] : 50
|
14
|
+
end
|
15
|
+
|
16
|
+
def size
|
17
|
+
@options[:size] ? @options[:size] : 4
|
18
|
+
end
|
19
|
+
|
20
|
+
def lengthen_chars
|
21
|
+
@chars += @chars while(@chars.length < size)
|
22
|
+
end
|
23
|
+
|
24
|
+
def shuffle_chars
|
25
|
+
@chars.shuffle!
|
26
|
+
end
|
27
|
+
|
28
|
+
def take_chars size
|
29
|
+
@chars.take size
|
30
|
+
end
|
31
|
+
|
32
|
+
def chars_to_alpha
|
33
|
+
@chrs.collect{|char| char.chr}.join
|
34
|
+
end
|
35
|
+
|
36
|
+
def has_no_letter?
|
37
|
+
@alpha[/[a-zA-Z]+/] == @alpha
|
38
|
+
end
|
39
|
+
|
40
|
+
def has_no_number?
|
41
|
+
@alpha[/[0-9]+/] == @alpha
|
42
|
+
end
|
43
|
+
|
44
|
+
def missing_letters_or_numbers?
|
45
|
+
if @options && @options[:letters_numbers]
|
46
|
+
return true if has_no_letter?
|
47
|
+
return true if has_no_number?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def process_chars
|
52
|
+
lengthen_chars
|
53
|
+
shuffle_chars
|
54
|
+
@chrs = take_chars size
|
55
|
+
@alpha = chars_to_alpha
|
56
|
+
end
|
57
|
+
|
58
|
+
def chars_processed?
|
59
|
+
process_chars
|
60
|
+
! missing_letters_or_numbers?
|
61
|
+
end
|
62
|
+
|
63
|
+
def generate
|
64
|
+
@words, count = [], word_count
|
65
|
+
while count > 0
|
66
|
+
next unless chars_processed?
|
67
|
+
@words.push @alpha
|
68
|
+
count -= 1
|
69
|
+
end
|
70
|
+
@words
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|