YkLib 0.1.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.
- 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
|