n.c.
[chise/ruby.git] / chise / string.rb
1 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
2
3 require "chise/character"
4 require "chise/parser"
5
6 class String
7   # copied from htree/encoder.rb
8   UTF8_RE = /\A(?:
9         [\x00-\x7f]
10        |[\xc0-\xdf][\x80-\xbf]
11        |[\xe0-\xef][\x80-\xbf][\x80-\xbf]
12        |[\xf0-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]
13        |[\xf8-\xfb][\x80-\xbf][\x80-\xbf][\x80-\xbf][\x80-\xbf]
14        |[\xfc-\xfd][\x80-\xbf][\x80-\xbf][\x80-\xbf][\x80-\xbf][\x80-\xbf])\Z/nx
15
16   def is_a_utf8? # Is this string one character in UTF-8?
17     (UTF8_RE =~ self) != nil
18   end
19
20   def char
21     raise unless is_a_utf8?
22     CHISE::Character.get("?"+self)
23   end
24
25   def method_missing(mid, *args)
26     char.method_missing(mid, *args)
27   end
28
29   def to_a
30     self.split(//u)
31   end
32
33   def char_length
34     to_a.length
35   end
36
37   def each_char
38     to_a.each {|c|
39       yield(c)
40     }
41   end
42
43   def each_character
44     to_a.each {|ch|
45       yield ch.char
46     }
47   end
48
49   def de_er()
50     pa = CHISE::EntityReferenceParser.new
51     pa.de_er(self)
52   end
53
54 end