From: Hidetoshi NAGAI Date: 2003-06-25T02:14:39+09:00 Subject: [ANN] resource database on Ruby/Tk ----Next_Part(Wed_Jun_25_02:14:37_2003_380)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi, I commited the patch for better support of resource database. A sample script and sample resource files used by the script are attached to this mail. If you are interesteed in it, please get newest version of Ruby/Tk from CVS head and try running the sample script. -- Hidetoshi Nagai (nagai@ai.kyutech.ac.jp) ----Next_Part(Wed_Jun_25_02:14:37_2003_380)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="tkoptdb.rb" #!/usr/bin/env ruby # # sample script of TkOptionDB # # If 'LANG' environment variable's value is started by 'ja', # then read Japanese resource data and display Japanese button text. # In other case, read English resource data and display English text. # require "tk" if ENV['LANG'] =~ /^ja/ # read Japanese resource TkOptionDB.readfile(File.expand_path('resource.ja', File.dirname(__FILE__))) else # read English resource TkOptionDB.readfile(File.expand_path('resource.en', File.dirname(__FILE__))) end # 'show_msg' and 'bye_msg' procedures can be defined on BTN_CMD resource. # Those procedures are called under $SAFE==2 cmd = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 2) { # If you want to check resource string (str), # please define __check_proc_string__(str) like this. class << self def __check_proc_string__(str) print "($SAFE=#{$SAFE}) check!! str.tainted?::#{str.tainted?}" str.untaint print "==>#{str.tainted?} : " str end end } TkFrame.new(:class=>'BtnFrame'){|f| pack(:padx=>5, :pady=>5) TkButton.new(:parent=>f, :widgetname=>'hello'){ command proc{ print "($SAFE=#{$SAFE}) : " cmd.show_msg(TkOptionDB.inspect) } pack(:fill=>:x, :padx=>10, :pady=>10) } TkButton.new(:command=>proc{print "($SAFE=#{$SAFE}) : "; cmd.bye_msg; exit}, :parent=>f, :widgetname=>'quit'){ pack(:fill=>:x, :padx=>10, :pady=>10) } } Tk.mainloop ----Next_Part(Wed_Jun_25_02:14:37_2003_380)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="resource.en" # # see Tcl/Tk's "options" manual for "Database Name" and "Database Class" # *BtnFrame.borderWidth: 5 *BtnFrame.relief: ridge *BtnFrame.Button.background: wheat *BtnFrame.Button.foreground: red *hello.text: HELLO *quit.text: QUIT *BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE}) ";\ print "Hello!! This is a sample of #{arg}.\n"} *BTN_CMD.bye_msg: {print "($SAFE=#{$SAFE}) Good-bye.\n"} ----Next_Part(Wed_Jun_25_02:14:37_2003_380)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="resource.ja" # # see Tcl/Tk's "options" manual for "Database Name" and "Database Class" # *BtnFrame.borderWidth: 5 *BtnFrame.relief: ridge *BtnFrame.Button.background: wheat *BtnFrame.Button.foreground: red *hello.text: こんにちは *quit.text: 終了 *BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE}) ";\ print "こんにちは!! #{arg} のサンプルです.\n"} *BTN_CMD.bye_msg: {print "($SAFE=#{$SAFE}) さようなら.\n"} ----Next_Part(Wed_Jun_25_02:14:37_2003_380)----