module TkResourceDB
Constants
- CmdClassID
- RAND_BASE_CHAR
- RAND_BASE_CNT
- RAND_BASE_HEAD
- TkCommandNames
Public Class Methods
add(pat, value, pri=None)
click to toggle source
# File lib/tk/optiondb.rb, line 25 def add(pat, value, pri=None) tk_call('option', 'add', pat, value, pri) end
clear()
click to toggle source
# File lib/tk/optiondb.rb, line 28 def clear tk_call_without_enc('option', 'clear') end
eval_under_random_base(parent = nil, &b)
click to toggle source
# File lib/tk/optiondb.rb, line 283 def eval_under_random_base(parent = nil, &b) new_klass = __create_new_class(__get_random_basename(), [], 4, false, parent) ret = new_klass.class_eval(&b) if block_given? __remove_methods_of_proc_class(new_klass) new_klass.freeze ret end
get(win, name, klass)
click to toggle source
# File lib/tk/optiondb.rb, line 31 def get(win, name, klass) tk_call('option', 'get', win ,name, klass) end
new_proc_class(klass, func, safe = 4, add = false, parent = nil, &b)
click to toggle source
define new proc class : If you want to modify the new class or create a new subclass, you must do such operation in the block parameter. Because the created class is frozen after evaluating the block.
# File lib/tk/optiondb.rb, line 274 def new_proc_class(klass, func, safe = 4, add = false, parent = nil, &b) new_klass = __create_new_class(klass, func, safe, add, parent) new_klass.class_eval(&b) if block_given? __remove_methods_of_proc_class(new_klass) new_klass.freeze new_klass end
new_proc_class_random(klass, func, safe = 4, add = false, &b)
click to toggle source
# File lib/tk/optiondb.rb, line 293 def new_proc_class_random(klass, func, safe = 4, add = false, &b) eval_under_random_base(){ TkOptionDB.new_proc_class(klass, func, safe, add, self, &b) } end
read_entries(file, f_enc=nil)
click to toggle source
# File lib/tk/optiondb.rb, line 40 def read_entries(file, f_enc=nil) if TkCore::INTERP.safe? fail SecurityError, "can't call 'TkOptionDB.read_entries' on a safe interpreter" end i_enc = ((Tk.encoding)? Tk.encoding : Tk.encoding_system) unless f_enc f_enc = i_enc end ent = [] cline = '' open(file, 'r') {|f| while line = f.gets #cline += line.chomp! cline.concat(line.chomp!) case cline when /\\$/ # continue cline.chop! next when /^\s*(!|#)/ # comment cline = '' next when /^([^:]+):(.*)$/ pat = $1.strip val = $2.lstrip p "ResourceDB: #{[pat, val].inspect}" if $DEBUG pat = TkCore::INTERP._toUTF8(pat, f_enc) pat = TkCore::INTERP._fromUTF8(pat, i_enc) val = TkCore::INTERP._toUTF8(val, f_enc) val = TkCore::INTERP._fromUTF8(val, i_enc) ent << [pat, val] cline = '' else # unknown --> ignore cline = '' next end end } ent end
read_with_encoding(file, f_enc=nil, pri=None)
click to toggle source
# File lib/tk/optiondb.rb, line 85 def read_with_encoding(file, f_enc=nil, pri=None) # try to read the file as an OptionDB file read_entries(file, f_enc).each{|pat, val| add(pat, val, pri) } =begin i_enc = Tk.encoding() unless f_enc f_enc = i_enc end cline = '' open(file, 'r') {|f| while line = f.gets cline += line.chomp! case cline when /\\$/ # continue cline.chop! next when /^\s*!/ # comment cline = '' next when /^([^:]+):\s(.*)$/ pat = $1 val = $2 p "ResourceDB: #{[pat, val].inspect}" if $DEBUG pat = TkCore::INTERP._toUTF8(pat, f_enc) pat = TkCore::INTERP._fromUTF8(pat, i_enc) val = TkCore::INTERP._toUTF8(val, f_enc) val = TkCore::INTERP._fromUTF8(val, i_enc) add(pat, val, pri) cline = '' else # unknown --> ignore cline = '' next end end } =end end
readfile(file, pri=None)
click to toggle source
# File lib/tk/optiondb.rb, line 34 def readfile(file, pri=None) tk_call('option', 'readfile', file, pri) end
Also aliased as: read_file
Private Class Methods
__create_new_class(klass, func, safe = 4, add = false, parent = nil)
click to toggle source
# File lib/tk/optiondb.rb, line 185 def __create_new_class(klass, func, safe = 4, add = false, parent = nil) if klass.kind_of?(TkWindow) carrier = klass.path CmdClassID.mutex.synchronize{ klass = CmdClassID.join(TkCore::INTERP._ip_id_) CmdClassID[1].succ! } parent = nil # ignore parent else klass = klass.to_s if klass.kind_of?(Symbol) unless (?A..?Z) === klass[0] fail ArgumentError, "bad string '#{klass}' for class name" end if parent == nil install_win(nil) elsif parent.kind_of?(TkWindow) install_win(parent.path) elsif parent <= @@resource_proc_class install_win(parent::CARRIER) else fail ArgumentError, "parent must be Resource-Proc class" end carrier = Tk.tk_call_without_enc('frame', @path, '-class', klass) end unless func.kind_of?(Array) fail ArgumentError, "method-list must be Array" end if parent.kind_of?(Class) && parent <= @@resource_proc_class cmd_klass = Class.new(parent) else cmd_klass = Class.new(TkOptionDB.module_eval('@@resource_proc_class')) end cmd_klass.const_set(:CARRIER, carrier.dup.freeze) cmd_klass.instance_variable_set('@method_tbl', TkCore::INTERP.create_table) cmd_klass.instance_variable_set('@add_method', add) cmd_klass.instance_variable_set('@safe_mode', safe) func.each{|f| cmd_klass.instance_variable_get('@method_tbl')[f.to_s.intern] = nil } cmd_klass end
__get_random_basename()
click to toggle source
# File lib/tk/optiondb.rb, line 257 def __get_random_basename name = '%s%03d' % [RAND_BASE_HEAD[rand(RAND_BASE_HEAD.size),1], RAND_BASE_CNT[0]] len = RAND_BASE_CHAR.size (6+rand(10)).times{ name << RAND_BASE_CHAR[rand(len),1] } RAND_BASE_CNT[0] = RAND_BASE_CNT[0] + 1 name end
__remove_methods_of_proc_class(klass)
click to toggle source
# File lib/tk/optiondb.rb, line 233 def __remove_methods_of_proc_class(klass) # for security, make these methods invalid class << klass def __null_method(*args); nil; end [ :class_eval, :name, :superclass, :clone, :dup, :autoload, :autoload?, :ancestors, :const_defined?, :const_get, :const_set, :const_missing, :class_variables, :constants, :included_modules, :instance_methods, :method_defined?, :module_eval, :private_instance_methods, :protected_instance_methods, :public_instance_methods, :singleton_methods, :remove_const, :remove_method, :undef_method, :to_s, :inspect, :display, :method, :methods, :respond_to?, :instance_variable_get, :instance_variable_set, :instance_method, :instance_eval, :instance_exec, :instance_variables, :kind_of?, :is_a?, :private_methods, :protected_methods, :public_methods ].each{|m| alias_method(m, :__null_method) } end end
Public Instance Methods
mutex()
click to toggle source
# File lib/tk/optiondb.rb, line 14 def mutex; @mutex; end
Private Instance Methods
__create_new_class(klass, func, safe = 4, add = false, parent = nil)
click to toggle source
# File lib/tk/optiondb.rb, line 185 def __create_new_class(klass, func, safe = 4, add = false, parent = nil) if klass.kind_of?(TkWindow) carrier = klass.path CmdClassID.mutex.synchronize{ klass = CmdClassID.join(TkCore::INTERP._ip_id_) CmdClassID[1].succ! } parent = nil # ignore parent else klass = klass.to_s if klass.kind_of?(Symbol) unless (?A..?Z) === klass[0] fail ArgumentError, "bad string '#{klass}' for class name" end if parent == nil install_win(nil) elsif parent.kind_of?(TkWindow) install_win(parent.path) elsif parent <= @@resource_proc_class install_win(parent::CARRIER) else fail ArgumentError, "parent must be Resource-Proc class" end carrier = Tk.tk_call_without_enc('frame', @path, '-class', klass) end unless func.kind_of?(Array) fail ArgumentError, "method-list must be Array" end if parent.kind_of?(Class) && parent <= @@resource_proc_class cmd_klass = Class.new(parent) else cmd_klass = Class.new(TkOptionDB.module_eval('@@resource_proc_class')) end cmd_klass.const_set(:CARRIER, carrier.dup.freeze) cmd_klass.instance_variable_set('@method_tbl', TkCore::INTERP.create_table) cmd_klass.instance_variable_set('@add_method', add) cmd_klass.instance_variable_set('@safe_mode', safe) func.each{|f| cmd_klass.instance_variable_get('@method_tbl')[f.to_s.intern] = nil } cmd_klass end
__get_random_basename()
click to toggle source
# File lib/tk/optiondb.rb, line 257 def __get_random_basename name = '%s%03d' % [RAND_BASE_HEAD[rand(RAND_BASE_HEAD.size),1], RAND_BASE_CNT[0]] len = RAND_BASE_CHAR.size (6+rand(10)).times{ name << RAND_BASE_CHAR[rand(len),1] } RAND_BASE_CNT[0] = RAND_BASE_CNT[0] + 1 name end
__remove_methods_of_proc_class(klass)
click to toggle source
# File lib/tk/optiondb.rb, line 233 def __remove_methods_of_proc_class(klass) # for security, make these methods invalid class << klass def __null_method(*args); nil; end [ :class_eval, :name, :superclass, :clone, :dup, :autoload, :autoload?, :ancestors, :const_defined?, :const_get, :const_set, :const_missing, :class_variables, :constants, :included_modules, :instance_methods, :method_defined?, :module_eval, :private_instance_methods, :protected_instance_methods, :public_instance_methods, :singleton_methods, :remove_const, :remove_method, :undef_method, :to_s, :inspect, :display, :method, :methods, :respond_to?, :instance_variable_get, :instance_variable_set, :instance_method, :instance_eval, :instance_exec, :instance_variables, :kind_of?, :is_a?, :private_methods, :protected_methods, :public_methods ].each{|m| alias_method(m, :__null_method) } end end
add(pat, value, pri=None)
click to toggle source
# File lib/tk/optiondb.rb, line 25 def add(pat, value, pri=None) tk_call('option', 'add', pat, value, pri) end
clear()
click to toggle source
# File lib/tk/optiondb.rb, line 28 def clear tk_call_without_enc('option', 'clear') end
eval_under_random_base(parent = nil, &b)
click to toggle source
# File lib/tk/optiondb.rb, line 283 def eval_under_random_base(parent = nil, &b) new_klass = __create_new_class(__get_random_basename(), [], 4, false, parent) ret = new_klass.class_eval(&b) if block_given? __remove_methods_of_proc_class(new_klass) new_klass.freeze ret end
get(win, name, klass)
click to toggle source
# File lib/tk/optiondb.rb, line 31 def get(win, name, klass) tk_call('option', 'get', win ,name, klass) end
new_proc_class(klass, func, safe = 4, add = false, parent = nil, &b)
click to toggle source
define new proc class : If you want to modify the new class or create a new subclass, you must do such operation in the block parameter. Because the created class is frozen after evaluating the block.
# File lib/tk/optiondb.rb, line 274 def new_proc_class(klass, func, safe = 4, add = false, parent = nil, &b) new_klass = __create_new_class(klass, func, safe, add, parent) new_klass.class_eval(&b) if block_given? __remove_methods_of_proc_class(new_klass) new_klass.freeze new_klass end
new_proc_class_random(klass, func, safe = 4, add = false, &b)
click to toggle source
# File lib/tk/optiondb.rb, line 293 def new_proc_class_random(klass, func, safe = 4, add = false, &b) eval_under_random_base(){ TkOptionDB.new_proc_class(klass, func, safe, add, self, &b) } end
read_entries(file, f_enc=nil)
click to toggle source
# File lib/tk/optiondb.rb, line 40 def read_entries(file, f_enc=nil) if TkCore::INTERP.safe? fail SecurityError, "can't call 'TkOptionDB.read_entries' on a safe interpreter" end i_enc = ((Tk.encoding)? Tk.encoding : Tk.encoding_system) unless f_enc f_enc = i_enc end ent = [] cline = '' open(file, 'r') {|f| while line = f.gets #cline += line.chomp! cline.concat(line.chomp!) case cline when /\\$/ # continue cline.chop! next when /^\s*(!|#)/ # comment cline = '' next when /^([^:]+):(.*)$/ pat = $1.strip val = $2.lstrip p "ResourceDB: #{[pat, val].inspect}" if $DEBUG pat = TkCore::INTERP._toUTF8(pat, f_enc) pat = TkCore::INTERP._fromUTF8(pat, i_enc) val = TkCore::INTERP._toUTF8(val, f_enc) val = TkCore::INTERP._fromUTF8(val, i_enc) ent << [pat, val] cline = '' else # unknown --> ignore cline = '' next end end } ent end
read_with_encoding(file, f_enc=nil, pri=None)
click to toggle source
# File lib/tk/optiondb.rb, line 85 def read_with_encoding(file, f_enc=nil, pri=None) # try to read the file as an OptionDB file read_entries(file, f_enc).each{|pat, val| add(pat, val, pri) } =begin i_enc = Tk.encoding() unless f_enc f_enc = i_enc end cline = '' open(file, 'r') {|f| while line = f.gets cline += line.chomp! case cline when /\\$/ # continue cline.chop! next when /^\s*!/ # comment cline = '' next when /^([^:]+):\s(.*)$/ pat = $1 val = $2 p "ResourceDB: #{[pat, val].inspect}" if $DEBUG pat = TkCore::INTERP._toUTF8(pat, f_enc) pat = TkCore::INTERP._fromUTF8(pat, i_enc) val = TkCore::INTERP._toUTF8(val, f_enc) val = TkCore::INTERP._fromUTF8(val, i_enc) add(pat, val, pri) cline = '' else # unknown --> ignore cline = '' next end end } =end end
readfile(file, pri=None)
click to toggle source
# File lib/tk/optiondb.rb, line 34 def readfile(file, pri=None) tk_call('option', 'readfile', file, pri) end
Also aliased as: read_file