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