diff options
Diffstat (limited to 'ext/tk/lib/tk/text.rb')
-rw-r--r-- | ext/tk/lib/tk/text.rb | 136 |
1 files changed, 77 insertions, 59 deletions
diff --git a/ext/tk/lib/tk/text.rb b/ext/tk/lib/tk/text.rb index 49d4b5625b..14b9be23f0 100644 --- a/ext/tk/lib/tk/text.rb +++ b/ext/tk/lib/tk/text.rb @@ -1,6 +1,5 @@ # # tk/text.rb - Tk text classes -# $Date$ # by Yukihiro Matsumoto <matz@caelum.co.jp> require 'tk' require 'tk/itemfont' @@ -60,7 +59,7 @@ module TkTextTagConfig private :itemconfiginfo, :current_itemconfiginfo end -class TkText<TkTextWin +class Tk::Text<TkTextWin ItemConfCMD = ['tag'.freeze, 'configure'.freeze].freeze #include TkTreatTextTagFont include TkTextTagConfig @@ -74,9 +73,9 @@ class TkText<TkTextWin mod = mod.to_s if mod =~ /^\s*[+-]?\d/ - TkText::IndexString.new(String.new(id) << ' + ' << mod) + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod) else - TkText::IndexString.new(String.new(id) << ' ' << mod) + Tk::Text::IndexString.new(String.new(id) << ' ' << mod) end end @@ -85,20 +84,20 @@ class TkText<TkTextWin mod = mod.to_s if mod =~ /^\s*[+-]?\d/ - TkText::IndexString.new(String.new(id) << ' - ' << mod) + Tk::Text::IndexString.new(String.new(id) << ' - ' << mod) elsif mod =~ /^\s*[-]\s+(\d.*)$/ - TkText::IndexString.new(String.new(id) << ' - -' << $1) + Tk::Text::IndexString.new(String.new(id) << ' - -' << $1) else - TkText::IndexString.new(String.new(id) << ' ' << mod) + Tk::Text::IndexString.new(String.new(id) << ' ' << mod) end end def chars(mod) fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' chars') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' chars') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' chars') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' chars') end end alias char chars @@ -107,9 +106,9 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display chars') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display chars') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display chars') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display chars') end end alias display_char display_chars @@ -118,9 +117,9 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any chars') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any chars') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any chars') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any chars') end end alias any_char any_chars @@ -129,9 +128,9 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' indices') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' indices') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' indices') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' indices') end end @@ -139,9 +138,9 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display indices') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display indices') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display indices') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display indices') end end @@ -149,18 +148,18 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any indices') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any indices') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any indices') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any indices') end end def lines(mod) fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' lines') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' lines') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' lines') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' lines') end end alias line lines @@ -169,9 +168,9 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display_lines') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' display_lines') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display lines') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' display lines') end end alias display_line display_lines @@ -180,43 +179,43 @@ class TkText<TkTextWin # Tk8.5 feature fail ArgumentError, 'expect Integer' unless mod.kind_of?(Integer) if mod < 0 - TkText::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any_lines') + Tk::Text::IndexString.new(String.new(id) << ' ' << mod.to_s << ' any_lines') else - TkText::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any lines') + Tk::Text::IndexString.new(String.new(id) << ' + ' << mod.to_s << ' any lines') end end alias any_line any_lines def linestart - TkText::IndexString.new(String.new(id) << ' linestart') + Tk::Text::IndexString.new(String.new(id) << ' linestart') end def lineend - TkText::IndexString.new(String.new(id) << ' lineend') + Tk::Text::IndexString.new(String.new(id) << ' lineend') end def display_linestart # Tk8.5 feature - TkText::IndexString.new(String.new(id) << ' display linestart') + Tk::Text::IndexString.new(String.new(id) << ' display linestart') end def display_lineend # Tk8.5 feature - TkText::IndexString.new(String.new(id) << ' display lineend') + Tk::Text::IndexString.new(String.new(id) << ' display lineend') end def wordstart - TkText::IndexString.new(String.new(id) << ' wordstart') + Tk::Text::IndexString.new(String.new(id) << ' wordstart') end def wordend - TkText::IndexString.new(String.new(id) << ' wordend') + Tk::Text::IndexString.new(String.new(id) << ' wordend') end def display_wordstart # Tk8.5 feature - TkText::IndexString.new(String.new(id) << ' display wordstart') + Tk::Text::IndexString.new(String.new(id) << ' display wordstart') end def display_wordend # Tk8.5 feature - TkText::IndexString.new(String.new(id) << ' display wordend') + Tk::Text::IndexString.new(String.new(id) << ' display wordend') end end @@ -251,7 +250,11 @@ class TkText<TkTextWin def self.new(*args, &block) obj = super(*args){} obj.init_instance_variable - obj.instance_eval(&block) if defined? yield + if TkCore::WITH_RUBY_VM ### Ruby 1.9 !!!! + obj.instance_exec(obj, &block) if defined? yield + else + obj.instance_eval(&block) if defined? yield + end obj end @@ -261,8 +264,12 @@ class TkText<TkTextWin end def __destroy_hook__ - TkTextTag::TTagID_TBL.delete(@path) - TkTextMark::TMarkID_TBL.delete(@path) + TkTextTag::TTagID_TBL.mutex.synchronize{ + TkTextTag::TTagID_TBL.delete(@path) + } + TkTextTag::TMarkID_TBL.mutex.synchronize{ + TkTextMark::TMarkID_TBL.delete(@path) + } end def create_self(keys) @@ -285,16 +292,16 @@ class TkText<TkTextWin private :__strval_optkeys def self.at(x, y) - TkText::IndexString.at(x, y) + Tk::Text::IndexString.at(x, y) end def at(x, y) - TkText::IndexString.at(x, y) + Tk::Text::IndexString.at(x, y) end def index(idx) - TkText::IndexString.new(tk_send_without_enc('index', - _get_eval_enc_str(idx))) + Tk::Text::IndexString.new(tk_send_without_enc('index', + _get_eval_enc_str(idx))) end def get_displaychars(*index) @@ -713,15 +720,17 @@ class TkText<TkTextWin def tag_delete(*tags) tk_send_without_enc('tag', 'delete', *(tags.collect{|tag| _get_eval_enc_str(tag)})) - if TkTextTag::TTagID_TBL[@path] - tags.each{|tag| - if tag.kind_of?(TkTextTag) - TkTextTag::TTagID_TBL[@path].delete(tag.id) - else - TkTextTag::TTagID_TBL[@path].delete(tag) - end - } - end + TkTextTag::TTagID_TBL.mutex.synchronize{ + if TkTextTag::TTagID_TBL[@path] + tags.each{|tag| + if tag.kind_of?(TkTextTag) + TkTextTag::TTagID_TBL[@path].delete(tag.id) + else + TkTextTag::TTagID_TBL[@path].delete(tag) + end + } + end + } self end alias deltag tag_delete @@ -968,7 +977,7 @@ class TkText<TkTextWin false, true) r = [] while key=l.shift - r.push [TkText::IndexString.new(key), TkText::IndexString.new(l.shift)] + r.push [Tk::Text::IndexString.new(key), Tk::Text::IndexString.new(l.shift)] end r end @@ -978,7 +987,7 @@ class TkText<TkTextWin _get_eval_enc_str(tag), _get_eval_enc_str(first), _get_eval_enc_str(last))).collect{|idx| - TkText::IndexString.new(idx) + Tk::Text::IndexString.new(idx) } end @@ -987,7 +996,7 @@ class TkText<TkTextWin _get_eval_enc_str(tag), _get_eval_enc_str(first), _get_eval_enc_str(last))).collect{|idx| - TkText::IndexString.new(idx) + Tk::Text::IndexString.new(idx) } end @@ -1183,6 +1192,11 @@ class TkText<TkTextWin end def _ktext_length(txt) + if TkCore::WITH_ENCODING ### Ruby 1.9 !!!!!!!!!!!!! + return txt.length + end + ########################### + if $KCODE !~ /n/i return txt.gsub(/[^\Wa-zA-Z_\d]/, ' ').length end @@ -1232,7 +1246,7 @@ class TkText<TkTextWin if ret == "" nil else - TkText::IndexString.new(ret) + Tk::Text::IndexString.new(ret) end end @@ -1267,7 +1281,7 @@ class TkText<TkTextWin if ret == "" nil else - TkText::IndexString.new(ret) + Tk::Text::IndexString.new(ret) end end @@ -1456,10 +1470,10 @@ class TkText<TkTextWin # retrieve index idx = str.index(/ /, i) if idx - result.push(TkText::IndexString.new(str[i..(idx-1)])) + result.push(Tk::Text::IndexString.new(str[i..(idx-1)])) i = idx + 1 else - result.push(TkText::IndexString.new(str[i..-1])) + result.push(Tk::Text::IndexString.new(str[i..-1])) break end end @@ -1527,13 +1541,17 @@ class TkText<TkTextWin end end +#TkText = Tk::Text unless Object.const_defined? :TkText +Tk.__set_toplevel_aliases__(:Tk, Tk::Text, :TkText) + + ####################################### -class TkText::Peer < TkText +class Tk::Text::Peer < Tk::Text # Tk8.5 feature def initialize(text, parent=nil, keys={}) - unless text.kind_of?(TkText) - fail ArgumentError, "TkText is expected for 1st argument" + unless text.kind_of?(Tk::Text) + fail ArgumentError, "Tk::Text is expected for 1st argument" end @src_text = text super(parent, keys) |