[#30426] CGI でグラフを描くときにお勧めのライブラリは? — 堀川 久 <vzw00011@...>

こんにちは。

12 messages 2001/07/01

[#30453] syntax check without execution? — Tanaka Akira <akr@...17n.org>

最近、eRuby のまねごとをしていて、そのなかで Ruby のコードを生成してい

16 messages 2001/07/04
[#30455] Re: syntax check without execution? — matz@... (Yukihiro Matsumoto) 2001/07/04

まつもと ゆきひろです

[#30479] Object#dup — "Shin'ya Adzumi" <adzumi@...>

あづみです。

20 messages 2001/07/05

[#30512] open errno EALREADY triggerd — "Inoue" <inoue@...>

井上です。

16 messages 2001/07/08

[#30514] Ruby module frame work? — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2001/07/09
[#30515] Re: Ruby module frame work? — matz@... (Yukihiro Matsumoto) 2001/07/09

まつもと ゆきひろです

[#30529] InterBase を使用したい — "YOUJI KUROKAWA" <CQE10242@...>

環境

22 messages 2001/07/09

[#30530] Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...>

縄手@松江と言います。

17 messages 2001/07/09
[#30531] Re: Question about script on the book "Ruby nyuumon" — rubikitch <rubikitch@...> 2001/07/09

From: NAWATE Masahiko <agul@mag.shimane-u.ac.jp>

[#30533] Re: Question about script on the book "Ruby nyuumon" — NAWATE Masahiko <agul@...> 2001/07/09

縄手@松江です。

[#30734] UML クラス図と Ruby の記述についての対応 — Ken-ichi HASHIMOTO <ken@...>

橋本@福井県在住です。

13 messages 2001/07/28

[#30764] int/int => float? — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

50 messages 2001/07/31
[#30767] Re: int/int => float? — keiju@... (石塚圭樹) 2001/07/31

けいじゅ@日本ラショナルソフトウェアです.

[#30768] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30770] Re: int/int => float? — Take_tk <ggb03124@...> 2001/07/31

たけ(tk)です。

[#30771] Re: int/int => float? — matz@... (Yukihiro Matsumoto) 2001/07/31

まつもと ゆきひろです

[#30785] Re: int/int => float? — Konishi@... (Hiromasa KONISHI) 2001/07/31

 KONISHI Hiromasaです。

[ruby-list:30441] Re: [tcltk-ext] option をメソッド風に記述できる?

From: nagai@...
Date: 2001-07-03 08:41:16 UTC
List: ruby-list #30441
永井@知能.九工大です.

From: Noritsugu Nakamura <nnakamur@mxq.mesh.ne.jp>
Subject: [ruby-list:30436] [tcltk-ext] option をメソッド風に記述できる?
Date: Mon, 2 Jul 2001 19:34:17 +0900
Message-ID: <20010702193529Z.nnakamur@mxq.mesh.ne.jp>
nnakamur> で、Ruby/Tk では、Tcl/Tk での option を
nnakamur> メソッド風に記述できますが、tcltk-ext では
nnakamur> できるのでしょうか?

できませんでした.(^_^;
というのも,Tcl/Tk のコマンドを自動で調べて定義する時に,
cget と configure まで再定義してしまっていたためです.
ウィジェットコマンドとしてのこれらは再定義してはまずいので,
調査時に見つけたウィジェットコマンドリストから削除して
クラス/モジュール定義ファイルを生成するようにしました.
多分,これでできるようになったと思います.
mk_tkextlib.rb の差分を添えておきますので,
お急ぎの場合はこのパッチを当てて試してみてください.
# 一部,バグフィックスも行ってます.

生成された定義ファイルを TkPackage モジュール経由で
使うための情報も加えた tcltk-ext v0.5 の全体は 
RAA で入手できるはずです.

--- ../tcltk-ext.0.4/mk_tkextlib.rb	Thu Sep 28 14:39:18 2000
+++ ./mk_tkextlib.rb	Tue Jul  3 16:56:37 2001
@@ -1,9 +1,9 @@
-#!/usr/local/bin/ruby
+#!/usr/bin/env ruby
 #
 #  mk_tkextlib.rb
 #
-Mk_TkExtLib_Version = 0.4
-#                     2000/09/28  Hidetosh NAGAI (nagai@ai.kyutech.ac.jp)
+Mk_TkExtLib_Version = 0.5
+#                     2001/07/03  Hidetosh NAGAI (nagai@ai.kyutech.ac.jp)
 #
 require 'getopts'
 require 'tcltkextlib'
@@ -110,7 +110,7 @@
 	      return cmd, 'not-proc', nil
 	    else
 	      # エラーなし → 戻り値を保存
-	      ret_val.push
+	      ret_val.push(@ip.eval("set err_msg"))
 	    end
 	  }
 	}
@@ -501,6 +501,10 @@
 	  op_opt = $1.strip.chomp('.').strip.squeeze(" \t")\
 	                  .split(/\s*(?:,(?!\s*or\s)|,\s*or\s|\sor\s)\s*/) \
  	                  .collect{|opt| (opt =~ /^('|"|\?)(.*)\1$/)? $2: opt}
+
+	  # 'cget' と 'configure' とは省く (継承させるため)
+	  op_opt.delete('cget')
+	  op_opt.delete('configure')
 	end
       end
 
@@ -761,11 +765,12 @@
 	    next
 	  end
 	  if w.length < diff12[0].length
-	    pat = w.split('').filter{|c|c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
+	    pat = w.split('').collect!{|c|c=~/[$?*^+-.\\]/? '\\'+c: c} \
+                             .join('.*')
 	    break if diff12[0] =~ /^#{pat}.*$/i
 	  else
 	    pat = diff12[0].split('') \
-	                .filter{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
+	                .collect!{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
 	    break if w =~ /^#{pat}.*$/i
 	  end
 	  diff12.shift 
@@ -783,11 +788,12 @@
 	    next
 	  end
 	  if w.length < diff21[0].length
-	    pat = w.split('').filter{|c|c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
+	    pat = w.split('').collect!{|c|c=~/[$?*^+-.\\]/? '\\'+c: c} \
+                             .join('.*')
 	    break if diff21[0] =~ /^#{pat}.*$/i
 	  else
 	    pat = diff21[0].split('') \
-	                .filter{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
+	                .collect!{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
 	    break if w =~ /^#{pat}.*$/i
 	  end
 	  diff21.shift 
@@ -800,8 +806,8 @@
 
     # 一方は他方 (大文字,小文字はそのまま) に文字列を追加したものか
     lvl += 1
-    pat1 = cmd1.split('').filter{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
-    pat2 = cmd2.split('').filter{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
+    pat1 = cmd1.split('').collect!{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
+    pat2 = cmd2.split('').collect!{|c| c=~/[$?*^+-.\\]/? '\\'+c: c}.join('.*')
     return -lvl if cmd1 =~ /^.*#{pat2}.*$/   # cmd1 は cmd2 + α
     return  lvl if cmd2 =~ /^.*#{pat1}.*$/   # cmd2 は cmd1 + α
 
@@ -913,7 +919,7 @@
 	  end
 	}
       }
-      dels.each{|cmd| rel_tbl[cmd] = nil}
+      dels.each{|cmd| rel_tbl.delete(cmd)}
     end
 
     # スーパークラス候補を持たないものをリストアップ
@@ -947,7 +953,7 @@
     subs.delete_if{|cmd, sub| dels.include?(cmd)}
 
     # 同一コマンドの付与
-    subs.filter{|cmd, sub| 
+    subs.collect!{|cmd, sub| 
       if same[cmd] != [] 
 	[[cmd] + same[cmd], sub]
       else
@@ -957,7 +963,7 @@
   end
 
   def _estimate_rel_step1(rel)
-    rel.filter{|cmd, sup_rel|
+    rel.collect!{|cmd, sup_rel|
       if cmd.kind_of?(Array)
 	cmd = _estimate_rel_step1_sub(cmd)
       end
@@ -1195,7 +1201,7 @@
 
   def _estimate_rel_step3(rel)
     return [] until rel && rel != []
-    rel.filter{|s|
+    rel.collect!{|s|
       if s.size == 1
 	_estimate_rel_step3(s[0])
       else
@@ -1314,7 +1320,7 @@
     print "\n# namespace 内のコマンドの獲得 ( for Tcl8.0 over )\n" if verbose
     @base_namespace.each{|namsp|
       cmds = @ip.eval("namespace eval #{namsp} {info commands}").split(/\s+/)
-      cmds.filter{|cmd|
+      cmds.collect!{|cmd|
 	#@ip.eval("namespace eval #{namsp} {namespace origin #{cmd}}")
 	@ip.eval("namespace eval #{namsp} {namespace origin #{cmd}}")\
 	   .sub(/^::/,'')
@@ -1371,7 +1377,7 @@
     end
     @namespace.each{|namsp|
       cmds = @ip.eval("namespace eval #{namsp} {info commands}").split(/\s+/)
-      cmds.filter{|cmd|
+      cmds.collect!{|cmd|
 	#@ip.eval("namespace eval #{namsp} {namespace origin #{cmd}}")
 	@ip.eval("namespace eval #{namsp} {namespace origin #{cmd}}")\
 	   .sub(/^::/,'')
@@ -1717,11 +1723,11 @@
 	arg_names << arg[1..-1]
       else
 	# 引数先頭は小文字にする
-	arg[0] = arg[0,1].tr("A-Z","a-z")
+	arg[0] = (arg[0,1] || '').tr("A-Z","a-z")
 	arg_names << arg
       end
     }
-    arg_names.filter{|a| (RESERVED_NAME.include?(a))? 'arg_'+a: a }
+    arg_names.collect!{|a| (RESERVED_NAME.include?(a))? 'arg_'+a: a }
     size = arg_names.size
     0.upto(size-1) {|i|
       cnt = 1
@@ -1827,7 +1833,8 @@
     cmd.split('::').reverse_each {|sp|
       next if cmd_base != "" && cmd_base =~ /^#{sp}/i
       # cmd_base = sp.capitalize + cmd_base
-      cmd_base = sp[0,1].tr("a-z","A-Z") + sp[1..-1] + cmd_base
+      cmd_base = (sp[0,1] || '').tr("a-z","A-Z") \
+                 + (sp[1..-1] || '') + cmd_base
 
     }
 
@@ -1844,7 +1851,7 @@
     # コマンド名先頭文字は小文字にする
     # cmd_name = cmd_base.sub(/^./){|c| c.tr("A-Z","a-z")}
     cmd_name = cmd_base.dup
-    cmd_name[0] = cmd_base[0,1].tr("A-Z","a-z")
+    cmd_name[0] = (cmd_base[0,1] || '').tr("A-Z","a-z")
     cmd_name
   end
 
@@ -1869,7 +1876,8 @@
 
     # コマンド名が空列なら,元のコマンド名の先頭を小文字にして,そのまま用いる
     if cmd_name == ''
-      cmd_name = cmd_info[0][0,1].tr("A-Z","a-z") + cmd_info[0][1..-1]
+      cmd_name = (cmd_info[0][0,1] || '').tr("A-Z","a-z") \
+                 + (cmd_info[0][1..-1] || '')
     end
 
     # コマンド名の一部に '-' を含むなら,'_' に変更する
@@ -1894,7 +1902,8 @@
 
     # コマンド名が空列なら,元のコマンド名の先頭を小文字にして,そのまま用いる
     if cmd_name == ''
-      cmd_name = cmd_info[0][0,1].tr("A-Z","a-z") + cmd_info[0][1..-1]
+      cmd_name = (cmd_info[0][0,1] || '').tr("A-Z","a-z") \
+                 + (cmd_info[0][1..-1] || '')
     end
 
     # コマンド名の一部に '-' を含むなら,'_' に変更する
@@ -2138,7 +2147,8 @@
     # その先頭文字を大文字にした後,先頭にモジュール名を追加する
     cmdmod_name = _decide_general_cmd_name(cmd_info[0])
     # cmdmod_name = @modname + cmdmod_name.capitalize
-    cmdmod_name = cmdmod_name[0,1].tr("a-z","A-Z") + (cmdmod_name[1..-1] || '')
+    cmdmod_name = (cmdmod_name[0,1] || '').tr("a-z","A-Z") \
+                  + (cmdmod_name[1..-1] || '')
     cmdmod_name = @modname + cmdmod_name
 
     # options
@@ -2413,7 +2423,8 @@
     # その先頭文字を大文字にした後,先頭にモジュール名を追加する
     cmdmod_name = _decide_widget_control_cmd_name(cmd_info[0])
     # cmdmod_name = @modname + cmdmod_name.capitalize
-    cmdmod_name = cmdmod_name[0,1].tr("a-z","A-Z") + (cmdmod_name[1..-1] || '')
+    cmdmod_name = (cmdmod_name[0,1] || '').tr("a-z","A-Z") \
+                  + (cmdmod_name[1..-1] || '')
     cmdmod_name = @modname + cmdmod_name
 
     # cmdmod_name と @modname が同じになってしまっているか?
@@ -2461,7 +2472,8 @@
 
     # コマンド名が空列なら,元のコマンド名の先頭を小文字にして,そのまま用いる
     if cmd_name == ''
-      cmd_name = cmd_info[0][0,1].tr("A-Z","a-z") + cmd_info[0][1..-1]
+      cmd_name = (cmd_info[0][0,1] || '').tr("A-Z","a-z") \
+                 + (cmd_info[0][1..-1] || '')
     end
 
     # コマンド名の一部に '-' を含むなら,'_' に変更する
@@ -2535,13 +2547,14 @@
     else
       parent_name = _decide_widget_class_cmd_name(parent_info[0])
       # parent_name = @modname + parent_name.capitalize
-      parent_name = parent_name[0,1].tr("a-z","A-Z") \
+      parent_name = (parent_name[0,1] || '').tr("a-z","A-Z") \
                       + (parent_name[1..-1] || '')
       parent_name = @modname + parent_name
     end
     child_name = _decide_widget_class_cmd_name(child_info[0])
     # child_name = @modname + child_name.capitalize
-    child_name = child_name[0,1].tr("a-z","A-Z") + (child_name[1..-1] || '')
+    child_name = (child_name[0,1] || '').tr("a-z","A-Z") \
+                 + (child_name[1..-1] || '')
     child_name = @modname + child_name
 
     # @modname と同じになってしまっているか?
@@ -2600,11 +2613,13 @@
     # その先頭文字を大文字にした後,先頭にモジュール名を追加する
     cmd_name = _decide_widget_class_cmd_name(cmd)
     # cmd_name = @modname + cmd_name.capitalize
-    cmd_name = cmd_name[0,1].tr("a-z","A-Z") + (cmd_name[1..-1] || '')
+    cmd_name = (cmd_name[0,1] || '').tr("a-z","A-Z") \
+               + (cmd_name[1..-1] || '')
     cmd_name = @modname + cmd_name
     alias_name = _decide_widget_class_cmd_name(alias_cmd)
     # alias_name = @modname + alias_name.capitalize
-    alias_name = alias_name[0,1].tr("a-z","A-Z") + (alias_name[1..-1] || '')
+    alias_name = (alias_name[0,1] || '').tr("a-z","A-Z") \
+                 + (alias_name[1..-1] || '')
     alias_name = @modname + alias_name
 
     # @modname と同じになってしまっているか?
@@ -2628,7 +2643,7 @@
     # その先頭文字を大文字にした後,先頭にモジュール名を追加する
     cmdclass_name = _decide_widget_class_cmd_name(cmd_info[0])
     # cmdclass_name = @modname + cmdclass_name.capitalize
-    cmdclass_name = cmdclass_name[0,1].tr("a-z","A-Z") \
+    cmdclass_name = (cmdclass_name[0,1] || '').tr("a-z","A-Z") \
                       + (cmdclass_name[1..-1] || '')
     cmdclass_name = @modname + cmdclass_name
 
@@ -2698,7 +2713,8 @@
   def initialize (module_name, extlib_info, all_cmd_info, widget_class_tree)
     # モジュール名の先頭が大文字になっていなければ大文字にする
     # @modname = module_name.capitalize
-    @modname = module_name[0,1].tr("a-z","A-Z") + module_name[1..-1]
+    @modname = (module_name[0,1] || '').tr("a-z","A-Z") \
+               + (module_name[1..-1] || '')
 
     @fid = open("#{module_name}.rb", "w")
 
@@ -2852,6 +2868,7 @@
 #verbose = 'DEBUG'
 #verbose = true
 verbose = false
+cmd_args = $*.dup
 
 $pre_load_lib = [ nil ] ;# デフォルトでは検査前に要求するライブラリはなし
 
@@ -2874,6 +2891,9 @@
 ##########################################################
 # verbose オプションの定義
 verbose = true if $OPT_v
+
+##########################################################
+print "# 実行時コマンドライン\n",$0,' ',cmd_args.join(' '),"\n\n" if verbose
 
 ##########################################################
 # 拡張パッケージ定義の load


-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread