n.c.
[chise/ruby.git] / chise / org-string.rb
1 class String
2   def to_utf8()
3     return to_a.map {|ch|
4       ch.char.to_utf8
5     }.join("")
6   end
7
8   def map_char(block = Proc.new)
9     return unless block_given?
10     return self.to_a.map {|ch| (block.call(ch)).to_s }.join("")
11   end
12
13   def map_char!(block = Proc.new)
14     return unless block_given?
15     self.replace(self.map_char {|ch| block.call(ch)})
16   end
17
18   def map_character(block = Proc.new)
19     return unless block_given?
20     return self.to_a.map {|ch| (block.call(ch.char)).to_s }.join("")
21   end
22
23   def map_character!(block = Proc.new)
24     return unless block_given?
25     self.replace(self.map_char {|ch| block.call(ch.char)})
26   end
27
28   def map_utf8() map_char {|ch| ch.char.map_utf8 } end
29   alias map_ucs map_utf8
30
31   def map_ucs_er() map_char {|ch| ch.char.map_ucs_er } end
32   def to_er() map_char {|ch| ch.char.to_er } end
33
34   #put\8aÖ\8cW\81A[]\8aÖ\8cW\82Í\97p\88Ó\82µ\82È\82¢\82±\82Æ\82É\82µ\82½\81B
35
36   def inspect_all() map_char {|ch| ch.char.inspect_all } end
37   def inspect_x()   map_char {|ch| ch.char.inspect_x   } end
38
39 # def to_euc()   map_char {|ch| ch.char.to_euc   } end
40   def map_euc()  map_char {|ch| ch.char.map_euc  } end
41 # def to_sjis()  map_char {|ch| ch.char.to_sjis  } end
42   def map_sjis() map_char {|ch| ch.char.map_sjis } end
43
44   def glyph_decompose() map_char {|ch| ch.char.glyph_decompose } end
45   def decompose() map_char {|ch| ch.char.decompose } end
46   def decompose!() self.replace(self.decompose); self; end
47
48   def nu_decompose_all(level=nil)
49     level = 0 if level.nil?
50     if 10 < level
51       p ["too many recursive", self] 
52       exit
53     end
54     de = self.decompose
55     return de.decompose_all(level+1) if de != self #\82È\82É\82©\95Ï\89»\82ª\82 \82Á\82½\82©\82ç\8dÄ\8bA
56     de #\82à\82¤\82±\82ê\88È\8fã\95Ï\89»\82Í\96³\82³\82»\82¤\82¾\82¼\82Æ\81B
57   end
58
59   def decompose_all() map_char {|ch| ch.char.decompose_all } end
60   def decompose_all!() self.replace(self.decompose_all); self; end
61
62   def find() #"\93ú\89_"\81¨"\93Ü"\82Æ\82©\82¢\82¤\8a´\82\82Ì\91\80\8dì
63     ar = []
64     length = char_length()
65     each_char {|ch|
66       char = ch.char
67       ar << char.ids_contained #\82»\82Ì\95\8e\9a\82ð\8aÜ\82ñ\82Å\82¢\82é\8a¿\8e\9a\82Ì\83\8a\83X\83g
68     }
69     h = Hash.new(0)
70     ar.each {|list|
71       next if list.nil?
72       list.each_char {|ch|
73         h[ch] += 1
74       }
75     }
76     str = ""
77     h.each {|k, v|
78       #      p [k, v]
79       if length == v #\91S\95\94\82É\8aç\82ð\8fo\82µ\82Ä\82¢\82½\82ç
80         str += k
81       end
82     }
83     #    p str
84     str
85   end
86
87   def compose()
88     db = CHISE::CodesysDB.instance
89     composed = db.get("ids", self)
90     return "" if composed.nil? #\82È\82©\82Á\82½\82æ\82Æ\81B
91     return "" if composed.char_length == 0 #\82È\82É\82²\82Æ?
92     return composed if composed.char_length == 1
93     composed.each_char {|ch|
94       char = ch.char
95       return ch if char.has_attribute? #\82Æ\82è\82 \82¦\82¸\8dÅ\8f\89\82É\82Ý\82Â\82©\82Á\82½\82à\82Ì\82ð\95Ô\82·\82Æ\82¢\82¤\83k\83\8b\82¢\8ed\97l
96     }
97     return "" #attribute\82ð\8e\9d\82Â\82à\82Ì\82ª\88ê\82Â\82à\96³\82©\82Á\82½\82ç\81A""\82É\82·\82é
98   end
99
100   def aggregate()
101     #self\82Å\82 \82é\95\8e\9a\97ñ\82ðIDS\82¾\82Æ\89¼\92è\82µ\81A\82»\82ê\82ð\8a®\91S\82Écompose\82µ\82«\82ç\82È\82¢\82Å\81A
102     #\82»\82Ì\95\94\95ª\8fW\8d\87\82¾\82¯\82ð\82Æ\82è\82¾\82µ\82Ä\81Acompose\89Â\94\\82Å\82 \82ê\82Î\82Å\82«\82é\82¾\82¯compose\82·\82é\81B
103     tree = CHISE::IDS_Tree.new(self)
104     return self if tree.depth <= 1 #sub_nodes\82ª\96³\82¢\8fê\8d\87\82Í\82±\82±\82Å\82³\82æ\82È\82ç
105     tree.sub_nodes.each {|node|
106       c = node.compose
107       next if c.nil? || c == ""
108       #      print "#{self}     #{node} #{c}\n"
109       #      p [self, node, c]
110       n = self.gsub(node, c)
111       return n.aggregate
112     }
113     return self #\82¨\82«\82©\82¦\82ç\82ê\82é\82à\82Ì\82ª\82Ü\82Á\82½\82­\82È\82©\82Á\82½\82ç\81A\8e©\95ª\82ð\82©\82¦\82·\81B
114   end
115 end