Class: TkTextTag

Inherits:
TkObject show all
Includes:
Tk::Text::IndexModMethods, TkTreatTagFont
Defined in:
ext/lib/tk/texttag.rb

Direct Known Subclasses

TkTextNamedTag

Constant Summary collapse

TTagID_TBL =
TkCore::INTERP.create_table

Constants included from TkCore

TkCore::EventFlag, TkCore::INTERP, TkCore::INTERP_MUTEX, TkCore::INTERP_ROOT_CHECK, TkCore::INTERP_THREAD, TkCore::INTERP_THREAD_STATUS, TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD, TkCore::WIDGET_DESTROY_HOOK, TkCore::WITH_ENCODING, TkCore::WITH_RUBY_VM

Constants included from TkComm

TkComm::GET_CONFIGINFO_AS_ARRAY, TkComm::GET_CONFIGINFOwoRES_AS_ARRAY, TkComm::TkExtlibAutoloadModule, TkComm::Tk_CMDTBL, TkComm::Tk_IDs, TkComm::Tk_WINDOWS, TkComm::USE_TCLs_LIST_FUNCTIONS, TkComm::WidgetClassNames

Constants included from TkUtil

TkUtil::None, TkUtil::RELEASE_DATE

Constants included from Tk

Tk::AUTO_PATH, Tk::Checkbutton, Tk::CloneMenu, Tk::JAPANIZED_TK, Tk::LIBRARY_PATH, Tk::Labelframe, Tk::MenuButton, Tk::OptionMenuButton, Tk::PACKAGE_PATH, Tk::Panedwindow, Tk::RELEASE_DATE, Tk::Radiobutton, Tk::TCL_LIBRARY_PATH, Tk::TCL_MAJOR_VERSION, Tk::TCL_MINOR_VERSION, Tk::TCL_PACKAGE_PATH, Tk::TCL_PATCHLEVEL, Tk::TCL_PRECISION, Tk::TCL_VERSION, Tk::TK_MAJOR_VERSION, Tk::TK_MINOR_VERSION, Tk::TK_PATCHLEVEL, Tk::TK_VERSION, Tk::Tkextlib_RELEASE_DATE, Tk::TreeCtrl_Widget, Tk::X_Scrollable, Tk::Y_Scrollable

Constants included from Tk::Encoding

Tk::Encoding::BINARY, Tk::Encoding::BINARY_NAME, Tk::Encoding::DEFAULT_EXTERNAL_NAME, Tk::Encoding::DEFAULT_INTERNAL_NAME, Tk::Encoding::ENCODING_TABLE, Tk::Encoding::RubyEncoding, Tk::Encoding::TkCommandNames, Tk::Encoding::UNKNOWN, Tk::Encoding::UTF8_NAME

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Tk::Text::IndexModMethods

#+, #-, #any_chars, #any_indices, #any_lines, #chars, #display_chars, #display_indices, #display_lineend, #display_lines, #display_linestart, #display_wordend, #display_wordstart, #indices, #lineend, #lines, #linestart, #wordend, #wordstart

Methods included from TkTreatTagFont

#font_configinfo, #font_configure, #font_copy, #kanjifont_configure, #kanjifont_copy, #latinfont_configure, #latinfont_copy

Methods inherited from TkObject

#epath, #event_generate, #method_missing, #path, #tk_send, #tk_send_to_list, #tk_send_to_list_with_enc, #tk_send_to_list_without_enc, #tk_send_to_simplelist, #tk_send_to_simplelist_with_enc, #tk_send_to_simplelist_without_enc, #tk_send_with_enc, #tk_send_without_enc, #to_eval

Methods included from TkCore

#_tk_call_to_list_core, #after, #after_cancel, #after_idle, #appname, #appsend, #appsend_deny, #appsend_displayof, callback, #callback_break, #callback_continue, #callback_return, #chooseColor, #chooseDirectory, #do_one_event, #event_generate, #getMultipleOpenFile, #getMultipleSaveFile, #getOpenFile, #getSaveFile, #get_eventloop_tick, #get_eventloop_weight, #get_no_event_wait, #inactive, #inactive_displayof, #info, #ip_eval, #ip_eval_with_enc, #ip_eval_without_enc, #ip_invoke, #ip_invoke_with_enc, #ip_invoke_without_enc, #is_mainloop?, #load_cmd_on_ip, #mainloop, #mainloop_exist?, #mainloop_thread?, #mainloop_watchdog, #messageBox, #rb_appsend, #rb_appsend_displayof, #reset_inactive, #reset_inactive_displayof, #restart, #scaling, #scaling_displayof, #set_eventloop_tick, #set_eventloop_weight, #set_no_event_wait, #tk_call, #tk_call_to_list, #tk_call_to_list_with_enc, #tk_call_to_list_without_enc, #tk_call_to_simplelist, #tk_call_to_simplelist_with_enc, #tk_call_to_simplelist_without_enc, #tk_call_with_enc, #tk_call_without_enc, #windowingsystem

Methods included from TkComm

_at, _callback_entry?, _callback_entry_class?, _curr_cmd_id, _fromUTF8, _genobj_for_tkwidget, _next_cmd_id, _toUTF8, array2tk_list, #bind_all, #bind_append_all, #bind_remove_all, #bindinfo_all, bool, image_obj, #install_cmd, install_cmd, list, num_or_str, number, procedure, simplelist, string, #subst, tk_tcl2ruby, uninstall_cmd, #uninstall_cmd, window

Methods included from TkUtil

_conv_args, #_conv_args, #_fromUTF8, _get_eval_enc_str, #_get_eval_enc_str, #_get_eval_string, _get_eval_string, _symbolkey2str, #_symbolkey2str, #_toUTF8, bool, #bool, callback, eval_cmd, #hash_kv, hash_kv, install_cmd, num_or_str, #num_or_str, number, #number, string, #string, uninstall_cmd

Methods included from TkEvent

#install_bind, #install_bind_for_event_class

Methods included from TkConfigMethod

__IGNORE_UNKNOWN_CONFIGURE_OPTION__, #__check_available_configure_options, __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!, #config_hash_kv, #configure_cmd

Methods included from TkTreatFont

#font_configinfo, #font_configure, #font_copy, #kanjifont_configure, #kanjifont_copy, #latinfont_configure, #latinfont_copy

Methods included from Tk

BinaryString, EncodedString, #Grid, #Pack, #Place, UTF8_String, __set_toplevel_aliases__, add_kinsoku, bell, bell_on_display, const_missing, current_grabs, cursor_display, default_widget_set, default_widget_set=, delete_kinsoku, destroy, errorCode, errorInfo, exit, focus, focus_lastfor, focus_next, focus_prev, focus_to, fromUTF8, grid, grid_forget, has_mainwindow?, load_tcllibrary, load_tclscript, load_tclscript_rsrc, load_tclscript_rsrcid, lower_window, pack, pack_forget, pkgconfig_get, pkgconfig_list, place, place_forget, raise_window, #root, show_kinsoku, sleep, strictMotif, subst_tk_backslash, subst_utf_backslash, tcl_pkgconfig_get, tcl_pkgconfig_list, thread_update, thread_update_idletasks, tk_pkgconfig_get, tk_pkgconfig_list, toUTF8, to_backslash_sequence, ungrid, unload_tcllibrary, unpack, unplace, #update, update, update_idletasks, utf_to_backslash, utf_to_backslash_sequence, wakeup

Methods included from Tk::Encoding

#default_encoding=, #encoding=, #encoding_convertfrom, #encoding_convertto, #encoding_dirs, #encoding_dirs=, #encoding_name, #encoding_names, #encoding_obj, #encoding_objs, #encoding_system=, #encoding_system_name, #encoding_system_obj, #force_default_encoding, #force_default_encoding=, #force_default_encoding?, #tk_encoding_names

Methods inherited from TkKernel

new

Constructor Details

#initialize(parent, *args) ⇒ TkTextTag

Returns a new instance of TkTextTag.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'ext/lib/tk/texttag.rb', line 35

def initialize(parent, *args)
  #unless parent.kind_of?(TkText)
  #  fail ArgumentError, "expect TkText for 1st argument"
  #end
  @parent = @t = parent
  @tpath = parent.path
  Tk_TextTag_ID.mutex.synchronize{
    # @path = @id = Tk_TextTag_ID.join('')
    @path = @id = Tk_TextTag_ID.join(TkCore::INTERP._ip_id_).freeze
    Tk_TextTag_ID[1].succ!
  }
  TTagID_TBL.mutex.synchronize{
    TTagID_TBL[@id] = self
    TTagID_TBL[@tpath] = {} unless TTagID_TBL[@tpath]
    TTagID_TBL[@tpath][@id] = self
  }
  #tk_call @t.path, "tag", "configure", @id, *hash_kv(keys)
  if args != []
    keys = args.pop
    if keys.kind_of?(Hash)
      add(*args) if args != []
      configure(keys)
    else
      args.push keys
      add(*args)
    end
  end
  @t._addtag id, self
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class TkObject

Class Method Details

.id2obj(text, id) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'ext/lib/tk/texttag.rb', line 24

def TkTextTag.id2obj(text, id)
  tpath = text.path
  TTagID_TBL.mutex.synchronize{
    if TTagID_TBL[tpath]
      TTagID_TBL[tpath][id]? TTagID_TBL[tpath][id]: id
    else 
      id
    end
  }
end

Instance Method Details

#[](key) ⇒ Object



123
124
125
# File 'ext/lib/tk/texttag.rb', line 123

def [](key)
  cget key
end

#[]=(key, val) ⇒ Object



127
128
129
130
# File 'ext/lib/tk/texttag.rb', line 127

def []=(key,val)
  configure key, val
  val
end

#add(*indices) ⇒ Object



86
87
88
89
90
# File 'ext/lib/tk/texttag.rb', line 86

def add(*indices)
  tk_call_without_enc(@t.path, 'tag', 'add', @id, 
                      *(indices.collect{|idx| _get_eval_enc_str(idx)}))
  self
end

#bind(seq, *args) ⇒ Object

def bind(seq, cmd=Proc.new, *args)

_bind([@t.path, 'tag', 'bind', @id], seq, cmd, *args)
self

end



194
195
196
197
198
199
200
201
202
203
# File 'ext/lib/tk/texttag.rb', line 194

def bind(seq, *args)
  # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
  if TkComm._callback_entry?(args[0]) || !block_given?
    cmd = args.shift
  else
    cmd = Proc.new
  end
  _bind([@t.path, 'tag', 'bind', @id], seq, cmd, *args)
  self
end

#bind_append(seq, *args) ⇒ Object

def bind_append(seq, cmd=Proc.new, *args)

_bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, *args)
self

end



209
210
211
212
213
214
215
216
217
218
# File 'ext/lib/tk/texttag.rb', line 209

def bind_append(seq, *args)
  # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
  if TkComm._callback_entry?(args[0]) || !block_given?
    cmd = args.shift
  else
    cmd = Proc.new
  end
  _bind_append([@t.path, 'tag', 'bind', @id], seq, cmd, *args)
  self
end

#bind_remove(seq) ⇒ Object



220
221
222
223
# File 'ext/lib/tk/texttag.rb', line 220

def bind_remove(seq)
  _bind_remove([@t.path, 'tag', 'bind', @id], seq)
  self
end

#bindinfo(context = nil) ⇒ Object



225
226
227
# File 'ext/lib/tk/texttag.rb', line 225

def bindinfo(context=nil)
  _bindinfo([@t.path, 'tag', 'bind', @id], context)
end

#cget(key) ⇒ Object



132
133
134
# File 'ext/lib/tk/texttag.rb', line 132

def cget(key)
  @t.tag_cget @id, key
end

#cget_strict(key) ⇒ Object



135
136
137
# File 'ext/lib/tk/texttag.rb', line 135

def cget_strict(key)
  @t.tag_cget_strict @id, key
end

#configinfo(key = nil) ⇒ Object

end



182
183
184
# File 'ext/lib/tk/texttag.rb', line 182

def configinfo(key=nil)
  @t.tag_configinfo @id, key
end

#configure(key, val = None) ⇒ Object

def cget(key)

  case key.to_s
  when 'text', 'label', 'show', 'data', 'file'
    _fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', @id, "-#{key}"))
  when 'font', 'kanjifont'
    #fnt = tk_tcl2ruby(tk_call(@t.path, 'tag', 'cget', @id, "-#{key}"))
    fnt = tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', 
                                                    @id, '-font')))
    unless fnt.kind_of?(TkFont)
      fnt = tagfontobj(@id, fnt)
    end
    if key.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
      # obsolete; just for compatibility
      fnt.kanji_font
    else
      fnt
    end
  else
    tk_tcl2ruby(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'cget', 
                                              @id, "-#{key}")))
  end
end


163
164
165
# File 'ext/lib/tk/texttag.rb', line 163

def configure(key, val=None)
  @t.tag_configure @id, key, val
end

#current_configinfo(key = nil) ⇒ Object



186
187
188
# File 'ext/lib/tk/texttag.rb', line 186

def current_configinfo(key=nil)
  @t.current_tag_configinfo @id, key
end

#destroyObject



241
242
243
244
245
246
247
# File 'ext/lib/tk/texttag.rb', line 241

def destroy
  tk_call_without_enc(@t.path, 'tag', 'delete', @id)
  TTagID_TBL.mutex.synchronize{
    TTagID_TBL[@tpath].delete(@id) if TTagID_TBL[@tpath]
  }
  self
end

#exist?Boolean

Returns:

  • (Boolean)


69
70
71
72
73
74
75
76
# File 'ext/lib/tk/texttag.rb', line 69

def exist?
  #if ( tk_split_simplelist(_fromUTF8(tk_call_without_enc(@t.path, 'tag', 'names'))).find{|id| id == @id } )
  if ( tk_split_simplelist(tk_call_without_enc(@t.path, 'tag', 'names'), false, true).find{|id| id == @id } )
    true
  else
    false
  end
end

#firstObject



78
79
80
# File 'ext/lib/tk/texttag.rb', line 78

def first
  Tk::Text::IndexString.new(@id + '.first')
end

#idObject



65
66
67
# File 'ext/lib/tk/texttag.rb', line 65

def id
  Tk::Text::IndexString.new(@id)
end

#lastObject



82
83
84
# File 'ext/lib/tk/texttag.rb', line 82

def last
  Tk::Text::IndexString.new(@id + '.last')
end

#lower(below = None) ⇒ Object



235
236
237
238
239
# File 'ext/lib/tk/texttag.rb', line 235

def lower(below=None)
  tk_call_without_enc(@t.path, 'tag', 'lower', @id, 
                      _get_eval_enc_str(below))
  self
end

#nextrange(first, last = None) ⇒ Object



107
108
109
110
111
112
113
# File 'ext/lib/tk/texttag.rb', line 107

def nextrange(first, last=None)
  simplelist(tk_call_without_enc(@t.path, 'tag', 'nextrange', @id, 
                                 _get_eval_enc_str(first), 
                                 _get_eval_enc_str(last))).collect{|idx|
    Tk::Text::IndexString.new(idx)
  }
end

#prevrange(first, last = None) ⇒ Object



115
116
117
118
119
120
121
# File 'ext/lib/tk/texttag.rb', line 115

def prevrange(first, last=None)
  simplelist(tk_call_without_enc(@t.path, 'tag', 'prevrange', @id, 
                                 _get_eval_enc_str(first), 
                                 _get_eval_enc_str(last))).collect{|idx|
    Tk::Text::IndexString.new(idx)
  }
end

#raise(above = None) ⇒ Object



229
230
231
232
233
# File 'ext/lib/tk/texttag.rb', line 229

def raise(above=None)
  tk_call_without_enc(@t.path, 'tag', 'raise', @id, 
                      _get_eval_enc_str(above))
  self
end

#rangesObject



98
99
100
101
102
103
104
105
# File 'ext/lib/tk/texttag.rb', line 98

def ranges
  l = tk_split_simplelist(tk_call_without_enc(@t.path, 'tag', 'ranges', @id))
  r = []
  while key=l.shift
    r.push [Tk::Text::IndexString.new(key), Tk::Text::IndexString.new(l.shift)]
  end
  r
end

#remove(*indices) ⇒ Object



92
93
94
95
96
# File 'ext/lib/tk/texttag.rb', line 92

def remove(*indices)
  tk_call_without_enc(@t.path, 'tag', 'remove', @id, 
                      *(indices.collect{|idx| _get_eval_enc_str(idx)}))
  self
end