YkLib 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +44 -0
- data/Rakefile +6 -0
- data/YkLib.gemspec +29 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/YkLib/Yk/__advance__.rb +151 -0
- data/lib/YkLib/Yk/__defun__.rb +44 -0
- data/lib/YkLib/Yk/__hook__.rb +244 -0
- data/lib/YkLib/Yk/__minmax__.rb +123 -0
- data/lib/YkLib/Yk/__stdlog.rb +329 -0
- data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
- data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
- data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
- data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
- data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
- data/lib/YkLib/Yk/auto_escseq.rb +5 -0
- data/lib/YkLib/Yk/auto_pstore.rb +179 -0
- data/lib/YkLib/Yk/bsearch.rb +120 -0
- data/lib/YkLib/Yk/clambda.rb +309 -0
- data/lib/YkLib/Yk/confLine.rb +423 -0
- data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
- data/lib/YkLib/Yk/crypt.rb +26 -0
- data/lib/YkLib/Yk/debug2 +1 -0
- data/lib/YkLib/Yk/debug2.rb +473 -0
- data/lib/YkLib/Yk/debugout.rb +139 -0
- data/lib/YkLib/Yk/email_tz.rb +533 -0
- data/lib/YkLib/Yk/enum_expect.rb +170 -0
- data/lib/YkLib/Yk/errlog.rb +5 -0
- data/lib/YkLib/Yk/escseq.rb +59 -0
- data/lib/YkLib/Yk/eval_alt.rb +281 -0
- data/lib/YkLib/Yk/expector.rb +93 -0
- data/lib/YkLib/Yk/fetch.rb +556 -0
- data/lib/YkLib/Yk/fetch_old.rb +290 -0
- data/lib/YkLib/Yk/fib.rb +158 -0
- data/lib/YkLib/Yk/file_aux.rb +843 -0
- data/lib/YkLib/Yk/file_aux2.rb +919 -0
- data/lib/YkLib/Yk/file_aux_old.rb +160 -0
- data/lib/YkLib/Yk/filemod.rb +19 -0
- data/lib/YkLib/Yk/force_escseq.rb +3 -0
- data/lib/YkLib/Yk/generator__.rb +144 -0
- data/lib/YkLib/Yk/generator__.rb.org +139 -0
- data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
- data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
- data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
- data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
- data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
- data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
- data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
- data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
- data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
- data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
- data/lib/YkLib/Yk/indenter/token.rb +1525 -0
- data/lib/YkLib/Yk/indenter.rb +1382 -0
- data/lib/YkLib/Yk/inot.rb +265 -0
- data/lib/YkLib/Yk/intf.rb +815 -0
- data/lib/YkLib/Yk/io_aux.rb +1332 -0
- data/lib/YkLib/Yk/ioctl.rb +60 -0
- data/lib/YkLib/Yk/ipcc.rb +87 -0
- data/lib/YkLib/Yk/ipcountry.rb +207 -0
- data/lib/YkLib/Yk/ipv4adr.rb +318 -0
- data/lib/YkLib/Yk/localmail.rb +276 -0
- data/lib/YkLib/Yk/method_chain.rb +359 -0
- data/lib/YkLib/Yk/misc_tz.rb +1716 -0
- data/lib/YkLib/Yk/missing_method.rb +50 -0
- data/lib/YkLib/Yk/mojiConv.rb +257 -0
- data/lib/YkLib/Yk/nostdlog.rb +4 -0
- data/lib/YkLib/Yk/on_marshal.rb +20 -0
- data/lib/YkLib/Yk/overrider.rb +47 -0
- data/lib/YkLib/Yk/path.rb +293 -0
- data/lib/YkLib/Yk/path_aux.rb +883 -0
- data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
- data/lib/YkLib/Yk/path_rep.rb +1267 -0
- data/lib/YkLib/Yk/pg_setup.rb +917 -0
- data/lib/YkLib/Yk/procinfo.rb +314 -0
- data/lib/YkLib/Yk/proclist.rb +492 -0
- data/lib/YkLib/Yk/property.rb +863 -0
- data/lib/YkLib/Yk/ranger.rb +606 -0
- data/lib/YkLib/Yk/resolv_tz.rb +88 -0
- data/lib/YkLib/Yk/rlprompt.rb +73 -0
- data/lib/YkLib/Yk/rootexec.rb +48 -0
- data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
- data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
- data/lib/YkLib/Yk/rwhen.rb +21 -0
- data/lib/YkLib/Yk/selector.rb +124 -0
- data/lib/YkLib/Yk/set.rb +170 -0
- data/lib/YkLib/Yk/shellquote.rb +300 -0
- data/lib/YkLib/Yk/sio.rb +1001 -0
- data/lib/YkLib/Yk/sio0.rb +835 -0
- data/lib/YkLib/Yk/sio_aux.rb +1524 -0
- data/lib/YkLib/Yk/sio_inot.rb +86 -0
- data/lib/YkLib/Yk/sock_aux.rb +42 -0
- data/lib/YkLib/Yk/spipe.rb +843 -0
- data/lib/YkLib/Yk/sql_table.rb +565 -0
- data/lib/YkLib/Yk/stdlog.rb +4 -0
- data/lib/YkLib/Yk/syscommand.rb +173 -0
- data/lib/YkLib/Yk/sysinit.rb +75 -0
- data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
- data/lib/YkLib/Yk/tty_char.dump +0 -0
- data/lib/YkLib/Yk/tty_char.rb +47 -0
- data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
- data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
- data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
- data/lib/YkLib/Yk/tty_str.rb +461 -0
- data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
- data/lib/YkLib/Yk/tty_width.rb +180 -0
- data/lib/YkLib/Yk/tty_width_available +569 -0
- data/lib/YkLib/Yk/tty_width_list +0 -0
- data/lib/YkLib/Yk/tty_width_list.linux +280 -0
- data/lib/YkLib/Yk/tty_width_list.windows +324 -0
- data/lib/YkLib/Yk/tz_tty +0 -0
- data/lib/YkLib/Yk/tz_tty.rb +0 -0
- data/lib/YkLib/Yk/uprepos.rb +94 -0
- data/lib/YkLib/Yk/userinfo.rb +91 -0
- data/lib/YkLib/Yk/with.rb +109 -0
- data/lib/YkLib/version.rb +3 -0
- data/lib/YkLib.rb +6 -0
- metadata +170 -0
@@ -0,0 +1,313 @@
|
|
1
|
+
|
2
|
+
class Token
|
3
|
+
|
4
|
+
MethodChain.override do
|
5
|
+
def checkRequireArgStarterWithoutArg
|
6
|
+
begin
|
7
|
+
super
|
8
|
+
rescue WhenWithoutArg => e
|
9
|
+
if !parent.trySetUnderCase
|
10
|
+
raise e
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
def checkRequireArgStarterWithArg
|
15
|
+
begin
|
16
|
+
super
|
17
|
+
rescue ForWithoutIn => e
|
18
|
+
if trySetUnderCase
|
19
|
+
kind = :for_when
|
20
|
+
else
|
21
|
+
raise e
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Modules :OnNl, :OnSemicolon do
|
28
|
+
MethodChain.override do
|
29
|
+
def onClassify
|
30
|
+
begin
|
31
|
+
super
|
32
|
+
rescue ForWithoutIn => e
|
33
|
+
if !parent.trySetUnderCase
|
34
|
+
raise e
|
35
|
+
end
|
36
|
+
parent.kind = :for_when
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Modules :OnLbrace do
|
43
|
+
MethodChain.override do
|
44
|
+
def onClassify
|
45
|
+
condKinds = [:when, :for, :free_when, :for_when]
|
46
|
+
if condKinds.include?(parent.kind) && (condKinds + [:on_comma]).include(prev.kind)
|
47
|
+
kind = :case_cond_lbrace
|
48
|
+
else
|
49
|
+
super
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
Modules :In, :When do
|
56
|
+
MethodChain.override do
|
57
|
+
def onClassify
|
58
|
+
begin
|
59
|
+
super
|
60
|
+
@case = @wrapper.orgEntity
|
61
|
+
@direct = true
|
62
|
+
@case.addChild self
|
63
|
+
@upperCaseClause = @case
|
64
|
+
rescue OrphanContClause => e
|
65
|
+
if prev_nl? && trySetUnderCase
|
66
|
+
kind = "free_#{@kind}".intern
|
67
|
+
spush
|
68
|
+
else
|
69
|
+
raise e
|
70
|
+
end
|
71
|
+
rescue ForWhen => e # "for when", "for in"
|
72
|
+
parent.kind = "for_#{@kind}".intern
|
73
|
+
if !parent.trySetUnderCase
|
74
|
+
raise e
|
75
|
+
end
|
76
|
+
kind = :on_sp
|
77
|
+
str = " " * str.size()
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
class CaseCondList
|
85
|
+
def initialize vn, cn
|
86
|
+
@vn = vn
|
87
|
+
@cn = cn
|
88
|
+
@list = []
|
89
|
+
end
|
90
|
+
def add c
|
91
|
+
@list.push c
|
92
|
+
end
|
93
|
+
def head
|
94
|
+
<<~Out
|
95
|
+
#{@vn}.pushCondProxy
|
96
|
+
begin
|
97
|
+
begin
|
98
|
+
#{getSubHead}
|
99
|
+
rescue #{@vn}.FinishCond
|
100
|
+
end
|
101
|
+
if #{@vn}.hasTrue?
|
102
|
+
Out
|
103
|
+
end
|
104
|
+
def getSubHead
|
105
|
+
emb = ""
|
106
|
+
@list.each do |e|
|
107
|
+
if e.is_a? CaseCondList
|
108
|
+
emb += e.getSubHead
|
109
|
+
else
|
110
|
+
case e
|
111
|
+
when /\A(when|in)\b/
|
112
|
+
emb += <<~Out
|
113
|
+
if case #{@vn}.case #{e}; true; else false end
|
114
|
+
#{@vn}.pushCond true
|
115
|
+
#{@vn}.finishCond
|
116
|
+
else
|
117
|
+
#{@vn}.pushCond false
|
118
|
+
end
|
119
|
+
Out
|
120
|
+
when /\Afor\b/
|
121
|
+
emb += <<~Out
|
122
|
+
if case #{@vn}.case when #{$'}; true; else false end
|
123
|
+
#{@vn}.pushCond true
|
124
|
+
else
|
125
|
+
#{@vn}.pushCond false
|
126
|
+
end
|
127
|
+
Out
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
emb
|
132
|
+
end
|
133
|
+
def tail
|
134
|
+
emb += <<~Out
|
135
|
+
#{
|
136
|
+
if ["when", "in"].include? @cn
|
137
|
+
#{@vn}.finish
|
138
|
+
end
|
139
|
+
}
|
140
|
+
end # if #{@vn}.hasTrue?
|
141
|
+
ensure
|
142
|
+
#{@vn}.popCondProxy
|
143
|
+
end
|
144
|
+
Out
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def gatherDescendantsCond vn, s, condList
|
149
|
+
s.children.each do |e|
|
150
|
+
if s != e.parent
|
151
|
+
raise Error.new("free case clause '#{e.str}' is not a direct member of argless upper clause, '#{s.str}'")
|
152
|
+
end
|
153
|
+
if e.argStart # with argument
|
154
|
+
###################...................... eの完全な出力結果で置換する
|
155
|
+
condList.add @expr[e.first ... e.argEnd.first]
|
156
|
+
Token.add e.range,"if #{vn}.shiftCond;"
|
157
|
+
pre = "#{vn}.set_res("
|
158
|
+
post = ")" + (e.kind != :for_when ? ".finish" : "")
|
159
|
+
if e.sentences
|
160
|
+
Token.addMod e.sentences[0].first.first, pre
|
161
|
+
Token.addMod e.sentences.last.last.first, post
|
162
|
+
else
|
163
|
+
Token.addMod e.argEnd.first, pre + "nil" + post
|
164
|
+
end
|
165
|
+
if e.children # still has children
|
166
|
+
e.children.each do |ch|
|
167
|
+
eachCaseChild(vn, ch, false)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
elsif e.children # argless when, gather conditions from children
|
171
|
+
gatherDescendantsCond(vn, s, cnd = CaseCondList.new(vn, e.str))
|
172
|
+
condList.add cnd
|
173
|
+
else
|
174
|
+
raise Error.new("argument less '#{e.str}' under argument less '#{s.str}'")
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def eachCaseChild vn, s, direct # 'when', 'in', 'for' with argument
|
180
|
+
if !s.arglessWhen? # argument less when
|
181
|
+
if s.children # proxy condition for children
|
182
|
+
gatherDescendantsCond(vn, s, cnd = CaseCondList.new(vn, s.str))
|
183
|
+
h = cnd.head
|
184
|
+
t = cnd.tail
|
185
|
+
else # unconditional when, in, for : mimic 'else' of traditional 'case'
|
186
|
+
h = "begin;"
|
187
|
+
t = "end"
|
188
|
+
end
|
189
|
+
Token.addMod s.range, h
|
190
|
+
Token.addMod s.sentences.last.last, (s.kind != :for_when ? ";#{vn}.finish" : "") + t
|
191
|
+
else
|
192
|
+
if !direct
|
193
|
+
Token.add s.first,"if (case #{vn}.case; "
|
194
|
+
if (tmp = case s.kind
|
195
|
+
when :for_when
|
196
|
+
"when"
|
197
|
+
when :for_in
|
198
|
+
"in"
|
199
|
+
end) then
|
200
|
+
Token.add s.range, tmp
|
201
|
+
end
|
202
|
+
Token.add s.last, "; true; else false; end)"
|
203
|
+
pre = "#{vn}.set_res("
|
204
|
+
post = ")" + (!tmp ? ".finish" : "")
|
205
|
+
if s.sentences
|
206
|
+
Token.addMod s.sentences[0].first.first, pre
|
207
|
+
Token.addMod s.sentences.last.last.first, post
|
208
|
+
else
|
209
|
+
Token.addMod s.argEnd.first, pre + "nil" + post
|
210
|
+
end
|
211
|
+
end
|
212
|
+
s.children&.each do |s|
|
213
|
+
eachCaseChild(vn, s, false)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def addChild t
|
219
|
+
(@children ||= []).push t
|
220
|
+
end
|
221
|
+
|
222
|
+
attr_reader :case
|
223
|
+
def direct?
|
224
|
+
@direct
|
225
|
+
end
|
226
|
+
def requireIfConversion?
|
227
|
+
@requireIfConversion
|
228
|
+
end
|
229
|
+
attr_writer :requireIfConversion
|
230
|
+
def trySetUnderCase
|
231
|
+
f = eachParent do |par|
|
232
|
+
if [:case, :non_free_case].include? par.kind
|
233
|
+
@case = par
|
234
|
+
break :found
|
235
|
+
end
|
236
|
+
end
|
237
|
+
return false if f != :found
|
238
|
+
eachParent do |par|
|
239
|
+
if [:when, :in, :for_in, :for_when, :free_when, :free_in, :case, :non_free_case].include?(par.kind)
|
240
|
+
|| par.kind == :else && par.wrapped.orgEntity == @freeCase
|
241
|
+
if par.whenWithoutArg?
|
242
|
+
if whenWithoutArg?
|
243
|
+
raise Error.new("argless '#{str}' under argless '#{par.str}'")
|
244
|
+
elsif par != parent
|
245
|
+
raise Error.new("argless '#{par.str}' do not allow '#{str}' clause enclosed by '#{parent.str}...#{parent.ender.str}'")
|
246
|
+
end
|
247
|
+
end
|
248
|
+
par.addChild self
|
249
|
+
@upperCaseClause = par
|
250
|
+
return true
|
251
|
+
end
|
252
|
+
end
|
253
|
+
return false
|
254
|
+
end
|
255
|
+
|
256
|
+
attr_accessor_predicate :caseCondLBraceReplaced
|
257
|
+
|
258
|
+
def whenWithoutArg?
|
259
|
+
!@argStart || (dnext&.kind == :> && dnext.dnext&.var_able? && [:on_nl, :on_semicolon].include?(dnext&.dnext&.next&.kind))
|
260
|
+
end
|
261
|
+
def whenWithVar?
|
262
|
+
dnext&.kind == :> && dnext.dnext&.var_able?
|
263
|
+
end
|
264
|
+
|
265
|
+
Module :Case, :NonFreeCase do
|
266
|
+
def closeBeginner pi
|
267
|
+
vn = spVarName
|
268
|
+
@direct = true
|
269
|
+
children.each do |s|
|
270
|
+
if !s.direct? || s.whenWithoutArg? || s.whenWithVar?
|
271
|
+
@direct = false
|
272
|
+
break
|
273
|
+
end
|
274
|
+
end
|
275
|
+
if @direct
|
276
|
+
head = "case(#{vn})"
|
277
|
+
end
|
278
|
+
Token.addMod range, "#begin (begin #{vn} = FreeCase.new("
|
279
|
+
Token.addMod argEnd.first, "); begin #{head}"
|
280
|
+
children.each do |s|
|
281
|
+
eachCaseChild(vn, s, @direct)
|
282
|
+
end
|
283
|
+
tmp = dnext
|
284
|
+
while tmp != e
|
285
|
+
if tmp.kind == :on_ivar && tmp.str == "@"
|
286
|
+
if f = tmp.findParent{[:case, :non_free_case].include(_1.kind)}
|
287
|
+
if f == self
|
288
|
+
if tmp.parent.kind == :case_cond_lbrace
|
289
|
+
if !tmp.parent.caseCondLBraceReplaced?
|
290
|
+
Token.addMod tmp.parent.ipos, "->"
|
291
|
+
tmp.parent.caseCondLBraceReplaced = tue
|
292
|
+
end
|
293
|
+
Token.addMod tmp.range, "_1"
|
294
|
+
end
|
295
|
+
Token.addMod tmp.range, f.spVarName
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
else
|
300
|
+
Token.addMod tmp.range, "#{vn}.case"
|
301
|
+
end
|
302
|
+
if %i{case non_free_case}.include? tmp.kind
|
303
|
+
tmp = tmp.ender
|
304
|
+
else
|
305
|
+
tmp = tmp.dnext
|
306
|
+
end
|
307
|
+
end
|
308
|
+
";rescue #{vn}.Finish;ensure #{vn}.pop;end;#{vn}.result);" + "end"
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
|
313
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
require 'each_token'
|
3
|
+
|
4
|
+
|
5
|
+
class Token
|
6
|
+
Modules :Then, :Else, :Elsif, :IflessThen, :IflessElse, :IflessElsif do
|
7
|
+
def closeBeginner pi
|
8
|
+
if !((ps = parent.sentences)[-1].first != self)
|
9
|
+
raise Error.new("'#{str}' without 'if' not registered as sentence in upper clause, '#{parent.str}'")
|
10
|
+
end
|
11
|
+
if !ps[-2]
|
12
|
+
raise Error.new("'#{str}' without 'if' missing previous line")
|
13
|
+
end
|
14
|
+
ps[-2].last = nil
|
15
|
+
ps.pop
|
16
|
+
Token.addMod ps[-2].first.first, "if("
|
17
|
+
case @kind
|
18
|
+
when :ifless_then, :then
|
19
|
+
Token.addMod orgStarter.first, ")"
|
20
|
+
when :ifless_elsif, :ifless_else, :elsif, :else
|
21
|
+
Token.addMod orgStarter.first, ")then "
|
22
|
+
end
|
23
|
+
"end"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
[
|
27
|
+
[:Then, :ifless_then]
|
28
|
+
[:Else, :ifless_else]
|
29
|
+
[:Elsif, :ifless_elseif]
|
30
|
+
].each do |modName, tk|
|
31
|
+
Modules modName do
|
32
|
+
MethodChain.override do
|
33
|
+
module_eval %{
|
34
|
+
def onClassify
|
35
|
+
begin
|
36
|
+
super
|
37
|
+
rescue OrphanContClause => e
|
38
|
+
if !prev_nl?
|
39
|
+
raise e
|
40
|
+
else
|
41
|
+
spush
|
42
|
+
kind = :#{tk}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'each_token'
|
4
|
+
|
5
|
+
|
6
|
+
class Token
|
7
|
+
module Ensure do
|
8
|
+
MethodChain.override do
|
9
|
+
def onClassify
|
10
|
+
begin
|
11
|
+
super
|
12
|
+
rescue OrphanContClause => e
|
13
|
+
if !prev_nl?
|
14
|
+
raise e
|
15
|
+
else
|
16
|
+
spush
|
17
|
+
kind = :independent_ensure
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'each_token'
|
4
|
+
|
5
|
+
|
6
|
+
class Token
|
7
|
+
module Rescue do
|
8
|
+
MethodChain.override do
|
9
|
+
def onClassify
|
10
|
+
begin
|
11
|
+
super
|
12
|
+
rescue OrphanContClause => e
|
13
|
+
if !prev_nl?
|
14
|
+
raise e
|
15
|
+
else
|
16
|
+
spush
|
17
|
+
kind = :independent_rescue
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
class Token
|
3
|
+
module OnPeriod
|
4
|
+
def onClassify #
|
5
|
+
if isOperand? # should not be parent
|
6
|
+
if [:on_ident, :on_const].include?(dnext.kind)
|
7
|
+
Token.addMod(first, "___theme_by_period")
|
8
|
+
elsif ambiguousPeriodTheme?
|
9
|
+
raise Error.new("Nested theme is referenced by single '.'")
|
10
|
+
else
|
11
|
+
Token.addMod(range, "___theme_by_period")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
attr_accessor_predicate :hasAndOp, :andOpProcessed
|
6
|
+
def inDirectParen?
|
7
|
+
prev.kind == :on_lparen && next.kind == :on_rparen
|
8
|
+
end
|
9
|
+
|
10
|
+
def checkAndOp
|
11
|
+
if hasAndOp? && !andOpProcessed? && !inDirectParen? && %i{on_ident on_const ' "}.include?(dprev)
|
12
|
+
Token.addMod tb.last, "("
|
13
|
+
Token.addMod t.first, ")"
|
14
|
+
@andOpProcessed = true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Modules :And, :Or, :Not do
|
19
|
+
MethodChain.override do
|
20
|
+
def onClassify
|
21
|
+
super
|
22
|
+
if [:on_lbracket, :on_lparen].include?(parent)
|
23
|
+
parent.hasAndOp = true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Modules :OnRparen, :OnRbracket do
|
30
|
+
MethodChain.override do
|
31
|
+
def onClassify
|
32
|
+
super
|
33
|
+
beginner.checkAndOp
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
class Token
|
3
|
+
|
4
|
+
module PostTestDo
|
5
|
+
|
6
|
+
def postTestFinalize pi
|
7
|
+
if !requireArg?
|
8
|
+
raise Error.new("descrepant post test clause")
|
9
|
+
end
|
10
|
+
@argEnd = pi
|
11
|
+
closeSentence pi
|
12
|
+
(d = (w = pi.parent).wrapped.orgEntity).iteratorCand = nil
|
13
|
+
toReplace = "break " + case w.str
|
14
|
+
when "while"
|
15
|
+
"unless "
|
16
|
+
when "until"
|
17
|
+
"if "
|
18
|
+
end
|
19
|
+
Token.addMod w.range, toReplace
|
20
|
+
if (v = d.dnext).kind == :on_symbeg && label = v.var_label
|
21
|
+
d.defClsFirstSententence.first.setIteratorLabelVar label
|
22
|
+
Token.addMod d.range,
|
23
|
+
"begin
|
24
|
+
#{label} = ItratorLabel.new
|
25
|
+
while true
|
26
|
+
begin
|
27
|
+
#{label}.setLast((".gsub(/\n/, ";").gsub(/\s+/, " ")
|
28
|
+
res = "))
|
29
|
+
rescue #{label}.exNext
|
30
|
+
next
|
31
|
+
rescue #{label}.exRedo
|
32
|
+
redo
|
33
|
+
end
|
34
|
+
end
|
35
|
+
#{label}.res #nil or something in case iterator
|
36
|
+
rescue #{label}.exBreak
|
37
|
+
#{label}.res
|
38
|
+
end".gsub(/\n/, ";").gsub(/\s+/, " ")
|
39
|
+
else
|
40
|
+
Token.addMod d.range, "while true;" # "do" -> "while true;"
|
41
|
+
res = ";end;"
|
42
|
+
end
|
43
|
+
pi.spop
|
44
|
+
Token.addMod pi.ipos, res
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|