File: tk/itemconfig.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: TkItemConfigOptkeys#8
includes
  TkUtil   
has properties
method: __item_optkey_aliases / 1 #11
method: __item_numval_optkeys / 1 #16
method: __item_numstrval_optkeys / 1 #21
method: __item_boolval_optkeys / 1 #26
method: __item_strval_optkeys / 1 #31
method: __item_listval_optkeys / 1 #43
method: __item_numlistval_optkeys / 1 #48
method: __item_tkvariable_optkeys / 1 #54
method: __item_val2ruby_optkeys / 1 #59
method: __item_ruby2val_optkeys / 1 #66
method: __item_methodcall_optkeys / 1 #74
method: __item_keyonly_optkeys / 1 #86
method: __conv_item_keyonly_opts / 2 #93
method: itemconfig_hash_kv / 4 #113
  module: TkItemConfigMethod#118
includes
  TkUtil   
  TkItemConfigOptkeys   
  TkTreatItemFont   
has properties
module method: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ #123
module method: __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__! / 1 #126
method: __item_cget_cmd / 1 #131
method: __item_config_cmd / 1 #137
method: __item_confinfo_cmd / 1 #143
method: __item_configinfo_struct / 1 #149
method: tagid / 1 #158
method: __itemcget_core / 2 #165
method: itemcget / 2 #247
method: itemcget_strict / 2 #268
method: __itemconfigure_core / 3 #273
method: __check_available_itemconfigure_options / 2 #350
method: itemconfigure / 3 #367
method: __itemconfiginfo_core / 2 #399
method: itemconfiginfo / 2 #1160
method: __current_itemconfiginfo / 2 #1178
method: current_itemconfiginfo / 2 #1212

Code

   1  #
   2  # tk/itemconfig.rb : control item/tag configuration of widget
   3  #
   4  require 'tk'
   5  require 'tkutil'
   6  require 'tk/itemfont.rb'
   7 
   8  module TkItemConfigOptkeys
   9    include TkUtil
  10 
  11    def __item_optkey_aliases(id)
  12      {}
  13    end
  14    private :__item_optkey_aliases
  15 
  16    def __item_numval_optkeys(id)
  17      []
  18    end
  19    private :__item_numval_optkeys
  20 
  21    def __item_numstrval_optkeys(id)
  22      []
  23    end
  24    private :__item_numstrval_optkeys
  25 
  26    def __item_boolval_optkeys(id)
  27      ['exportselection', 'jump', 'setgrid', 'takefocus']
  28    end
  29    private :__item_boolval_optkeys
  30 
  31    def __item_strval_optkeys(id)
  32      # maybe need to override
  33      [
  34        'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile', 
  35        'activebackground', 'activeforeground', 'background', 
  36        'disabledforeground', 'disabledbackground', 'foreground', 
  37        'highlightbackground', 'highlightcolor', 'insertbackground', 
  38        'selectbackground', 'selectforeground', 'troughcolor'
  39      ]
  40    end
  41    private :__item_strval_optkeys
  42 
  43    def __item_listval_optkeys(id)
  44      []
  45    end
  46    private :__item_listval_optkeys
  47 
  48    def __item_numlistval_optkeys(id)
  49      # maybe need to override
  50      ['dash', 'activedash', 'disableddash']
  51    end
  52    private :__item_numlistval_optkeys
  53 
  54    def __item_tkvariable_optkeys(id)
  55      ['variable', 'textvariable']
  56    end
  57    private :__item_tkvariable_optkeys
  58 
  59    def __item_val2ruby_optkeys(id)  # { key=>method, ... }
  60      # The method is used to convert a opt-value to a ruby's object.
  61      # When get the value of the option "key", "method.call(id, val)" is called.
  62      {}
  63    end
  64    private :__item_val2ruby_optkeys
  65 
  66    def __item_ruby2val_optkeys(id)  # { key=>method, ... }
  67      # The method is used to convert a ruby's object to a opt-value.
  68      # When set the value of the option "key", "method.call(id, val)" is called.
  69      # That is, "-#{key} #{method.call(id, value)}".
  70      {}
  71    end
  72    private :__item_ruby2val_optkeys
  73 
  74    def __item_methodcall_optkeys(id)  # { key=>method, ... }
  75      # Use the method for both of get and set.
  76      # Usually, the 'key' will not be a widget option.
  77      #
  78      # maybe need to override
  79      # {'coords'=>'coords'}
  80      {}
  81    end
  82    private :__item_methodcall_optkeys
  83 
  84    ################################################
  85 
  86    def __item_keyonly_optkeys(id)  # { def_key=>(undef_key|nil), ... }
  87      # maybe need to override
  88      {}
  89    end
  90    private :__item_keyonly_optkeys
  91 
  92 
  93    def __conv_item_keyonly_opts(id, keys)
  94      return keys unless keys.kind_of?(Hash)
  95      keyonly = __item_keyonly_optkeys(id)
  96      keys2 = {}
  97      keys.each{|k, v|
  98        optkey = keyonly.find{|kk,vv| kk.to_s == k.to_s}
  99        if optkey
 100          defkey, undefkey = optkey
 101          if v
 102            keys2[defkey.to_s] = None
 103          else
 104            keys2[undefkey.to_s] = None
 105          end
 106        else
 107          keys2[k.to_s] = v
 108        end
 109      }
 110      keys2
 111    end
 112 
 113    def itemconfig_hash_kv(id, keys, enc_mode = nil, conf = nil)
 114      hash_kv(__conv_item_keyonly_opts(id, keys), enc_mode, conf)
 115    end
 116  end
 117 
 118  module TkItemConfigMethod
 119    include TkUtil
 120    include TkTreatItemFont
 121    include TkItemConfigOptkeys
 122 
 123    def TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
 124      @mode || false
 125    end
 126    def TkItemConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode)
 127      fail SecurityError, "can't change the mode" if $SAFE>=4
 128      @mode = (mode)? true: false
 129    end
 130 
 131    def __item_cget_cmd(id)
 132      # maybe need to override
 133      [self.path, 'itemcget', id]
 134    end
 135    private :__item_cget_cmd
 136 
 137    def __item_config_cmd(id)
 138      # maybe need to override
 139      [self.path, 'itemconfigure', id]
 140    end
 141    private :__item_config_cmd
 142 
 143    def __item_confinfo_cmd(id)
 144      # maybe need to override
 145      __item_config_cmd(id)
 146    end
 147    private :__item_confinfo_cmd
 148 
 149    def __item_configinfo_struct(id)
 150      # maybe need to override
 151      {:key=>0, :alias=>1, :db_name=>1, :db_class=>2, 
 152        :default_value=>3, :current_value=>4}
 153    end
 154    private :__item_configinfo_struct
 155 
 156    ################################################
 157 
 158    def tagid(tagOrId)
 159      # maybe need to override
 160      tagOrId
 161    end
 162 
 163    ################################################
 164 
 165    def __itemcget_core(tagOrId, option)
 166      orig_opt = option
 167      option = option.to_s
 168 
 169      if option.length == 0
 170        fail ArgumentError, "Invalid option `#{orig_opt.inspect}'"
 171      end
 172 
 173      alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == option}
 174      if real_name
 175        option = real_name.to_s
 176      end
 177 
 178      if ( method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[option] )
 179        optval = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
 180        begin
 181          return method.call(tagOrId, optval)
 182        rescue => e
 183          warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 184          return optval
 185        end
 186      end
 187 
 188      if ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[option] )
 189        return self.__send__(method, tagOrId)
 190      end
 191 
 192      case option
 193      when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
 194        begin
 195          number(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
 196        rescue
 197          nil
 198        end
 199 
 200      when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
 201        num_or_str(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
 202 
 203      when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
 204        begin
 205          bool(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
 206        rescue
 207          nil
 208        end
 209 
 210      when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
 211        simplelist(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
 212 
 213      when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
 214        conf = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
 215        if conf =~ /^[0-9]/
 216          list(conf)
 217        else
 218          conf
 219        end
 220 
 221      when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
 222        v = tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}"))
 223        (v.empty?)? nil: TkVarAccess.new(v)
 224 
 225      when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
 226        _fromUTF8(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")))
 227 
 228      when /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/
 229        fontcode = $1
 230        fontkey  = $2
 231        fnt = tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{fontkey}")), true)
 232        unless fnt.kind_of?(TkFont)
 233          fnt = tagfontobj(tagid(tagOrId), fontkey)
 234        end
 235        if fontcode == 'kanji' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
 236          # obsolete; just for compatibility
 237          fnt.kanji_font
 238        else
 239          fnt
 240        end
 241      else
 242        tk_tcl2ruby(tk_call_without_enc(*(__item_cget_cmd(tagid(tagOrId)) << "-#{option}")), true)
 243      end
 244    end
 245    private :__itemcget_core
 246 
 247    def itemcget(tagOrId, option)
 248      unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
 249        __itemcget_core(tagOrId, option)
 250      else
 251        begin
 252          __itemcget_core(tagOrId, option)
 253        rescue => e
 254          begin
 255            if __current_itemconfiginfo(tagOrId).has_key?(option.to_s)
 256              # not tag error & option is known -> error on known option
 257              fail e
 258            else
 259              # not tag error & option is unknown
 260              nil
 261            end
 262          rescue
 263            fail e  # tag error
 264          end
 265        end
 266      end
 267    end
 268    def itemcget_strict(tagOrId, option)
 269      # never use TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
 270      __itemcget_core(tagOrId, option)
 271    end
 272 
 273    def __itemconfigure_core(tagOrId, slot, value=None)
 274      if slot.kind_of? Hash
 275        slot = _symbolkey2str(slot)
 276 
 277        __item_optkey_aliases(tagid(tagOrId)).each{|alias_name, real_name|
 278          alias_name = alias_name.to_s
 279          if slot.has_key?(alias_name)
 280            slot[real_name.to_s] = slot.delete(alias_name)
 281          end
 282        }
 283 
 284        __item_methodcall_optkeys(tagid(tagOrId)).each{|key, method|
 285          value = slot.delete(key.to_s)
 286          self.__send__(method, tagOrId, value) if value
 287        }
 288 
 289        __item_ruby2val_optkeys(tagid(tagOrId)).each{|key, method|
 290          key = key.to_s
 291          slot[key] = method.call(tagOrId, slot[key]) if slot.has_key?(key)
 292        }
 293 
 294        __item_keyonly_optkeys(tagid(tagOrId)).each{|defkey, undefkey|
 295          conf = slot.find{|kk, vv| kk == defkey.to_s}
 296          if conf
 297            k, v = conf
 298            if v
 299              slot[k] = None
 300            else
 301              slot[undefkey.to_s] = None if undefkey
 302              slot.delete(k)
 303            end
 304          end
 305        }
 306 
 307        if (slot.find{|k, v| k =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/})
 308          tagfont_configure(tagid(tagOrId), slot)
 309        elsif slot.size > 0
 310          tk_call(*(__item_config_cmd(tagid(tagOrId)).concat(hash_kv(slot))))
 311        end
 312 
 313      else
 314        orig_slot = slot
 315        slot = slot.to_s
 316        if slot.length == 0
 317          fail ArgumentError, "Invalid option `#{orig_slot.inspect}'"
 318        end
 319 
 320        alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}
 321        if real_name
 322          slot = real_name.to_s
 323        end
 324 
 325        if ( conf = __item_keyonly_optkeys(tagid(tagOrId)).find{|k, v| k.to_s == slot } )
 326          defkey, undefkey = conf
 327          if value
 328            tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{defkey}"))
 329          elsif undefkey
 330            tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{undefkey}"))
 331          end
 332        elsif ( method = _symbolkey2str(__item_ruby2val_optkeys(tagid(tagOrId)))[slot] )
 333          tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}" << method.call(tagOrId, value)))
 334        elsif ( method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot] )
 335          self.__send__(method, tagOrId, value)
 336        elsif (slot =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
 337          if value == None
 338            tagfontobj(tagid(tagOrId), $2)
 339          else
 340            tagfont_configure(tagid(tagOrId), {slot=>value})
 341          end
 342        else
 343          tk_call(*(__item_config_cmd(tagid(tagOrId)) << "-#{slot}" << value))
 344        end
 345      end
 346      self
 347    end
 348    private :__itemconfigure_core
 349 
 350    def __check_available_itemconfigure_options(tagOrId, keys)
 351      id = tagid(tagOrId)
 352 
 353      availables = self.__current_itemconfiginfo(id).keys
 354 
 355      # add non-standard keys
 356      availables |= __font_optkeys.map{|k|
 357        [k.to_s, "latin#{k}", "ascii#{k}", "kanji#{k}"]
 358      }.flatten
 359      availables |= __item_methodcall_optkeys(id).keys.map{|k| k.to_s}
 360      availables |= __item_keyonly_optkeys(id).keys.map{|k| k.to_s}
 361 
 362      keys = _symbolkey2str(keys)
 363 
 364      keys.delete_if{|k, v| !(availables.include?(k))}
 365    end
 366 
 367    def itemconfigure(tagOrId, slot, value=None)
 368      unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
 369        __itemconfigure_core(tagOrId, slot, value)
 370      else
 371        if slot.kind_of?(Hash)
 372          begin
 373            __itemconfigure_core(tagOrId, slot)
 374          rescue
 375            slot = __check_available_itemconfigure_options(tagOrId, slot)
 376            __itemconfigure_core(tagOrId, slot) unless slot.empty?
 377          end
 378        else
 379          begin
 380            __itemconfigure_core(tagOrId, slot, value)
 381          rescue => e
 382            begin
 383              if __current_itemconfiginfo(tagOrId).has_key?(slot.to_s)
 384                # not tag error & option is known -> error on known option
 385                fail e
 386              else
 387                # not tag error & option is unknown
 388                nil
 389              end
 390            rescue
 391              fail e  # tag error
 392            end
 393          end
 394        end
 395      end
 396      self
 397    end
 398 
 399    def __itemconfiginfo_core(tagOrId, slot = nil)
 400      if TkComm::GET_CONFIGINFO_AS_ARRAY
 401        if (slot && slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
 402          fontkey  = $2
 403          # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}"))))
 404          conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}")), false, true)
 405          conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = 
 406            conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
 407          if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
 408              || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
 409            fnt = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 410            if TkFont.is_system_font?(fnt)
 411              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
 412            end
 413            conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), fontkey)
 414          elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
 415                 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \
 416                 && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )
 417            conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = 
 418              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
 419          end
 420          conf
 421        else
 422          if slot
 423            slot = slot.to_s
 424 
 425            alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}
 426            if real_name
 427              slot = real_name.to_s
 428            end
 429 
 430            case slot
 431            when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
 432              method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]
 433              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 434              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 435                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 436                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 437                begin
 438                  val = method.call(tagOrId, optval)
 439                rescue => e
 440                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 441                  val = optval
 442                end
 443                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
 444              end
 445              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 446                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 447                begin
 448                  val = method.call(tagOrId, optval)
 449                rescue => e
 450                  warn("Warning:: #{e.message} (when #{method}lcall(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 451                  val = optval
 452                end
 453                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
 454              end
 455 
 456            when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/
 457              method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]
 458              return [slot, '', '', '', self.__send__(method, tagOrId)]
 459 
 460            when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
 461              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 462              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 463 
 464              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 465                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 466                begin
 467                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 468                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 469                rescue
 470                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 471                end
 472              end
 473              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 474                begin
 475                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 476                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 477                rescue
 478                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 479                end
 480              end
 481 
 482            when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
 483              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 484              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 485 
 486              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 487                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 488                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 489                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 490              end
 491              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 492                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 493                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 494              end
 495 
 496            when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
 497              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 498              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 499 
 500              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 501                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 502                begin
 503                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 504                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 505                rescue
 506                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 507                end
 508              end
 509              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 510                begin
 511                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 512                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 513                rescue
 514                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 515                end
 516              end
 517 
 518            when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
 519              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 520              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 521 
 522              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 523                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 524                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 525                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 526              end
 527              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 528                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 529                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 530              end
 531 
 532            when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
 533              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 534              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 535 
 536              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 537                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
 538                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
 539                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 540                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 541              end
 542              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
 543                  && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
 544                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 545                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 546              end
 547 
 548            when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
 549              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 550              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 551 
 552            when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
 553              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 554 
 555              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 556                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 557                v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 558                if v.empty?
 559                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 560                else
 561                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
 562                end
 563              end
 564              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 565                v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 566                if v.empty?
 567                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 568                else
 569                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
 570                end
 571              end
 572 
 573            else
 574              # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 575              conf = tk_split_list(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), 0, false, true)
 576            end
 577            conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = 
 578              conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
 579 
 580            if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
 581                && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \
 582                && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )
 583              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = 
 584                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
 585            end
 586 
 587            conf
 588 
 589          else
 590            # ret = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))))).collect{|conflist|
 591            #   conf = tk_split_simplelist(conflist)
 592            ret = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false).collect{|conflist|
 593              conf = tk_split_simplelist(conflist, false, true)
 594              conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = 
 595                conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
 596 
 597              optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
 598              case optkey
 599              when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
 600                method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]
 601                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 602                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 603                  optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 604                  begin
 605                    val = method(tagOrId, optval)
 606                  rescue => e
 607                    warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 608                    val = optval
 609                  end
 610                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
 611                end
 612                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 613                  optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 614                  begin
 615                    val = method.call(tagOrId, optval)
 616                  rescue => e
 617                    warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 618                    val = optval
 619                  end
 620                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
 621                end
 622 
 623              when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
 624                # do nothing
 625 
 626              when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
 627                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 628                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 629                  begin
 630                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 631                      number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 632                  rescue
 633                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 634                  end
 635                end
 636                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 637                  begin
 638                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 639                      number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 640                  rescue
 641                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 642                  end
 643                end
 644 
 645              when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
 646                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 647                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 648                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 649                    num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 650                end
 651                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 652                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 653                    num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 654                end
 655 
 656              when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
 657                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 658                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 659                  begin
 660                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 661                      bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 662                  rescue
 663                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 664                  end
 665                end
 666                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 667                  begin
 668                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 669                      bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 670                  rescue
 671                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 672                  end
 673                end
 674 
 675              when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
 676                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 677                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 678                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 679                    simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 680                end
 681                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 682                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 683                    simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 684                end
 685 
 686              when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
 687                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 688                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
 689                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
 690                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 691                    list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 692                end
 693                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
 694                    && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
 695                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 696                    list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 697                end
 698 
 699              when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
 700                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 701                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 702                  v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 703                  if v.empty?
 704                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 705                  else
 706                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
 707                  end
 708                end
 709                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 710                  v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 711                  if v.empty?
 712                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 713                  else
 714                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
 715                  end
 716                end
 717 
 718              else
 719                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 720                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 721                  if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{')
 722                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 723                      tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) 
 724                  else
 725                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 726                      tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) 
 727                  end
 728                end
 729                if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 730                  if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{')
 731                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 732                      tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) 
 733                  else
 734                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 735                      tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) 
 736                  end
 737                end
 738              end
 739 
 740              if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
 741                  && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 \
 742                  && conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?- )
 743                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = 
 744                  conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
 745              end
 746 
 747              conf
 748            }
 749 
 750            __item_font_optkeys(tagid(tagOrId)).each{|optkey|
 751              optkey = optkey.to_s
 752              fontconf = ret.assoc(optkey)
 753              if fontconf && fontconf.size > 2
 754                ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/}
 755                fnt = fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 756                if TkFont.is_system_font?(fnt)
 757                  fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
 758                end
 759                fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey)
 760                ret.push(fontconf)
 761              end
 762            }
 763 
 764            __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method|
 765              ret << [optkey.to_s, '', '', '', self.__send__(method, tagOrId)]
 766            }
 767 
 768            ret
 769          end
 770        end
 771 
 772      else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
 773        if (slot && slot.to_s =~ /^(|latin|ascii|kanji)(#{__item_font_optkeys(tagid(tagOrId)).join('|')})$/)
 774          fontkey  = $2
 775          # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}"))))
 776          conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{fontkey}")), false, true)
 777          conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = 
 778            conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
 779 
 780          if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
 781              || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
 782            fnt = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 783            if TkFont.is_system_font?(fnt)
 784              conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
 785            end
 786            conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), fontkey)
 787            { conf.shift => conf }
 788          elsif ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
 789                 && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
 790            if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-
 791              conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = 
 792                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
 793            end
 794            { conf[0] => conf[1] }
 795          else
 796            { conf.shift => conf }
 797          end
 798        else
 799          if slot
 800            slot = slot.to_s
 801 
 802            alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}
 803            if real_name
 804              slot = real_name.to_s
 805            end
 806 
 807            case slot
 808            when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
 809              method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[slot]
 810              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 811              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 812                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 813                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 814                begin
 815                  val = method.call(tagOrId, optval)
 816                rescue => e
 817                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 818                  val = optval
 819                end
 820                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
 821              end
 822              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 823                optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 824                begin
 825                  val = method.call(tagOrId, optval)
 826                rescue => e
 827                  warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 828                  val = optval
 829                end
 830                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
 831              end
 832 
 833            when /^(#{__item_methodcall_optkeys(tagid(tagOrId)).keys.join('|')})$/
 834              method = _symbolkey2str(__item_methodcall_optkeys(tagid(tagOrId)))[slot]
 835              return {slot => ['', '', '', self.__send__(method, tagOrId)]}
 836 
 837            when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
 838              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 839              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 840 
 841              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 842                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 843                begin
 844                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 845                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 846                rescue
 847                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 848                end
 849              end
 850              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 851                begin
 852                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 853                    number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 854                rescue
 855                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 856                end
 857              end
 858 
 859            when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
 860              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 861              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 862 
 863              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 864                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 865                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 866                  num_or_stre(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 867              end
 868              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 869                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 870                  num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 871              end
 872 
 873            when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
 874              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 875              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 876 
 877              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 878                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 879                begin
 880                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 881                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 882                rescue
 883                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 884                end
 885              end
 886              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 887                begin
 888                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 889                    bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 890                rescue
 891                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 892                end
 893              end
 894 
 895            when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
 896              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 897              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 898 
 899              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 900                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 901                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 902                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 903              end
 904              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 905                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 906                  simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 907              end
 908 
 909            when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
 910              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 911              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 912 
 913              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 914                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
 915                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
 916                conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
 917                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
 918              end
 919              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
 920                  && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
 921                conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
 922                  list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
 923              end
 924 
 925            when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
 926              # conf = tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 927              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 928 
 929            when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
 930              conf = tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), false, true)
 931 
 932              if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 933                  && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 934                v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 935                if v.empty?
 936                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
 937                else
 938                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
 939                end
 940              end
 941              if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 942                v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 943                if v.empty?
 944                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
 945                else
 946                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
 947                end
 948              end
 949 
 950            else
 951              # conf = tk_split_list(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}"))))
 952              conf = tk_split_list(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) << "-#{slot}")), 0, false, true)
 953            end
 954            conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = 
 955              conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
 956 
 957            if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
 958                && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
 959              if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-
 960                conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = 
 961                  conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
 962              end
 963              { conf[0] => conf[1] }
 964            else
 965              { conf.shift => conf }
 966            end
 967 
 968          else
 969            ret = {}
 970            # tk_split_simplelist(_fromUTF8(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))))).each{|conflist|
 971            #   conf = tk_split_simplelist(conflist)
 972            tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false).each{|conflist|
 973              conf = tk_split_simplelist(conflist, false, true)
 974              conf[__item_configinfo_struct(tagid(tagOrId))[:key]] = 
 975                conf[__item_configinfo_struct(tagid(tagOrId))[:key]][1..-1]
 976 
 977              optkey = conf[__item_configinfo_struct(tagid(tagOrId))[:key]]
 978              case optkey
 979              when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/
 980                method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[optkey]
 981                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
 982                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
 983                  optval = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
 984                  begin
 985                    val = method.call(tagOrId, optval)
 986                  rescue => e
 987                    warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 988                    val = optval
 989                  end
 990                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = val
 991                end
 992                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
 993                  optval = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
 994                  begin
 995                    val = method.call(tagOrId, optval)
 996                  rescue => e
 997                    warn("Warning:: #{e.message} (when #{method}.call(#{tagOrId.inspect}, #{optval.inspect})") if $DEBUG
 998                    val = optval
 999                  end
1000                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = val
1001                end
1002 
1003              when /^(#{__item_strval_optkeys(tagid(tagOrId)).join('|')})$/
1004                # do nothing
1005 
1006              when /^(#{__item_numval_optkeys(tagid(tagOrId)).join('|')})$/
1007                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1008                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1009                  begin
1010                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1011                      number(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1012                  rescue
1013                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
1014                  end
1015                end
1016                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1017                  begin
1018                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1019                      number(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1020                  rescue
1021                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
1022                  end
1023                end
1024 
1025              when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/
1026                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1027                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1028                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1029                    num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1030                end
1031                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1032                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1033                    num_or_str(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1034                end
1035 
1036              when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/
1037                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1038                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1039                  begin
1040                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1041                      bool(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1042                  rescue
1043                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
1044                  end
1045                end
1046                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1047                  begin
1048                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1049                      bool(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1050                  rescue
1051                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
1052                  end
1053                end
1054 
1055              when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/
1056                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1057                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1058                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1059                    simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1060                end
1061                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1062                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1063                    simplelist(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1064                end
1065 
1066              when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/
1067                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1068                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] \
1069                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] =~ /^[0-9]/ )
1070                  conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1071                    list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1072                end
1073                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] \
1074                    && conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] =~ /^[0-9]/ )
1075                  conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1076                    list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1077                end
1078 
1079              when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/
1080                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1081                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1082                  v = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
1083                  if v.empty?
1084                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = nil
1085                  else
1086                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkVarAccess.new(v)
1087                  end
1088                end
1089                if ( conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] )
1090                  v = conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
1091                  if v.empty?
1092                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = nil
1093                  else
1094                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = TkVarAccess.new(v)
1095                  end
1096                end
1097 
1098              else
1099                if ( __item_configinfo_struct(tagid(tagOrId))[:default_value] \
1100                    && conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] )
1101                  if conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]].index('{')
1102                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1103                      tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]) 
1104                  else
1105                    conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = 
1106                      tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]])
1107                  end
1108                end
1109                if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]
1110                  if conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]].index('{')
1111                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1112                      tk_split_list(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]]) 
1113                  else
1114                    conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = 
1115                      tk_tcl2ruby(conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]])
1116                  end
1117                end
1118              end
1119 
1120              if ( __item_configinfo_struct(tagid(tagOrId))[:alias] \
1121                  && conf.size == __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
1122                if conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][0] == ?-
1123                  conf[__item_configinfo_struct(tagid(tagOrId))[:alias]] = 
1124                    conf[__item_configinfo_struct(tagid(tagOrId))[:alias]][1..-1]
1125                end
1126                ret[conf[0]] = conf[1]
1127              else
1128                ret[conf.shift] = conf
1129              end
1130            }
1131 
1132            __item_font_optkeys(tagid(tagOrId)).each{|optkey|
1133              optkey = optkey.to_s
1134              fontconf = ret[optkey]
1135              if fontconf.kind_of?(Array)
1136                ret.delete(optkey)
1137                ret.delete('latin' << optkey)
1138                ret.delete('ascii' << optkey)
1139                ret.delete('kanji' << optkey)
1140                fnt = fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]
1141                if TkFont.is_system_font?(fnt)
1142                  fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)
1143                end
1144                fontconf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(tagid(tagOrId), optkey)
1145                ret[optkey] = fontconf
1146              end
1147            }
1148 
1149            __item_methodcall_optkeys(tagid(tagOrId)).each{|optkey, method|
1150              ret[optkey.to_s] = ['', '', '', self.__send__(method, tagOrId)]
1151            }
1152 
1153            ret
1154          end
1155        end
1156      end
1157    end
1158    private :__itemconfiginfo_core
1159 
1160    def itemconfiginfo(tagOrId, slot = nil)
1161      if slot && TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__
1162        begin
1163          __itemconfiginfo_core(tagOrId, slot)
1164        rescue => e
1165          begin
1166            __itemconfiginfo_core(tagOrId)
1167            # not tag error -> option is unknown
1168            Array.new(__item_configinfo_struct.values.max).unshift(slot.to_s)
1169          rescue
1170            fail e  # tag error
1171          end
1172        end
1173      else
1174        __itemconfiginfo_core(tagOrId, slot)
1175      end
1176    end
1177 
1178    def __current_itemconfiginfo(tagOrId, slot = nil)
1179      if TkComm::GET_CONFIGINFO_AS_ARRAY
1180        if slot
1181          org_slot = slot
1182          begin
1183            conf = __itemconfiginfo_core(tagOrId, slot)
1184            if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
1185                || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
1186              return {conf[0] => conf[-1]}
1187            end
1188            slot = conf[__item_configinfo_struct(tagid(tagOrId))[:alias]]
1189          end while(org_slot != slot)
1190          fail RuntimeError, 
1191            "there is a configure alias loop about '#{org_slot}'"
1192        else
1193          ret = {}
1194          __itemconfiginfo_core(tagOrId).each{|conf|
1195            if ( ! __item_configinfo_struct(tagid(tagOrId))[:alias] \
1196                || conf.size > __item_configinfo_struct(tagid(tagOrId))[:alias] + 1 )
1197              ret[conf[0]] = conf[-1]
1198            end
1199          }
1200 
1201          ret
1202        end
1203      else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
1204        ret = {}
1205        __itemconfiginfo_core(tagOrId, slot).each{|key, conf|
1206          ret[key] = conf[-1] if conf.kind_of?(Array)
1207        }
1208        ret
1209      end
1210    end
1211 
1212    def current_itemconfiginfo(tagOrId, slot = nil)
1213      __current_itemconfiginfo(tagOrId, slot)
1214    end
1215  end