Class: TclTkInterpreter
Overview
class TclTkInterpreter: tcl/tk interpreter
Class Method Summary collapse
-
._eval_args(*args) ⇒ Object
@ip._eval_args(*args): evaluate string under tcl/tk interpreter returns result string.
-
._get_eval_string(*args) ⇒ Object
@ip._get_eval_string(*args): generate string to evaluate in tcl interpreter *args: script which is going to be evaluated under tcl/tk.
Instance Method Summary collapse
-
#_tcltkip ⇒ Object
_tcltkip(): returns @ip(TclTkIp).
-
#commands ⇒ Object
commands(): returns hash of the tcl/tk commands.
-
#initialize ⇒ TclTkInterpreter
constructor
initialize():.
-
#method_missing(id, *args) ⇒ Object
method_missing(id, *args): execute undefined method as tcl/tk command id: method symbol *args: method arguments.
-
#rootwidget ⇒ Object
rootwidget(): returns root widget(TclTkWidget).
Constructor Details
#initialize ⇒ TclTkInterpreter
initialize():
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/tcltk.rb', line 89 def initialize() # generate interpreter object @ip = TclTkIp.new() # add ruby_fmt command to tcl interpreter # ruby_fmt command format arguments by `format' and call `ruby' command # (notice ruby command receives only one argument) if $DEBUG @ip._eval("proc ruby_fmt {fmt args} { puts \"ruby_fmt: $fmt $args\" ; set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }") else @ip._eval("proc ruby_fmt {fmt args} { set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }") end # @ip._get_eval_string(*args): generate string to evaluate in tcl interpreter # *args: script which is going to be evaluated under tcl/tk def @ip._get_eval_string(*args) argstr = "" args.each{|arg| argstr += " " if argstr != "" # call to_eval if it is defined if (arg.respond_to?(:to_eval)) argstr += arg.to_eval() else # call to_s unless defined argstr += arg.to_s() end } return argstr end # @ip._eval_args(*args): evaluate string under tcl/tk interpreter # returns result string. # *args: script which is going to be evaluated under tcl/tk def @ip._eval_args(*args) # calculate the string to eval in the interpreter argstr = _get_eval_string(*args) # evaluate under the interpreter print("_eval: \"", argstr, "\"") if $DEBUG res = _eval(argstr) if $DEBUG print(" -> \"", res, "\"\n") elsif _return_value() != 0 print(res, "\n") end fail(%Q/can't eval "#{argstr}"/) if _return_value() != 0 #' return res end # generate tcl/tk command object and register in the hash @commands = {} # for all commands registered in tcl/tk interpreter: @ip._eval("info command").split(/ /).each{|comname| if comname =~ /^[.]/ # if command is a widget (path), generate TclTkWidget, # and register it in the hash @commands[comname] = TclTkWidget.new(@ip, comname) else # otherwise, generate TclTkCommand @commands[comname] = TclTkCommand.new(@ip, comname) end } end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(id, *args) ⇒ Object
method_missing(id, *args): execute undefined method as tcl/tk command
id: method symbol
*args: method arguments
171 172 173 174 175 176 177 178 179 |
# File 'lib/tcltk.rb', line 171 def method_missing(id, *args) # if command named by id registered, then execute it if @commands.key?(id.id2name) return @commands[id.id2name].e(*args) else # otherwise, exception super end end |
Class Method Details
._eval_args(*args) ⇒ Object
@ip._eval_args(*args): evaluate string under tcl/tk interpreter
returns result string.
*args: script which is going to be evaluated under tcl/tk
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/tcltk.rb', line 122 def @ip._eval_args(*args) # calculate the string to eval in the interpreter argstr = _get_eval_string(*args) # evaluate under the interpreter print("_eval: \"", argstr, "\"") if $DEBUG res = _eval(argstr) if $DEBUG print(" -> \"", res, "\"\n") elsif _return_value() != 0 print(res, "\n") end fail(%Q/can't eval "#{argstr}"/) if _return_value() != 0 #' return res end |
._get_eval_string(*args) ⇒ Object
@ip._get_eval_string(*args): generate string to evaluate in tcl interpreter
*args: script which is going to be evaluated under tcl/tk
104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/tcltk.rb', line 104 def @ip._get_eval_string(*args) argstr = "" args.each{|arg| argstr += " " if argstr != "" # call to_eval if it is defined if (arg.respond_to?(:to_eval)) argstr += arg.to_eval() else # call to_s unless defined argstr += arg.to_s() end } return argstr end |
Instance Method Details
#_tcltkip ⇒ Object
_tcltkip(): returns @ip(TclTkIp)
164 165 166 |
# File 'lib/tcltk.rb', line 164 def _tcltkip() return @ip end |
#commands ⇒ Object
commands(): returns hash of the tcl/tk commands
154 155 156 |
# File 'lib/tcltk.rb', line 154 def commands() return @commands end |
#rootwidget ⇒ Object
rootwidget(): returns root widget(TclTkWidget)
159 160 161 |
# File 'lib/tcltk.rb', line 159 def () return @commands["."] end |