Class: TkTextTag

Inherits:
TkObject show all
Includes:
Tk::Text::IndexModMethods, TkTreatTagFont
Defined in:
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::Fontchooser, Tk::INTERP, Tk::JAPANIZED_TK, Tk::LIBRARY_PATH, Tk::MAINLOOP, Tk::PACKAGE_PATH, Tk::RELEASE_DATE, 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_nil, num_or_str, number, procedure, simplelist, slice_ary, string, #subst, tk_tcl2ruby, uninstall_cmd, #uninstall_cmd, window

Methods included from TkEvent

#install_bind, #install_bind_for_event_class

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_nil, num_or_nil, num_or_str, #num_or_str, number, #number, string, #string, uninstall_cmd, untrust

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, __create_widget_set__, __disable_toplevel_control__, __import_toplevel_aliases__, __regist_toplevel_aliases__, __remove_toplevel_aliases__, __reset_toplevel_owner__, __set_loaded_toplevel_aliases__, __set_toplevel_aliases__, __toplevel_alias_setup_proc__, _replace_toplevel_aliases, add_kinsoku, backup_current_topdef, bell, bell_on_display, const_missing, current_grabs, cursor_display, default_widget_set, default_widget_set=, define_topalias, define_topobj, delete_kinsoku, destroy, #encoding, #encoding=, 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, regist_sym_for_loaded_file, replace_topalias, replace_topobj, #root, set_topalias, 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, topalias_defined?, toplevel_aliases_on_widget_set, topobj_defined?, ungrid, unload_tcllibrary, unpack, unplace, update, #update, update_idletasks, utf_to_backslash, utf_to_backslash_sequence, wakeup, widget_set_symbols

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 '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 '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 'lib/tk/texttag.rb', line 123

def [](key)
  cget key
end

#[]=(key, val) ⇒ Object



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

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

#add(*indices) ⇒ Object



86
87
88
89
90
# File '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



197
198
199
200
201
202
203
204
205
206
# File 'lib/tk/texttag.rb', line 197

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



212
213
214
215
216
217
218
219
220
221
# File 'lib/tk/texttag.rb', line 212

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



223
224
225
226
# File 'lib/tk/texttag.rb', line 223

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

#bindinfo(context = nil) ⇒ Object



228
229
230
# File 'lib/tk/texttag.rb', line 228

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

#cget(key) ⇒ Object



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

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

#cget_strict(key) ⇒ Object



138
139
140
# File 'lib/tk/texttag.rb', line 138

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

#cget_tkstring(key) ⇒ Object



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

def cget_tkstring(key)
  @t.tag_cget_tkstring @id, key
end

#configinfo(key = nil) ⇒ Object

def configure(key, val=None)

  if key.kind_of?(Hash)
    tk_call @t.path, 'tag', 'configure', @id, *hash_kv(key)
  else
    tk_call @t.path, 'tag', 'configure', @id, "-#{key}", val
  end
end
def configure(key, value)
  if value == FALSE
    value = "0"
  elsif value.kind_of?(Proc)
    value = install_cmd(value)
  end
  tk_call @t.path, 'tag', 'configure', @id, "-#{key}", value
end


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

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


166
167
168
# File 'lib/tk/texttag.rb', line 166

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

#current_configinfo(key = nil) ⇒ Object



189
190
191
# File 'lib/tk/texttag.rb', line 189

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

#destroyObject



244
245
246
247
248
249
250
# File 'lib/tk/texttag.rb', line 244

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 '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 'lib/tk/texttag.rb', line 78

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

#idObject



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

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

#lastObject



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

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

#lower(below = None) ⇒ Object



238
239
240
241
242
# File 'lib/tk/texttag.rb', line 238

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 '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 '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



232
233
234
235
236
# File 'lib/tk/texttag.rb', line 232

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 '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 '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