GET_CONFIGINFO_AS_ARRAY = false => returns a Hash { opt =>val, … }
true => returns an Array [[opt,val], ... ]
val is a list which includes resource info.
for configinfo without resource info; list of [opt, value] pair
false => returns a Hash { opt=>val, ... }
true => returns an Array [[opt,val], ... ]for backward compatibility
Tk_CMDTBL = {} Tk_WINDOWS = {}
# File tk/lib/tk.rb, line 183
def _at(x,y=nil)
if y
"@#{Integer(x)},#{Integer(y)}"
else
"@#{Integer(x)}"
end
end
# File tk/lib/tk.rb, line 652
def _callback_entry?(obj)
obj.kind_of?(Proc) || obj.kind_of?(Method) || obj.kind_of?(TkCallbackEntry)
end
# File tk/lib/tk.rb, line 646
def _callback_entry_class?(cls)
cls <= Proc || cls <= Method || cls <= TkCallbackEntry
end
### --> definition is moved to TkUtil module def _conv_args(args, enc_mode, *src_args) conv_args = [] src_args.each{|arg| conv_args << _get_eval_string(arg, enc_mode) unless arg == None # if arg.kind_of?(Hash) # arg.each{|k, v| # args << '-' + k.to_s # args << _get_eval_string(v, enc_mode) # } # elsif arg != None # args << _get_eval_string(arg, enc_mode) # end } args + conv_args end private :_conv_args
# File tk/lib/tk.rb, line 781
def _curr_cmd_id
#id = format("c%.4d", Tk_IDs[0])
id = "c" + TkCore::INTERP._ip_id_ + TkComm::Tk_IDs[0]
end
# File tk/lib/tk.rb, line 640
def _fromUTF8(str, encoding = nil)
TkCore::INTERP._fromUTF8(str, encoding)
end
# File tk/lib/tk.rb, line 82
def _genobj_for_tkwidget(path)
return TkRoot.new if path == '.'
begin
#tk_class = TkCore::INTERP._invoke('winfo', 'class', path)
tk_class = Tk.ip_invoke_without_enc('winfo', 'class', path)
rescue
return path
end
if ruby_class = WidgetClassNames[tk_class]
ruby_class_name = ruby_class.name
# gen_class_name = ruby_class_name + 'GeneratedOnTk'
gen_class_name = ruby_class_name
classname_def = ''
else # ruby_class == nil
mods = TkExtlibAutoloadModule.find_all{|m| m.const_defined?(tk_class)}
mods.each{|mod|
begin
mod.const_get(tk_class) # auto_load
break if (ruby_class = WidgetClassNames[tk_class])
rescue LoadError
# ignore load error
end
}
unless ruby_class
std_class = 'Tk' << tk_class
if Object.const_defined?(std_class)
Object.const_get(std_class) # auto_load
ruby_class = WidgetClassNames[tk_class]
end
end
if ruby_class
# found
ruby_class_name = ruby_class.name
gen_class_name = ruby_class_name
classname_def = ''
else
# unknown
ruby_class_name = 'TkWindow'
gen_class_name = 'TkWidget_' + tk_class
classname_def = "WidgetClassName = '#{tk_class}'.freeze"
end
end
###################################
=begin
if ruby_class = WidgetClassNames[tk_class]
ruby_class_name = ruby_class.name
# gen_class_name = ruby_class_name + 'GeneratedOnTk'
gen_class_name = ruby_class_name
classname_def = ''
else
mod = TkExtlibAutoloadModule.find{|m| m.const_defined?(tk_class)}
if mod
ruby_class_name = mod.name + '::' + tk_class
gen_class_name = ruby_class_name
classname_def = ''
elsif Object.const_defined?('Tk' + tk_class)
ruby_class_name = 'Tk' + tk_class
# gen_class_name = ruby_class_name + 'GeneratedOnTk'
gen_class_name = ruby_class_name
classname_def = ''
else
ruby_class_name = 'TkWindow'
# gen_class_name = ruby_class_name + tk_class + 'GeneratedOnTk'
gen_class_name = 'TkWidget_' + tk_class
classname_def = "WidgetClassName = '#{tk_class}'.freeze"
end
end
=end
=begin
unless Object.const_defined? gen_class_name
Object.class_eval "class #{gen_class_name}<#{ruby_class_name}
#{classname_def}
end"
end
Object.class_eval "#{gen_class_name}.new('widgetname'=>'#{path}',
'without_creating'=>true)"
=end
base = Object
gen_class_name.split('::').each{|klass|
next if klass == ''
if base.const_defined?(klass)
base = base.class_eval klass
else
base = base.class_eval "class #{klass}<#{ruby_class_name}
#{classname_def}
end
#{klass}"
end
}
base.class_eval "#{gen_class_name}.new('widgetname'=>'#{path}',
'without_creating'=>true)"
end
# File tk/lib/tk.rb, line 785
def _next_cmd_id
id = _curr_cmd_id
#Tk_IDs[0] += 1
TkComm::Tk_IDs[0].succ!
id
end
# File tk/lib/tk.rb, line 637
def _toUTF8(str, encoding = nil)
TkCore::INTERP._toUTF8(str, encoding)
end
# File tk/lib/tk.rb, line 315
def array2tk_list(ary, enc=nil)
return "" if ary.size == 0
sys_enc = TkCore::INTERP.encoding
sys_enc = TclTkLib.encoding_system unless sys_enc
dst_enc = (enc == nil)? sys_enc: enc
dst = ary.collect{|e|
if e.kind_of? Array
s = array2tk_list(e, enc)
elsif e.kind_of? Hash
tmp_ary = []
#e.each{|k,v| tmp_ary << k << v }
e.each{|k,v| tmp_ary << "-#{_get_eval_string(k)}" << v }
s = array2tk_list(tmp_ary, enc)
else
s = _get_eval_string(e, enc)
end
if dst_enc != true && dst_enc != false
if (s_enc = s.instance_variable_get(:@encoding))
s_enc = s_enc.to_s
else
s_enc = sys_enc
end
dst_enc = true if s_enc != dst_enc
end
s
}
if sys_enc && dst_enc
dst.map!{|s| _toUTF8(s)}
ret = TkCore::INTERP._merge_tklist(*dst)
if dst_enc.kind_of?(String)
ret = _fromUTF8(ret, dst_enc)
ret.instance_variable_set(:@encoding, dst_enc)
else
ret.instance_variable_set(:@encoding, 'utf-8')
end
ret
else
TkCore::INTERP._merge_tklist(*dst)
end
end
# File tk/lib/tk.rb, line 602
def image_obj(val)
if val =~ /^i(_\d+_)?\d+$/
TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val
else
val
end
end
# File tk/lib/tk.rb, line 794
def install_cmd(cmd)
return '' if cmd == ''
begin
ns = TkCore::INTERP._invoke_without_enc('namespace', 'current')
ns = nil if ns == '::' # for backward compatibility
rescue
# probably, Tcl7.6
ns = nil
end
id = _next_cmd_id
#Tk_CMDTBL[id] = cmd
if cmd.kind_of?(TkCallbackEntry)
TkCore::INTERP.tk_cmd_tbl[id] = cmd
else
TkCore::INTERP.tk_cmd_tbl[id] = TkCore::INTERP.get_cb_entry(cmd)
end
@cmdtbl = [] unless defined? @cmdtbl
@cmdtbl.taint unless @cmdtbl.tainted?
@cmdtbl.push id
#return Kernel.format("rb_out %s", id);
if ns
'rb_out' << TkCore::INTERP._ip_id_ << ' ' << ns << ' ' << id
else
'rb_out' << TkCore::INTERP._ip_id_ << ' ' << id
end
end
### --> definition is moved to TkUtil module def bool(val) case val when "1", 1, 'yes', 'true' true else false end end def number(val) case val when /^-?\d+$/ val.to_i when /^-?\d+\.?\d*(e[-+]?\d+)?$/ val.to_f else fail(ArgumentError, "invalid value for Number:'#{val}'") end end def string(val) if val == "{}" '' elsif val[0] == ?{ && val[-1] == ?} val[1..-2] else val end end def num_or_str(val) begin number(val) rescue ArgumentError string(val) end end
# File tk/lib/tk.rb, line 587
def list(val, depth=0, enc=true)
tk_split_list(val, depth, enc, enc)
end
# File tk/lib/tk.rb, line 609
def procedure(val)
=begin
if val =~ /^rb_out\S* (c(_\d+_)?\d+)/
#Tk_CMDTBL[$1]
#TkCore::INTERP.tk_cmd_tbl[$1]
TkCore::INTERP.tk_cmd_tbl[$1].cmd
=end
if val =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/
return TkCore::INTERP.tk_cmd_tbl[$4].cmd
else
#nil
val
end
end
# File tk/lib/tk.rb, line 590
def simplelist(val, src_enc=true, dst_enc=true)
tk_split_simplelist(val, src_enc, dst_enc)
end
# File tk/lib/tk.rb, line 192
def tk_tcl2ruby(val, enc_mode = false, listobj = true)
=begin
if val =~ /^rb_out\S* (c(_\d+_)?\d+)/
#return Tk_CMDTBL[$1]
return TkCore::INTERP.tk_cmd_tbl[$1]
#cmd_obj = TkCore::INTERP.tk_cmd_tbl[$1]
#if cmd_obj.kind_of?(Proc) || cmd_obj.kind_of?(Method)
# cmd_obj
#else
# cmd_obj.cmd
#end
end
=end
if val =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/
return TkCore::INTERP.tk_cmd_tbl[$4]
end
#if val.include? ?\s
# return val.split.collect{|v| tk_tcl2ruby(v)}
#end
case val
when /\A@font\S+\z/
TkFont.get_obj(val)
when /\A-?\d+\z/
val.to_i
when /\A\.\S*\z/
#Tk_WINDOWS[val] ? Tk_WINDOWS[val] : _genobj_for_tkwidget(val)
TkCore::INTERP.tk_windows[val]?
TkCore::INTERP.tk_windows[val] : _genobj_for_tkwidget(val)
when /\Ai(_\d+_)?\d+\z/
TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val
when /\A-?\d+\.?\d*(e[-+]?\d+)?\z/
val.to_f
when /\\ /
val.gsub(/\\ /, ' ')
when /[^\\] /
if listobj
#tk_split_escstr(val).collect{|elt|
# tk_tcl2ruby(elt, enc_mode, listobj)
#}
val = _toUTF8(val) unless enc_mode
tk_split_escstr(val, false, false).collect{|elt|
tk_tcl2ruby(elt, true, listobj)
}
elsif enc_mode
_fromUTF8(val)
else
val
end
else
if enc_mode
_fromUTF8(val)
else
val
end
end
end
def bind(tagOrClass, context, cmd=Proc.new, *args)
_bind(["bind", tagOrClass], context, cmd, *args) tagOrClass
end
# File tk/lib/tk.rb, line 1005
def bind(tagOrClass, context, *args)
# if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
if TkComm._callback_entry?(args[0]) || !block_given?
cmd = args.shift
else
cmd = Proc.new
end
_bind(["bind", tagOrClass], context, cmd, *args)
tagOrClass
end
def #bind_all(context, cmd=Proc.new, *args)
_bind(['bind', 'all'], context, cmd, *args) TkBindTag::ALL
end
# File tk/lib/tk.rb, line 1044
def bind_all(context, *args)
# if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
if TkComm._callback_entry?(args[0]) || !block_given?
cmd = args.shift
else
cmd = Proc.new
end
_bind(['bind', 'all'], context, cmd, *args)
TkBindTag::ALL
end
def #bind_append(tagOrClass, context, cmd=Proc.new, *args)
_bind_append(["bind", tagOrClass], context, cmd, *args) tagOrClass
end
# File tk/lib/tk.rb, line 1020
def bind_append(tagOrClass, context, *args)
# if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
if TkComm._callback_entry?(args[0]) || !block_given?
cmd = args.shift
else
cmd = Proc.new
end
_bind_append(["bind", tagOrClass], context, cmd, *args)
tagOrClass
end
def #bind_append_all(context, cmd=Proc.new, *args)
_bind_append(['bind', 'all'], context, cmd, *args) TkBindTag::ALL
end
# File tk/lib/tk.rb, line 1059
def bind_append_all(context, *args)
# if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
if TkComm._callback_entry?(args[0]) || !block_given?
cmd = args.shift
else
cmd = Proc.new
end
_bind_append(['bind', 'all'], context, cmd, *args)
TkBindTag::ALL
end
# File tk/lib/tk.rb, line 1031
def bind_remove(tagOrClass, context)
_bind_remove(['bind', tagOrClass], context)
tagOrClass
end
# File tk/lib/tk.rb, line 1070
def bind_remove_all(context)
_bind_remove(['bind', 'all'], context)
TkBindTag::ALL
end
# File tk/lib/tk.rb, line 1036
def bindinfo(tagOrClass, context=nil)
_bindinfo(['bind', tagOrClass], context)
end