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,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
+