Class TkNamespace
In: tk/lib/tk/namespace.rb
Parent: TkObject

Methods

Classes and Modules

Class TkNamespace::Ensemble
Class TkNamespace::NsCode
Class TkNamespace::ScopeArgs

Constants

TkCommandNames = [ 'namespace'.freeze, ].freeze
Tk_Namespace_ID_TBL = TkCore::INTERP.create_table
Tk_Namespace_ID = ["ns".freeze, "00000".taint].freeze

External Aliases

tk_call -> __tk_call
tk_call_without_enc -> __tk_call_without_enc
tk_call_with_enc -> __tk_call_with_enc

Public Class methods

[Source]

# File tk/lib/tk/namespace.rb, line 224
  def self.children(*args)
    # args ::= [<namespace>] [<pattern>]
    # <pattern> must be glob-style pattern
    tk_split_simplelist(tk_call('namespace', 'children', *args)).collect{|ns|
      # ns is fullname
      if Tk_Namespace_ID_TBL.key?(ns)
        Tk_Namespace_ID_TBL[ns]
      else
        ns
      end
    }
  end

[Source]

# File tk/lib/tk/namespace.rb, line 240
  def self.code(script = Proc.new)
    TkNamespace.new('').code(script)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 255
  def self.current
    tk_call('namespace', 'current')
  end

[Source]

# File tk/lib/tk/namespace.rb, line 264
  def self.delete(*ns_list)
    tk_call('namespace', 'delete', *ns_list)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 281
  def self.ensemble_configinfo(cmd, slot = nil)
    if slot
      tk_call('namespace', 'ensemble', 'configure', cmd, '-' + slot.to_s)
    else
      inf = {}
      Hash(*tk_split_simplelist(tk_call('namespace', 'ensemble', 'configure', cmd))).each{|k, v| inf[k[1..-1]] = v}
      inf
    end
  end

[Source]

# File tk/lib/tk/namespace.rb, line 274
  def self.ensemble_configure(cmd, slot, value=None)
    if slot.kind_of?(Hash)
      tk_call('namespace', 'ensemble', 'configure', cmd, *hash_kv(slot))
    else
      tk_call('namespace', 'ensemble', 'configure', cmd, '-'+slot.to_s, value)
    end
  end

[Source]

# File tk/lib/tk/namespace.rb, line 271
  def self.ensemble_create(*keys)
    tk_call('namespace', 'ensemble', 'create', *hash_kv(keys))
  end

[Source]

# File tk/lib/tk/namespace.rb, line 290
  def self.ensemble_exist?(cmd)
    bool(tk_call('namespace', 'ensemble', 'exists', cmd))
  end

[Source]

# File tk/lib/tk/namespace.rb, line 294
  def self.eval(namespace, cmd = Proc.new, *args)
    #tk_call('namespace', 'eval', namespace, cmd, *args)
    TkNamespace.new(namespece).eval(cmd, *args)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 308
  def self.exist?(ns)
    bool(tk_call('namespace', 'exists', ns))
  end

[Source]

# File tk/lib/tk/namespace.rb, line 315
  def self.export(*patterns)
    tk_call('namespace', 'export', *patterns)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 318
  def self.export_with_clear(*patterns)
    tk_call('namespace', 'export', '-clear', *patterns)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 338
  def self.force_import(*patterns)
    tk_call('namespace', 'import', '-force', *patterns)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 328
  def self.forget(*patterns)
    tk_call('namespace', 'forget', *patterns)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 371
  def self.get_path
    tk_call('namespace', 'path')
  end

[Source]

# File tk/lib/tk/namespace.rb, line 335
  def self.import(*patterns)
    tk_call('namespace', 'import', *patterns)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 348
  def self.inscope(namespace, script, *args)
    tk_call('namespace', 'inscope', namespace, script, *args)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 182
  def initialize(name = nil, parent = nil)
    unless name
      # name = Tk_Namespace_ID.join('')
      name = Tk_Namespace_ID.join(TkCore::INTERP._ip_id_)
      Tk_Namespace_ID[1].succ!
    end
    name = __tk_call('namespace', 'current') if name == ''
    if parent
      if parent =~ /^::/
        if name =~ /^::/
          @fullname = parent + name
        else
          @fullname = parent +'::'+ name
        end
      else
        ancestor = __tk_call('namespace', 'current')
        ancestor = '' if ancestor == '::'
        if name =~ /^::/
          @fullname = ancestor + '::' + parent + name
        else
          @fullname = ancestor + '::'+ parent +'::'+ name
        end
      end
    else # parent == nil
      ancestor = __tk_call('namespace', 'current')
      ancestor = '' if ancestor == '::'
      if name =~ /^::/
        @fullname = name
      else
        @fullname = ancestor + '::' + name
      end
    end
    @path = @fullname
    @parent = __tk_call('namespace', 'qualifiers', @fullname)
    @name = __tk_call('namespace', 'tail', @fullname)

    # create namespace
    __tk_call('namespace', 'eval', @fullname, '')

    Tk_Namespace_ID_TBL[@fullname] = self
  end

[Source]

# File tk/lib/tk/namespace.rb, line 355
  def self.origin(cmd)
    tk_call('namespace', 'origin', cmd)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 359
  def self.parent(namespace=None)
    ns = tk_call('namespace', 'parent', namespace)
    if Tk_Namespace_ID_TBL.key?(ns)
      Tk_Namespace_ID_TBL[ns]
    else
      ns
    end
  end

[Source]

# File tk/lib/tk/namespace.rb, line 381
  def self.qualifiers(str)
    tk_call('namespace', 'qualifiers', str)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 374
  def self.set_path(*namespace_list)
    tk_call('namespace', 'path', array2tk_list(namespace_list))
  end

[Source]

# File tk/lib/tk/namespace.rb, line 385
  def self.tail(str)
    tk_call('namespace', 'tail', str)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 389
  def self.which(name)
    tk_call('namespace', 'which', name)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 392
  def self.which_command(name)
    tk_call('namespace', 'which', '-command', name)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 395
  def self.which_variable(name)
    tk_call('namespace', 'which', '-variable', name)
  end

Public Instance methods

[Source]

# File tk/lib/tk/namespace.rb, line 236
  def children(pattern=None)
    TkNamespace.children(@fullname, pattern)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 243
  def code(script = Proc.new)
    if script.kind_of?(String)
      cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(script)}
    elsif script.kind_of?(Proc)
      cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(&script)}
    else
      fail ArgumentError, "String or Proc is expected"
    end
    TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code', 
                                                _get_eval_string(cmd, false)))
  end
current()

Alias for current_namespace

[Source]

# File tk/lib/tk/namespace.rb, line 258
  def current_namespace
    # ns_tk_call('namespace', 'current')
    @fullname
  end

[Source]

# File tk/lib/tk/namespace.rb, line 267
  def delete
    TkNamespece.delete(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 298
  def eval(cmd = Proc.new, *args)
    #TkNamespace.eval(@fullname, cmd, *args)
    #ns_tk_call(cmd, *args)
    code_obj = code(cmd)
    ret = code_obj.call(*args)
    # uninstall_cmd(TkCore::INTERP._split_tklist(code_obj.path)[-1])
    uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))
    ret
  end

[Source]

# File tk/lib/tk/namespace.rb, line 311
  def exist?
    TkNamespece.delete(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 321
  def export
    TkNamespace.export(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 324
  def export_with_clear
    TkNamespace.export_with_clear(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 344
  def force_import
    TkNamespace.force_import(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 331
  def forget
    TkNamespace.forget(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 341
  def import
    TkNamespace.import(@fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 351
  def inscope(script, *args)
    TkNamespace(@fullname, script, *args)
  end
ns_tk_call(*args)

Alias for tk_call

ns_tk_call_with_enc(*args)

Alias for tk_call_with_enc

ns_tk_call_without_enc(*args)

[Source]

# File tk/lib/tk/namespace.rb, line 367
  def parent
    tk_call('namespace', 'parent', @fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 377
  def set_path
    tk_call('namespace', 'path', @fullname)
  end

[Source]

# File tk/lib/tk/namespace.rb, line 160
  def tk_call(*args)
    #super('namespace', 'eval', @fullname, *args)
    args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
    super('namespace', 'eval', @fullname, 
          TkCore::INTERP._merge_tklist(*args))
  end

[Source]

# File tk/lib/tk/namespace.rb, line 172
  def tk_call_with_enc(*args)
    #super('namespace', 'eval', @fullname, *args)
    args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
    super('namespace', 'eval', @fullname, 
          TkCore::INTERP._merge_tklist(*args))
  end

[Source]

# File tk/lib/tk/namespace.rb, line 166
  def tk_call_without_enc(*args)
    #super('namespace', 'eval', @fullname, *args)
    args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
    super('namespace', 'eval', @fullname,  
          TkCore::INTERP._merge_tklist(*args))
  end

[Validate]