cw 0.2.0 → 0.2.2
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 +4 -4
- data/.codeclimate.yml +3 -0
- data/.travis.yml +3 -2
- data/README.md +6 -8
- data/Rakefile +5 -0
- data/classes.svg +145 -0
- data/classes.svg.dot +360 -0
- data/cw.gemspec +10 -9
- data/lib/cw.rb +6 -2
- data/lib/cw/audio_player.rb +2 -0
- data/lib/cw/book.rb +0 -27
- data/lib/cw/book_details.rb +27 -5
- data/lib/cw/current_word.rb +37 -0
- data/lib/cw/cw_dsl.rb +8 -7
- data/lib/cw/cw_params.rb +21 -0
- data/lib/cw/cw_stream.rb +3 -69
- data/lib/cw/element.rb +73 -0
- data/lib/cw/key_input.rb +1 -1
- data/lib/cw/repeat_word.rb +1 -0
- data/lib/cw/rss.rb +5 -15
- data/lib/cw/str.rb +9 -35
- data/lib/cw/tester.rb +33 -8
- data/lib/cw/text_helpers.rb +25 -0
- data/lib/cw/tone_generator.rb +1 -26
- data/lib/cw/tone_helpers.rb +33 -0
- data/lib/cw/words.rb +2 -54
- data/test/test_cw.rb +18 -11
- data/test/test_stream.rb +157 -151
- metadata +57 -52
- data/test/run_tests_continuously.rb +0 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 09025bf62e23f145015ed647348560e166c13640
         | 
| 4 | 
            +
              data.tar.gz: 20c42fe062a63d93af07612f55de735082abdbc9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 08ed885767204c62256304b8da186936e1ff5d139c3e3e4e4e2779d28a3942f70b37886827970770c52fd4d29a0686d6617864fa06112937f2e706b4a1e2d19c
         | 
| 7 | 
            +
              data.tar.gz: 830654b291168f7e33174b2e34e3004b5a4f308557d871b4838d170bd793cac3ed71e68da54b7e84e36ad2544c26b7870f6cfdd8fcec1d31be975a2ac6aa7a1a
         | 
    
        data/.codeclimate.yml
    CHANGED
    
    
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            [](https://badge.fury.io/rb/cw)
         | 
| 2 2 | 
             
            [](https://travis-ci.org/mjago/CW)
         | 
| 3 3 | 
             
            [](https://codeclimate.com/github/mjago/CW)
         | 
| 4 | 
            +
            [](https://gemnasium.com/github.com/mjago/CW)
         | 
| 4 5 |  | 
| 5 6 | 
             
            ## CW
         | 
| 6 7 |  | 
| @@ -13,7 +14,6 @@ addition to generating random words, letters, and numbers that possibly match so | |
| 13 14 |  | 
| 14 15 | 
             
            CW also allows for real-time progress marking by indicating correct and incorrect characters and words copied in real-time. A follow mode also exists which prints the output just after it has played it (for `in head' practice).
         | 
| 15 16 |  | 
| 16 | 
            -
            Documentation to follow...
         | 
| 17 17 |  | 
| 18 18 | 
             
            # Installation:
         | 
| 19 19 |  | 
| @@ -23,16 +23,14 @@ gem install cw | |
| 23 23 | 
             
            ruby example.rb
         | 
| 24 24 |  | 
| 25 25 | 
             
            ```
         | 
| 26 | 
            -
            # Run tests
         | 
| 27 26 |  | 
| 28 | 
            -
             | 
| 27 | 
            +
             * Note: Currently only tested on OS X, and Ruby v1.9.3 and later.
         | 
| 29 28 |  | 
| 30 | 
            -
             | 
| 31 | 
            -
            ruby test/test_cw.rb
         | 
| 29 | 
            +
            # Documentation:
         | 
| 32 30 |  | 
| 33 | 
            -
             | 
| 31 | 
            +
            [CW Documentation](http://mjago.github.io/CW/)
         | 
| 34 32 |  | 
| 35 | 
            -
              | 
| 33 | 
            +
            # Example test-script
         | 
| 36 34 |  | 
| 37 35 | 
             
            ```ruby
         | 
| 38 36 |  | 
| @@ -154,4 +152,4 @@ test.test_letters | |
| 154 152 |  | 
| 155 153 | 
             
            # License
         | 
| 156 154 |  | 
| 157 | 
            -
            MIT License
         | 
| 155 | 
            +
            [MIT License](https://raw.githubusercontent.com/mjago/CW/master/LICENSE)
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/classes.svg
    ADDED
    
    | @@ -0,0 +1,145 @@ | |
| 1 | 
            +
            digraph yard {
         | 
| 2 | 
            +
              graph [rankdir=BT rank=sink outputMode=nodesfirst packMode="graph" splines=true];
         | 
| 3 | 
            +
              node [shape=record rank=sink rankType=sink];
         | 
| 4 | 
            +
              Root [label="{root root}" rank=sink];
         | 
| 5 | 
            +
              CW [label="{class CW}" rank=sink];
         | 
| 6 | 
            +
              subgraph cluster_CW {
         | 
| 7 | 
            +
                label = "CW"; labelloc=b;
         | 
| 8 | 
            +
              }
         | 
| 9 | 
            +
              CW -> CwDsl;
         | 
| 10 | 
            +
              Cl [label="{class Cl}" rank=sink];
         | 
| 11 | 
            +
              subgraph cluster_Cl {
         | 
| 12 | 
            +
                label = "Cl"; labelloc=b;
         | 
| 13 | 
            +
              }
         | 
| 14 | 
            +
              Rss [label="{class Rss}" rank=sink];
         | 
| 15 | 
            +
              subgraph cluster_Rss {
         | 
| 16 | 
            +
                label = "Rss"; labelloc=b;
         | 
| 17 | 
            +
              }
         | 
| 18 | 
            +
              Str [label="{class Str}" rank=sink];
         | 
| 19 | 
            +
              subgraph cluster_Str {
         | 
| 20 | 
            +
                label = "Str"; labelloc=b;
         | 
| 21 | 
            +
              }
         | 
| 22 | 
            +
              Book [label="{class Book}" rank=sink];
         | 
| 23 | 
            +
              subgraph cluster_Book {
         | 
| 24 | 
            +
                label = "Book"; labelloc=b;
         | 
| 25 | 
            +
              }
         | 
| 26 | 
            +
              Book -> FileDetails;
         | 
| 27 | 
            +
              Print [label="{class Print}" rank=sink];
         | 
| 28 | 
            +
              Print_ProgressPrint [label="{class ProgressPrint}" rank=sink];
         | 
| 29 | 
            +
              subgraph cluster_Print_ProgressPrint {
         | 
| 30 | 
            +
                label = "ProgressPrint"; labelloc=b;
         | 
| 31 | 
            +
              }
         | 
| 32 | 
            +
              subgraph cluster_Print {
         | 
| 33 | 
            +
                label = "Print"; labelloc=b;
         | 
| 34 | 
            +
              }
         | 
| 35 | 
            +
              CurrentWord [label="{class CurrentWord}" rank=sink];
         | 
| 36 | 
            +
              subgraph cluster_CurrentWord {
         | 
| 37 | 
            +
                label = "CurrentWord"; labelloc=b;
         | 
| 38 | 
            +
              }
         | 
| 39 | 
            +
              Words [label="{class Words}" rank=sink];
         | 
| 40 | 
            +
              subgraph cluster_Words {
         | 
| 41 | 
            +
                label = "Words"; labelloc=b;
         | 
| 42 | 
            +
              }
         | 
| 43 | 
            +
              Voice [label="{class Voice}" rank=sink];
         | 
| 44 | 
            +
              subgraph cluster_Voice {
         | 
| 45 | 
            +
                label = "Voice"; labelloc=b;
         | 
| 46 | 
            +
              }
         | 
| 47 | 
            +
              Spoken [label="{class Spoken}" rank=sink];
         | 
| 48 | 
            +
              subgraph cluster_Spoken {
         | 
| 49 | 
            +
                label = "Spoken"; labelloc=b;
         | 
| 50 | 
            +
              }
         | 
| 51 | 
            +
              Stream [label="{class Stream}" rank=sink];
         | 
| 52 | 
            +
              subgraph cluster_Stream {
         | 
| 53 | 
            +
                label = "Stream"; labelloc=b;
         | 
| 54 | 
            +
              }
         | 
| 55 | 
            +
              CwDsl [label="{class CwDsl}" rank=sink];
         | 
| 56 | 
            +
              subgraph cluster_CwDsl {
         | 
| 57 | 
            +
                label = "CwDsl"; labelloc=b;
         | 
| 58 | 
            +
              }
         | 
| 59 | 
            +
              Timing [label="{class Timing}" rank=sink];
         | 
| 60 | 
            +
              subgraph cluster_Timing {
         | 
| 61 | 
            +
                label = "Timing"; labelloc=b;
         | 
| 62 | 
            +
              }
         | 
| 63 | 
            +
              Numbers [label="{class Numbers}" rank=sink];
         | 
| 64 | 
            +
              subgraph cluster_Numbers {
         | 
| 65 | 
            +
                label = "Numbers"; labelloc=b;
         | 
| 66 | 
            +
              }
         | 
| 67 | 
            +
              Progress [label="{class Progress}" rank=sink];
         | 
| 68 | 
            +
              subgraph cluster_Progress {
         | 
| 69 | 
            +
                label = "Progress"; labelloc=b;
         | 
| 70 | 
            +
              }
         | 
| 71 | 
            +
              Sentence [label="{class Sentence}" rank=sink];
         | 
| 72 | 
            +
              subgraph cluster_Sentence {
         | 
| 73 | 
            +
                label = "Sentence"; labelloc=b;
         | 
| 74 | 
            +
              }
         | 
| 75 | 
            +
              Alphabet [label="{class Alphabet}" rank=sink];
         | 
| 76 | 
            +
              subgraph cluster_Alphabet {
         | 
| 77 | 
            +
                label = "Alphabet"; labelloc=b;
         | 
| 78 | 
            +
              }
         | 
| 79 | 
            +
              Randomize [label="{class Randomize}" rank=sink];
         | 
| 80 | 
            +
              subgraph cluster_Randomize {
         | 
| 81 | 
            +
                label = "Randomize"; labelloc=b;
         | 
| 82 | 
            +
              }
         | 
| 83 | 
            +
              KeyInput [label="{class KeyInput}" rank=sink];
         | 
| 84 | 
            +
              subgraph cluster_KeyInput {
         | 
| 85 | 
            +
                label = "KeyInput"; labelloc=b;
         | 
| 86 | 
            +
              }
         | 
| 87 | 
            +
              CWThreads [label="{class CWThreads}" rank=sink];
         | 
| 88 | 
            +
              subgraph cluster_CWThreads {
         | 
| 89 | 
            +
                label = "CWThreads"; labelloc=b;
         | 
| 90 | 
            +
              }
         | 
| 91 | 
            +
              TestWords [label="{class TestWords}" rank=sink];
         | 
| 92 | 
            +
              subgraph cluster_TestWords {
         | 
| 93 | 
            +
                label = "TestWords"; labelloc=b;
         | 
| 94 | 
            +
              }
         | 
| 95 | 
            +
              TestWords -> FileDetails;
         | 
| 96 | 
            +
              RepeatWord [label="{class RepeatWord}" rank=sink];
         | 
| 97 | 
            +
              subgraph cluster_RepeatWord {
         | 
| 98 | 
            +
                label = "RepeatWord"; labelloc=b;
         | 
| 99 | 
            +
              }
         | 
| 100 | 
            +
              RepeatWord -> FileDetails;
         | 
| 101 | 
            +
              CwEncoding [label="{class CwEncoding}" rank=sink];
         | 
| 102 | 
            +
              subgraph cluster_CwEncoding {
         | 
| 103 | 
            +
                label = "CwEncoding"; labelloc=b;
         | 
| 104 | 
            +
              }
         | 
| 105 | 
            +
              MonitorKeys [label="{class MonitorKeys}" rank=sink];
         | 
| 106 | 
            +
              subgraph cluster_MonitorKeys {
         | 
| 107 | 
            +
                label = "MonitorKeys"; labelloc=b;
         | 
| 108 | 
            +
              }
         | 
| 109 | 
            +
              FileDetails [label="{class FileDetails}" rank=sink];
         | 
| 110 | 
            +
              subgraph cluster_FileDetails {
         | 
| 111 | 
            +
                label = "FileDetails"; labelloc=b;
         | 
| 112 | 
            +
              }
         | 
| 113 | 
            +
              AudioPlayer [label="{class AudioPlayer}" rank=sink];
         | 
| 114 | 
            +
              subgraph cluster_AudioPlayer {
         | 
| 115 | 
            +
                label = "AudioPlayer"; labelloc=b;
         | 
| 116 | 
            +
              }
         | 
| 117 | 
            +
              BookDetails [label="{class BookDetails}" rank=sink];
         | 
| 118 | 
            +
              subgraph cluster_BookDetails {
         | 
| 119 | 
            +
                label = "BookDetails"; labelloc=b;
         | 
| 120 | 
            +
              }
         | 
| 121 | 
            +
              TestLetters [label="{class TestLetters}" rank=sink];
         | 
| 122 | 
            +
              subgraph cluster_TestLetters {
         | 
| 123 | 
            +
                label = "TestLetters"; labelloc=b;
         | 
| 124 | 
            +
              }
         | 
| 125 | 
            +
              TestLetters -> FileDetails;
         | 
| 126 | 
            +
              ToneGenerator [label="{class ToneGenerator}" rank=sink];
         | 
| 127 | 
            +
              subgraph cluster_ToneGenerator {
         | 
| 128 | 
            +
                label = "ToneGenerator"; labelloc=b;
         | 
| 129 | 
            +
              }
         | 
| 130 | 
            +
              subgraph cluster_ {
         | 
| 131 | 
            +
                label = ""; labelloc=b;
         | 
| 132 | 
            +
                Tester [label="{module Tester}" rank=sink];
         | 
| 133 | 
            +
                subgraph cluster_Tester {
         | 
| 134 | 
            +
                  label = "Tester"; labelloc=b;
         | 
| 135 | 
            +
                }
         | 
| 136 | 
            +
                Process [label="{module Process}" rank=sink];
         | 
| 137 | 
            +
                subgraph cluster_Process {
         | 
| 138 | 
            +
                  label = "Process"; labelloc=b;
         | 
| 139 | 
            +
                }
         | 
| 140 | 
            +
                Params [label="{module Params}" rank=sink];
         | 
| 141 | 
            +
                subgraph cluster_Params {
         | 
| 142 | 
            +
                  label = "Params"; labelloc=b;
         | 
| 143 | 
            +
                }
         | 
| 144 | 
            +
              }
         | 
| 145 | 
            +
            }
         | 
    
        data/classes.svg.dot
    ADDED
    
    | @@ -0,0 +1,360 @@ | |
| 1 | 
            +
            digraph yard {
         | 
| 2 | 
            +
            	graph [bb="0,0,3661.3,126",
         | 
| 3 | 
            +
            		outputMode=nodesfirst,
         | 
| 4 | 
            +
            		packMode="graph",
         | 
| 5 | 
            +
            		rank=sink,
         | 
| 6 | 
            +
            		rankdir=BT,
         | 
| 7 | 
            +
            		splines=true
         | 
| 8 | 
            +
            	];
         | 
| 9 | 
            +
            	node [label="\N",
         | 
| 10 | 
            +
            		rank=sink,
         | 
| 11 | 
            +
            		rankType=sink,
         | 
| 12 | 
            +
            		shape=record
         | 
| 13 | 
            +
            	];
         | 
| 14 | 
            +
            	subgraph cluster_CW {
         | 
| 15 | 
            +
            		graph [label=CW,
         | 
| 16 | 
            +
            			labelloc=b
         | 
| 17 | 
            +
            		];
         | 
| 18 | 
            +
            	}
         | 
| 19 | 
            +
            	subgraph cluster_Cl {
         | 
| 20 | 
            +
            		graph [label=Cl,
         | 
| 21 | 
            +
            			labelloc=b
         | 
| 22 | 
            +
            		];
         | 
| 23 | 
            +
            	}
         | 
| 24 | 
            +
            	subgraph cluster_Rss {
         | 
| 25 | 
            +
            		graph [label=Rss,
         | 
| 26 | 
            +
            			labelloc=b
         | 
| 27 | 
            +
            		];
         | 
| 28 | 
            +
            	}
         | 
| 29 | 
            +
            	subgraph cluster_Str {
         | 
| 30 | 
            +
            		graph [label=Str,
         | 
| 31 | 
            +
            			labelloc=b
         | 
| 32 | 
            +
            		];
         | 
| 33 | 
            +
            	}
         | 
| 34 | 
            +
            	subgraph cluster_Book {
         | 
| 35 | 
            +
            		graph [label=Book,
         | 
| 36 | 
            +
            			labelloc=b
         | 
| 37 | 
            +
            		];
         | 
| 38 | 
            +
            	}
         | 
| 39 | 
            +
            	subgraph cluster_Print_ProgressPrint {
         | 
| 40 | 
            +
            		graph [label=ProgressPrint,
         | 
| 41 | 
            +
            			labelloc=b
         | 
| 42 | 
            +
            		];
         | 
| 43 | 
            +
            	}
         | 
| 44 | 
            +
            	subgraph cluster_Print {
         | 
| 45 | 
            +
            		graph [label=Print,
         | 
| 46 | 
            +
            			labelloc=b
         | 
| 47 | 
            +
            		];
         | 
| 48 | 
            +
            	}
         | 
| 49 | 
            +
            	subgraph cluster_CurrentWord {
         | 
| 50 | 
            +
            		graph [label=CurrentWord,
         | 
| 51 | 
            +
            			labelloc=b
         | 
| 52 | 
            +
            		];
         | 
| 53 | 
            +
            	}
         | 
| 54 | 
            +
            	subgraph cluster_Words {
         | 
| 55 | 
            +
            		graph [label=Words,
         | 
| 56 | 
            +
            			labelloc=b
         | 
| 57 | 
            +
            		];
         | 
| 58 | 
            +
            	}
         | 
| 59 | 
            +
            	subgraph cluster_Voice {
         | 
| 60 | 
            +
            		graph [label=Voice,
         | 
| 61 | 
            +
            			labelloc=b
         | 
| 62 | 
            +
            		];
         | 
| 63 | 
            +
            	}
         | 
| 64 | 
            +
            	subgraph cluster_Spoken {
         | 
| 65 | 
            +
            		graph [label=Spoken,
         | 
| 66 | 
            +
            			labelloc=b
         | 
| 67 | 
            +
            		];
         | 
| 68 | 
            +
            	}
         | 
| 69 | 
            +
            	subgraph cluster_Stream {
         | 
| 70 | 
            +
            		graph [label=Stream,
         | 
| 71 | 
            +
            			labelloc=b
         | 
| 72 | 
            +
            		];
         | 
| 73 | 
            +
            	}
         | 
| 74 | 
            +
            	subgraph cluster_CwDsl {
         | 
| 75 | 
            +
            		graph [label=CwDsl,
         | 
| 76 | 
            +
            			labelloc=b
         | 
| 77 | 
            +
            		];
         | 
| 78 | 
            +
            	}
         | 
| 79 | 
            +
            	subgraph cluster_Timing {
         | 
| 80 | 
            +
            		graph [label=Timing,
         | 
| 81 | 
            +
            			labelloc=b
         | 
| 82 | 
            +
            		];
         | 
| 83 | 
            +
            	}
         | 
| 84 | 
            +
            	subgraph cluster_Numbers {
         | 
| 85 | 
            +
            		graph [label=Numbers,
         | 
| 86 | 
            +
            			labelloc=b
         | 
| 87 | 
            +
            		];
         | 
| 88 | 
            +
            	}
         | 
| 89 | 
            +
            	subgraph cluster_Progress {
         | 
| 90 | 
            +
            		graph [label=Progress,
         | 
| 91 | 
            +
            			labelloc=b
         | 
| 92 | 
            +
            		];
         | 
| 93 | 
            +
            	}
         | 
| 94 | 
            +
            	subgraph cluster_Sentence {
         | 
| 95 | 
            +
            		graph [label=Sentence,
         | 
| 96 | 
            +
            			labelloc=b
         | 
| 97 | 
            +
            		];
         | 
| 98 | 
            +
            	}
         | 
| 99 | 
            +
            	subgraph cluster_Alphabet {
         | 
| 100 | 
            +
            		graph [label=Alphabet,
         | 
| 101 | 
            +
            			labelloc=b
         | 
| 102 | 
            +
            		];
         | 
| 103 | 
            +
            	}
         | 
| 104 | 
            +
            	subgraph cluster_Randomize {
         | 
| 105 | 
            +
            		graph [label=Randomize,
         | 
| 106 | 
            +
            			labelloc=b
         | 
| 107 | 
            +
            		];
         | 
| 108 | 
            +
            	}
         | 
| 109 | 
            +
            	subgraph cluster_KeyInput {
         | 
| 110 | 
            +
            		graph [label=KeyInput,
         | 
| 111 | 
            +
            			labelloc=b
         | 
| 112 | 
            +
            		];
         | 
| 113 | 
            +
            	}
         | 
| 114 | 
            +
            	subgraph cluster_CWThreads {
         | 
| 115 | 
            +
            		graph [label=CWThreads,
         | 
| 116 | 
            +
            			labelloc=b
         | 
| 117 | 
            +
            		];
         | 
| 118 | 
            +
            	}
         | 
| 119 | 
            +
            	subgraph cluster_TestWords {
         | 
| 120 | 
            +
            		graph [label=TestWords,
         | 
| 121 | 
            +
            			labelloc=b
         | 
| 122 | 
            +
            		];
         | 
| 123 | 
            +
            	}
         | 
| 124 | 
            +
            	subgraph cluster_RepeatWord {
         | 
| 125 | 
            +
            		graph [label=RepeatWord,
         | 
| 126 | 
            +
            			labelloc=b
         | 
| 127 | 
            +
            		];
         | 
| 128 | 
            +
            	}
         | 
| 129 | 
            +
            	subgraph cluster_CwEncoding {
         | 
| 130 | 
            +
            		graph [label=CwEncoding,
         | 
| 131 | 
            +
            			labelloc=b
         | 
| 132 | 
            +
            		];
         | 
| 133 | 
            +
            	}
         | 
| 134 | 
            +
            	subgraph cluster_MonitorKeys {
         | 
| 135 | 
            +
            		graph [label=MonitorKeys,
         | 
| 136 | 
            +
            			labelloc=b
         | 
| 137 | 
            +
            		];
         | 
| 138 | 
            +
            	}
         | 
| 139 | 
            +
            	subgraph cluster_FileDetails {
         | 
| 140 | 
            +
            		graph [label=FileDetails,
         | 
| 141 | 
            +
            			labelloc=b
         | 
| 142 | 
            +
            		];
         | 
| 143 | 
            +
            	}
         | 
| 144 | 
            +
            	subgraph cluster_AudioPlayer {
         | 
| 145 | 
            +
            		graph [label=AudioPlayer,
         | 
| 146 | 
            +
            			labelloc=b
         | 
| 147 | 
            +
            		];
         | 
| 148 | 
            +
            	}
         | 
| 149 | 
            +
            	subgraph cluster_BookDetails {
         | 
| 150 | 
            +
            		graph [label=BookDetails,
         | 
| 151 | 
            +
            			labelloc=b
         | 
| 152 | 
            +
            		];
         | 
| 153 | 
            +
            	}
         | 
| 154 | 
            +
            	subgraph cluster_TestLetters {
         | 
| 155 | 
            +
            		graph [label=TestLetters,
         | 
| 156 | 
            +
            			labelloc=b
         | 
| 157 | 
            +
            		];
         | 
| 158 | 
            +
            	}
         | 
| 159 | 
            +
            	subgraph cluster_ToneGenerator {
         | 
| 160 | 
            +
            		graph [label=ToneGenerator,
         | 
| 161 | 
            +
            			labelloc=b
         | 
| 162 | 
            +
            		];
         | 
| 163 | 
            +
            	}
         | 
| 164 | 
            +
            	subgraph cluster_ {
         | 
| 165 | 
            +
            		graph [bb="3299.3,8,3653.3,61",
         | 
| 166 | 
            +
            			label="",
         | 
| 167 | 
            +
            			labelloc=b
         | 
| 168 | 
            +
            		];
         | 
| 169 | 
            +
            		subgraph cluster_Tester {
         | 
| 170 | 
            +
            			graph [label=Tester,
         | 
| 171 | 
            +
            				labelloc=b
         | 
| 172 | 
            +
            			];
         | 
| 173 | 
            +
            		}
         | 
| 174 | 
            +
            		subgraph cluster_Process {
         | 
| 175 | 
            +
            			graph [label=Process,
         | 
| 176 | 
            +
            				labelloc=b
         | 
| 177 | 
            +
            			];
         | 
| 178 | 
            +
            		}
         | 
| 179 | 
            +
            		subgraph cluster_Params {
         | 
| 180 | 
            +
            			graph [label=Params,
         | 
| 181 | 
            +
            				labelloc=b
         | 
| 182 | 
            +
            			];
         | 
| 183 | 
            +
            		}
         | 
| 184 | 
            +
            		Tester		 [height=0.51389,
         | 
| 185 | 
            +
            			label="{module Tester}",
         | 
| 186 | 
            +
            			pos="3597.3,34.5",
         | 
| 187 | 
            +
            			rects="3549.7,16.5,3644.9,52.5",
         | 
| 188 | 
            +
            			width=1.3229];
         | 
| 189 | 
            +
            		Process		 [height=0.51389,
         | 
| 190 | 
            +
            			label="{module Process}",
         | 
| 191 | 
            +
            			pos="3479.3,34.5",
         | 
| 192 | 
            +
            			rects="3427.2,16.5,3531.4,52.5",
         | 
| 193 | 
            +
            			width=1.4481];
         | 
| 194 | 
            +
            		Params		 [height=0.51389,
         | 
| 195 | 
            +
            			label="{module Params}",
         | 
| 196 | 
            +
            			pos="3358.3,34.5",
         | 
| 197 | 
            +
            			rects="3306.9,16.5,3409.7,52.5",
         | 
| 198 | 
            +
            			width=1.4265];
         | 
| 199 | 
            +
            	}
         | 
| 200 | 
            +
            	Root	 [height=0.51389,
         | 
| 201 | 
            +
            		label="{root root}",
         | 
| 202 | 
            +
            		pos="32.302,34.5",
         | 
| 203 | 
            +
            		rects="0,16.5,64.604,52.5",
         | 
| 204 | 
            +
            		width=0.89727];
         | 
| 205 | 
            +
            	CW	 [height=0.51389,
         | 
| 206 | 
            +
            		label="{class CW}",
         | 
| 207 | 
            +
            		pos="117.3,34.5",
         | 
| 208 | 
            +
            		rects="82.669,16.5,151.93,52.5",
         | 
| 209 | 
            +
            		width=0.96202];
         | 
| 210 | 
            +
            	CwDsl	 [height=0.51389,
         | 
| 211 | 
            +
            		label="{class CwDsl}",
         | 
| 212 | 
            +
            		pos="117.3,107.5",
         | 
| 213 | 
            +
            		rects="74.497,89.5,160.11,125.5",
         | 
| 214 | 
            +
            		width=1.189];
         | 
| 215 | 
            +
            	CW -> CwDsl	 [pos="e,117.3,89.471 117.3,52.687 117.3,60.711 117.3,70.453 117.3,79.431"];
         | 
| 216 | 
            +
            	Cl	 [height=0.51389,
         | 
| 217 | 
            +
            		label="{class Cl}",
         | 
| 218 | 
            +
            		pos="200.3,34.5",
         | 
| 219 | 
            +
            		rects="170.33,16.5,230.27,52.5",
         | 
| 220 | 
            +
            		width=0.83252];
         | 
| 221 | 
            +
            	Rss	 [height=0.51389,
         | 
| 222 | 
            +
            		label="{class Rss}",
         | 
| 223 | 
            +
            		pos="281.3,34.5",
         | 
| 224 | 
            +
            		rects="247.83,16.5,314.78,52.5",
         | 
| 225 | 
            +
            		width=0.92984];
         | 
| 226 | 
            +
            	Str	 [height=0.51389,
         | 
| 227 | 
            +
            		label="{class Str}",
         | 
| 228 | 
            +
            		pos="364.3,34.5",
         | 
| 229 | 
            +
            		rects="332.78,16.5,395.83,52.5",
         | 
| 230 | 
            +
            		width=0.87572];
         | 
| 231 | 
            +
            	Book	 [height=0.51389,
         | 
| 232 | 
            +
            		label="{class Book}",
         | 
| 233 | 
            +
            		pos="452.3,34.5",
         | 
| 234 | 
            +
            		rects="413.78,16.5,490.83,52.5",
         | 
| 235 | 
            +
            		width=1.0702];
         | 
| 236 | 
            +
            	FileDetails	 [height=0.51389,
         | 
| 237 | 
            +
            		label="{class FileDetails}",
         | 
| 238 | 
            +
            		pos="625.3,107.5",
         | 
| 239 | 
            +
            		rects="571.23,89.5,679.38,125.5",
         | 
| 240 | 
            +
            		width=1.5021];
         | 
| 241 | 
            +
            	Book -> FileDetails	 [pos="e,572.49,89.417 482.05,52.51 487.7,55.493 493.63,58.453 499.3,61 519.63,70.125 542.4,78.793 562.93,86.069"];
         | 
| 242 | 
            +
            	Print	 [height=0.51389,
         | 
| 243 | 
            +
            		label="{class Print}",
         | 
| 244 | 
            +
            		pos="929.3,34.5",
         | 
| 245 | 
            +
            		rects="892.33,16.5,966.27,52.5",
         | 
| 246 | 
            +
            		width=1.027];
         | 
| 247 | 
            +
            	Print_ProgressPrint	 [height=0.51389,
         | 
| 248 | 
            +
            		label="{class ProgressPrint}",
         | 
| 249 | 
            +
            		pos="1045.3,34.5",
         | 
| 250 | 
            +
            		rects="984.22,16.5,1106.4,52.5",
         | 
| 251 | 
            +
            		width=1.6967];
         | 
| 252 | 
            +
            	CurrentWord	 [height=0.51389,
         | 
| 253 | 
            +
            		label="{class CurrentWord}",
         | 
| 254 | 
            +
            		pos="1184.3,34.5",
         | 
| 255 | 
            +
            		rects="1124.2,16.5,1244.4,52.5",
         | 
| 256 | 
            +
            		width=1.67];
         | 
| 257 | 
            +
            	Words	 [height=0.51389,
         | 
| 258 | 
            +
            		label="{class Words}",
         | 
| 259 | 
            +
            		pos="1303.3,34.5",
         | 
| 260 | 
            +
            		rects="1262,16.5,1344.6,52.5",
         | 
| 261 | 
            +
            		width=1.1483];
         | 
| 262 | 
            +
            	Voice	 [height=0.51389,
         | 
| 263 | 
            +
            		label="{class Voice}",
         | 
| 264 | 
            +
            		pos="1401.3,34.5",
         | 
| 265 | 
            +
            		rects="1362.3,16.5,1440.3,52.5",
         | 
| 266 | 
            +
            		width=1.0846];
         | 
| 267 | 
            +
            	Spoken	 [height=0.51389,
         | 
| 268 | 
            +
            		label="{class Spoken}",
         | 
| 269 | 
            +
            		pos="1502.3,34.5",
         | 
| 270 | 
            +
            		rects="1457.9,16.5,1546.7,52.5",
         | 
| 271 | 
            +
            		width=1.2321];
         | 
| 272 | 
            +
            	Stream	 [height=0.51389,
         | 
| 273 | 
            +
            		label="{class Stream}",
         | 
| 274 | 
            +
            		pos="1608.3,34.5",
         | 
| 275 | 
            +
            		rects="1565.1,16.5,1651.5,52.5",
         | 
| 276 | 
            +
            		width=1.1996];
         | 
| 277 | 
            +
            	Timing	 [height=0.51389,
         | 
| 278 | 
            +
            		label="{class Timing}",
         | 
| 279 | 
            +
            		pos="1713.3,34.5",
         | 
| 280 | 
            +
            		rects="1669.7,16.5,1756.9,52.5",
         | 
| 281 | 
            +
            		width=1.2112];
         | 
| 282 | 
            +
            	Numbers	 [height=0.51389,
         | 
| 283 | 
            +
            		label="{class Numbers}",
         | 
| 284 | 
            +
            		pos="1824.3,34.5",
         | 
| 285 | 
            +
            		rects="1775.3,16.5,1873.3,52.5",
         | 
| 286 | 
            +
            		width=1.3616];
         | 
| 287 | 
            +
            	Progress	 [height=0.51389,
         | 
| 288 | 
            +
            		label="{class Progress}",
         | 
| 289 | 
            +
            		pos="1938.3,34.5",
         | 
| 290 | 
            +
            		rects="1890.8,16.5,1985.8,52.5",
         | 
| 291 | 
            +
            		width=1.3185];
         | 
| 292 | 
            +
            	Sentence	 [height=0.51389,
         | 
| 293 | 
            +
            		label="{class Sentence}",
         | 
| 294 | 
            +
            		pos="2052.3,34.5",
         | 
| 295 | 
            +
            		rects="2003.7,16.5,2100.9,52.5",
         | 
| 296 | 
            +
            		width=1.3506];
         | 
| 297 | 
            +
            	Alphabet	 [height=0.51389,
         | 
| 298 | 
            +
            		label="{class Alphabet}",
         | 
| 299 | 
            +
            		pos="2167.3,34.5",
         | 
| 300 | 
            +
            		rects="2118.7,16.5,2215.9,52.5",
         | 
| 301 | 
            +
            		width=1.3509];
         | 
| 302 | 
            +
            	Randomize	 [height=0.51389,
         | 
| 303 | 
            +
            		label="{class Randomize}",
         | 
| 304 | 
            +
            		pos="2289.3,34.5",
         | 
| 305 | 
            +
            		rects="2234.1,16.5,2344.5,52.5",
         | 
| 306 | 
            +
            		width=1.5343];
         | 
| 307 | 
            +
            	KeyInput	 [height=0.51389,
         | 
| 308 | 
            +
            		label="{class KeyInput}",
         | 
| 309 | 
            +
            		pos="2412.3,34.5",
         | 
| 310 | 
            +
            		rects="2362.5,16.5,2462.1,52.5",
         | 
| 311 | 
            +
            		width=1.3832];
         | 
| 312 | 
            +
            	CWThreads	 [height=0.51389,
         | 
| 313 | 
            +
            		label="{class CWThreads}",
         | 
| 314 | 
            +
            		pos="2537.3,34.5",
         | 
| 315 | 
            +
            		rects="2480.1,16.5,2594.5,52.5",
         | 
| 316 | 
            +
            		width=1.5883];
         | 
| 317 | 
            +
            	TestWords	 [height=0.51389,
         | 
| 318 | 
            +
            		label="{class TestWords}",
         | 
| 319 | 
            +
            		pos="561.3,34.5",
         | 
| 320 | 
            +
            		rects="508.4,16.5,614.2,52.5",
         | 
| 321 | 
            +
            		width=1.4695];
         | 
| 322 | 
            +
            	TestWords -> FileDetails	 [pos="e,609.95,89.471 576.79,52.687 584.73,61.495 594.54,72.375 603.25,82.042"];
         | 
| 323 | 
            +
            	RepeatWord	 [height=0.51389,
         | 
| 324 | 
            +
            		label="{class RepeatWord}",
         | 
| 325 | 
            +
            		pos="690.3,34.5",
         | 
| 326 | 
            +
            		rects="632.13,16.5,748.47,52.5",
         | 
| 327 | 
            +
            		width=1.6159];
         | 
| 328 | 
            +
            	RepeatWord -> FileDetails	 [pos="e,640.89,89.471 674.57,52.687 666.5,61.495 656.54,72.375 647.69,82.042"];
         | 
| 329 | 
            +
            	CwEncoding	 [height=0.51389,
         | 
| 330 | 
            +
            		label="{class CwEncoding}",
         | 
| 331 | 
            +
            		pos="2672.3,34.5",
         | 
| 332 | 
            +
            		rects="2612.4,16.5,2732.2,52.5",
         | 
| 333 | 
            +
            		width=1.6641];
         | 
| 334 | 
            +
            	MonitorKeys	 [height=0.51389,
         | 
| 335 | 
            +
            		label="{class MonitorKeys}",
         | 
| 336 | 
            +
            		pos="2811.3,34.5",
         | 
| 337 | 
            +
            		rects="2750.6,16.5,2872,52.5",
         | 
| 338 | 
            +
            		width=1.6858];
         | 
| 339 | 
            +
            	AudioPlayer	 [height=0.51389,
         | 
| 340 | 
            +
            		label="{class AudioPlayer}",
         | 
| 341 | 
            +
            		pos="2948.3,34.5",
         | 
| 342 | 
            +
            		rects="2889.9,16.5,3006.7,52.5",
         | 
| 343 | 
            +
            		width=1.621];
         | 
| 344 | 
            +
            	BookDetails	 [height=0.51389,
         | 
| 345 | 
            +
            		label="{class BookDetails}",
         | 
| 346 | 
            +
            		pos="3083.3,34.5",
         | 
| 347 | 
            +
            		rects="3024.9,16.5,3141.7,52.5",
         | 
| 348 | 
            +
            		width=1.6209];
         | 
| 349 | 
            +
            	TestLetters	 [height=0.51389,
         | 
| 350 | 
            +
            		label="{class TestLetters}",
         | 
| 351 | 
            +
            		pos="820.3,34.5",
         | 
| 352 | 
            +
            		rects="766.07,16.5,874.53,52.5",
         | 
| 353 | 
            +
            		width=1.5064];
         | 
| 354 | 
            +
            	TestLetters -> FileDetails	 [pos="e,676.93,89.407 779.08,52.547 771.85,55.434 764.37,58.352 757.3,61 734.36,69.589 708.97,78.486 686.63,86.111"];
         | 
| 355 | 
            +
            	ToneGenerator	 [height=0.51389,
         | 
| 356 | 
            +
            		label="{class ToneGenerator}",
         | 
| 357 | 
            +
            		pos="3224.3,34.5",
         | 
| 358 | 
            +
            		rects="3159.2,16.5,3289.4,52.5",
         | 
| 359 | 
            +
            		width=1.8086];
         | 
| 360 | 
            +
            }
         |