# # tktext.rb - Tk text classes # $Date$ # by Yukihiro Matsumoto require 'tk.rb' class TkText<") if seq.kind_of? Array if /,/ =~ seq seq = seq.split(/\s*,\s*/).join("><") end id = install_bind(cmd, args) tk_send 'tag', 'bind', tag, "<#{seq}>", id # _addcmd cmd end def tag_bindinfo(tag) tk_split_list(tk_send('tag', 'bind', tag)).filter{|seq| seq.tr('<>',' ').strip.gsub(/\s+/,',') } end def tag_cget(tag, key) tk_call @t.path, 'tag', 'cget', tag, "-#{key}" end def tag_configure(tag, key, val=None) if key.kind_of? Hash tk_send 'tag', 'configure', tag, *hash_kv(key) else tk_send 'tag', 'configure', tag, "-#{key}", val end end def configinfo(tag, key=nil) if key conf = tk_split_list(tk_send('tag','configure',tag,"-#{key}")) conf[0] = conf[0][1..-1] conf else tk_split_list(tk_send('tag', 'configure', tag)).collect{|conf| conf[0] = conf[0][1..-1] conf } end end def tag_raise(tag, above=None) tk_send 'tag', 'raise', tag, above end def tag_lower(tag, below=None) tk_send 'tag', 'lower', tag, below end def tag_remove(tag, *index) tk_send 'tag', 'remove', tag, *index end def tag_ranges(tag) l = tk_split_list(tk_send('tag', 'ranges', tag)) r = [] while key=l.shift r.push [key, l.shift] end r end def tag_nextrange(tag, first, last=None) tk_split_list(tk_send('tag', 'nextrange', tag, first, last)) end def tag_prevrange(tag, first, last=None) tk_split_list(tk_send('tag', 'prevrange', tag, first, last)) end def search_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(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<") if seq.kind_of? Array if /,/ =~ seq seq = seq.split(/\s*,\s*/).join("><") end id = install_bind(cmd, args) tk_call @t.path, 'tag', 'bind', @id, "<#{seq}>", id # @t._addcmd cmd end def bindinfo tk_split_list(tk_call(@t.path, 'tag', 'bind', @id)).filter{|seq| seq.tr('<>',' ').strip.gsub(/\s+/,',') } end def raise(above=None) tk_call @t.path, 'tag', 'raise', @id, above end def lower(below=None) tk_call @t.path, 'tag', 'lower', @id, below end def destroy tk_call @t.path, 'tag', 'delete', @id end end class TkTextTagSel 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