require "bitset"

module Unicode
  module Set
    module XML
      Char = BitSet.new.on [
        0x9, 0xa, 0xd, 0x20..0xd7ff, 0xe000..0xfffd, 0x10000..0x10ffff
      ]
      
      BaseChar = BitSet.new.on [
        0x0041..0x005a, 0x0061..0x007a, 0x00c0..0x00d6, 0x00d8..0x00f6,
        0x00f8..0x00ff, 0x0100..0x0131, 0x0134..0x013e, 0x0141..0x0148,
        0x014a..0x017e, 0x0180..0x01c3, 0x01cd..0x01f0, 0x01f4..0x01f5,
        0x01fa..0x0217, 0x0250..0x02a8, 0x02bb..0x02c1, 0x0386        ,
        0x0388..0x038a, 0x038c        , 0x038e..0x03a1, 0x03a3..0x03ce,
        0x03d0..0x03d6, 0x03da        , 0x03dc        , 0x03de        ,
        0x03e0        , 0x03e2..0x03f3, 0x0401..0x040c, 0x040e..0x044f,
        0x0451..0x045c, 0x045e..0x0481, 0x0490..0x04c4, 0x04c7..0x04c8,
        0x04cb..0x04cc, 0x04d0..0x04eb, 0x04ee..0x04f5, 0x04f8..0x04f9,
        0x0531..0x0556, 0x0559        , 0x0561..0x0586, 0x05d0..0x05ea,
        0x05f0..0x05f2, 0x0621..0x063a, 0x0641..0x064a, 0x0671..0x06b7,
        0x06ba..0x06be, 0x06c0..0x06ce, 0x06d0..0x06d3, 0x06d5        ,
        0x06e5..0x06e6, 0x0905..0x0939, 0x093d        , 0x0958..0x0961,
        0x0985..0x098c, 0x098f..0x0990, 0x0993..0x09a8, 0x09aa..0x09b0,
        0x09b2        , 0x09b6..0x09b9, 0x09dc..0x09dd, 0x09df..0x09e1,
        0x09f0..0x09f1, 0x0a05..0x0a0a, 0x0a0f..0x0a10, 0x0a13..0x0a28,
        0x0a2a..0x0a30, 0x0a32..0x0a33, 0x0a35..0x0a36, 0x0a38..0x0a39,
        0x0a59..0x0a5c, 0x0a5e        , 0x0a72..0x0a74, 0x0a85..0x0a8b,
        0x0a8d        , 0x0a8f..0x0a91, 0x0a93..0x0aa8, 0x0aaa..0x0ab0,
        0x0ab2..0x0ab3, 0x0ab5..0x0ab9, 0x0abd        , 0x0ae0        ,
        0x0b05..0x0b0c, 0x0b0f..0x0b10, 0x0b13..0x0b28, 0x0b2a..0x0b30,
        0x0b32..0x0b33, 0x0b36..0x0b39, 0x0b3d        , 0x0b5c..0x0b5d,
        0x0b5f..0x0b61, 0x0b85..0x0b8a, 0x0b8e..0x0b90, 0x0b92..0x0b95,
        0x0b99..0x0b9a, 0x0b9c        , 0x0b9e..0x0b9f, 0x0ba3..0x0ba4,
        0x0ba8..0x0baa, 0x0bae..0x0bb5, 0x0bb7..0x0bb9, 0x0c05..0x0c0c,
        0x0c0e..0x0c10, 0x0c12..0x0c28, 0x0c2a..0x0c33, 0x0c35..0x0c39,
        0x0c60..0x0c61, 0x0c85..0x0c8c, 0x0c8e..0x0c90, 0x0c92..0x0ca8,
        0x0caa..0x0cb3, 0x0cb5..0x0cb9, 0x0cde        , 0x0ce0..0x0ce1,
        0x0d05..0x0d0c, 0x0d0e..0x0d10, 0x0d12..0x0d28, 0x0d2a..0x0d39,
        0x0d60..0x0d61, 0x0e01..0x0e2e, 0x0e30        , 0x0e32..0x0e33,
        0x0e40..0x0e45, 0x0e81..0x0e82, 0x0e84        , 0x0e87..0x0e88,
        0x0e8a        , 0x0e8d        , 0x0e94..0x0e97, 0x0e99..0x0e9f,
        0x0ea1..0x0ea3, 0x0ea5        , 0x0ea7        , 0x0eaa..0x0eab,
        0x0ead..0x0eae, 0x0eb0        , 0x0eb2..0x0eb3, 0x0ebd        ,
        0x0ec0..0x0ec4, 0x0f40..0x0f47, 0x0f49..0x0f69, 0x10a0..0x10c5,
        0x10d0..0x10f6, 0x1100        , 0x1102..0x1103, 0x1105..0x1107,
        0x1109        , 0x110b..0x110c, 0x110e..0x1112, 0x113c        ,
        0x113e, 0x1140, 0x114c        , 0x114e        , 0x1150        ,
        0x1154..0x1155, 0x1159        , 0x115f..0x1161, 0x1163        ,
        0x1165        , 0x1167        , 0x1169        , 0x116d..0x116e,
        0x1172..0x1173, 0x1175        , 0x119e        , 0x11a8        ,
        0x11ab        , 0x11ae..0x11af, 0x11b7..0x11b8, 0x11ba        ,
        0x11bc..0x11c2, 0x11eb        , 0x11f0        , 0x11f9        ,
        0x1e00..0x1e9b, 0x1ea0..0x1ef9, 0x1f00..0x1f15, 0x1f18..0x1f1d,
        0x1f20..0x1f45, 0x1f48..0x1f4d, 0x1f50..0x1f57, 0x1f59, 0x1f5b,
        0x1f5d        , 0x1f5f..0x1f7d, 0x1f80..0x1fb4, 0x1fb6..0x1fbc,
        0x1fbe        , 0x1fc2..0x1fc4, 0x1fc6..0x1fcc, 0x1fd0..0x1fd3,
        0x1fd6..0x1fdb, 0x1fe0..0x1fec, 0x1ff2..0x1ff4, 0x1ff6..0x1ffc,
        0x2126        , 0x212a..0x212b, 0x212e        , 0x2180..0x2182,
        0x3041..0x3094, 0x30a1..0x30fa, 0x3105..0x312c, 0xac00..0xd7a3
      ]
      
      Ideographic = BitSet.new.on [
        0x4e00..0x9fa5, 0x3007, 0x3021..0x3029
      ]
      
      Letter  =  BaseChar | Ideographic
      
      CombiningChar = BitSet.new.on [
        0x0300..0x0345, 0x0360..0x0361, 0x0483..0x0486, 0x0591..0x05a1,
        0x05a3..0x05b9, 0x05bb..0x05bd, 0x05bf        , 0x05c1..0x05c2,
        0x05c4        , 0x064b..0x0652, 0x0670        , 0x06d6..0x06dc,
        0x06dd..0x06df, 0x06e0..0x06e4, 0x06e7..0x06e8, 0x06ea..0x06ed,
        0x0901..0x0903, 0x093c        , 0x093e..0x094c, 0x094d        ,
        0x0951..0x0954, 0x0962..0x0963, 0x0981..0x0983, 0x09bc        ,
        0x09be        , 0x09bf        , 0x09c0..0x09c4, 0x09c7..0x09c8,
        0x09cb..0x09cd, 0x09d7        , 0x09e2..0x09e3, 0x0a02        ,
        0x0a3c        , 0x0a3e        , 0x0a3f        , 0x0a40..0x0a42,
        0x0a47..0x0a48, 0x0a4b..0x0a4d, 0x0a70..0x0a71, 0x0a81..0x0a83,
        0x0abc        , 0x0abe..0x0ac5, 0x0ac7..0x0ac9, 0x0acb..0x0acd,
        0x0b01..0x0b03, 0x0b3c        , 0x0b3e..0x0b43, 0x0b47..0x0b48,
        0x0b4b..0x0b4d, 0x0b56..0x0b57, 0x0b82..0x0b83, 0x0bbe..0x0bc2,
        0x0bc6..0x0bc8, 0x0bca..0x0bcd, 0x0bd7        , 0x0c01..0x0c03,
        0x0c3e..0x0c44, 0x0c46..0x0c48, 0x0c4a..0x0c4d, 0x0c55..0x0c56,
        0x0c82..0x0c83, 0x0cbe..0x0cc4, 0x0cc6..0x0cc8, 0x0cca..0x0ccd,
        0x0cd5..0x0cd6, 0x0d02..0x0d03, 0x0d3e..0x0d43, 0x0d46..0x0d48,
        0x0d4a..0x0d4d, 0x0d57        , 0x0e31        , 0x0e34..0x0e3a,
        0x0e47..0x0e4e, 0x0eb1        , 0x0eb4..0x0eb9, 0x0ebb..0x0ebc,
        0x0ec8..0x0ecd, 0x0f18..0x0f19, 0x0f35        , 0x0f37        ,
        0x0f39        , 0x0f3e        , 0x0f3f        , 0x0f71..0x0f84,
        0x0f86..0x0f8b, 0x0f90..0x0f95, 0x0f97        , 0x0f99..0x0fad,
        0x0fb1..0x0fb7, 0x0fb9        , 0x20d0..0x20dc, 0x20e1        ,
        0x302a..0x302f, 0x3099        , 0x309a
      ]
      
      Digit = BitSet.new.on [
        0x0030..0x0039, 0x0660..0x0669, 0x06f0..0x06f9, 0x0966..0x096f,
        0x09e6..0x09ef, 0x0a66..0x0a6f, 0x0ae6..0x0aef, 0x0b66..0x0b6f,
        0x0be7..0x0bef, 0x0c66..0x0c6f, 0x0ce6..0x0cef, 0x0d66..0x0d6f,
        0x0e50..0x0e59, 0x0ed0..0x0ed9, 0x0f20..0x0f29
      ]
      
      Extender  =  BitSet.new.on [
        0x00b7, 0x02d0, 0x02d1, 0x0387, 0x0640, 0x0e46, 0x0ec6, 0x3005,
        0x3031..0x3035, 0x309d..0x309e, 0x30fc..0x30fe
      ]
    end
  end # Set
end # Unicode


syntax highlighted by Code2HTML, v. 0.9.1