linmeric 0.1.0 → 0.2.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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +51 -0
  5. data/Rakefile +10 -0
  6. data/bin/help/Help.rb +184 -0
  7. data/bin/help/Help_inst.rb +244 -0
  8. data/bin/linguide +23 -0
  9. data/bin/linmeric +36 -70
  10. data/doc/Archive.html +352 -0
  11. data/doc/Calculator/Evaluator.html +477 -0
  12. data/doc/Calculator/Lexer.html +186 -0
  13. data/doc/Calculator/Token.html +257 -0
  14. data/doc/Calculator.html +181 -0
  15. data/doc/Dim.html +257 -0
  16. data/doc/Filename.html +246 -0
  17. data/doc/Fixnum.html +253 -0
  18. data/doc/Float.html +253 -0
  19. data/doc/Function.html +784 -0
  20. data/doc/InputError.html +102 -0
  21. data/doc/Instructions_en.txt +6 -7
  22. data/doc/Instructions_it.txt +6 -9
  23. data/doc/Integrators.html +436 -0
  24. data/doc/LU.html +435 -0
  25. data/doc/Lexer.html +261 -0
  26. data/doc/Linmeric.html +109 -0
  27. data/doc/Listener.html +605 -0
  28. data/doc/Matrix.html +1719 -0
  29. data/doc/MyArgError.html +102 -0
  30. data/doc/NilClass.html +202 -0
  31. data/doc/Numeric.html +251 -0
  32. data/doc/Parser.html +389 -0
  33. data/doc/PrintError.html +622 -0
  34. data/doc/README_md.html +142 -0
  35. data/doc/Scp.html +530 -0
  36. data/doc/Sizer.html +652 -0
  37. data/doc/String.html +540 -0
  38. data/doc/Token.html +341 -0
  39. data/doc/Tool.html +394 -0
  40. data/doc/created.rid +18 -0
  41. data/doc/css/fonts.css +167 -0
  42. data/doc/css/rdoc.css +590 -0
  43. data/doc/fonts/Lato-Light.ttf +0 -0
  44. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  45. data/doc/fonts/Lato-Regular.ttf +0 -0
  46. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  47. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  48. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  49. data/doc/images/add.png +0 -0
  50. data/doc/images/arrow_up.png +0 -0
  51. data/doc/images/brick.png +0 -0
  52. data/doc/images/brick_link.png +0 -0
  53. data/doc/images/bug.png +0 -0
  54. data/doc/images/bullet_black.png +0 -0
  55. data/doc/images/bullet_toggle_minus.png +0 -0
  56. data/doc/images/bullet_toggle_plus.png +0 -0
  57. data/doc/images/date.png +0 -0
  58. data/doc/images/delete.png +0 -0
  59. data/doc/images/find.png +0 -0
  60. data/doc/images/loadingAnimation.gif +0 -0
  61. data/doc/images/macFFBgHack.png +0 -0
  62. data/doc/images/package.png +0 -0
  63. data/doc/images/page_green.png +0 -0
  64. data/doc/images/page_white_text.png +0 -0
  65. data/doc/images/page_white_width.png +0 -0
  66. data/doc/images/plugin.png +0 -0
  67. data/doc/images/ruby.png +0 -0
  68. data/doc/images/tag_blue.png +0 -0
  69. data/doc/images/tag_green.png +0 -0
  70. data/doc/images/transparent.png +0 -0
  71. data/doc/images/wrench.png +0 -0
  72. data/doc/images/wrench_orange.png +0 -0
  73. data/doc/images/zoom.png +0 -0
  74. data/doc/index.html +190 -0
  75. data/doc/js/darkfish.js +161 -0
  76. data/doc/js/jquery.js +9404 -0
  77. data/doc/js/navigation.js +142 -0
  78. data/doc/js/navigation.js.gz +0 -0
  79. data/doc/js/search.js +109 -0
  80. data/doc/js/search_index.js +1 -0
  81. data/doc/js/search_index.js.gz +0 -0
  82. data/doc/js/searcher.js +228 -0
  83. data/doc/js/searcher.js.gz +0 -0
  84. data/doc/table_of_contents.html +834 -0
  85. data/lib/linmeric/Archive.rb +22 -1
  86. data/lib/linmeric/Calculator.rb +252 -0
  87. data/lib/linmeric/CnGal_Matrix_class.rb +130 -49
  88. data/lib/linmeric/CnGal_new_classes.rb +139 -37
  89. data/lib/linmeric/CnGal_tools.rb +23 -40
  90. data/lib/linmeric/Error_print.rb +35 -1
  91. data/lib/linmeric/Function_class.rb +70 -11
  92. data/lib/linmeric/Integrators.rb +81 -35
  93. data/lib/linmeric/LU.rb +26 -5
  94. data/lib/linmeric/Lexer.rb +19 -1
  95. data/lib/linmeric/Listener.rb +25 -5
  96. data/lib/linmeric/Parser.rb +23 -1
  97. data/lib/linmeric/Scopify.rb +52 -31
  98. data/lib/linmeric/Sizer.rb +43 -10
  99. data/lib/linmeric/Token.rb +23 -4
  100. data/lib/linmeric/version.rb +3 -0
  101. data/lib/linmeric.rb +10 -8
  102. data/lib/linmeric_bin.rb +12 -0
  103. metadata +126 -22
  104. data/doc/Instructions_en.html +0 -231
  105. data/doc/Instructions_it.html +0 -231
  106. data/doc/README_en.html +0 -177
  107. data/doc/README_en.txt +0 -30
  108. data/doc/README_it.html +0 -187
  109. data/doc/README_it.txt +0 -32
data/doc/Listener.html ADDED
@@ -0,0 +1,605 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class Listener - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ </script>
12
+
13
+ <script src="./js/jquery.js"></script>
14
+ <script src="./js/darkfish.js"></script>
15
+
16
+ <link href="./css/fonts.css" rel="stylesheet">
17
+ <link href="./css/rdoc.css" rel="stylesheet">
18
+
19
+
20
+
21
+ <body id="top" role="document" class="class">
22
+ <nav role="navigation">
23
+ <div id="project-navigation">
24
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
25
+ <h2>
26
+ <a href="./index.html" rel="home">Home</a>
27
+ </h2>
28
+
29
+ <div id="table-of-contents-navigation">
30
+ <a href="./table_of_contents.html#pages">Pages</a>
31
+ <a href="./table_of_contents.html#classes">Classes</a>
32
+ <a href="./table_of_contents.html#methods">Methods</a>
33
+ </div>
34
+ </div>
35
+
36
+ <div id="search-section" role="search" class="project-section initially-hidden">
37
+ <form action="#" method="get" accept-charset="utf-8">
38
+ <div id="search-field-wrapper">
39
+ <input id="search-field" role="combobox" aria-label="Search"
40
+ aria-autocomplete="list" aria-controls="search-results"
41
+ type="text" name="search" placeholder="Search" spellcheck="false"
42
+ title="Type to search, Up and Down to navigate, Enter to load">
43
+ </div>
44
+
45
+ <ul id="search-results" aria-label="Search Results"
46
+ aria-busy="false" aria-expanded="false"
47
+ aria-atomic="false" class="initially-hidden"></ul>
48
+ </form>
49
+ </div>
50
+
51
+ </div>
52
+
53
+
54
+
55
+ <div id="class-metadata">
56
+
57
+ <div id="parent-class-section" class="nav-section">
58
+ <h3>Parent</h3>
59
+
60
+
61
+ <p class="link">Object
62
+
63
+ </div>
64
+
65
+
66
+
67
+ <!-- Method Quickref -->
68
+ <div id="method-list-section" class="nav-section">
69
+ <h3>Methods</h3>
70
+
71
+ <ul class="link-list" role="directory">
72
+
73
+ <li ><a href="#method-c-new">::new</a>
74
+
75
+ <li ><a href="#method-i-clear_line">#clear_line</a>
76
+
77
+ <li ><a href="#method-i-collect_single_key">#collect_single_key</a>
78
+
79
+ <li ><a href="#method-i-cursor_to">#cursor_to</a>
80
+
81
+ <li ><a href="#method-i-gets">#gets</a>
82
+
83
+ <li ><a href="#method-i-read_char">#read_char</a>
84
+
85
+ <li ><a href="#method-i-reset">#reset</a>
86
+
87
+ </ul>
88
+ </div>
89
+
90
+ </div>
91
+ </nav>
92
+
93
+ <main role="main" aria-labelledby="class-Listener">
94
+ <h1 id="class-Listener" class="class">
95
+ class Listener
96
+ </h1>
97
+
98
+ <section class="description">
99
+
100
+ <p>This class works on the command line interface to allow the user to move
101
+ the cursor, modify the input string in each point and retrieve commands
102
+ from the history</p>
103
+ <dl class="rdoc-list note-list"><dt>Author
104
+ <dd>
105
+ <p>Massimiliano Dal Mas (<a
106
+ href="mailto:max.codeware@gmail.com">max.codeware@gmail.com</a>)</p>
107
+ </dd><dt>License
108
+ <dd>
109
+ <p>Distributed under MIT license</p>
110
+ </dd></dl>
111
+
112
+ </section>
113
+
114
+
115
+
116
+
117
+ <section id="5Buntitled-5D" class="documentation-section">
118
+
119
+
120
+
121
+
122
+
123
+ <section class="constants-list">
124
+ <header>
125
+ <h3>Constants</h3>
126
+ </header>
127
+ <dl>
128
+
129
+ <dt id="CHARS">CHARS
130
+
131
+ <dd>
132
+
133
+
134
+ <dt id="CSI">CSI
135
+
136
+ <dd>
137
+
138
+
139
+ <dt id="LETTERS">LETTERS
140
+
141
+ <dd>
142
+
143
+
144
+ <dt id="NUMBERS">NUMBERS
145
+
146
+ <dd>
147
+
148
+
149
+ <dt id="SPECIAL_CHARS">SPECIAL_CHARS
150
+
151
+ <dd>
152
+
153
+
154
+ </dl>
155
+ </section>
156
+
157
+
158
+
159
+
160
+
161
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
162
+ <header>
163
+ <h3>Public Class Methods</h3>
164
+ </header>
165
+
166
+
167
+ <div id="method-c-new" class="method-detail ">
168
+
169
+ <div class="method-heading">
170
+ <span class="method-name">new</span><span
171
+ class="method-args">()</span>
172
+
173
+ <span class="method-click-advice">click to toggle source</span>
174
+
175
+ </div>
176
+
177
+
178
+ <div class="method-description">
179
+
180
+ <p>Creates the main variables</p>
181
+
182
+
183
+
184
+
185
+ <div class="method-source-code" id="new-source">
186
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 23</span>
187
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>
188
+ <span class="ruby-ivar">@final_string</span> = <span class="ruby-string">&quot;&quot;</span>
189
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
190
+ <span class="ruby-ivar">@s</span> = <span class="ruby-value">0</span>
191
+ <span class="ruby-ivar">@exit</span> = <span class="ruby-keyword">false</span>
192
+ <span class="ruby-ivar">@list</span> = <span class="ruby-constant">Archive</span>.<span class="ruby-identifier">new</span>
193
+ <span class="ruby-keyword">end</span></pre>
194
+ </div>
195
+
196
+ </div>
197
+
198
+
199
+
200
+
201
+ </div>
202
+
203
+
204
+ </section>
205
+
206
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
207
+ <header>
208
+ <h3>Public Instance Methods</h3>
209
+ </header>
210
+
211
+
212
+ <div id="method-i-clear_line" class="method-detail ">
213
+
214
+ <div class="method-heading">
215
+ <span class="method-name">clear_line</span><span
216
+ class="method-args">()</span>
217
+
218
+ <span class="method-click-advice">click to toggle source</span>
219
+
220
+ </div>
221
+
222
+
223
+ <div class="method-description">
224
+
225
+ <p>Clears the current line (deletes the typed input)</p>
226
+
227
+
228
+
229
+
230
+ <div class="method-source-code" id="clear_line-source">
231
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 167</span>
232
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">clear_line</span>
233
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
234
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-ivar">@i</span><span class="ruby-operator">...</span><span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">do</span>
235
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1C&quot;</span>
236
+ <span class="ruby-keyword">end</span>
237
+ <span class="ruby-keyword">end</span>
238
+ <span class="ruby-ivar">@i</span> = (<span class="ruby-ivar">@final_string</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">or</span> <span class="ruby-ivar">@final_string</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>) <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
239
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@i</span> <span class="ruby-keyword">do</span>
240
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
241
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-string">&quot; &quot;</span>
242
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
243
+ <span class="ruby-keyword">end</span>
244
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
245
+ <span class="ruby-keyword">end</span></pre>
246
+ </div>
247
+
248
+ </div>
249
+
250
+
251
+
252
+
253
+ </div>
254
+
255
+
256
+ <div id="method-i-collect_single_key" class="method-detail ">
257
+
258
+ <div class="method-heading">
259
+ <span class="method-name">collect_single_key</span><span
260
+ class="method-args">()</span>
261
+
262
+ <span class="method-click-advice">click to toggle source</span>
263
+
264
+ </div>
265
+
266
+
267
+ <div class="method-description">
268
+
269
+ <p>according to the collected key decides what to do: moving the cursor,
270
+ surfing the history, or simply store chars in a variable</p>
271
+
272
+
273
+
274
+
275
+ <div class="method-source-code" id="collect_single_key-source">
276
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 57</span>
277
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">collect_single_key</span>()
278
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">read_char</span>
279
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">c</span>
280
+
281
+ <span class="ruby-comment"># &quot;TAB&quot;</span>
282
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\t&quot;</span>
283
+
284
+ <span class="ruby-comment"># &quot;RETURN&quot;</span>
285
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\r&quot;</span>
286
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">c</span>
287
+ <span class="ruby-ivar">@exit</span> = <span class="ruby-keyword">true</span>
288
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\n&quot;</span>
289
+ <span class="ruby-comment"># &quot;LINE FEED&quot;</span>
290
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\e&quot;</span>
291
+ <span class="ruby-comment"># &quot;ESCAPE&quot;</span>
292
+
293
+ <span class="ruby-comment"># &quot;UP ARROW&quot;</span>
294
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\e[A&quot;</span>
295
+ <span class="ruby-identifier">temp</span> = <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">previous</span>
296
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">temp</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
297
+ <span class="ruby-identifier">clear_line</span>
298
+ <span class="ruby-ivar">@final_string</span> = <span class="ruby-identifier">temp</span>
299
+ <span class="ruby-ivar">@i</span> = <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
300
+ <span class="ruby-identifier">print</span> <span class="ruby-ivar">@final_string</span>
301
+ <span class="ruby-keyword">end</span>
302
+
303
+ <span class="ruby-comment"># &quot;DOWN ARROW&quot; </span>
304
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\e[B&quot;</span>
305
+ <span class="ruby-identifier">clear_line</span>
306
+ <span class="ruby-ivar">@final_string</span> = <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">next_</span>
307
+ <span class="ruby-ivar">@i</span> = <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
308
+ <span class="ruby-identifier">print</span> <span class="ruby-ivar">@final_string</span>
309
+
310
+ <span class="ruby-comment"># &quot;RIGHT ARROW&quot;</span>
311
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\e[C&quot;</span>
312
+ <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">top</span>
313
+ <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
314
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1C&quot;</span>
315
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
316
+ <span class="ruby-keyword">end</span>
317
+
318
+ <span class="ruby-comment"># &quot;LEFT ARROW&quot; </span>
319
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\e[D&quot;</span>
320
+ <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">top</span>
321
+ <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
322
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
323
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
324
+ <span class="ruby-keyword">end</span>
325
+
326
+ <span class="ruby-comment"># Delete char </span>
327
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\177&quot;</span>
328
+ <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">top</span>
329
+ <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
330
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
331
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> (<span class="ruby-ivar">@i</span>)<span class="ruby-operator">...</span><span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">do</span>
332
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{@final_string[i]}&quot;</span>
333
+ <span class="ruby-keyword">end</span>
334
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-string">&quot; &quot;</span>
335
+ <span class="ruby-ivar">@final_string</span> = <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">remove</span>(<span class="ruby-ivar">@i</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>)
336
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> (<span class="ruby-ivar">@i</span><span class="ruby-operator">-</span><span class="ruby-value">2</span>)<span class="ruby-operator">...</span><span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">do</span>
337
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
338
+ <span class="ruby-keyword">end</span>
339
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
340
+ <span class="ruby-keyword">end</span>
341
+
342
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\004&quot;</span>
343
+ <span class="ruby-comment"># &quot;DELETE&quot;</span>
344
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\e[3~&quot;</span>
345
+ <span class="ruby-comment"># &quot;ALTERNATE DELETE&quot;</span>
346
+
347
+ <span class="ruby-comment"># &quot;Ctrl + C&quot;</span>
348
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;\u0003&quot;</span>
349
+ <span class="ruby-comment"># puts</span>
350
+ <span class="ruby-comment"># exit 0</span>
351
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^.$/</span>
352
+ <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">top</span>
353
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">CHARS</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">c</span>
354
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">then</span>
355
+ <span class="ruby-identifier">last_i</span> = <span class="ruby-ivar">@i</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
356
+ <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">insert</span> <span class="ruby-ivar">@i</span>, <span class="ruby-identifier">c</span>
357
+ <span class="ruby-identifier">clear_line</span>
358
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{@final_string}&quot;</span>
359
+ <span class="ruby-identifier">cursor_to</span>(<span class="ruby-identifier">last_i</span>)
360
+ <span class="ruby-ivar">@i</span> = <span class="ruby-identifier">last_i</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
361
+ <span class="ruby-keyword">else</span>
362
+ <span class="ruby-identifier">print</span> <span class="ruby-identifier">c</span>
363
+ <span class="ruby-ivar">@final_string</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">c</span>
364
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
365
+ <span class="ruby-keyword">end</span>
366
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;\f&quot;</span> <span class="ruby-keyword">then</span>
367
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
368
+ <span class="ruby-identifier">print</span> <span class="ruby-string">&quot;\e[H\e[2J&quot;</span>
369
+ <span class="ruby-identifier">print</span> <span class="ruby-string">&quot;Linmeric-main&gt; &quot;</span>
370
+ <span class="ruby-keyword">end</span>
371
+ <span class="ruby-keyword">end</span>
372
+ <span class="ruby-keyword">end</span>
373
+
374
+ <span class="ruby-comment"># main function that can be used. It returns the stream the user wrote on the command</span>
375
+ <span class="ruby-comment"># line after they pressed return.</span>
376
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">gets</span>()
377
+ <span class="ruby-identifier">collect_single_key</span> <span class="ruby-keyword">while</span>(<span class="ruby-operator">!</span><span class="ruby-ivar">@exit</span>)
378
+ <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">store</span>(<span class="ruby-ivar">@final_string</span>)
379
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">clone</span>
380
+ <span class="ruby-keyword">ensure</span>
381
+ <span class="ruby-identifier">reset</span>
382
+ <span class="ruby-keyword">end</span>
383
+
384
+ <span class="ruby-identifier">private</span>
385
+
386
+ <span class="ruby-comment"># Clears the current line (deletes the typed input)</span>
387
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">clear_line</span>
388
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
389
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-ivar">@i</span><span class="ruby-operator">...</span><span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword">do</span>
390
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1C&quot;</span>
391
+ <span class="ruby-keyword">end</span>
392
+ <span class="ruby-keyword">end</span>
393
+ <span class="ruby-ivar">@i</span> = (<span class="ruby-ivar">@final_string</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">or</span> <span class="ruby-ivar">@final_string</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>) <span class="ruby-operator">?</span> <span class="ruby-value">0</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
394
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-ivar">@i</span> <span class="ruby-keyword">do</span>
395
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
396
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-string">&quot; &quot;</span>
397
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
398
+ <span class="ruby-keyword">end</span>
399
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
400
+ <span class="ruby-keyword">end</span>
401
+
402
+ <span class="ruby-comment"># Moves the cursor backward of the number of specified position</span>
403
+ <span class="ruby-comment">#</span>
404
+ <span class="ruby-comment"># * **argument**: number of position the cursor must be moved backward</span>
405
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">cursor_to</span>(<span class="ruby-identifier">pos</span>)
406
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
407
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
408
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
409
+ <span class="ruby-keyword">end</span>
410
+ <span class="ruby-keyword">end</span>
411
+
412
+ <span class="ruby-keyword">end</span>
413
+
414
+
415
+
416
+ <span class="ruby-comment">########################################</span>
417
+ <span class="ruby-comment"># TESTS #</span>
418
+ <span class="ruby-comment">########################################</span>
419
+ <span class="ruby-comment">listener = Listener.new
420
+ while true
421
+ print &#39;&gt; &#39;
422
+ listener.gets
423
+ listener.reset
424
+ end
425
+ </span></pre>
426
+ </div>
427
+
428
+ </div>
429
+
430
+
431
+
432
+
433
+ </div>
434
+
435
+
436
+ <div id="method-i-cursor_to" class="method-detail ">
437
+
438
+ <div class="method-heading">
439
+ <span class="method-name">cursor_to</span><span
440
+ class="method-args">(pos)</span>
441
+
442
+ <span class="method-click-advice">click to toggle source</span>
443
+
444
+ </div>
445
+
446
+
447
+ <div class="method-description">
448
+
449
+ <p>Moves the cursor backward of the number of specified position</p>
450
+ <ul><li>
451
+ <p>*<strong>argument</strong>*: number of position the cursor must be moved
452
+ backward</p>
453
+ </li></ul>
454
+
455
+
456
+
457
+
458
+ <div class="method-source-code" id="cursor_to-source">
459
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 185</span>
460
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">cursor_to</span>(<span class="ruby-identifier">pos</span>)
461
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">pos</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
462
+ <span class="ruby-keyword">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">pos</span><span class="ruby-operator">..</span><span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">size</span>
463
+ <span class="ruby-identifier">$stdout</span>.<span class="ruby-identifier">write</span> <span class="ruby-node">&quot;#{CSI}1D&quot;</span>
464
+ <span class="ruby-keyword">end</span>
465
+ <span class="ruby-keyword">end</span></pre>
466
+ </div>
467
+
468
+ </div>
469
+
470
+
471
+
472
+
473
+ </div>
474
+
475
+
476
+ <div id="method-i-gets" class="method-detail ">
477
+
478
+ <div class="method-heading">
479
+ <span class="method-name">gets</span><span
480
+ class="method-args">()</span>
481
+
482
+ <span class="method-click-advice">click to toggle source</span>
483
+
484
+ </div>
485
+
486
+
487
+ <div class="method-description">
488
+
489
+ <p>main function that can be used. It returns the stream the user wrote on the
490
+ command line after they pressed return.</p>
491
+
492
+
493
+
494
+
495
+ <div class="method-source-code" id="gets-source">
496
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 156</span>
497
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">gets</span>()
498
+ <span class="ruby-identifier">collect_single_key</span> <span class="ruby-keyword">while</span>(<span class="ruby-operator">!</span><span class="ruby-ivar">@exit</span>)
499
+ <span class="ruby-ivar">@list</span>.<span class="ruby-identifier">store</span>(<span class="ruby-ivar">@final_string</span>)
500
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@final_string</span>.<span class="ruby-identifier">clone</span>
501
+ <span class="ruby-keyword">ensure</span>
502
+ <span class="ruby-identifier">reset</span>
503
+ <span class="ruby-keyword">end</span></pre>
504
+ </div>
505
+
506
+ </div>
507
+
508
+
509
+
510
+
511
+ </div>
512
+
513
+
514
+ <div id="method-i-read_char" class="method-detail ">
515
+
516
+ <div class="method-heading">
517
+ <span class="method-name">read_char</span><span
518
+ class="method-args">()</span>
519
+
520
+ <span class="method-click-advice">click to toggle source</span>
521
+
522
+ </div>
523
+
524
+
525
+ <div class="method-description">
526
+
527
+ <p>Reads a single char from the command line</p>
528
+
529
+
530
+
531
+
532
+ <div class="method-source-code" id="read_char-source">
533
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 39</span>
534
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read_char</span>
535
+ <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">echo</span> = <span class="ruby-keyword">false</span>
536
+ <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">raw!</span>
537
+
538
+ <span class="ruby-identifier">input</span> = <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">getc</span>.<span class="ruby-identifier">chr</span>
539
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">input</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;\e&quot;</span> <span class="ruby-keyword">then</span>
540
+ <span class="ruby-identifier">input</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">read_nonblock</span>(<span class="ruby-value">3</span>) <span class="ruby-keyword">rescue</span> <span class="ruby-keyword">nil</span>
541
+ <span class="ruby-identifier">input</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">read_nonblock</span>(<span class="ruby-value">2</span>) <span class="ruby-keyword">rescue</span> <span class="ruby-keyword">nil</span>
542
+ <span class="ruby-keyword">end</span>
543
+ <span class="ruby-keyword">ensure</span>
544
+ <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">echo</span> = <span class="ruby-keyword">true</span>
545
+ <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">cooked!</span>
546
+
547
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">input</span>
548
+ <span class="ruby-keyword">end</span></pre>
549
+ </div>
550
+
551
+ </div>
552
+
553
+
554
+
555
+
556
+ </div>
557
+
558
+
559
+ <div id="method-i-reset" class="method-detail ">
560
+
561
+ <div class="method-heading">
562
+ <span class="method-name">reset</span><span
563
+ class="method-args">()</span>
564
+
565
+ <span class="method-click-advice">click to toggle source</span>
566
+
567
+ </div>
568
+
569
+
570
+ <div class="method-description">
571
+
572
+ <p>reinitializates three main variables</p>
573
+
574
+
575
+
576
+
577
+ <div class="method-source-code" id="reset-source">
578
+ <pre><span class="ruby-comment"># File lib/linmeric/Listener.rb, line 32</span>
579
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">reset</span>
580
+ <span class="ruby-ivar">@final_string</span> = <span class="ruby-string">&quot;&quot;</span>
581
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
582
+ <span class="ruby-ivar">@exit</span> = <span class="ruby-keyword">false</span>
583
+ <span class="ruby-keyword">end</span></pre>
584
+ </div>
585
+
586
+ </div>
587
+
588
+
589
+
590
+
591
+ </div>
592
+
593
+
594
+ </section>
595
+
596
+ </section>
597
+ </main>
598
+
599
+
600
+ <footer id="validator-badges" role="contentinfo">
601
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
602
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
603
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
604
+ </footer>
605
+