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/Scp.html ADDED
@@ -0,0 +1,530 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class Scp - 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-count">#count</a>
76
+
77
+ <li ><a href="#method-i-discard">#discard</a>
78
+
79
+ <li ><a href="#method-i-extract">#extract</a>
80
+
81
+ <li ><a href="#method-i-insert_b">#insert_b</a>
82
+
83
+ <li ><a href="#method-i-scopify">#scopify</a>
84
+
85
+ </ul>
86
+ </div>
87
+
88
+ </div>
89
+ </nav>
90
+
91
+ <main role="main" aria-labelledby="class-Scp">
92
+ <h1 id="class-Scp" class="class">
93
+ class Scp
94
+ </h1>
95
+
96
+ <section class="description">
97
+
98
+ <p>This class manipulates a string representing an algebric expression
99
+ underlining the higher priority operations putting them between brackets.
100
+ <a href="Scp.html">Scp</a> prepares strings to be parsed. It must work
101
+ associated with <a href="Sizer.html">Sizer</a>. These rules are followed:</p>
102
+ <ul><li>
103
+ <p>… = … =&gt; (…) = (…) (same with `&gt;`)</p>
104
+ </li><li>
105
+ <p>a + b * c =&gt; a + (b * c) (same with `/`)</p>
106
+ </li><li>
107
+ <p>a ^ b =&gt; (a ^ (b))</p>
108
+ </li><li>
109
+ <p>&lt;keyword&gt;: &lt;argument&gt; =&gt; (&lt;keyword&gt;: &lt;argument&gt;)</p>
110
+ </li></ul>
111
+ <dl class="rdoc-list note-list"><dt>Author
112
+ <dd>
113
+ <p>Massimiliano Dal Mas (<a
114
+ href="mailto:max.codeware@gmail.com">max.codeware@gmail.com</a>)</p>
115
+ </dd><dt>License
116
+ <dd>
117
+ <p>Distributed under MIT license</p>
118
+ </dd></dl>
119
+
120
+ </section>
121
+
122
+
123
+
124
+
125
+ <section id="5Buntitled-5D" class="documentation-section">
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
136
+ <header>
137
+ <h3>Public Class Methods</h3>
138
+ </header>
139
+
140
+
141
+ <div id="method-c-new" class="method-detail ">
142
+
143
+ <div class="method-heading">
144
+ <span class="method-name">new</span><span
145
+ class="method-args">()</span>
146
+
147
+ <span class="method-click-advice">click to toggle source</span>
148
+
149
+ </div>
150
+
151
+
152
+ <div class="method-description">
153
+
154
+ <p>Initializes a new counter</p>
155
+
156
+
157
+
158
+
159
+ <div class="method-source-code" id="new-source">
160
+ <pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 20</span>
161
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>
162
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
163
+ <span class="ruby-keyword">end</span></pre>
164
+ </div>
165
+
166
+ </div>
167
+
168
+
169
+
170
+
171
+ </div>
172
+
173
+
174
+ </section>
175
+
176
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
177
+ <header>
178
+ <h3>Public Instance Methods</h3>
179
+ </header>
180
+
181
+
182
+ <div id="method-i-count" class="method-detail ">
183
+
184
+ <div class="method-heading">
185
+ <span class="method-name">count</span><span
186
+ class="method-args">()</span>
187
+
188
+ <span class="method-click-advice">click to toggle source</span>
189
+
190
+ </div>
191
+
192
+
193
+ <div class="method-description">
194
+
195
+ <p>Returns the current value of the counter</p>
196
+
197
+
198
+
199
+
200
+ <div class="method-source-code" id="count-source">
201
+ <pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 154</span>
202
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">count</span>()
203
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@i</span>
204
+ <span class="ruby-keyword">end</span></pre>
205
+ </div>
206
+
207
+ </div>
208
+
209
+
210
+
211
+
212
+ </div>
213
+
214
+
215
+ <div id="method-i-insert_b" class="method-detail ">
216
+
217
+ <div class="method-heading">
218
+ <span class="method-name">insert_b</span><span
219
+ class="method-args">(expr)</span>
220
+
221
+ <span class="method-click-advice">click to toggle source</span>
222
+
223
+ </div>
224
+
225
+
226
+ <div class="method-description">
227
+
228
+ <p>Inserts a couple of brackets `()` before non-binary sum and diff. operators</p>
229
+ <ul><li>
230
+ <p>*<strong>argument</strong>*: string to be checked and manipulated</p>
231
+ </li><li>
232
+ <p>*<strong>returns</strong>*: manipulated string</p>
233
+ </li></ul>
234
+
235
+
236
+
237
+
238
+ <div class="method-source-code" id="insert_b-source">
239
+ <pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 163</span>
240
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">insert_b</span>(<span class="ruby-identifier">expr</span>)
241
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
242
+ <span class="ruby-identifier">string</span> = <span class="ruby-keyword">false</span>
243
+ <span class="ruby-keyword">while</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span>
244
+ <span class="ruby-identifier">string</span> = (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;\&quot;&quot;</span>) <span class="ruby-operator">?</span> (<span class="ruby-identifier">string</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>) <span class="ruby-operator">:</span> (<span class="ruby-identifier">string</span>)
245
+ <span class="ruby-keyword">if</span> (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;-&#39;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;+&#39;</span>) <span class="ruby-keyword">and</span> ((<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;(&#39;</span>) <span class="ruby-keyword">or</span> (<span class="ruby-ivar">@i</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>)) <span class="ruby-keyword">and</span> <span class="ruby-operator">!</span><span class="ruby-identifier">string</span> <span class="ruby-keyword">then</span>
246
+ <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-ivar">@i</span>, <span class="ruby-string">&#39;()&#39;</span>
247
+ <span class="ruby-keyword">end</span>
248
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
249
+ <span class="ruby-keyword">end</span>
250
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">expr</span>
251
+ <span class="ruby-keyword">end</span></pre>
252
+ </div>
253
+
254
+ </div>
255
+
256
+
257
+
258
+
259
+ </div>
260
+
261
+
262
+ <div id="method-i-scopify" class="method-detail ">
263
+
264
+ <div class="method-heading">
265
+ <span class="method-name">scopify</span><span
266
+ class="method-args">(expr)</span>
267
+
268
+ <span class="method-click-advice">click to toggle source</span>
269
+
270
+ </div>
271
+
272
+
273
+ <div class="method-description">
274
+
275
+ <p>Main function that analyzes the string and puts the brackets where it is
276
+ necessary.</p>
277
+ <ul><li>
278
+ <p>*<strong>argument</strong>*: string to be manipulated</p>
279
+ </li><li>
280
+ <p>*<strong>returns</strong>*: manipulated string</p>
281
+ </li></ul>
282
+
283
+
284
+
285
+
286
+ <div class="method-source-code" id="scopify-source">
287
+ <pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 29</span>
288
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">scopify</span>(<span class="ruby-identifier">expr</span>)
289
+ <span class="ruby-identifier">expr</span> = <span class="ruby-identifier">insert_b</span>(<span class="ruby-identifier">expr</span>)
290
+ <span class="ruby-ivar">@i</span> = <span class="ruby-value">0</span>
291
+ <span class="ruby-identifier">n_expr</span> = <span class="ruby-string">&quot;&quot;</span>
292
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-value">0</span>
293
+ <span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
294
+ <span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
295
+ <span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
296
+ <span class="ruby-identifier">eq</span> = <span class="ruby-keyword">false</span>
297
+ <span class="ruby-identifier">stack</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
298
+ <span class="ruby-identifier">last_e</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
299
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
300
+ <span class="ruby-keyword">while</span> <span class="ruby-ivar">@i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span>
301
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
302
+ <span class="ruby-comment"># Each part between brackets is seen as a subexpression</span>
303
+ <span class="ruby-comment"># and it is analyzed recoursively.</span>
304
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&#39;(&#39;</span>
305
+ <span class="ruby-identifier">scp</span> = <span class="ruby-constant">Scp</span>.<span class="ruby-identifier">new</span>
306
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">scp</span>.<span class="ruby-identifier">scopify</span>(<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">expr</span>[(<span class="ruby-ivar">@i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">expr</span>.<span class="ruby-identifier">length</span>]))
307
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">scp</span>.<span class="ruby-identifier">count</span>
308
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[\*\/]/</span>
309
+ <span class="ruby-comment"># If there are open brackets of higher opertions</span>
310
+ <span class="ruby-comment"># it closes them</span>
311
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
312
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span>
313
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">pop</span>
314
+ <span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
315
+ <span class="ruby-comment">#open_b -= 1</span>
316
+ <span class="ruby-keyword">end</span>
317
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
318
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span>
319
+ <span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
320
+ <span class="ruby-identifier">state</span> = (<span class="ruby-identifier">stack</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">pop</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
321
+ <span class="ruby-keyword">end</span>
322
+ <span class="ruby-comment"># If it is not still analyzing a multiplication, it adds the brackets </span>
323
+ <span class="ruby-comment"># following the rules</span>
324
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
325
+ <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-identifier">last_empty</span>, <span class="ruby-string">&#39;(&#39;</span>
326
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">1</span>
327
+ <span class="ruby-identifier">open_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
328
+ <span class="ruby-keyword">end</span>
329
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
330
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span> <span class="ruby-comment"># + 1</span>
331
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/[\+\-]/</span>
332
+ <span class="ruby-comment"># higher priority operation brackets are closed</span>
333
+ <span class="ruby-comment"># last_empty is shifted</span>
334
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
335
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
336
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
337
+ <span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
338
+ <span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
339
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
340
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
341
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\^/</span>
342
+ <span class="ruby-comment"># It begins to put between brackets the operation and its exponent</span>
343
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">then</span>
344
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;)&quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span>
345
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">pop</span>
346
+ <span class="ruby-comment">#open_b -= 1</span>
347
+ <span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
348
+ <span class="ruby-keyword">end</span>
349
+ <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-identifier">last_empty</span>, <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
350
+ <span class="ruby-identifier">last_empty</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
351
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">+</span> (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-operator">?</span> <span class="ruby-string">&#39;&#39;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&#39;(&#39;</span>)
352
+ <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">+=</span> (<span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> (<span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span> <span class="ruby-operator">?</span> <span class="ruby-value">1</span><span class="ruby-operator">:</span><span class="ruby-value">2</span>))
353
+ <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">state</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">state</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
354
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">2</span>
355
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\=/</span>
356
+ <span class="ruby-comment"># The expression at the left of `=` is put between brackets</span>
357
+ <span class="ruby-comment"># and a bracket at the right is opened</span>
358
+ <span class="ruby-comment"># It closes previously opened brackets</span>
359
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
360
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
361
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">&gt;</span><span class="ruby-value">0</span>
362
+ <span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
363
+ <span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
364
+ <span class="ruby-identifier">open_m_b</span> = <span class="ruby-value">0</span>
365
+ <span class="ruby-identifier">n_expr</span> = <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
366
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;(&#39;</span>
367
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
368
+ <span class="ruby-identifier">state</span> = <span class="ruby-value">0</span>
369
+ <span class="ruby-identifier">eq</span> = <span class="ruby-keyword">true</span>
370
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\&gt;/</span>
371
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
372
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
373
+ <span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
374
+ <span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
375
+ <span class="ruby-identifier">n_expr</span> = <span class="ruby-string">&#39;(&#39;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
376
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
377
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\:/</span>
378
+ <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">insert</span> <span class="ruby-identifier">last_empty</span>, <span class="ruby-string">&#39;(&#39;</span>
379
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
380
+ <span class="ruby-identifier">last_k</span> = <span class="ruby-identifier">n_expr</span>[(<span class="ruby-identifier">last_empty</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)<span class="ruby-operator">...</span><span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>]
381
+ <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-string">&quot;mx:integ:as:from:&quot;</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">last_k</span>
382
+ <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> (<span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;mx:&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;integ:&quot;</span>)<span class="ruby-comment"># or last_k == &quot;solve:&quot;)</span>
383
+ <span class="ruby-identifier">last_e</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">last_empty</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;mx:&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">last_k</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;integ:&quot;</span><span class="ruby-comment"># or last_k == &quot;solve:&quot;</span>
384
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
385
+ <span class="ruby-identifier">open_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">unless</span> <span class="ruby-string">&quot;mx:integ:as:from:&quot;</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">last_k</span>
386
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\&quot;/</span>
387
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
388
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
389
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">discard</span>(<span class="ruby-identifier">expr</span>)
390
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">length</span>
391
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/\~/</span>
392
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
393
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">open_b</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ) <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
394
+ <span class="ruby-identifier">open_p_b</span> = <span class="ruby-value">0</span>
395
+ <span class="ruby-identifier">open_b</span> = <span class="ruby-value">1</span>
396
+ <span class="ruby-identifier">state</span> = (<span class="ruby-identifier">stack</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">stack</span>.<span class="ruby-identifier">pop</span> <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
397
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
398
+ <span class="ruby-identifier">last_empty</span> = <span class="ruby-identifier">n_expr</span>.<span class="ruby-identifier">size</span>
399
+ <span class="ruby-keyword">else</span>
400
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
401
+ <span class="ruby-keyword">end</span>
402
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
403
+ <span class="ruby-keyword">end</span>
404
+ <span class="ruby-comment"># it closes all the opened brackets</span>
405
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_m_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
406
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_p_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
407
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">open_b</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">open_b</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
408
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">eq</span>
409
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">n_expr</span>
410
+ <span class="ruby-keyword">end</span></pre>
411
+ </div>
412
+
413
+ </div>
414
+
415
+
416
+
417
+
418
+ </div>
419
+
420
+
421
+ </section>
422
+
423
+ <section id="private-instance-5Buntitled-5D-method-details" class="method-section">
424
+ <header>
425
+ <h3>Private Instance Methods</h3>
426
+ </header>
427
+
428
+
429
+ <div id="method-i-discard" class="method-detail ">
430
+
431
+ <div class="method-heading">
432
+ <span class="method-name">discard</span><span
433
+ class="method-args">(expr)</span>
434
+
435
+ <span class="method-click-advice">click to toggle source</span>
436
+
437
+ </div>
438
+
439
+
440
+ <div class="method-description">
441
+
442
+ <p>Extracts the content between quotes</p>
443
+ <ul><li>
444
+ <p>*<strong>argument</strong>*: string to extract the content from</p>
445
+ </li><li>
446
+ <p>*<strong>returns</strong>*: content (substring)</p>
447
+ </li></ul>
448
+
449
+
450
+
451
+
452
+ <div class="method-source-code" id="discard-source">
453
+ <pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 199</span>
454
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">discard</span>(<span class="ruby-identifier">expr</span>)
455
+ <span class="ruby-identifier">extract</span> = <span class="ruby-string">&quot;&quot;</span>
456
+ <span class="ruby-keyword">while</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>] <span class="ruby-operator">!=</span> <span class="ruby-string">&#39;&quot;&#39;</span> <span class="ruby-keyword">do</span>
457
+ <span class="ruby-identifier">extract</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
458
+ <span class="ruby-ivar">@i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
459
+ <span class="ruby-keyword">end</span>
460
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">extract</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span>[<span class="ruby-ivar">@i</span>]
461
+ <span class="ruby-keyword">end</span></pre>
462
+ </div>
463
+
464
+ </div>
465
+
466
+
467
+
468
+
469
+ </div>
470
+
471
+
472
+ <div id="method-i-extract" class="method-detail ">
473
+
474
+ <div class="method-heading">
475
+ <span class="method-name">extract</span><span
476
+ class="method-args">(expr)</span>
477
+
478
+ <span class="method-click-advice">click to toggle source</span>
479
+
480
+ </div>
481
+
482
+
483
+ <div class="method-description">
484
+
485
+ <p>Extracts the subexpression between brackets</p>
486
+ <ul><li>
487
+ <p>*<strong>argument</strong>*: string to extract the sub expression from</p>
488
+ </li><li>
489
+ <p>*<strong>returns</strong>*: subexpression (string)</p>
490
+ </li></ul>
491
+
492
+
493
+
494
+
495
+ <div class="method-source-code" id="extract-source">
496
+ <pre><span class="ruby-comment"># File lib/linmeric/Scopify.rb, line 182</span>
497
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">extract</span>(<span class="ruby-identifier">expr</span>)
498
+ <span class="ruby-identifier">n_expr</span> = <span class="ruby-string">&quot;&quot;</span>
499
+ <span class="ruby-identifier">i</span> = <span class="ruby-value">0</span>
500
+ <span class="ruby-identifier">open_b</span> = <span class="ruby-value">0</span>
501
+ <span class="ruby-keyword">until</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span>) <span class="ruby-keyword">or</span> ((<span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;)&#39;</span>) <span class="ruby-keyword">and</span> (<span class="ruby-identifier">open_b</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>))
502
+ <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>]
503
+ <span class="ruby-identifier">open_b</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;(&#39;</span>
504
+ <span class="ruby-identifier">open_b</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">expr</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;)&#39;</span> <span class="ruby-keyword">and</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">expr</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
505
+ <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
506
+ <span class="ruby-keyword">end</span>
507
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">n_expr</span> <span class="ruby-operator">+</span> <span class="ruby-string">&#39;)&#39;</span>
508
+ <span class="ruby-keyword">end</span></pre>
509
+ </div>
510
+
511
+ </div>
512
+
513
+
514
+
515
+
516
+ </div>
517
+
518
+
519
+ </section>
520
+
521
+ </section>
522
+ </main>
523
+
524
+
525
+ <footer id="validator-badges" role="contentinfo">
526
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
527
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
528
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
529
+ </footer>
530
+