# # tktext.rb - Tk text classes # $Date$ # by Yukihiro Matsumoto require 'tk.rb' class TkText", mode + id # _addcmd cmd end private :_tag_bind_core def tag_bind(tag, seq, cmd=Proc.new, args=nil) _tag_bind_core('', tag, seq, cmd=Proc.new, args=nil) end def tag_bind_append(tag, seq, cmd=Proc.new, args=nil) _tag_bind_core('+', tag, seq, cmd=Proc.new, args=nil) end def tag_bindinfo(tag, context=nil) if context (tk_send('tag', 'bind', tag, "<#{tk_event_sequence(context)}>")).collect{|cmdline| if cmdline =~ /^rb_out (c\d+)\s+(.*)$/ [Tk_CMDTBL[$1], $2] else cmdline end } else tk_split_list(tk_send('tag', 'bind', tag)).filter{|seq| seq[1..-2].gsub(/>=',stop) txt = get(start,stop) if (pos = txt.index(pat)) pos = txt[0..(pos-1)].split('').length if pos > 0 if pat.kind_of? String return [index(start + " + #{pos} chars"), pat.split('').length] else return [index(start + " + #{pos} chars"), $&.split('').length] end else return ["", 0] end else txt = get(start,'end - 1 char') if (pos = txt.index(pat)) pos = txt[0..(pos-1)].split('').length if pos > 0 if pat.kind_of? String return [index(start + " + #{pos} chars"), pat.split('').length] else return [index(start + " + #{pos} chars"), $&.split('').length] end else txt = get('1.0','end - 1 char') if (pos = txt.index(pat)) pos = txt[0..(pos-1)].split('').length if pos > 0 if pat.kind_of? String return [index("1.0 + #{pos} chars"), pat.split('').length] else return [index("1.0 + #{pos} chars"), $&.split('').length] end else return ["", 0] end end end end def search(pat,start,stop=None) search_with_length(pat,start,stop)[0] end def rsearch_with_length(pat,start,stop=None) pat = pat.char if pat.kind_of? Integer if stop != None return ["", 0] if compare(start,'<=',stop) txt = get(stop,start) if (pos = txt.rindex(pat)) pos = txt[0..(pos-1)].split('').length if pos > 0 if pat.kind_of? String return [index(stop + " + #{pos} chars"), pat.split('').length] else return [index(stop + " + #{pos} chars"), $&.split('').length] end else return ["", 0] end else txt = get('1.0',start) if (pos = txt.rindex(pat)) pos = txt[0..(pos-1)].split('').length if pos > 0 if pat.kind_of? String return [index("1.0 + #{pos} chars"), pat.split('').length] else return [index("1.0 + #{pos} chars"), $&.split('').length] end else txt = get('1.0','end - 1 char') if (pos = txt.rindex(pat)) pos = txt[0..(pos-1)].split('').length if pos > 0 if pat.kind_of? String return [index("1.0 + #{pos} chars"), pat.split('').length] else return [index("1.0 + #{pos} chars"), $&.split('').length] end else return ["", 0] end end end end def rsearch(pat,start,stop=None) rsearch_with_length(pat,start,stop)[0] end end class TkTextTag", id # @t._addcmd cmd end def bindinfo(context=nil) if context (tk_call(@t.path, 'tag', 'bind', @id, "<#{tk_event_sequence(context)}>")).collect{|cmdline| if cmdline =~ /^rb_out (c\d+)\s+(.*)$/ [Tk_CMDTBL[$1], $2] else cmdline end } else tk_split_list(tk_call(@t.path, 'tag', 'bind', @id)).filter{|seq| seq[1..-2].gsub(/> 0 tk_call @t.path, 'window', 'configure', @index, *hash_kv(slot) end else @id = value if slot == 'window' if slot == 'create' self.create=value else tk_call @t.path, 'window', 'configure', @index, "-#{slot}", value end end end def window @id end def window=(value) tk_call @t.path, 'window', 'configure', @index, '-window', value @id = value end def create @p_create end def create=(value) @p_create = value if @p_create.kind_of? Proc value = install_cmd(proc{@id = @p_create.call}) end tk_call @t.path, 'window', 'configure', @index, '-create', value end def configinfo(slot = nil) if slot conf = tk_split_list(tk_call @t.path, 'window', 'configure', @index, "-#{slot}") conf[0] = conf[0][1..-1] conf else tk_split_list(tk_call @t.path, 'window', 'configure', @index).collect{|conf| conf[0] = conf[0][1..-1] conf } end end end class TkTextImage