YkLib 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/Gemfile.lock +34 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +44 -0
  10. data/Rakefile +6 -0
  11. data/YkLib.gemspec +29 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/lib/YkLib/Yk/__advance__.rb +151 -0
  15. data/lib/YkLib/Yk/__defun__.rb +44 -0
  16. data/lib/YkLib/Yk/__hook__.rb +244 -0
  17. data/lib/YkLib/Yk/__minmax__.rb +123 -0
  18. data/lib/YkLib/Yk/__stdlog.rb +329 -0
  19. data/lib/YkLib/Yk/adhocLiterals/email.rb +119 -0
  20. data/lib/YkLib/Yk/adhocLiterals/path.rb +402 -0
  21. data/lib/YkLib/Yk/adhocLiterals/tag.rb +19 -0
  22. data/lib/YkLib/Yk/adhocLiterals/url.rb +36 -0
  23. data/lib/YkLib/Yk/adhocLiterals.rb +199 -0
  24. data/lib/YkLib/Yk/auto_escseq.rb +5 -0
  25. data/lib/YkLib/Yk/auto_pstore.rb +179 -0
  26. data/lib/YkLib/Yk/bsearch.rb +120 -0
  27. data/lib/YkLib/Yk/clambda.rb +309 -0
  28. data/lib/YkLib/Yk/confLine.rb +423 -0
  29. data/lib/YkLib/Yk/create_tty_width_available.rb +24 -0
  30. data/lib/YkLib/Yk/crypt.rb +26 -0
  31. data/lib/YkLib/Yk/debug2 +1 -0
  32. data/lib/YkLib/Yk/debug2.rb +473 -0
  33. data/lib/YkLib/Yk/debugout.rb +139 -0
  34. data/lib/YkLib/Yk/email_tz.rb +533 -0
  35. data/lib/YkLib/Yk/enum_expect.rb +170 -0
  36. data/lib/YkLib/Yk/errlog.rb +5 -0
  37. data/lib/YkLib/Yk/escseq.rb +59 -0
  38. data/lib/YkLib/Yk/eval_alt.rb +281 -0
  39. data/lib/YkLib/Yk/expector.rb +93 -0
  40. data/lib/YkLib/Yk/fetch.rb +556 -0
  41. data/lib/YkLib/Yk/fetch_old.rb +290 -0
  42. data/lib/YkLib/Yk/fib.rb +158 -0
  43. data/lib/YkLib/Yk/file_aux.rb +843 -0
  44. data/lib/YkLib/Yk/file_aux2.rb +919 -0
  45. data/lib/YkLib/Yk/file_aux_old.rb +160 -0
  46. data/lib/YkLib/Yk/filemod.rb +19 -0
  47. data/lib/YkLib/Yk/force_escseq.rb +3 -0
  48. data/lib/YkLib/Yk/generator__.rb +144 -0
  49. data/lib/YkLib/Yk/generator__.rb.org +139 -0
  50. data/lib/YkLib/Yk/indenter/argless_case.rb +46 -0
  51. data/lib/YkLib/Yk/indenter/each_token.rb +671 -0
  52. data/lib/YkLib/Yk/indenter/free_case.rb +313 -0
  53. data/lib/YkLib/Yk/indenter/if_less.rb +53 -0
  54. data/lib/YkLib/Yk/indenter/independent_ensure.rb +23 -0
  55. data/lib/YkLib/Yk/indenter/independent_rescue.rb +23 -0
  56. data/lib/YkLib/Yk/indenter/operand_circumflex.rb +0 -0
  57. data/lib/YkLib/Yk/indenter/operand_period.rb +16 -0
  58. data/lib/YkLib/Yk/indenter/parenless_and.rb +37 -0
  59. data/lib/YkLib/Yk/indenter/post_test.rb +48 -0
  60. data/lib/YkLib/Yk/indenter/token.rb +1525 -0
  61. data/lib/YkLib/Yk/indenter.rb +1382 -0
  62. data/lib/YkLib/Yk/inot.rb +265 -0
  63. data/lib/YkLib/Yk/intf.rb +815 -0
  64. data/lib/YkLib/Yk/io_aux.rb +1332 -0
  65. data/lib/YkLib/Yk/ioctl.rb +60 -0
  66. data/lib/YkLib/Yk/ipcc.rb +87 -0
  67. data/lib/YkLib/Yk/ipcountry.rb +207 -0
  68. data/lib/YkLib/Yk/ipv4adr.rb +318 -0
  69. data/lib/YkLib/Yk/localmail.rb +276 -0
  70. data/lib/YkLib/Yk/method_chain.rb +359 -0
  71. data/lib/YkLib/Yk/misc_tz.rb +1716 -0
  72. data/lib/YkLib/Yk/missing_method.rb +50 -0
  73. data/lib/YkLib/Yk/mojiConv.rb +257 -0
  74. data/lib/YkLib/Yk/nostdlog.rb +4 -0
  75. data/lib/YkLib/Yk/on_marshal.rb +20 -0
  76. data/lib/YkLib/Yk/overrider.rb +47 -0
  77. data/lib/YkLib/Yk/path.rb +293 -0
  78. data/lib/YkLib/Yk/path_aux.rb +883 -0
  79. data/lib/YkLib/Yk/path_aux_alt.rb +0 -0
  80. data/lib/YkLib/Yk/path_rep.rb +1267 -0
  81. data/lib/YkLib/Yk/pg_setup.rb +917 -0
  82. data/lib/YkLib/Yk/procinfo.rb +314 -0
  83. data/lib/YkLib/Yk/proclist.rb +492 -0
  84. data/lib/YkLib/Yk/property.rb +863 -0
  85. data/lib/YkLib/Yk/ranger.rb +606 -0
  86. data/lib/YkLib/Yk/resolv_tz.rb +88 -0
  87. data/lib/YkLib/Yk/rlprompt.rb +73 -0
  88. data/lib/YkLib/Yk/rootexec.rb +48 -0
  89. data/lib/YkLib/Yk/rpm-packageproxy.rb +784 -0
  90. data/lib/YkLib/Yk/rpm-packageproxy2.rb +1430 -0
  91. data/lib/YkLib/Yk/rwhen.rb +21 -0
  92. data/lib/YkLib/Yk/selector.rb +124 -0
  93. data/lib/YkLib/Yk/set.rb +170 -0
  94. data/lib/YkLib/Yk/shellquote.rb +300 -0
  95. data/lib/YkLib/Yk/sio.rb +1001 -0
  96. data/lib/YkLib/Yk/sio0.rb +835 -0
  97. data/lib/YkLib/Yk/sio_aux.rb +1524 -0
  98. data/lib/YkLib/Yk/sio_inot.rb +86 -0
  99. data/lib/YkLib/Yk/sock_aux.rb +42 -0
  100. data/lib/YkLib/Yk/spipe.rb +843 -0
  101. data/lib/YkLib/Yk/sql_table.rb +565 -0
  102. data/lib/YkLib/Yk/stdlog.rb +4 -0
  103. data/lib/YkLib/Yk/syscommand.rb +173 -0
  104. data/lib/YkLib/Yk/sysinit.rb +75 -0
  105. data/lib/YkLib/Yk/ttyFontWidth.rb +46113 -0
  106. data/lib/YkLib/Yk/tty_char.dump +0 -0
  107. data/lib/YkLib/Yk/tty_char.rb +47 -0
  108. data/lib/YkLib/Yk/tty_char_create.rb +437031 -0
  109. data/lib/YkLib/Yk/tty_char_static.rb +437016 -0
  110. data/lib/YkLib/Yk/tty_rewrite.rb +142 -0
  111. data/lib/YkLib/Yk/tty_str.rb +461 -0
  112. data/lib/YkLib/Yk/tty_width.dat.rb +114 -0
  113. data/lib/YkLib/Yk/tty_width.rb +180 -0
  114. data/lib/YkLib/Yk/tty_width_available +569 -0
  115. data/lib/YkLib/Yk/tty_width_list +0 -0
  116. data/lib/YkLib/Yk/tty_width_list.linux +280 -0
  117. data/lib/YkLib/Yk/tty_width_list.windows +324 -0
  118. data/lib/YkLib/Yk/tz_tty +0 -0
  119. data/lib/YkLib/Yk/tz_tty.rb +0 -0
  120. data/lib/YkLib/Yk/uprepos.rb +94 -0
  121. data/lib/YkLib/Yk/userinfo.rb +91 -0
  122. data/lib/YkLib/Yk/with.rb +109 -0
  123. data/lib/YkLib/version.rb +3 -0
  124. data/lib/YkLib.rb +6 -0
  125. metadata +170 -0
@@ -0,0 +1,863 @@
1
+ if RUBY_VERSION >= '2.7'
2
+
3
+ require 'Yk/eval_alt'
4
+
5
+
6
+ module Friend
7
+ FriendList = Hash.new{|h, k| h[k] = Set.new}
8
+ refine Module do
9
+ def friend *args
10
+ binding.of_caller(1).eval("self").class_eval %Q{
11
+ private
12
+ if !Friend::FriendList.key? self
13
+ [#{args.join(', ')}].each do |e|
14
+ Friend::FriendList[self].add e
15
+ end
16
+ def __allow_call? name
17
+ if [private_methods, protected_methods].find{_1.include?(name)}
18
+ cls = binding.of_caller(2).eval("self.class")
19
+ if !self.is_a?(Class)
20
+ toFind = Friend::FriendList[self.class]
21
+ else
22
+ k = Friend::FriendList.keys.find{|e| self.is_a?(e)}
23
+ toFind = Friend::FriendList[k] if k
24
+ end
25
+ found = toFind&.find{|e|
26
+ c = cls
27
+ ret = while c && c != Class
28
+ if e == c
29
+ break true
30
+ end
31
+ c = c.superclass
32
+ end
33
+ ret
34
+ }
35
+ end
36
+ found
37
+ end
38
+ alias_method :__method_missing_org, :method_missing
39
+ def method_missing name, *args, **h, &bl
40
+ # p.red args, h, bl
41
+ if __allow_call? name
42
+ method(name).call *args, **h, &bl
43
+ else
44
+ __method_missing_org name, *args, **h, &bl
45
+ end
46
+ end
47
+ alias_method :respond_to_missing_org, :respond_to_missing?
48
+ def respond_to_missing? symbol, include_private
49
+ __allow_call?(symbol) || respond_to_missing_org(symbol, include_private)
50
+ end
51
+ def self.friend *clsList
52
+ clsList.each{Friend::FriendList[self].add _1}
53
+ # p FriendList
54
+ end
55
+ end
56
+ }
57
+ # p FriendList
58
+ end
59
+ end
60
+ end
61
+ module Misc
62
+ refine Module do
63
+ def refine_class cls, &prc
64
+ c = class << cls; self; end
65
+ refine c, &prc
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+
72
+ module Warning
73
+ def self.warn (msg, category: nil)
74
+ if msg !~ /redefining Object\#(method_missing|respond_to_missing\?) may cause infinite loop/
75
+ super(msg)
76
+ end
77
+ end
78
+ end
79
+
80
+
81
+ module Proc_
82
+ class Proc_from_LocalVariable < Proc
83
+ def initialize b, l
84
+ @binding = b
85
+ @label = l
86
+ super()do
87
+ _
88
+ end
89
+ end
90
+ def _ &bl
91
+ ret = @binding.local_variable_get(@label)
92
+ if bl
93
+ instance_eval(&bl)
94
+ end
95
+ ret
96
+ end
97
+ def _= arg
98
+ @binding.local_variable_set(@label, arg)
99
+ end
100
+ def pivot
101
+ @binding.local_variable_get(@label)
102
+ end
103
+ def pivot= arg
104
+ @binding.local_variable_set(@label, arg)
105
+ end
106
+ end
107
+ class Proc_from_MethodLabel < Proc
108
+ def initialize obj, label, *args, **opts, &bl
109
+ @label = label
110
+ @args = args
111
+ @opts = opts
112
+ @block = bl
113
+ @obj = obj
114
+ super do |*args, **opts, &bl|
115
+ _ *args, **opts, &bl
116
+ end
117
+ end
118
+ def _ *args, **opts, &bl
119
+ @obj.method(@label).call(*(@args + args), **(@opts.merge opts), &(bl || @block))
120
+ end
121
+ # _{1 < a <= b < 3 <= 5}
122
+ # _.foo(_{1 or 2})._
123
+ # _.foo(_{arr})._
124
+ # _.a
125
+ # _.a{pivot += 1}
126
+ def _= *args, **opts, &bl
127
+ @eqLabel ||= (@label.to_s + "=").intern
128
+ @obj.method(@eqLabel).call(*(@args + args), **(@opts.merge opts), &(bl || @block))
129
+ end
130
+ def pivot *args, **opts, &bl
131
+ ret = self._(*args, **opts, &bl)
132
+ method(:_=).call(*args, **opts, &bl)
133
+ ret
134
+ end
135
+ end
136
+ class Proc_seed < BasicObject
137
+ def method_missing label, *args, **opts, &bl
138
+ if @binding && args.empty? && opts.empty? && !bl && @binding.local_variable_defined?(label)
139
+ Proc_from_LocalVariable.new @binding, label do; end
140
+ else
141
+ Proc_from_MethodLabel.new @obj, label, *args, **opts, &bl
142
+ end
143
+ end
144
+ def initialize obj, b = nil
145
+ @obj = obj
146
+ @binding = b
147
+ end
148
+ end
149
+ refine Object do
150
+ private
151
+ def _
152
+ Proc_seed.new(self, binding.of_caller(1))
153
+ end
154
+ alias_method :__org_method_missing, :method_missing
155
+ def method_missing label, *args, **opts, &bl
156
+ if label == :_ #public call
157
+ Proc_seed.new(self)
158
+ else
159
+ __org_method_missing(label, *args, **opts, &bl)
160
+ end
161
+ end
162
+ alias_method :__org_respond_to_missing?, :respond_to_missing?
163
+ def respond_to_missing? label, priv
164
+ if label == :_
165
+ true
166
+ else
167
+ __org_respond_to_missing?(label, priv)
168
+ end
169
+ end
170
+ end
171
+ class Proc_from_Label < Proc
172
+ def initialize label, args, opts, bl
173
+ super do |obj|
174
+ obj.method(label).call(*args, **opts, &bl)
175
+ end
176
+ end
177
+ end
178
+ refine Symbol do
179
+ def call *args, **opts, &bl
180
+ Proc_from_Label.new self, args, opts, bl
181
+ end
182
+ end
183
+ end
184
+
185
+ module Property
186
+ class BObject
187
+ Methods = %W{
188
+ __send__
189
+ __id__
190
+ instance_eval
191
+ method_missing
192
+ p
193
+ pp
194
+ binding
195
+ object_id
196
+ initialize
197
+ respond_to?
198
+ caller
199
+ inspect
200
+ }
201
+ instance_methods.each do |m|
202
+ alias_method ("__call_org_method_of_#{m}_on_BObject__").intern, m
203
+ if !Methods.include? m.to_s
204
+ remove_method(m) rescue nil
205
+ end
206
+ end
207
+ private_instance_methods.each do |m|
208
+ alias_method ("__call_org_method_of_#{m}_on_BObject__").intern, m
209
+ if !Methods.include? m.to_s
210
+ remove_method(m) rescue nil
211
+ end
212
+ end
213
+ def __call_org_method__ label, *args, **opts, &bl
214
+ __send__ ("__call_org_method_of_" + label.to_s + "_on_BObject__").intern, *args, **opts, &bl
215
+ end
216
+ end
217
+ %W{start placeHolder get set pivot swap this}.each do |name|
218
+ Property.module_eval %{
219
+ module_function
220
+ def #{name}
221
+ @@#{name}
222
+ end
223
+ def #{name}= sym
224
+ @@#{name} = sym
225
+ end
226
+ }
227
+ end
228
+ def property_public_methods
229
+ %W{get set pivot swap}
230
+ end
231
+ module_function :property_public_methods
232
+ end
233
+
234
+ CompChain.seed = [:___, :■, :͐ , :͑ , :͔ , :͕ ]
235
+
236
+ # 1 < ■2 == ■3 < 4
237
+
238
+ Property.start = [:_, :▲, :̄ ]
239
+ Property.placeHolder = [:__, :∆, :͝ , :ˬ, "➀➁➂➃➄➅➆➇➈", :͟ ]
240
+
241
+ #_①:͝is_a? ,
242
+
243
+ #case
244
+ #when ˬ_e?
245
+ #when ˬis_a?(Foo)
246
+ #when s̄in(➀) == 1.0
247
+ #end
248
+
249
+ Property.get = [:_get, :▼]
250
+ Property.set = [:_set, :◀]
251
+ Property.pivot = [:_pivot, :◀◀]
252
+ Property.swap = [:_swap, :◀▶]
253
+ Property.this = :_
254
+
255
+ #
256
+
257
+ module Property
258
+ class Property_base < BObject
259
+ def coerce a
260
+ if !Property_base.(a)
261
+ ag = Property_raw.new(a)
262
+ else
263
+ ag = a
264
+ end
265
+ [ag, self]
266
+ end
267
+ alias_method :__org_method_missing, :method_missing
268
+ MCheck = {}
269
+ def method_missing label, *args, **opts, &bl
270
+ curCall = nil
271
+ begin
272
+ if caller(1)[0] =~ /:/
273
+ curCall = caller(1)[0]
274
+ if curCall[/^(.*):/, 1] == __FILE__
275
+ return __org_method_missing(label, *args, **opts, &bl)
276
+ elsif (require "fiber"; MCheck[Fiber.current] ||= {})[[curCall, label]]
277
+ MCheck[Fiber.current].delete [curCall, label]
278
+ return __org_method_missing(label, *args, **opts, &bl)
279
+ else
280
+ MCheck[Fiber.current][[curCall, label]] = true
281
+ end
282
+ end
283
+ Property_from_MethodLabelBase.emerge self, label, *args, **opts, &bl
284
+ ensure
285
+ (MCheck[Fiber.current] ||= {}).delete([curCall, label]) if curCall
286
+ end
287
+ end
288
+ def respond_to_missing? label, priv
289
+ true
290
+ end
291
+ def === caseArg
292
+ if caseArg.respond_to?(:__call_org_method__) && caseArg.__call_org_method__(:is_a?, Property_base)
293
+ caseArg.__Property_get__ __Property_get__
294
+ else
295
+ __Property_get__ caseArg
296
+ end
297
+ end
298
+ def to_proc
299
+ Proc.new do |*args, **opts, &bl|
300
+ __Property_get__ *args, **opts, &bl
301
+ end
302
+ end
303
+ Property.property_public_methods.each do |m|
304
+ pm = "__Property_#{m}__".intern
305
+ define_method pm do |*args, **opts, &bl|
306
+ __org_method_missing pm, *args, **opts, &bl
307
+ end
308
+ mm = Property.method(m.intern).()
309
+ if pm != mm
310
+ class_eval %{
311
+ def #{mm} (...)
312
+ #{pm}(...)
313
+ end
314
+ }
315
+ end
316
+ end
317
+ class_eval %{
318
+ def #{Property.this} (...)
319
+ __Property_get__(...)
320
+ end
321
+ def #{Property.this}= (...)
322
+ __Property_set__(...)
323
+ end
324
+ }
325
+ def __Property_pivot__ *args, &bl
326
+ ret = __Property_get__
327
+ __Property_set__ *args, &bl
328
+ ret
329
+ end
330
+ def __Property_this__= *args
331
+ __Property_set__ *args
332
+ __Property_get__
333
+ end
334
+ def __Property_swap__ b
335
+ if !b.respond_to?(:__call_org_method__) || !b.__call_org_method__(:is_a?, Property_base)
336
+ raise ArgumentError.new("#{b.inspect} is not a property")
337
+ end
338
+ tmp = __Property_get__
339
+ __Property_set__ b.__Property_get__
340
+ b.__Property_set__ tmp
341
+ [__Property_get__, b.__Property_get__]
342
+ end
343
+ end
344
+ class Property_from_Constant < Property_base
345
+ def initialize b, l
346
+ @binding = b
347
+ @label = l
348
+ end
349
+ def __Property_get__ (...)
350
+ @binding.eval(@label)
351
+ end
352
+ end
353
+ class Property_from_LocalVariable < Property_base
354
+ def initialize b, l
355
+ @binding = b
356
+ @label = l
357
+ end
358
+ def __Property_get__ (...)
359
+ @binding.local_variable_get(@label)
360
+ end
361
+ def __Property_set__ *args, &bl
362
+ if !args.empty?
363
+ if !bl
364
+ @binding.local_variable_set @label, (args.size == 1 ? args[0] : args)
365
+ else
366
+ raise ArgumentError("Called with both arguments and block.")
367
+ end
368
+ else
369
+ if bl
370
+ tmp = @binding.local_variable_get @label
371
+ @binding.local_variable_set @label, bl.call(tmp)
372
+ else
373
+ raise ArgumentError("Called without arguments nor block")
374
+ end
375
+ end
376
+ end
377
+ end
378
+ class Property_from_LocalVariableSetter < Property_base
379
+ def initialize b, l, *args
380
+ @binding = b
381
+ @label = l
382
+ @args = ags
383
+ end
384
+ def __Property_get__ (...)
385
+ if @args.size == 1
386
+ @binding.local_variable_set(@label, @args[0])
387
+ elsif @args.size >= 2
388
+ @binding.local_variable_set(@label, @args)
389
+ end
390
+ end
391
+ end
392
+ class Property_raw < Property_base
393
+ def initialize obj
394
+ @obj = obj
395
+ end
396
+ def __Property_get__ (...)
397
+ if @obj.respond_to?(:__call_org_method__) && @obj.__call_org_method__(:is_a?, Property_base)
398
+ @obj.__Property_get__(...)
399
+ else
400
+ @obj
401
+ end
402
+ end
403
+ end
404
+ #case _(:@obj).__call_org_method__(:is_a?, __1)
405
+ #when __1.Property_callArgProvider
406
+ # ...
407
+ #end
408
+ #case Property_callArgProvider
409
+ #when _(:@obj).__call_org_method__(:is_a?, __1)
410
+ # ...
411
+ #end
412
+ class Property_from_MethodLabelBase < Property_base
413
+ DoEval = %{
414
+ noa = ->o{
415
+ case o.size
416
+ when 0
417
+ nil
418
+ when 1
419
+ o[0]
420
+ else
421
+ o
422
+ end
423
+ }
424
+ if @obj.respond_to?(:__call_org_method__) && (
425
+ if @obj.__call_org_method__(:is_a?, Property::Property_callArgProvider)
426
+ obj = noa.(@obj.__Property_get__(*args, **opts, &block))
427
+ elsif @obj.__call_org_method__(:is_a?, Property::Property_base)
428
+ obj = @obj.__Property_get__(*args, **opts, &block)
429
+ end)
430
+ else
431
+ obj = @obj
432
+ end
433
+ }.l
434
+ DoEvalAll = %{
435
+ #{DoEval.l}
436
+ eargs = []
437
+ @args.each{|e|
438
+ if e.respond_to?(:__call_org_method__) && (
439
+ if e.__call_org_method__(:is_a?, Property::Property_callArgProvider_to_a)
440
+ p
441
+ eargs.push *e.__Property_get__(*args, **opts, &block)
442
+ elsif e.__call_org_method__(:is_a?, Property::Property_callArgProvider)
443
+ p eargs
444
+ eargs.push *e.__Property_get__(*args, **opts, &block)
445
+ p eargs
446
+ elsif e.__call_org_method__(:is_a?, Property::Property_base)
447
+ p
448
+ eargs.push e.__Property_get__(*args, **opts, &block)
449
+ end)
450
+ else
451
+ eargs.push e
452
+ end
453
+ }
454
+ if @opts
455
+ eopts = {}
456
+ @opts.each do |k, v|
457
+ if k.respond_to?(:__call_org_method__) && k.__call_org_method__(:is_a?, Property_callArgProvider_to_hash) && v == nil
458
+ eopts.merge k.__Property_get__(*args, **opts, &block)
459
+ else
460
+ if v.respond_to?(:__call_org_method__)
461
+ if v.__call_org_method__(:is_a?, Property::Property_callArgProvider)
462
+ vc = noa.(v.__Property_get__(*args, **opts, &block))
463
+ elsif v.__call_org_method__(:is_a?, Property::Property_base)
464
+ vc = v.__Property_get__(*args, **opts, &block)
465
+ end
466
+ end
467
+ vc ||= v
468
+ if k.respond_to?(:__call_org_method__)
469
+ if k.__call_org_method__(:is_a?, Property::Property_callArgProvider)
470
+ kc = noa.(k.__Property_get__(*args, **opts, &block))
471
+ elsif k.__call_org_method__(:is_a?, Property::Property_base)
472
+ kc = k.__Property_get__(*args, **opts, &block)
473
+ end
474
+ end
475
+ kc ||= k
476
+ eopts[kc] = vc
477
+ end
478
+ end
479
+ end
480
+ if @block
481
+ if @block.respond_to?(:__call_org_method__) && (
482
+ if @block.__call_org_method__(:is_a?, Property::Property_callArgProvider_to_proc)
483
+ eblock = @block.__Property_get__(*args, **opts, &block)
484
+ elsif @block.__call_org_method__(:is_a?, Property::Property_callArgProvider)
485
+ eblock = noa.(@block.__Property_get__(*args, **opts, &block))
486
+ elsif @block.__call_org_method__(:is_a?, Property::Property_base)
487
+ eblock = @block.__Property_get__(*args, **opts, &block)
488
+ end)
489
+ else
490
+ eblock = @block
491
+ end
492
+ end
493
+ }.l
494
+ def self.emerge obj, label, *args, **opts, &bl
495
+ if label == :[] && !bl
496
+ Property_from_SubscriptGetterMethodLabel.new obj, *args, **opts
497
+ elsif args.empty? && opts.empty? && !bl && label[-1] != "="
498
+ Property_from_GetterMethodLabel.new obj, label
499
+ else
500
+ Property_from_MethodLabel.new obj, label, *args, **opts, &bl
501
+ end
502
+ end
503
+ end
504
+ class Property_from_MethodLabel < Property_from_MethodLabelBase
505
+ def initialize obj, label, *args, **opts, &bl
506
+ @label = label
507
+ @args = args
508
+ @opts = opts
509
+ @block = bl
510
+ @obj = obj
511
+ end
512
+ x = %{
513
+ def __Property_get__ (*args, **opts, &block)
514
+ p args
515
+ #{DoEvalAll.l}
516
+ p eargs
517
+ obj.method(@label).call(*eargs, **eopts, &eblock)
518
+ end
519
+ }.l
520
+ class_eval x
521
+ end
522
+ class Property_from_MethodLabel_PropertyBase < Property_from_MethodLabelBase
523
+ def __Property_set__ args, bl
524
+ if !args.empty?
525
+ if bl
526
+ raise ArgumentError.new("Cannot use both arguments and block")
527
+ else
528
+ yield *args
529
+ end
530
+ else
531
+ if bl
532
+ yield instance_eval(&bl)
533
+ else
534
+ raise ArgumentError.new("Cannot use both arguments and block")
535
+ end
536
+ end
537
+ end
538
+ end
539
+ class Property_from_GetterMethodLabel < Property_from_MethodLabel_PropertyBase
540
+ def initialize obj, label
541
+ @label = label
542
+ @obj = obj
543
+ end
544
+ class_eval %{
545
+ def __Property_get__ *args, **opts, &block
546
+ #{DoEval.l}
547
+ obj.method(@label).call
548
+ end
549
+ def __Property_set__ *args, **opts, &block
550
+ @eqLabel ||= (@label.to_s + "=").intern
551
+ #{DoEval.l}
552
+ super args, block do |*eargs|
553
+ obj.method(@eqLabel).call(*eargs)
554
+ end
555
+ end
556
+ }.l
557
+ end
558
+ class Property_from_SubscriptGetterMethodLabel < Property_from_MethodLabel_PropertyBase
559
+ def initialize obj, *args, **opts
560
+ @obj = obj
561
+ @args = args
562
+ @opts = opts
563
+ end
564
+ class_eval %{
565
+ def __Property_get__ *args, **opts, &block
566
+ #{DoEvalAll.l}
567
+ obj.[](*eargs, **eopts)
568
+ end
569
+ def __Property_set__ *args, **opts, &block
570
+ #{DoEvalAll.l}
571
+ p eargs
572
+ p args
573
+ p eopts
574
+ p block
575
+ if !args.empty?
576
+ if !block
577
+ obj.[]=(*eargs, *args, **eopts)
578
+ return
579
+ end
580
+ elsif block
581
+ op = block.call(obj.[](*eargs, **eopts))
582
+ p op
583
+ obj.[]=(*eargs, op, **eopts)
584
+ return
585
+ end
586
+ raise ArgumentError.new("operand missing or too many operands")
587
+ end
588
+ }.l
589
+ end
590
+
591
+ class Property_seed < BObject
592
+ def method_missing label, *args, **opts, &bl
593
+ ret = nil
594
+ if label[-1] != "="
595
+ if args.empty? && opts.empty? && !bl
596
+ if @binding.local_variable_defined?(label)
597
+ ret = Property_from_LocalVariable.new(@binding, label)
598
+ elsif @binding.eval("Module.constants").include?(label)
599
+ ret = Property_from_Constant.new(@binding, label)
600
+ end
601
+ end
602
+ ret ||= Property_from_MethodLabelBase.emerge @obj, label, *args, **opts, &bl
603
+ else
604
+ labelPre = label.to_s.chop.intern
605
+ if args.empty? && opts.empty? && bl
606
+ if @binding.local_variable_defined?(labelPre)
607
+ ret = Property_from_LocalVariableSetter.new(@binding, labelPre, *args)
608
+ elsif @binding.eval("Module.constants").include?(labelPre)
609
+ raise ArgumentError.new("Cannot reinitialize constant")
610
+ end
611
+ end
612
+ ret ||= Property_from_MethodLabelBase.emerge @obj, label, *args
613
+ end
614
+ ret
615
+ end
616
+ def respond_to_missing? label, priv
617
+ true
618
+ end
619
+ def initialize obj, b = nil
620
+ @obj = obj
621
+ @binding = b
622
+ end
623
+ end
624
+ class Prperty_seed_unboundMethod < Property_seed
625
+ def method_missing label, *args, **opts, &bl
626
+ Property_from_MethodLabelBase.new Property_callArgProvider.new(1), label, *args, **opts, &bl
627
+ end
628
+ def initialize
629
+ end
630
+ def to_a
631
+ Property_callArgProvider_to_a.new
632
+ end
633
+ def to_hash
634
+ Property_callArgProvider_to_hash.new
635
+ end
636
+ def to_proc
637
+ Property_callArgProvider_to_proc.new
638
+ end
639
+ end
640
+ class Property_callArgProvider < Property_base
641
+ def initialize *args
642
+ @arg_indexes = []
643
+ @opt_list = []
644
+ @all_opts = false
645
+ @add_block = false
646
+ @all = false
647
+ p args
648
+ args.each do |e|
649
+ case e
650
+ when Integer
651
+ if e >= 1
652
+ @arg_indexes.push e - 1
653
+ else
654
+ @arg_indexes.push e
655
+ end
656
+ when Symbol, String
657
+ case e.to_s
658
+ when /^\d+$/
659
+ i = e.to_s.to_i
660
+ if i >= 1
661
+ i -= 1
662
+ end
663
+ @arg_indexes.push i
664
+ when "**"
665
+ @all_opts = true
666
+ when "*"
667
+ @arg_indexes.push :all
668
+ when "&"
669
+ @add_block = true
670
+ when "..."
671
+ @arg_indexes.push :all
672
+ @all_opts = true
673
+ @add_block = true
674
+ else
675
+ e = e.to_sym
676
+ @opt_list.push e if !@opt_list.index(e)
677
+ end
678
+ end
679
+ end
680
+ end
681
+ def __Property_get__ *args, **opts, &bl
682
+ rargs = []
683
+ rbl = bl if @add_block
684
+ p @arg_indexes, args
685
+ @arg_indexes.each do |e|
686
+ if e == :all
687
+ if !rargs.empty?
688
+ rargs.push *args
689
+ end
690
+ elsif e >= 0
691
+ rargs.push args[e] if e < args.size
692
+ else
693
+ rargs.push args[e] if e >= -args.size
694
+ end
695
+ end
696
+ p rargs
697
+ if @all_opts
698
+ ropts = opts
699
+ else
700
+ ropts = {}
701
+ @opt_list.each do |k|
702
+ if opts.key? k
703
+ ropts[k] = opts[k]
704
+ end
705
+ end
706
+ end
707
+ ret = []
708
+ ret += rargs
709
+ p ret
710
+ ret.push ropts if !ropts.empty?
711
+ ret.push rbl if rbl
712
+ p ropts
713
+ p rbl
714
+ p ret
715
+ ret
716
+ end
717
+ def to_a
718
+ [Property_callArgProvider_to_a.new(self)]
719
+ end
720
+ def to_hash
721
+ {Property_callArgProvider_to_hash.new(self) => nil}
722
+ end
723
+ def to_proc
724
+ Property_callArgProvider_to_proc.new(self)
725
+ end
726
+ end
727
+ module Property_callArgProvider_to
728
+ def initialize provider
729
+ @provider = provider
730
+ end
731
+ end
732
+ class Property_callArgProvider_to_a < Property_base
733
+ def Property_callArgProvider_to_a;end
734
+ include Property_callArgProvider_to
735
+ def __Property_get__ *args, **opts, &bl
736
+ @provider.__Property_get__ *args, **opts, &bl
737
+ end
738
+ end
739
+ class Property_callArgProvider_to_hash < Property_base
740
+ def Property_callArgProvider_to_hash;end
741
+ include Property_callArgProvider_to
742
+ def __Property_get__ *args, **opts, &bl
743
+ r = @provider.__Property_get__ *args, **opts, &bl
744
+ if !r.empty? && r[0].is_a?(Hash) && !r[0].empty?
745
+ r[0]
746
+ else
747
+ {}
748
+ end
749
+ end
750
+ end
751
+ class Property_callArgProvider_to_proc < Proc
752
+ def Property_callArgProvider_to_proc;end
753
+ def initialize provider
754
+ @provider = provider
755
+ super do;end
756
+ end
757
+ def __Property_get__ *args, **opts, &bl
758
+ r = @provider.__Property_get__ &bl
759
+ if !r.empty? && r[0].is_a?(Proc)
760
+ r[0]
761
+ else
762
+ nil
763
+ end
764
+ end
765
+ end
766
+ refine Kernel do
767
+ # x = _.a[1]
768
+ # x._ += 1
769
+ # x.get
770
+ # x.set(100)
771
+ # x.set{_ + 100}
772
+ # x.pivot(100)
773
+ # x.pivot{_ + 100}
774
+ # call(_.a + _{0 or 1} + c)
775
+ module_function
776
+ module_eval %{
777
+ module_function
778
+ def #{Property.start} arg = nil
779
+ if !arg
780
+ Property::Property_seed.new(self, binding.of_caller(1))
781
+ else
782
+ case arg.respond_to?(:ruby_symbol) && arg.ruby_symbol
783
+ when :class_variable
784
+ Property::Property_from_ClassVariable.new(b, self)
785
+ when :instance_variable
786
+ Property::Property_from_InstanceVariable.new(b, self)
787
+ when :capitalized_symbol
788
+ if b.eval("Module.constants").include?(self)
789
+ Property::Property_from_Constant.new(b, self)
790
+ else
791
+ Property::Property_from_MethodLabelBase.emerge b.eval("self"), self
792
+ end
793
+ when :non_capitalized_symbol
794
+ if b.local_variable_defined?(self)
795
+ Property::Property_from_LocalVariable.new(b, self)
796
+ else
797
+ Property::Property_from_MethodLabelBase.emerge b.eval("self"), self
798
+ end
799
+ else
800
+ raise ArgumentError("\#{arg}.inspect is not a symbol or not a compatible symbol to ruby")
801
+ end
802
+ end
803
+ end
804
+ module_function
805
+ def #{Property.placeHolder} *args
806
+ if args.empty?
807
+ Property::Prperty_seed_unboundMethod.new
808
+ else
809
+ Property::Property_callArgProvider.new *args
810
+ end
811
+ end
812
+ 1.upto 9 do |i|
813
+ module_eval %{
814
+ module_function
815
+ def #{Property.placeHolder}\#{i}
816
+ Property::Property_callArgProvider.new \#{i}
817
+ end
818
+ }
819
+ end
820
+ }.l
821
+ # (_.a(__(1)) * __(:a) * __('...')).foo &__(:&))
822
+ end
823
+ refine Symbol do
824
+ class RubySymbol
825
+ def ruby_symbol sym
826
+ case sym.to_s
827
+ when /^\@\@/
828
+ if (self.class.class_variable_set(sym, 1) rescue nil)
829
+ return :class_variable
830
+ end
831
+ when /^\@/
832
+ if (instance_variable_set(sym, 1) rescue nil)
833
+ return :instance_variable
834
+ end
835
+ else
836
+ if (self.class.const_defined?(sym) || (self.class.const_set(sym, 1)) rescue nil)
837
+ return :capitalized_symbol
838
+ end
839
+ if (binding.local_variable_set(sym) rescue nil)
840
+ return :non_capitalized_symbol
841
+ end
842
+ end
843
+ nil
844
+ end
845
+ TestSymbol = self.new
846
+ def self.ruby_symbol sym
847
+ TestSymbol.ruby_symbol sym
848
+ end
849
+ end
850
+ def self.ruby_symbol sym
851
+ RubySymbol.ruby_symbol sym
852
+ end
853
+ def self.for_ruby_local_variable?
854
+ ruby_symbol == :non_capitalized_symbol
855
+ end
856
+ def self.for_ruby_constant?
857
+ ruby_symbol == :capitalized_symbol
858
+ end
859
+ end
860
+ end
861
+
862
+
863
+