Class: TclTkIp

Inherits:
Object show all
Defined in:
sample/demos-en/tkencoding.rb,
lib/tk.rb,
lib/tk.rb,
lib/tk.rb

Overview

-*- ruby -*-

tkencoding.rb written by [email protected]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#encoding=(value) ⇒ Object

from tkencoding.rb by [email protected] attr_accessor :encoding



2643
2644
2645
# File 'lib/tk.rb', line 2643

def encoding=(value)
  @encoding = value
end

Class Method Details

.__new__Object



24
# File 'lib/multi-tk.rb', line 24

alias __new__ new

.new(*args) ⇒ Object



27
28
29
30
31
32
# File 'lib/multi-tk.rb', line 27

def new(*args)
  if Thread.current.group != ThreadGroup::Default
    raise SecurityError, 'only ThreadGroup::Default can call TclTkIp.new'
  end
  __new__(*args)
end

Instance Method Details

#__fromUTF8Object



2663
# File 'lib/tk.rb', line 2663

alias __fromUTF8 _fromUTF8

#__toUTF8Object



2662
# File 'lib/tk.rb', line 2662

alias __toUTF8 _toUTF8

#_eval(cmd) ⇒ Object Also known as: _eval_with_enc, __eval



14
15
16
17
18
19
20
# File 'sample/demos-en/tkencoding.rb', line 14

def _eval(cmd)
  if( @encoding )
    _fromUTF8(__eval(_toUTF8(cmd,@encoding)),@encoding)
  else
    __eval(cmd)
  end
end

#_eval_without_encObject

backup original (without encoding) _eval and _invoke



17
# File 'lib/tk.rb', line 17

alias _eval_without_enc _eval

#_fromUTF8(str, encoding = nil) ⇒ Object



2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
# File 'lib/tk.rb', line 2716

def _fromUTF8(str, enc = nil)
  # str must be UTF-8 or binary.
  enc_name = str.instance_variable_get(:@encoding)
  enc_name ||= 
    Tk::Encoding::ENCODING_TABLE.get_name(str.encoding) rescue nil

  # is 'binary' encoding?
  if enc_name == Tk::Encoding::BINARY_NAME
    return str.dup.force_encoding(Tk::Encoding::BINARY_NAME)
  end

  # get target encoding name (if enc == nil, use default encoding)
  begin
    enc_name = Tk::Encoding::ENCODING_TABLE.get_name(enc)
  rescue
    # then, enc != nil
    # unknown encoding for Tk -> try to convert encoding on Ruby
    str = str.dup.force_encoding(Tk::Encoding::UTF8_NAME)
    str.encode!(enc) # modify self !!
    return str  # if no error, probably succeed converting
  end

  encstr = __fromUTF8(str, enc_name)
  encstr.force_encoding(Tk::Encoding::ENCODING_TABLE.get_obj(enc_name))
  encstr
end

#_invoke(*cmds) ⇒ Object Also known as: _invoke_with_enc, __invoke



22
23
24
25
26
27
28
29
# File 'sample/demos-en/tkencoding.rb', line 22

def _invoke(*cmds)
  if( @encoding )
    cmds = cmds.collect{|cmd| _toUTF8(cmd,@encoding)}
    _fromUTF8(__invoke(*cmds),@encoding)
  else
    __invoke(*cmds)
  end
end

#_invoke_without_encObject



18
# File 'lib/tk.rb', line 18

alias _invoke_without_enc _invoke

#_ip_id_Object



20
21
22
23
# File 'lib/tk.rb', line 20

def _ip_id_
  # for RemoteTkIp
  ''
end

#_toUTF8(str, encoding = nil) ⇒ Object

without Encoding (Ruby 1.8)



2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
# File 'lib/tk.rb', line 2671

def _toUTF8(str, enc = nil)
  if enc
    # use given encoding
    begin
      enc_name = Tk::Encoding::ENCODING_TABLE.get_name(enc)
    rescue
      # unknown encoding for Tk -> try to convert encoding on Ruby
      str = str.dup.force_encoding(enc)
      str.encode!(Tk::Encoding::UTF8_NAME) # modify self !!
      return str  # if no error, probably succeed converting
    end
  end

  enc_name ||= str.instance_variable_get(:@encoding)

  enc_name ||= 
    Tk::Encoding::ENCODING_TABLE.get_name(str.encoding) rescue nil

  unless enc_name
    # str.encoding isn't supported by Tk -> try to convert on Ruby
    begin
      return str.encode(Tk::Encoding::UTF8_NAME) # new string
    rescue
      # error -> ignore, try to use default encoding of Ruby/Tk
    end
  end

  #enc_name ||= 
  #  Tk::Encoding::ENCODING_TABLE.get_name(Tk.encoding) rescue nil
  enc_name ||= Tk::Encoding::ENCODING_TABLE.get_name(nil)

  # is 'binary' encoding?
  if enc_name == Tk::Encoding::BINARY_NAME
    return str.dup.force_encoding(Tk::Encoding::BINARY_NAME)
  end

  # force default encoding?
  if ! str.kind_of?(Tk::EncodedString) && self.force_default_encoding?
    enc_name = Tk::Encoding::ENCODING_TABLE.get_name(Tk.default_encoding)
  end

  encstr = __toUTF8(str, enc_name)
  encstr.force_encoding(Tk::Encoding::UTF8_NAME)
  encstr
end

#default_encoding=(name) ⇒ Object



2636
2637
2638
2639
# File 'lib/tk.rb', line 2636

def default_encoding=(name)
  name = name.name if name.kind_of?(::Encoding) if Tk::WITH_ENCODING
  @encoding = name
end

#encoding_nameObject Also known as: encoding, default_encoding



2648
2649
2650
# File 'lib/tk.rb', line 2648

def encoding_name
  (@encoding)? @encoding.dup: nil
end

#encoding_objObject



2654
2655
2656
2657
2658
2659
2660
# File 'lib/tk.rb', line 2654

def encoding_obj
  if Tk::WITH_ENCODING
    Tk::Encoding.tcl2rb_encoding(@encoding)
  else
    (@encoding)? @encoding.dup: nil
  end
end

#force_default_encoding=(mode) ⇒ Object



2628
2629
2630
# File 'lib/tk.rb', line 2628

def force_default_encoding=(mode)
  @force_default_encoding = (mode)? true: false
end

#force_default_encoding?Boolean

Returns:

  • (Boolean)


2632
2633
2634
# File 'lib/tk.rb', line 2632

def force_default_encoding?
  @force_default_encoding ||= false
end