summaryrefslogtreecommitdiff
path: root/ext/tk/lib
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-16 07:45:51 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-16 07:45:51 +0000
commit98a3a9db9718d8a54a66ae5f5e4da080c57cba5c (patch)
treeebca1fb8cbbd8d33e46c7c8267fc26c5d67a5c61 /ext/tk/lib
parente45c4cd1ac8523f83b1d72b068ba009e3d9fe6db (diff)
Add Tk::EncodedString and Tk::UTF8_String class to support characters
using the \uXXXX escape to the UNICODE string. sample/{demos-en,demos-jp}/unicodeout.rb are samples of Tk::UTF8_String. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk/lib')
-rw-r--r--ext/tk/lib/tk.rb58
1 files changed, 56 insertions, 2 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index fcf9d11593..e904278b25 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -1525,6 +1525,50 @@ module Tk
end
###########################################
+# string with Tcl's encoding
+###########################################
+module Tk
+ class EncodedString < String
+ @@enc_buf = '__rb_encoding_buffer__'
+
+ def self.tk_escape(str)
+ s = '"' + str.gsub(/[\[\]$"]/, '\\\\\&') + '"'
+ TkCore::INTERP.__eval(format('global %s; set %s %s',
+ @@enc_buf, @@enc_buf, s))
+ end
+
+ def self.new(str, enc = Tk.encoding_system)
+ obj = super(self.tk_escape(str))
+ obj.instance_eval{@enc = enc}
+ obj
+ end
+
+ def self.new_without_escape(str, enc = Tk.encoding_system)
+ obj = super(str)
+ obj.instance_eval{@enc = enc}
+ obj
+ end
+
+ def encoding
+ @enc
+ end
+ end
+ def Tk.EncodedString(str, enc = Tk.encoding_system)
+ Tk::EncodedString.new(str, enc)
+ end
+
+ class UTF8_String < EncodedString
+ def self.new(str)
+ super(str, 'utf-8')
+ end
+ end
+ def Tk.UTF8_String(str)
+ Tk::UTF8_String.new(str)
+ end
+end
+
+
+###########################################
# convert kanji string to/from utf-8
###########################################
if /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK
@@ -1537,7 +1581,11 @@ if /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK
def _eval(cmd)
if defined? @encoding
- _fromUTF8(__eval(_toUTF8(cmd, @encoding)), @encoding)
+ if cmd.kind_of?(Tk::EncodedString)
+ _fromUTF8(__eval(_toUTF8(cmd, cmd.encoding)), @encoding)
+ else
+ _fromUTF8(__eval(_toUTF8(cmd, @encoding)), @encoding)
+ end
else
__eval(cmd)
end
@@ -1545,7 +1593,13 @@ if /^8\.[1-9]/ =~ Tk::TCL_VERSION && !Tk::JAPANIZED_TK
def _invoke(*cmds)
if defined? @encoding
- cmds = cmds.collect{|cmd| _toUTF8(cmd, @encoding)}
+ cmds = cmds.collect{|cmd|
+ if cmd.kind_of?(Tk::EncodedString)
+ _toUTF8(cmd, cmd.encoding)
+ else
+ _toUTF8(cmd, @encoding)
+ end
+ }
_fromUTF8(__invoke(*cmds), @encoding)
else
__invoke(*cmds)