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.


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
64
# File 'lib/tk/texttag.rb', line 36

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


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

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


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

def [](key)
  cget key
end

#[]=(key, val) ⇒ Object


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

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

#add(*indices) ⇒ Object


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

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


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

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


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

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


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

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

#bindinfo(context = nil) ⇒ Object


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

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

#cget(key) ⇒ Object


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

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

#cget_strict(key) ⇒ Object


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

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

#cget_tkstring(key) ⇒ Object


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

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

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

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

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

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

#current_configinfo(key = nil) ⇒ Object


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

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

#destroyObject


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

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)

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

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


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

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

#idObject


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

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

#lastObject


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

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

#lower(below = None) ⇒ Object


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

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


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

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


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

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


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

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

#rangesObject


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

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


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

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