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::Checkbutton, Tk::CloneMenu, Tk::Fontchooser, 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_nil, num_or_str, number, procedure, simplelist, slice_ary, 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_nil, num_or_nil, num_or_str, #num_or_str, number, #number, string, #string, uninstall_cmd, untrust

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, __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, 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, &block) ⇒ Object



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

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

#bind_append(seq, *args, &block) ⇒ Object



205
206
207
208
209
210
211
212
213
214
# File 'lib/tk/texttag.rb', line 205

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

#bind_remove(seq) ⇒ Object



216
217
218
219
# File 'lib/tk/texttag.rb', line 216

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

#bindinfo(context = nil) ⇒ Object



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

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

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



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

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



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

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



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

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