ruby/ext/tk/lib/tk/encodedstr.rb
(no author) 84035542b7 This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-05-01 16:09:55 +00:00

107 lines
2.3 KiB
Ruby

#
# tk/encodedstr.rb : Tk::EncodedString class
#
require 'tk'
###########################################
# string with Tcl's encoding
###########################################
module Tk
class EncodedString < String
Encoding = nil
def self.subst_utf_backslash(str)
# str.gsub(/\\u([0-9A-Fa-f]{1,4})/){[$1.hex].pack('U')}
TclTkLib._subst_UTF_backslash(str)
end
def self.utf_backslash(str)
self.subst_utf_backslash(str)
end
def self.subst_tk_backslash(str)
TclTkLib._subst_Tcl_backslash(str)
end
def self.utf_to_backslash_sequence(str)
str.unpack('U*').collect{|c|
if c <= 0xFF # ascii character
c.chr
else
format('\u%X', c)
end
}.join('')
end
def self.utf_to_backslash(str)
self.utf_to_backslash_sequence(str)
end
def self.to_backslash_sequence(str)
str.unpack('U*').collect{|c|
if c <= 0x1F # control character
case c
when 0x07; '\a'
when 0x08; '\b'
when 0x09; '\t'
when 0x0a; '\n'
when 0x0b; '\v'
when 0x0c; '\f'
when 0x0d; '\r'
else
format('\x%02X', c)
end
elsif c <= 0xFF # ascii character
c.chr
else
format('\u%X', c)
end
}.join('')
end
def self.new_with_utf_backslash(str, enc = nil)
self.new('', enc).replace(self.subst_utf_backslash(str))
end
def self.new_without_utf_backslash(str, enc = nil)
self.new('', enc).replace(str)
end
def initialize(str, enc = nil)
super(str)
@encoding = ( enc ||
((self.class::Encoding)?
self.class::Encoding : Tk.encoding_system) )
end
attr_reader :encoding
end
# def Tk.EncodedString(str, enc = nil)
# Tk::EncodedString.new(str, enc)
# end
##################################
class BinaryString < EncodedString
Encoding = 'binary'.freeze
end
# def Tk.BinaryString(str)
# Tk::BinaryString.new(str)
# end
##################################
class UTF8_String < EncodedString
Encoding = 'utf-8'.freeze
def self.new(str)
super(self.subst_utf_backslash(str))
end
def to_backslash_sequence
Tk::EncodedString.utf_to_backslash_sequence(self)
end
alias to_backslash to_backslash_sequence
end
# def Tk.UTF8_String(str)
# Tk::UTF8_String.new(str)
# end
end