mirror of
https://github.com/ruby/ruby.git
synced 2025-09-18 01:54:00 +02:00

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
107 lines
2.3 KiB
Ruby
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
|