~ubuntu-branches/ubuntu/trusty/ruby1.9/trusty

« back to all changes in this revision

Viewing changes to ext/tk/lib/tk/namespace.rb

  • Committer: Bazaar Package Importer
  • Author(s): Lucas Nussbaum
  • Date: 2006-05-08 22:23:12 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060508222312-w2wqeaz030ifi59j
Tags: 1.9.0+20060423-3ubuntu1
* Resynchronized with Debian.
* Only change from Debian is the addition of
  debian/patches/903_sparc_fix_define.patch to fix illegal instructions
  at runtime on sparc. (change from 1.9.0+20050921-1ubuntu1)

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
  Tk_Namespace_ID_TBL = TkCore::INTERP.create_table
15
15
  Tk_Namespace_ID = ["ns".freeze, "00000".taint].freeze
16
16
 
 
17
  Tk_NsCode_RetObjID_TBL = TkCore::INTERP.create_table
 
18
 
 
19
  TkCore::INTERP.init_ip_env{
 
20
    Tk_Namespace_ID_TBL.clear
 
21
    Tk_NsCode_RetObjID_TBL.clear
 
22
  }
 
23
 
 
24
  def TkNamespace.id2obj(id)
 
25
    Tk_Namespace_ID_TBL[id]? Tk_Namespace_ID_TBL[id]: id
 
26
  end
 
27
 
 
28
  #####################################
 
29
 
17
30
  class Ensemble < TkObject
18
31
    def __cget_cmd
19
32
      ['namespace', 'ensemble', 'configure', self.path]
107
120
    end
108
121
  end
109
122
 
 
123
  #####################################
 
124
 
110
125
  class ScopeArgs < Array
111
126
    include Tk
112
127
 
139
154
    end
140
155
  end
141
156
 
 
157
  #####################################
 
158
 
142
159
  class NsCode < TkObject
143
 
    def initialize(scope)
 
160
    def initialize(scope, use_obj_id = false)
144
161
      @scope = scope + ' '
 
162
      @use_obj_id = use_obj_id
145
163
    end
146
164
    def path
147
165
      @scope
150
168
      @scope
151
169
    end
152
170
    def call(*args)
153
 
      TkCore::INTERP._eval_without_enc(@scope + array2tk_list(args))
154
 
    end
 
171
      ret = TkCore::INTERP._eval_without_enc(@scope + array2tk_list(args))
 
172
      if @use_obj_id
 
173
        ret = TkNamespace::Tk_NsCode_RetObjID_TBL.delete(ret.to_i)
 
174
      end
 
175
      ret
 
176
    end
 
177
  end
 
178
 
 
179
  #####################################
 
180
 
 
181
  def install_cmd(cmd)
 
182
    lst = tk_split_simplelist(super(cmd), false, false)
 
183
    if lst[1] =~ /^::/
 
184
      lst[1] = @fullname
 
185
    else
 
186
      lst.insert(1, @fullname)
 
187
    end
 
188
    TkCore::INTERP._merge_tklist(*lst)
155
189
  end
156
190
 
157
191
  alias __tk_call             tk_call
240
274
  def self.code(script = Proc.new)
241
275
    TkNamespace.new('').code(script)
242
276
  end
 
277
=begin
243
278
  def code(script = Proc.new)
244
279
    if script.kind_of?(String)
245
280
      cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(script)}
251
286
    TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code', 
252
287
                                                _get_eval_string(cmd, false)))
253
288
  end
 
289
=end
 
290
  def code(script = Proc.new)
 
291
    if script.kind_of?(String)
 
292
      cmd = proc{|*args|
 
293
        ret = ScopeArgs.new(@fullname,*args).instance_eval(script)
 
294
        id = ret.object_id
 
295
        TkNamespace::Tk_NsCode_RetObjID_TBL[id] = ret
 
296
        id
 
297
      }
 
298
    elsif script.kind_of?(Proc)
 
299
      cmd = proc{|*args|
 
300
        ret = ScopeArgs.new(@fullname,*args).instance_eval(&script)
 
301
        id = ret.object_id
 
302
        TkNamespace::Tk_NsCode_RetObjID_TBL[id] = ret
 
303
        id
 
304
      }
 
305
    else
 
306
      fail ArgumentError, "String or Proc is expected"
 
307
    end
 
308
    TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code', 
 
309
                                                _get_eval_string(cmd, false)), 
 
310
                            true)
 
311
  end
 
312
 
 
313
  def self.current_path
 
314
    tk_call('namespace', 'current')
 
315
  end
 
316
  def current_path
 
317
    @fullname
 
318
  end
254
319
 
255
320
  def self.current
256
 
    tk_call('namespace', 'current')
 
321
    ns = self.current_path
 
322
    if Tk_Namespace_ID_TBL.key?(ns)
 
323
      Tk_Namespace_ID_TBL[ns]
 
324
    else
 
325
      ns
 
326
    end
257
327
  end
258
328
  def current_namespace
259
329
    # ns_tk_call('namespace', 'current')
260
 
    @fullname
 
330
    # @fullname
 
331
    self
261
332
  end
262
333
  alias current current_namespace
263
334
 
264
335
  def self.delete(*ns_list)
265
336
    tk_call('namespace', 'delete', *ns_list)
 
337
    ns_list.each{|ns|
 
338
      if ns.kind_of?(TkNamespace)
 
339
        Tk_Namespace_ID_TBL.delete(ns.path)
 
340
      else
 
341
        Tk_Namespace_ID_TBL.delete(ns.to_s)
 
342
      end
 
343
    }
266
344
  end
267
345
  def delete
268
346
    TkNamespece.delete(@fullname)
295
373
    #tk_call('namespace', 'eval', namespace, cmd, *args)
296
374
    TkNamespace.new(namespece).eval(cmd, *args)
297
375
  end
 
376
=begin
298
377
  def eval(cmd = Proc.new, *args)
299
378
    #TkNamespace.eval(@fullname, cmd, *args)
300
379
    #ns_tk_call(cmd, *args)
302
381
    ret = code_obj.call(*args)
303
382
    # uninstall_cmd(TkCore::INTERP._split_tklist(code_obj.path)[-1])
304
383
    uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))
 
384
    tk_tcl2ruby(ret)
 
385
  end
 
386
=end
 
387
  def eval(cmd = Proc.new, *args)
 
388
    code_obj = code(cmd)
 
389
    ret = code_obj.call(*args)
 
390
    uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))
305
391
    ret
306
392
  end
307
393
 
309
395
    bool(tk_call('namespace', 'exists', ns))
310
396
  end
311
397
  def exist?
312
 
    TkNamespece.delete(@fullname)
 
398
    TkNamespece.exist?(@fullname)
313
399
  end
314
400
 
315
401
  def self.export(*patterns)
349
435
    tk_call('namespace', 'inscope', namespace, script, *args)
350
436
  end
351
437
  def inscope(script, *args)
352
 
    TkNamespace(@fullname, script, *args)
 
438
    TkNamespace.inscope(@fullname, script, *args)
353
439
  end
354
440
 
355
441
  def self.origin(cmd)
396
482
    tk_call('namespace', 'which', '-variable', name)
397
483
  end
398
484
end
 
485
 
 
486
TkNamespace::Global = TkNamespace.new('::')