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.
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,290 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ require 'continuation'
5
+
6
+
7
+ def caller_binding
8
+ cc = nil # must be present to work within lambda
9
+ count = 0 # counter of returns
10
+
11
+ set_trace_func lambda { |event, file, lineno, id, binding, klass|
12
+ # First return gets to the caller of this method
13
+ # (which already know its own binding).
14
+ # Second return gets to the caller of the caller.
15
+ # That's we want!
16
+ if count == 2
17
+ set_trace_func nil
18
+ # Will return the binding to the callcc below.
19
+ cc.call binding
20
+ elsif event == "return"
21
+ count += 1
22
+ end
23
+ }
24
+ # First time it'll set the cc and return nil to the caller.
25
+ # So it's important to the caller to return again
26
+ # if it gets nil, then we get the second return.
27
+ # Second time it'll return the binding.
28
+ return callcc { |cont| cc = cont ; nil}
29
+ end
30
+
31
+
32
+ class Ripper
33
+ def sexp2
34
+ end
35
+ end
36
+
37
+
38
+ class Fetch
39
+ BlockStrList = Hash.new
40
+ ANON = Object.new
41
+ attr :string_mode, true
42
+ def initialize obj
43
+ @obj = obj
44
+ end
45
+ def eval_block_str s, b
46
+ if s =~ /\|\s*([_\w][_\w\d]*)\s*(\,\s*([_\w][_\w\d]*)\s*)*\|/
47
+ i = 0
48
+ argNames = []
49
+ loop do
50
+ argNames.push($~[i * 2 + 1] || break)
51
+ i += 1
52
+ end
53
+ blkStr = $'
54
+ argLabels = argNames.map{|e| ":" + e}
55
+ blkStr = %{
56
+ Proc.new do |__fobj, #{argNames.join(', ')}|
57
+ __fobj.init_block_args binding, #{argLabels.join(', ')}
58
+ #{blkStr.gsub!(/\bfetch\b/, "__fobj.fetch")}
59
+ end
60
+ }
61
+ b.eval blkStr
62
+ end
63
+ end
64
+ def each_match item, pat
65
+ if pat == ANON
66
+ true
67
+ elsif !item.is_a?(Array) || !pat.is_a?(Array)
68
+ item == pat
69
+ else # both is array
70
+ if pat.size <= item.size
71
+ pat.each_with_index do |e, i|
72
+ if !each_match(item[i], e)
73
+ return false
74
+ end
75
+ end
76
+ true
77
+ else
78
+ false
79
+ end
80
+ end
81
+ end
82
+ def rec_find_match sexe, pat
83
+ case sexe.size
84
+ when 0
85
+ nil
86
+ when 1
87
+ item = sexe[0]
88
+ if each_match item, pat
89
+ item
90
+ else if item.is_a?(Array) || (item.respond_to(:to_ary) && (item = item.to_ary))
91
+ rec_find_match item, pat
92
+ end
93
+ else
94
+ m = sexe.size.div(2)
95
+ rec_find_match(sexe[0 ... m], pat) or rec_find_match(sexe[m .. -1], pat)
96
+ end
97
+ end
98
+ def rec_find_match_all sexe, pat, ret = []
99
+ case sexe.size
100
+ when 0
101
+ ret
102
+ when 1
103
+ item = sexe[0]
104
+ if each_match item, pat
105
+ ret.push item
106
+ else if item.is_a?(Array) || (item.respond_to(:to_ary) && (item = item.to_ary))
107
+ rec_find_match_all item, pat, ret
108
+ end
109
+ else
110
+ m = sexe.size.div(2)
111
+ rec_find_match_all(sexe[0 ... m], pat, ret)
112
+ rec_find_match_all(sexe[m .. -1], pat, ret)
113
+ end
114
+ ret
115
+ end
116
+ def getBlockContent
117
+ def replaceEach
118
+ def modifyBlock str, key, label, lno, blKey, chead
119
+ sexp = Ripper.sexp2 str
120
+ lst = rec_find_match sexp,
121
+ [:method_add_block,
122
+ [:call,
123
+ [:call,
124
+ ANON,
125
+ :".",
126
+ [:@ident, key]
127
+ ],
128
+ :".",
129
+ [:@ident, label, [lno]]
130
+ ],
131
+ [:do_block]
132
+ ]
133
+ if lst
134
+ pLst = rec_find_match lst,
135
+ [:method_add_block,
136
+ [:call,
137
+ [:call,
138
+ ANON,
139
+ :".",
140
+ [:@ident, key]
141
+ ],
142
+ :".",
143
+ [:@ident, label, [lno]]
144
+ ],
145
+ [:do_block,
146
+ [:block_var, [:params]]
147
+ ]
148
+ ]
149
+ if pLst
150
+ pLst[2][1][1][1].each do |e|
151
+ params.push e[1]
152
+ end
153
+ pLst[2][1][1].each do |e|
154
+ if e[0] == :rest_param
155
+ params.push "*" + e[1][1]
156
+ end
157
+ end
158
+ end
159
+ blKey_pos_list = rec_find_match_all lst[2][2], [:@ident, blKey]
160
+ bStr, lno, cno = getBlockContent lst
161
+ blKey_pos_list.each do |e|
162
+ id, bk, pos = e
163
+ replaceEach bStr, [lno, cno], pos, chead + "." + blKey
164
+ end
165
+ paramLabels = params.map{|e| ":" + e}
166
+ paramLabels.unshift "binding"
167
+ params.unshift chead
168
+ bStr = %{
169
+ Proc.new do |#{params.join(', ')}|
170
+ #{chead}.init_block_args #{argLabels.join(', ')}
171
+ #{bStr}
172
+ end
173
+ }
174
+ else
175
+ nil
176
+ end
177
+ end
178
+ def method_missing label, *fargs, &bl
179
+ return unless bnd = caller_binding
180
+ @label = label
181
+ super if !@obj.respond_to? @label
182
+ if @string_mode
183
+ loc = caller_locations(1)[0]
184
+ lpos = loc.path + ":#{loc.lineno}"
185
+ bstr = BlockStrList[lpos] ||= modifyBlock(loc.path.read, "__fetch__", @label, loc.lineno, "fetch", "__fobj")
186
+ @block = bnd.eval bstr
187
+ else
188
+ @block = bl
189
+ end
190
+ entity *fargs
191
+ end
192
+ def entity *fargs
193
+ if callcc{|cc| @start = cc; true}
194
+ @block.call self, nil
195
+ @iterate_cont.call false
196
+ else
197
+ iterate *fargs
198
+ end
199
+ end
200
+ def iterate *fargs
201
+ @obj.method(@label).call *fargs, &self
202
+ end
203
+ def evaluate
204
+ @vlabels.each_with_index do |vl, i|
205
+ @scope.eval("#{vl} = ObjectSpace._id2ref(#{@args[i].__id__})");
206
+ end
207
+ end
208
+ def init_block_args s, *vlabels
209
+ @scope = s
210
+ @vlabels = vlabels
211
+ if !callcc{|cc| @init_args = cc; true}
212
+ evaluate
213
+ end
214
+ if @fetch
215
+ @fetch.call false
216
+ end
217
+ if !@iterate_cont
218
+ @start.call false
219
+ end
220
+ end
221
+ def fetch
222
+ if callcc{|cc| @fetch = cc; true}
223
+ @iterate_cont.call false
224
+ else
225
+ @fetch = nil
226
+ end
227
+ true
228
+ end
229
+ def call *args
230
+ @args = args
231
+ if callcc{|cc| @iterate_cont = cc; true}
232
+ if @init_args
233
+ @init_args.call false
234
+ end
235
+ end
236
+ end
237
+ def to_proc
238
+ Proc.new do |*args|
239
+ call *args
240
+ end
241
+ end
242
+ end
243
+
244
+
245
+ class Object
246
+ def __fetch__ &bl
247
+ f = Fetch.new self
248
+ if bl
249
+ bl.call f
250
+ else
251
+ f.string_mode = true
252
+ f
253
+ end
254
+ end
255
+ end
256
+
257
+
258
+ if File.expand_path($0) == __FILE__
259
+ [1, 2, 3, 4, 5].__fetch__ do |fobj|
260
+ fobj.each do |e|
261
+ fobj.init_block_args binding, :e
262
+ if e == 3
263
+ print "[#{e}, #{(fobj.fetch and e)}], "
264
+ else
265
+ print "#{e}, "
266
+ end
267
+ end
268
+ end
269
+ [1, 2, 3, 4, 5].__fetch__.each %q{ |e|
270
+ if e == 3
271
+ print "[#{e}, #{(fetch and e)}], "
272
+ else
273
+ print "#{e}, "
274
+ end
275
+ }
276
+ exit 1
277
+ [1, 2, 3, 4, 5].__fetch__.each do |e|
278
+ if e == 3
279
+ print "[#{e}, #{(fetch and e)}], "
280
+ else
281
+ print "#{e}, "
282
+ end
283
+ end
284
+ end
285
+
286
+
287
+ print "\n"
288
+
289
+
290
+
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env ruby
2
+ #fib.rb
3
+
4
+
5
+ class Fib
6
+ ToSelect = {}
7
+ def self.spawn &bl
8
+ Fib.new &bl
9
+ end
10
+ attr_reader :forked
11
+ @@current = nil
12
+ def self.current
13
+ @@current
14
+ end
15
+ def initialize &bl
16
+ @forked = true if !@@current
17
+ @fiber = Fiber.new do
18
+ bl.call
19
+ self.class.selectIOEnd
20
+ end
21
+ prev = @@current
22
+ @@current = self
23
+ begin
24
+ toResume = @fiber.resume
25
+ p.green
26
+ if toResume
27
+ p
28
+ toResume.doResume
29
+ p
30
+ end
31
+ ensure
32
+ @@current = prev
33
+ end
34
+ p.red
35
+ end
36
+ def setForked
37
+ @forked = true
38
+ end
39
+ def self.selectIO io
40
+ fid = current
41
+ ToSelect[io] = fid
42
+ if ToSelect.size == 0
43
+ return
44
+ end
45
+ begin
46
+ if !fid.forked
47
+ fid.setForked
48
+ p
49
+ Fiber.yield
50
+ p
51
+ else
52
+ res = IO.select ToSelect.keys
53
+ if res && res[0].size > 0
54
+ res[0].delete io
55
+ if res[0].size > 0
56
+ sio = res[0].shuffle[0]
57
+ Fiber.yield ToSelect[sio]
58
+ end
59
+ end
60
+ end
61
+ ensure
62
+ ToSelect.delete io
63
+ end
64
+ # p
65
+ end
66
+ def self.selectIOEnd
67
+ if ToSelect.size == 0
68
+ return
69
+ end
70
+ res = IO.select ToSelect.keys
71
+ if res && res[0].size > 0
72
+ sio = res[0].shuffle[0]
73
+ Fiber.yield ToSelect[sio]
74
+ p
75
+ end
76
+ end
77
+ def doResume
78
+ @@current = self
79
+ toResume = @fiber.resume
80
+ if toResume
81
+ p
82
+ toResume.doResume
83
+ p
84
+ end
85
+ end
86
+ SleepFib2Io = {}
87
+ def self.sleep sec = nil
88
+ r, w = IO.pipe
89
+ if sec
90
+ Thread.new do
91
+ sleep sec
92
+ if !w.closed?
93
+ w.write "\n"
94
+ w.flush
95
+ end
96
+ end
97
+ end
98
+ SleepFib2Io[current] = w
99
+ selectIO r
100
+ SleepFib2Io.delete current
101
+ r.close
102
+ w.close
103
+ end
104
+ def self.read io, a1 = nil, a2 = nil, &bl
105
+ if a1.is_a? String
106
+ buff = a1
107
+ elsif a2.is_a? String
108
+ buff = a2
109
+ end
110
+ if a1.is_a? Integer
111
+ sz = a1
112
+ elsif a2.is_a? Integer
113
+ sz = a2
114
+ end
115
+ # p io
116
+ selectIO io
117
+ # p buff
118
+ begin
119
+ # p
120
+ buff ||= ""
121
+ io.readpartial sz || 1024, buff
122
+ if bl
123
+ bl.call buff
124
+ end
125
+ # p buff
126
+ rescue EOFError
127
+ # p $!
128
+ nil
129
+ end
130
+ # p
131
+ end
132
+ def self.get_line io
133
+ # p
134
+ buff = ""
135
+ if !read io, buff
136
+ return
137
+ end
138
+ # p buff
139
+ buff.each_line do |ln|
140
+ p
141
+ yield ln
142
+ end
143
+ end
144
+
145
+ def awake
146
+ io = SleepFib2Io[self]
147
+ if io
148
+ io.write "\n"
149
+ io.flush
150
+ end
151
+ end
152
+
153
+ def self.pass
154
+ current.sleep 0
155
+ end
156
+ end
157
+
158
+