character_set 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitattributes +3 -0
- data/.travis.yml +1 -0
- data/BENCHMARK.md +51 -15
- data/CHANGELOG.md +20 -0
- data/README.md +24 -8
- data/Rakefile +20 -18
- data/benchmarks/count_in.rb +13 -0
- data/benchmarks/delete_in.rb +1 -1
- data/benchmarks/scan.rb +13 -0
- data/benchmarks/shared.rb +1 -0
- data/benchmarks/z_add.rb +12 -0
- data/benchmarks/z_delete.rb +12 -0
- data/benchmarks/z_merge.rb +15 -0
- data/benchmarks/z_minmax.rb +12 -0
- data/bin/console +2 -0
- data/character_set.gemspec +2 -0
- data/ext/character_set/character_set.c +963 -413
- data/ext/character_set/unicode_casefold_table.h.tmpl +11 -0
- data/lib/character_set/core_ext/string_ext.rb +2 -0
- data/lib/character_set/expression_converter.rb +21 -24
- data/lib/character_set/predefined_sets.rb +25 -260
- data/lib/character_set/predefined_sets/any.cps +1 -0
- data/lib/character_set/predefined_sets/ascii.cps +1 -0
- data/lib/character_set/predefined_sets/ascii_alnum.cps +3 -0
- data/lib/character_set/predefined_sets/ascii_letter.cps +2 -0
- data/lib/character_set/predefined_sets/assigned.cps +666 -0
- data/lib/character_set/predefined_sets/bmp.cps +2 -0
- data/lib/character_set/predefined_sets/crypt.cps +2 -0
- data/lib/character_set/predefined_sets/emoji.cps +151 -0
- data/lib/character_set/predefined_sets/newline.cps +3 -0
- data/lib/character_set/predefined_sets/surrogate.cps +1 -0
- data/lib/character_set/predefined_sets/unicode.cps +2 -0
- data/lib/character_set/predefined_sets/url_fragment.cps +8 -0
- data/lib/character_set/predefined_sets/url_host.cps +10 -0
- data/lib/character_set/predefined_sets/url_path.cps +7 -0
- data/lib/character_set/predefined_sets/url_query.cps +8 -0
- data/lib/character_set/predefined_sets/whitespace.cps +10 -0
- data/lib/character_set/ruby_fallback.rb +0 -2
- data/lib/character_set/ruby_fallback/character_set_methods.rb +52 -4
- data/lib/character_set/ruby_fallback/set_methods.rb +2 -2
- data/lib/character_set/shared_methods.rb +51 -40
- data/lib/character_set/version.rb +1 -1
- metadata +54 -3
- data/lib/character_set/ruby_fallback/plane_methods.rb +0 -27
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            // THIS FILE IS GENERATED BY $ rake sync_casefold_data - DO NOT EDIT
         | 
| 2 | 
            +
            // -*-C-*-
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            typedef struct casefold_mapping {
         | 
| 5 | 
            +
              unsigned long from;
         | 
| 6 | 
            +
              unsigned long to;
         | 
| 7 | 
            +
            } casefold_mapping;
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            #define CASEFOLD_COUNT 0
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            static const casefold_mapping unicode_casefold_table[CASEFOLD_COUNT] = {};
         | 
| @@ -6,11 +6,13 @@ class CharacterSet | |
| 6 6 | 
             
                  end
         | 
| 7 7 |  | 
| 8 8 | 
             
                  {
         | 
| 9 | 
            +
                    count_by_character_set:    :count_in,
         | 
| 9 10 | 
             
                    covered_by_character_set?: :cover?,
         | 
| 10 11 | 
             
                    delete_character_set:      :delete_in,
         | 
| 11 12 | 
             
                    delete_character_set!:     :delete_in!,
         | 
| 12 13 | 
             
                    keep_character_set:        :keep_in,
         | 
| 13 14 | 
             
                    keep_character_set!:       :keep_in!,
         | 
| 15 | 
            +
                    scan_by_character_set:     :scan,
         | 
| 14 16 | 
             
                    uses_character_set?:       :used_by?,
         | 
| 15 17 | 
             
                  }.each do |string_method, set_method|
         | 
| 16 18 | 
             
                    class_eval <<-RUBY, __FILE__, __LINE__ + 1
         | 
| @@ -26,34 +26,28 @@ class CharacterSet | |
| 26 26 |  | 
| 27 27 | 
             
                  when Regexp::Expression::CharacterSet::Range
         | 
| 28 28 | 
             
                    start, finish = expression.map { |subexp| convert(subexp) }
         | 
| 29 | 
            -
                    CharacterSet. | 
| 29 | 
            +
                    CharacterSet.new((start.min)..(finish.max))
         | 
| 30 30 |  | 
| 31 31 | 
             
                  when Regexp::Expression::CharacterType::Any
         | 
| 32 32 | 
             
                    CharacterSet.unicode
         | 
| 33 33 |  | 
| 34 | 
            -
                  when Regexp::Expression::CharacterType:: | 
| 35 | 
            -
                     | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
                     | 
| 51 | 
            -
             | 
| 52 | 
            -
                  when Regexp::Expression::CharacterType::Word
         | 
| 53 | 
            -
                    CharacterSet.from_ranges(48..57, 65..90, 95..95, 97..122)
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                  when Regexp::Expression::CharacterType::NonWord
         | 
| 56 | 
            -
                    CharacterSet.from_ranges(48..57, 65..90, 95..95, 97..122).inversion
         | 
| 34 | 
            +
                  when Regexp::Expression::CharacterType::Base
         | 
| 35 | 
            +
                    /(?<negative>non)?(?<base_name>.+)/ =~ expression.token
         | 
| 36 | 
            +
                    content =
         | 
| 37 | 
            +
                      if expression.unicode_classes?
         | 
| 38 | 
            +
                        # in u-mode, type shortcuts match the same as \p{<long type name>}
         | 
| 39 | 
            +
                        CharacterSet.of_property(base_name)
         | 
| 40 | 
            +
                      else
         | 
| 41 | 
            +
                        # in normal mode, types match only ascii chars
         | 
| 42 | 
            +
                        case base_name.to_sym
         | 
| 43 | 
            +
                        when :digit then CharacterSet.from_ranges(48..57)
         | 
| 44 | 
            +
                        when :hex   then CharacterSet.from_ranges(48..57, 65..70, 97..102)
         | 
| 45 | 
            +
                        when :space then CharacterSet.from_ranges(9..13, 32..32)
         | 
| 46 | 
            +
                        when :word  then CharacterSet.from_ranges(48..57, 65..90, 95..95, 97..122)
         | 
| 47 | 
            +
                        else raise Error, "Unsupported CharacterType #{base_name}"
         | 
| 48 | 
            +
                        end
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
                    negative ? content.inversion : content
         | 
| 57 51 |  | 
| 58 52 | 
             
                  when Regexp::Expression::EscapeSequence::CodepointList
         | 
| 59 53 | 
             
                    CharacterSet.new(expression.codepoints)
         | 
| @@ -93,6 +87,9 @@ class CharacterSet | |
| 93 87 | 
             
                  when Regexp::Expression::UnicodeProperty::Base,
         | 
| 94 88 | 
             
                       Regexp::Expression::PosixClass
         | 
| 95 89 | 
             
                    content = CharacterSet.of_property(expression.token)
         | 
| 90 | 
            +
                    if expression.type == :posixclass && expression.ascii_classes?
         | 
| 91 | 
            +
                      content = content.ascii_part
         | 
| 92 | 
            +
                    end
         | 
| 96 93 | 
             
                    expression.negative? ? content.inversion : content
         | 
| 97 94 |  | 
| 98 95 | 
             
                  when Regexp::Expression::Base
         | 
| @@ -1,266 +1,31 @@ | |
| 1 1 | 
             
            class CharacterSet
         | 
| 2 2 | 
             
              module PredefinedSets
         | 
| 3 | 
            -
                 | 
| 4 | 
            -
                   | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                 | 
| 19 | 
            -
             | 
| 20 | 
            -
                 | 
| 21 | 
            -
                 | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                def unicode
         | 
| 30 | 
            -
                  @unicode ||= from_ranges(0..0xD7FF, 0xE000..0x10FFFF).freeze
         | 
| 31 | 
            -
                end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                def url_fragment
         | 
| 34 | 
            -
                  @url_fragment ||= from_ranges(
         | 
| 35 | 
            -
                    0x21..0x21,
         | 
| 36 | 
            -
                    0x24..0x24,
         | 
| 37 | 
            -
                    0x26..0x3B,
         | 
| 38 | 
            -
                    0x3D..0x3D,
         | 
| 39 | 
            -
                    0x3F..0x5A,
         | 
| 40 | 
            -
                    0x5F..0x5F,
         | 
| 41 | 
            -
                    0x61..0x7A,
         | 
| 42 | 
            -
                    0x7E..0x7E
         | 
| 43 | 
            -
                  ).freeze
         | 
| 44 | 
            -
                end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                def url_host
         | 
| 47 | 
            -
                  @url_host ||= from_ranges(
         | 
| 48 | 
            -
                    0x21..0x21,
         | 
| 49 | 
            -
                    0x24..0x24,
         | 
| 50 | 
            -
                    0x26..0x2E,
         | 
| 51 | 
            -
                    0x30..0x3B,
         | 
| 52 | 
            -
                    0x3D..0x3D,
         | 
| 53 | 
            -
                    0x41..0x5B,
         | 
| 54 | 
            -
                    0x5D..0x5D,
         | 
| 55 | 
            -
                    0x5F..0x5F,
         | 
| 56 | 
            -
                    0x61..0x7A,
         | 
| 57 | 
            -
                    0x7E..0x7E
         | 
| 58 | 
            -
                  ).freeze
         | 
| 59 | 
            -
                end
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                def url_path
         | 
| 62 | 
            -
                  @url_path ||= from_ranges(
         | 
| 63 | 
            -
                    0x21..0x21,
         | 
| 64 | 
            -
                    0x24..0x3A,
         | 
| 65 | 
            -
                    0x3D..0x3D,
         | 
| 66 | 
            -
                    0x40..0x5A,
         | 
| 67 | 
            -
                    0x5F..0x5F,
         | 
| 68 | 
            -
                    0x61..0x7A,
         | 
| 69 | 
            -
                    0x7E..0x7E
         | 
| 70 | 
            -
                  ).freeze
         | 
| 71 | 
            -
                end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                def url_query
         | 
| 74 | 
            -
                  @url_query ||= from_ranges(
         | 
| 75 | 
            -
                    0x21..0x21,
         | 
| 76 | 
            -
                    0x24..0x24,
         | 
| 77 | 
            -
                    0x26..0x3B,
         | 
| 78 | 
            -
                    0x3D..0x3D,
         | 
| 79 | 
            -
                    0x3F..0x5A,
         | 
| 80 | 
            -
                    0x5F..0x5F,
         | 
| 81 | 
            -
                    0x61..0x7A,
         | 
| 82 | 
            -
                    0x7E..0x7E
         | 
| 83 | 
            -
                  ).freeze
         | 
| 84 | 
            -
                end
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                def whitespace
         | 
| 87 | 
            -
                  @whitespace ||= from_ranges(
         | 
| 88 | 
            -
                    0x9..0x9,
         | 
| 89 | 
            -
                    0xA..0xD,
         | 
| 90 | 
            -
                    0x20..0x20,
         | 
| 91 | 
            -
                    0x85..0x85,
         | 
| 92 | 
            -
                    0xA0..0xA0,
         | 
| 93 | 
            -
                    0x1680..0x1680,
         | 
| 94 | 
            -
                    0x180E..0x180E,
         | 
| 95 | 
            -
                    0x2000..0x200A,
         | 
| 96 | 
            -
                    0x2028..0x2029,
         | 
| 97 | 
            -
                    0x202F..0x202F,
         | 
| 98 | 
            -
                    0x205F..0x205F,
         | 
| 99 | 
            -
                    0x3000..0x3000
         | 
| 100 | 
            -
                  ).freeze
         | 
| 101 | 
            -
                end
         | 
| 102 | 
            -
             | 
| 103 | 
            -
                def emoji
         | 
| 104 | 
            -
                  @emoji ||= from_ranges(
         | 
| 105 | 
            -
                    0x23..0x23,
         | 
| 106 | 
            -
                    0x2A..0x2A,
         | 
| 107 | 
            -
                    0x30..0x39,
         | 
| 108 | 
            -
                    0xA9..0xA9,
         | 
| 109 | 
            -
                    0xAE..0xAE,
         | 
| 110 | 
            -
                    0x203C..0x203C,
         | 
| 111 | 
            -
                    0x2049..0x2049,
         | 
| 112 | 
            -
                    0x2122..0x2122,
         | 
| 113 | 
            -
                    0x2139..0x2139,
         | 
| 114 | 
            -
                    0x2194..0x2199,
         | 
| 115 | 
            -
                    0x21A9..0x21AA,
         | 
| 116 | 
            -
                    0x231A..0x231B,
         | 
| 117 | 
            -
                    0x2328..0x2328,
         | 
| 118 | 
            -
                    0x23CF..0x23CF,
         | 
| 119 | 
            -
                    0x23E9..0x23F3,
         | 
| 120 | 
            -
                    0x23F8..0x23FA,
         | 
| 121 | 
            -
                    0x24C2..0x24C2,
         | 
| 122 | 
            -
                    0x25AA..0x25AB,
         | 
| 123 | 
            -
                    0x25B6..0x25B6,
         | 
| 124 | 
            -
                    0x25C0..0x25C0,
         | 
| 125 | 
            -
                    0x25FB..0x25FE,
         | 
| 126 | 
            -
                    0x2600..0x2604,
         | 
| 127 | 
            -
                    0x260E..0x260E,
         | 
| 128 | 
            -
                    0x2611..0x2611,
         | 
| 129 | 
            -
                    0x2614..0x2615,
         | 
| 130 | 
            -
                    0x2618..0x2618,
         | 
| 131 | 
            -
                    0x261D..0x261D,
         | 
| 132 | 
            -
                    0x2620..0x2620,
         | 
| 133 | 
            -
                    0x2622..0x2623,
         | 
| 134 | 
            -
                    0x2626..0x2626,
         | 
| 135 | 
            -
                    0x262A..0x262A,
         | 
| 136 | 
            -
                    0x262E..0x262F,
         | 
| 137 | 
            -
                    0x2638..0x263A,
         | 
| 138 | 
            -
                    0x2640..0x2640,
         | 
| 139 | 
            -
                    0x2642..0x2642,
         | 
| 140 | 
            -
                    0x2648..0x2653,
         | 
| 141 | 
            -
                    0x2660..0x2660,
         | 
| 142 | 
            -
                    0x2663..0x2663,
         | 
| 143 | 
            -
                    0x2665..0x2666,
         | 
| 144 | 
            -
                    0x2668..0x2668,
         | 
| 145 | 
            -
                    0x267B..0x267B,
         | 
| 146 | 
            -
                    0x267F..0x267F,
         | 
| 147 | 
            -
                    0x2692..0x2697,
         | 
| 148 | 
            -
                    0x2699..0x2699,
         | 
| 149 | 
            -
                    0x269B..0x269C,
         | 
| 150 | 
            -
                    0x26A0..0x26A1,
         | 
| 151 | 
            -
                    0x26AA..0x26AB,
         | 
| 152 | 
            -
                    0x26B0..0x26B1,
         | 
| 153 | 
            -
                    0x26BD..0x26BE,
         | 
| 154 | 
            -
                    0x26C4..0x26C5,
         | 
| 155 | 
            -
                    0x26C8..0x26C8,
         | 
| 156 | 
            -
                    0x26CE..0x26CF,
         | 
| 157 | 
            -
                    0x26D1..0x26D1,
         | 
| 158 | 
            -
                    0x26D3..0x26D4,
         | 
| 159 | 
            -
                    0x26E9..0x26EA,
         | 
| 160 | 
            -
                    0x26F0..0x26F5,
         | 
| 161 | 
            -
                    0x26F7..0x26FA,
         | 
| 162 | 
            -
                    0x26FD..0x26FD,
         | 
| 163 | 
            -
                    0x2702..0x2702,
         | 
| 164 | 
            -
                    0x2705..0x2705,
         | 
| 165 | 
            -
                    0x2708..0x270D,
         | 
| 166 | 
            -
                    0x270F..0x270F,
         | 
| 167 | 
            -
                    0x2712..0x2712,
         | 
| 168 | 
            -
                    0x2714..0x2714,
         | 
| 169 | 
            -
                    0x2716..0x2716,
         | 
| 170 | 
            -
                    0x271D..0x271D,
         | 
| 171 | 
            -
                    0x2721..0x2721,
         | 
| 172 | 
            -
                    0x2728..0x2728,
         | 
| 173 | 
            -
                    0x2733..0x2734,
         | 
| 174 | 
            -
                    0x2744..0x2744,
         | 
| 175 | 
            -
                    0x2747..0x2747,
         | 
| 176 | 
            -
                    0x274C..0x274C,
         | 
| 177 | 
            -
                    0x274E..0x274E,
         | 
| 178 | 
            -
                    0x2753..0x2755,
         | 
| 179 | 
            -
                    0x2757..0x2757,
         | 
| 180 | 
            -
                    0x2763..0x2764,
         | 
| 181 | 
            -
                    0x2795..0x2797,
         | 
| 182 | 
            -
                    0x27A1..0x27A1,
         | 
| 183 | 
            -
                    0x27B0..0x27B0,
         | 
| 184 | 
            -
                    0x27BF..0x27BF,
         | 
| 185 | 
            -
                    0x2934..0x2935,
         | 
| 186 | 
            -
                    0x2B05..0x2B07,
         | 
| 187 | 
            -
                    0x2B1B..0x2B1C,
         | 
| 188 | 
            -
                    0x2B50..0x2B50,
         | 
| 189 | 
            -
                    0x2B55..0x2B55,
         | 
| 190 | 
            -
                    0x3030..0x3030,
         | 
| 191 | 
            -
                    0x303D..0x303D,
         | 
| 192 | 
            -
                    0x3297..0x3297,
         | 
| 193 | 
            -
                    0x3299..0x3299,
         | 
| 194 | 
            -
                    0x1F004..0x1F004,
         | 
| 195 | 
            -
                    0x1F0CF..0x1F0CF,
         | 
| 196 | 
            -
                    0x1F170..0x1F171,
         | 
| 197 | 
            -
                    0x1F17E..0x1F17F,
         | 
| 198 | 
            -
                    0x1F18E..0x1F18E,
         | 
| 199 | 
            -
                    0x1F191..0x1F19A,
         | 
| 200 | 
            -
                    0x1F1E6..0x1F1FF,
         | 
| 201 | 
            -
                    0x1F201..0x1F202,
         | 
| 202 | 
            -
                    0x1F21A..0x1F21A,
         | 
| 203 | 
            -
                    0x1F22F..0x1F22F,
         | 
| 204 | 
            -
                    0x1F232..0x1F23A,
         | 
| 205 | 
            -
                    0x1F250..0x1F251,
         | 
| 206 | 
            -
                    0x1F300..0x1F321,
         | 
| 207 | 
            -
                    0x1F324..0x1F393,
         | 
| 208 | 
            -
                    0x1F396..0x1F397,
         | 
| 209 | 
            -
                    0x1F399..0x1F39B,
         | 
| 210 | 
            -
                    0x1F39E..0x1F3F0,
         | 
| 211 | 
            -
                    0x1F3F3..0x1F3F5,
         | 
| 212 | 
            -
                    0x1F3F7..0x1F4FD,
         | 
| 213 | 
            -
                    0x1F4FF..0x1F53D,
         | 
| 214 | 
            -
                    0x1F549..0x1F54E,
         | 
| 215 | 
            -
                    0x1F550..0x1F567,
         | 
| 216 | 
            -
                    0x1F56F..0x1F570,
         | 
| 217 | 
            -
                    0x1F573..0x1F57A,
         | 
| 218 | 
            -
                    0x1F587..0x1F587,
         | 
| 219 | 
            -
                    0x1F58A..0x1F58D,
         | 
| 220 | 
            -
                    0x1F590..0x1F590,
         | 
| 221 | 
            -
                    0x1F595..0x1F596,
         | 
| 222 | 
            -
                    0x1F5A4..0x1F5A5,
         | 
| 223 | 
            -
                    0x1F5A8..0x1F5A8,
         | 
| 224 | 
            -
                    0x1F5B1..0x1F5B2,
         | 
| 225 | 
            -
                    0x1F5BC..0x1F5BC,
         | 
| 226 | 
            -
                    0x1F5C2..0x1F5C4,
         | 
| 227 | 
            -
                    0x1F5D1..0x1F5D3,
         | 
| 228 | 
            -
                    0x1F5DC..0x1F5DE,
         | 
| 229 | 
            -
                    0x1F5E1..0x1F5E1,
         | 
| 230 | 
            -
                    0x1F5E3..0x1F5E3,
         | 
| 231 | 
            -
                    0x1F5E8..0x1F5E8,
         | 
| 232 | 
            -
                    0x1F5EF..0x1F5EF,
         | 
| 233 | 
            -
                    0x1F5F3..0x1F5F3,
         | 
| 234 | 
            -
                    0x1F5FA..0x1F64F,
         | 
| 235 | 
            -
                    0x1F680..0x1F6C5,
         | 
| 236 | 
            -
                    0x1F6CB..0x1F6D2,
         | 
| 237 | 
            -
                    0x1F6E0..0x1F6E5,
         | 
| 238 | 
            -
                    0x1F6E9..0x1F6E9,
         | 
| 239 | 
            -
                    0x1F6EB..0x1F6EC,
         | 
| 240 | 
            -
                    0x1F6F0..0x1F6F0,
         | 
| 241 | 
            -
                    0x1F6F3..0x1F6F8,
         | 
| 242 | 
            -
                    0x1F910..0x1F93A,
         | 
| 243 | 
            -
                    0x1F93C..0x1F93E,
         | 
| 244 | 
            -
                    0x1F940..0x1F945,
         | 
| 245 | 
            -
                    0x1F947..0x1F94C,
         | 
| 246 | 
            -
                    0x1F950..0x1F96B,
         | 
| 247 | 
            -
                    0x1F980..0x1F997,
         | 
| 248 | 
            -
                    0x1F9C0..0x1F9C0,
         | 
| 249 | 
            -
                    0x1F9D0..0x1F9E6
         | 
| 250 | 
            -
                  ).freeze
         | 
| 251 | 
            -
                end
         | 
| 252 | 
            -
             | 
| 253 | 
            -
                def respond_to_missing?(method_name, include_private = false)
         | 
| 254 | 
            -
                  (base = method_name[/^non_(.*)/, 1]) && respond_to?(base) || super
         | 
| 255 | 
            -
                end
         | 
| 256 | 
            -
             | 
| 257 | 
            -
                def method_missing(method_name, *args, &block)
         | 
| 258 | 
            -
                  if (base = method_name[/^non_(.*)/, 1])
         | 
| 259 | 
            -
                    ivar_name = "@#{method_name}"
         | 
| 260 | 
            -
                    return instance_variable_get(ivar_name) ||
         | 
| 261 | 
            -
                           instance_variable_set(ivar_name, send(base).inversion.freeze)
         | 
| 3 | 
            +
                Dir[File.join(__dir__, 'predefined_sets', '*.cps')].each do |path|
         | 
| 4 | 
            +
                  set_name = File.basename(path, '.cps')
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  class_eval <<-RUBY, __FILE__, __LINE__ + 1
         | 
| 7 | 
            +
                    def #{set_name}
         | 
| 8 | 
            +
                      @#{set_name} ||= build_from_cps_file('#{path}').freeze
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def non_#{set_name}
         | 
| 12 | 
            +
                      @non_#{set_name} ||= build_from_cps_file('#{path}').inversion.freeze
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  RUBY
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                alias all                      any
         | 
| 18 | 
            +
                alias ascii_letters            ascii_letter
         | 
| 19 | 
            +
                alias basic_multilingual_plane bmp
         | 
| 20 | 
            +
                alias blank                    whitespace
         | 
| 21 | 
            +
                alias invalid                  surrogate
         | 
| 22 | 
            +
                alias valid                    unicode
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def build_from_cps_file(path)
         | 
| 25 | 
            +
                  File.readlines(path).inject(new) do |set, line|
         | 
| 26 | 
            +
                    range_start, range_end = line.split(',')
         | 
| 27 | 
            +
                    set.merge((range_start.to_i(16))..(range_end.to_i(16)))
         | 
| 262 28 | 
             
                  end
         | 
| 263 | 
            -
                  super
         | 
| 264 29 | 
             
                end
         | 
| 265 30 | 
             
              end
         | 
| 266 31 | 
             
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0,10FFFF
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0,7F
         | 
| @@ -0,0 +1,666 @@ | |
| 1 | 
            +
            0,377
         | 
| 2 | 
            +
            37A,37F
         | 
| 3 | 
            +
            384,38A
         | 
| 4 | 
            +
            38C,38C
         | 
| 5 | 
            +
            38E,3A1
         | 
| 6 | 
            +
            3A3,52F
         | 
| 7 | 
            +
            531,556
         | 
| 8 | 
            +
            559,58A
         | 
| 9 | 
            +
            58D,58F
         | 
| 10 | 
            +
            591,5C7
         | 
| 11 | 
            +
            5D0,5EA
         | 
| 12 | 
            +
            5EF,5F4
         | 
| 13 | 
            +
            600,61C
         | 
| 14 | 
            +
            61E,70D
         | 
| 15 | 
            +
            70F,74A
         | 
| 16 | 
            +
            74D,7B1
         | 
| 17 | 
            +
            7C0,7FA
         | 
| 18 | 
            +
            7FD,82D
         | 
| 19 | 
            +
            830,83E
         | 
| 20 | 
            +
            840,85B
         | 
| 21 | 
            +
            85E,85E
         | 
| 22 | 
            +
            860,86A
         | 
| 23 | 
            +
            8A0,8B4
         | 
| 24 | 
            +
            8B6,8BD
         | 
| 25 | 
            +
            8D3,983
         | 
| 26 | 
            +
            985,98C
         | 
| 27 | 
            +
            98F,990
         | 
| 28 | 
            +
            993,9A8
         | 
| 29 | 
            +
            9AA,9B0
         | 
| 30 | 
            +
            9B2,9B2
         | 
| 31 | 
            +
            9B6,9B9
         | 
| 32 | 
            +
            9BC,9C4
         | 
| 33 | 
            +
            9C7,9C8
         | 
| 34 | 
            +
            9CB,9CE
         | 
| 35 | 
            +
            9D7,9D7
         | 
| 36 | 
            +
            9DC,9DD
         | 
| 37 | 
            +
            9DF,9E3
         | 
| 38 | 
            +
            9E6,9FE
         | 
| 39 | 
            +
            A01,A03
         | 
| 40 | 
            +
            A05,A0A
         | 
| 41 | 
            +
            A0F,A10
         | 
| 42 | 
            +
            A13,A28
         | 
| 43 | 
            +
            A2A,A30
         | 
| 44 | 
            +
            A32,A33
         | 
| 45 | 
            +
            A35,A36
         | 
| 46 | 
            +
            A38,A39
         | 
| 47 | 
            +
            A3C,A3C
         | 
| 48 | 
            +
            A3E,A42
         | 
| 49 | 
            +
            A47,A48
         | 
| 50 | 
            +
            A4B,A4D
         | 
| 51 | 
            +
            A51,A51
         | 
| 52 | 
            +
            A59,A5C
         | 
| 53 | 
            +
            A5E,A5E
         | 
| 54 | 
            +
            A66,A76
         | 
| 55 | 
            +
            A81,A83
         | 
| 56 | 
            +
            A85,A8D
         | 
| 57 | 
            +
            A8F,A91
         | 
| 58 | 
            +
            A93,AA8
         | 
| 59 | 
            +
            AAA,AB0
         | 
| 60 | 
            +
            AB2,AB3
         | 
| 61 | 
            +
            AB5,AB9
         | 
| 62 | 
            +
            ABC,AC5
         | 
| 63 | 
            +
            AC7,AC9
         | 
| 64 | 
            +
            ACB,ACD
         | 
| 65 | 
            +
            AD0,AD0
         | 
| 66 | 
            +
            AE0,AE3
         | 
| 67 | 
            +
            AE6,AF1
         | 
| 68 | 
            +
            AF9,AFF
         | 
| 69 | 
            +
            B01,B03
         | 
| 70 | 
            +
            B05,B0C
         | 
| 71 | 
            +
            B0F,B10
         | 
| 72 | 
            +
            B13,B28
         | 
| 73 | 
            +
            B2A,B30
         | 
| 74 | 
            +
            B32,B33
         | 
| 75 | 
            +
            B35,B39
         | 
| 76 | 
            +
            B3C,B44
         | 
| 77 | 
            +
            B47,B48
         | 
| 78 | 
            +
            B4B,B4D
         | 
| 79 | 
            +
            B56,B57
         | 
| 80 | 
            +
            B5C,B5D
         | 
| 81 | 
            +
            B5F,B63
         | 
| 82 | 
            +
            B66,B77
         | 
| 83 | 
            +
            B82,B83
         | 
| 84 | 
            +
            B85,B8A
         | 
| 85 | 
            +
            B8E,B90
         | 
| 86 | 
            +
            B92,B95
         | 
| 87 | 
            +
            B99,B9A
         | 
| 88 | 
            +
            B9C,B9C
         | 
| 89 | 
            +
            B9E,B9F
         | 
| 90 | 
            +
            BA3,BA4
         | 
| 91 | 
            +
            BA8,BAA
         | 
| 92 | 
            +
            BAE,BB9
         | 
| 93 | 
            +
            BBE,BC2
         | 
| 94 | 
            +
            BC6,BC8
         | 
| 95 | 
            +
            BCA,BCD
         | 
| 96 | 
            +
            BD0,BD0
         | 
| 97 | 
            +
            BD7,BD7
         | 
| 98 | 
            +
            BE6,BFA
         | 
| 99 | 
            +
            C00,C0C
         | 
| 100 | 
            +
            C0E,C10
         | 
| 101 | 
            +
            C12,C28
         | 
| 102 | 
            +
            C2A,C39
         | 
| 103 | 
            +
            C3D,C44
         | 
| 104 | 
            +
            C46,C48
         | 
| 105 | 
            +
            C4A,C4D
         | 
| 106 | 
            +
            C55,C56
         | 
| 107 | 
            +
            C58,C5A
         | 
| 108 | 
            +
            C60,C63
         | 
| 109 | 
            +
            C66,C6F
         | 
| 110 | 
            +
            C77,C8C
         | 
| 111 | 
            +
            C8E,C90
         | 
| 112 | 
            +
            C92,CA8
         | 
| 113 | 
            +
            CAA,CB3
         | 
| 114 | 
            +
            CB5,CB9
         | 
| 115 | 
            +
            CBC,CC4
         | 
| 116 | 
            +
            CC6,CC8
         | 
| 117 | 
            +
            CCA,CCD
         | 
| 118 | 
            +
            CD5,CD6
         | 
| 119 | 
            +
            CDE,CDE
         | 
| 120 | 
            +
            CE0,CE3
         | 
| 121 | 
            +
            CE6,CEF
         | 
| 122 | 
            +
            CF1,CF2
         | 
| 123 | 
            +
            D00,D03
         | 
| 124 | 
            +
            D05,D0C
         | 
| 125 | 
            +
            D0E,D10
         | 
| 126 | 
            +
            D12,D44
         | 
| 127 | 
            +
            D46,D48
         | 
| 128 | 
            +
            D4A,D4F
         | 
| 129 | 
            +
            D54,D63
         | 
| 130 | 
            +
            D66,D7F
         | 
| 131 | 
            +
            D82,D83
         | 
| 132 | 
            +
            D85,D96
         | 
| 133 | 
            +
            D9A,DB1
         | 
| 134 | 
            +
            DB3,DBB
         | 
| 135 | 
            +
            DBD,DBD
         | 
| 136 | 
            +
            DC0,DC6
         | 
| 137 | 
            +
            DCA,DCA
         | 
| 138 | 
            +
            DCF,DD4
         | 
| 139 | 
            +
            DD6,DD6
         | 
| 140 | 
            +
            DD8,DDF
         | 
| 141 | 
            +
            DE6,DEF
         | 
| 142 | 
            +
            DF2,DF4
         | 
| 143 | 
            +
            E01,E3A
         | 
| 144 | 
            +
            E3F,E5B
         | 
| 145 | 
            +
            E81,E82
         | 
| 146 | 
            +
            E84,E84
         | 
| 147 | 
            +
            E86,E8A
         | 
| 148 | 
            +
            E8C,EA3
         | 
| 149 | 
            +
            EA5,EA5
         | 
| 150 | 
            +
            EA7,EBD
         | 
| 151 | 
            +
            EC0,EC4
         | 
| 152 | 
            +
            EC6,EC6
         | 
| 153 | 
            +
            EC8,ECD
         | 
| 154 | 
            +
            ED0,ED9
         | 
| 155 | 
            +
            EDC,EDF
         | 
| 156 | 
            +
            F00,F47
         | 
| 157 | 
            +
            F49,F6C
         | 
| 158 | 
            +
            F71,F97
         | 
| 159 | 
            +
            F99,FBC
         | 
| 160 | 
            +
            FBE,FCC
         | 
| 161 | 
            +
            FCE,FDA
         | 
| 162 | 
            +
            1000,10C5
         | 
| 163 | 
            +
            10C7,10C7
         | 
| 164 | 
            +
            10CD,10CD
         | 
| 165 | 
            +
            10D0,1248
         | 
| 166 | 
            +
            124A,124D
         | 
| 167 | 
            +
            1250,1256
         | 
| 168 | 
            +
            1258,1258
         | 
| 169 | 
            +
            125A,125D
         | 
| 170 | 
            +
            1260,1288
         | 
| 171 | 
            +
            128A,128D
         | 
| 172 | 
            +
            1290,12B0
         | 
| 173 | 
            +
            12B2,12B5
         | 
| 174 | 
            +
            12B8,12BE
         | 
| 175 | 
            +
            12C0,12C0
         | 
| 176 | 
            +
            12C2,12C5
         | 
| 177 | 
            +
            12C8,12D6
         | 
| 178 | 
            +
            12D8,1310
         | 
| 179 | 
            +
            1312,1315
         | 
| 180 | 
            +
            1318,135A
         | 
| 181 | 
            +
            135D,137C
         | 
| 182 | 
            +
            1380,1399
         | 
| 183 | 
            +
            13A0,13F5
         | 
| 184 | 
            +
            13F8,13FD
         | 
| 185 | 
            +
            1400,169C
         | 
| 186 | 
            +
            16A0,16F8
         | 
| 187 | 
            +
            1700,170C
         | 
| 188 | 
            +
            170E,1714
         | 
| 189 | 
            +
            1720,1736
         | 
| 190 | 
            +
            1740,1753
         | 
| 191 | 
            +
            1760,176C
         | 
| 192 | 
            +
            176E,1770
         | 
| 193 | 
            +
            1772,1773
         | 
| 194 | 
            +
            1780,17DD
         | 
| 195 | 
            +
            17E0,17E9
         | 
| 196 | 
            +
            17F0,17F9
         | 
| 197 | 
            +
            1800,180E
         | 
| 198 | 
            +
            1810,1819
         | 
| 199 | 
            +
            1820,1878
         | 
| 200 | 
            +
            1880,18AA
         | 
| 201 | 
            +
            18B0,18F5
         | 
| 202 | 
            +
            1900,191E
         | 
| 203 | 
            +
            1920,192B
         | 
| 204 | 
            +
            1930,193B
         | 
| 205 | 
            +
            1940,1940
         | 
| 206 | 
            +
            1944,196D
         | 
| 207 | 
            +
            1970,1974
         | 
| 208 | 
            +
            1980,19AB
         | 
| 209 | 
            +
            19B0,19C9
         | 
| 210 | 
            +
            19D0,19DA
         | 
| 211 | 
            +
            19DE,1A1B
         | 
| 212 | 
            +
            1A1E,1A5E
         | 
| 213 | 
            +
            1A60,1A7C
         | 
| 214 | 
            +
            1A7F,1A89
         | 
| 215 | 
            +
            1A90,1A99
         | 
| 216 | 
            +
            1AA0,1AAD
         | 
| 217 | 
            +
            1AB0,1ABE
         | 
| 218 | 
            +
            1B00,1B4B
         | 
| 219 | 
            +
            1B50,1B7C
         | 
| 220 | 
            +
            1B80,1BF3
         | 
| 221 | 
            +
            1BFC,1C37
         | 
| 222 | 
            +
            1C3B,1C49
         | 
| 223 | 
            +
            1C4D,1C88
         | 
| 224 | 
            +
            1C90,1CBA
         | 
| 225 | 
            +
            1CBD,1CC7
         | 
| 226 | 
            +
            1CD0,1CFA
         | 
| 227 | 
            +
            1D00,1DF9
         | 
| 228 | 
            +
            1DFB,1F15
         | 
| 229 | 
            +
            1F18,1F1D
         | 
| 230 | 
            +
            1F20,1F45
         | 
| 231 | 
            +
            1F48,1F4D
         | 
| 232 | 
            +
            1F50,1F57
         | 
| 233 | 
            +
            1F59,1F59
         | 
| 234 | 
            +
            1F5B,1F5B
         | 
| 235 | 
            +
            1F5D,1F5D
         | 
| 236 | 
            +
            1F5F,1F7D
         | 
| 237 | 
            +
            1F80,1FB4
         | 
| 238 | 
            +
            1FB6,1FC4
         | 
| 239 | 
            +
            1FC6,1FD3
         | 
| 240 | 
            +
            1FD6,1FDB
         | 
| 241 | 
            +
            1FDD,1FEF
         | 
| 242 | 
            +
            1FF2,1FF4
         | 
| 243 | 
            +
            1FF6,1FFE
         | 
| 244 | 
            +
            2000,2064
         | 
| 245 | 
            +
            2066,2071
         | 
| 246 | 
            +
            2074,208E
         | 
| 247 | 
            +
            2090,209C
         | 
| 248 | 
            +
            20A0,20BF
         | 
| 249 | 
            +
            20D0,20F0
         | 
| 250 | 
            +
            2100,218B
         | 
| 251 | 
            +
            2190,2426
         | 
| 252 | 
            +
            2440,244A
         | 
| 253 | 
            +
            2460,2B73
         | 
| 254 | 
            +
            2B76,2B95
         | 
| 255 | 
            +
            2B98,2C2E
         | 
| 256 | 
            +
            2C30,2C5E
         | 
| 257 | 
            +
            2C60,2CF3
         | 
| 258 | 
            +
            2CF9,2D25
         | 
| 259 | 
            +
            2D27,2D27
         | 
| 260 | 
            +
            2D2D,2D2D
         | 
| 261 | 
            +
            2D30,2D67
         | 
| 262 | 
            +
            2D6F,2D70
         | 
| 263 | 
            +
            2D7F,2D96
         | 
| 264 | 
            +
            2DA0,2DA6
         | 
| 265 | 
            +
            2DA8,2DAE
         | 
| 266 | 
            +
            2DB0,2DB6
         | 
| 267 | 
            +
            2DB8,2DBE
         | 
| 268 | 
            +
            2DC0,2DC6
         | 
| 269 | 
            +
            2DC8,2DCE
         | 
| 270 | 
            +
            2DD0,2DD6
         | 
| 271 | 
            +
            2DD8,2DDE
         | 
| 272 | 
            +
            2DE0,2E4F
         | 
| 273 | 
            +
            2E80,2E99
         | 
| 274 | 
            +
            2E9B,2EF3
         | 
| 275 | 
            +
            2F00,2FD5
         | 
| 276 | 
            +
            2FF0,2FFB
         | 
| 277 | 
            +
            3000,303F
         | 
| 278 | 
            +
            3041,3096
         | 
| 279 | 
            +
            3099,30FF
         | 
| 280 | 
            +
            3105,312F
         | 
| 281 | 
            +
            3131,318E
         | 
| 282 | 
            +
            3190,31BA
         | 
| 283 | 
            +
            31C0,31E3
         | 
| 284 | 
            +
            31F0,321E
         | 
| 285 | 
            +
            3220,4DB5
         | 
| 286 | 
            +
            4DC0,9FEF
         | 
| 287 | 
            +
            A000,A48C
         | 
| 288 | 
            +
            A490,A4C6
         | 
| 289 | 
            +
            A4D0,A62B
         | 
| 290 | 
            +
            A640,A6F7
         | 
| 291 | 
            +
            A700,A7BF
         | 
| 292 | 
            +
            A7C2,A7C6
         | 
| 293 | 
            +
            A7F7,A82B
         | 
| 294 | 
            +
            A830,A839
         | 
| 295 | 
            +
            A840,A877
         | 
| 296 | 
            +
            A880,A8C5
         | 
| 297 | 
            +
            A8CE,A8D9
         | 
| 298 | 
            +
            A8E0,A953
         | 
| 299 | 
            +
            A95F,A97C
         | 
| 300 | 
            +
            A980,A9CD
         | 
| 301 | 
            +
            A9CF,A9D9
         | 
| 302 | 
            +
            A9DE,A9FE
         | 
| 303 | 
            +
            AA00,AA36
         | 
| 304 | 
            +
            AA40,AA4D
         | 
| 305 | 
            +
            AA50,AA59
         | 
| 306 | 
            +
            AA5C,AAC2
         | 
| 307 | 
            +
            AADB,AAF6
         | 
| 308 | 
            +
            AB01,AB06
         | 
| 309 | 
            +
            AB09,AB0E
         | 
| 310 | 
            +
            AB11,AB16
         | 
| 311 | 
            +
            AB20,AB26
         | 
| 312 | 
            +
            AB28,AB2E
         | 
| 313 | 
            +
            AB30,AB67
         | 
| 314 | 
            +
            AB70,ABED
         | 
| 315 | 
            +
            ABF0,ABF9
         | 
| 316 | 
            +
            AC00,D7A3
         | 
| 317 | 
            +
            D7B0,D7C6
         | 
| 318 | 
            +
            D7CB,D7FB
         | 
| 319 | 
            +
            D800,FA6D
         | 
| 320 | 
            +
            FA70,FAD9
         | 
| 321 | 
            +
            FB00,FB06
         | 
| 322 | 
            +
            FB13,FB17
         | 
| 323 | 
            +
            FB1D,FB36
         | 
| 324 | 
            +
            FB38,FB3C
         | 
| 325 | 
            +
            FB3E,FB3E
         | 
| 326 | 
            +
            FB40,FB41
         | 
| 327 | 
            +
            FB43,FB44
         | 
| 328 | 
            +
            FB46,FBC1
         | 
| 329 | 
            +
            FBD3,FD3F
         | 
| 330 | 
            +
            FD50,FD8F
         | 
| 331 | 
            +
            FD92,FDC7
         | 
| 332 | 
            +
            FDF0,FDFD
         | 
| 333 | 
            +
            FE00,FE19
         | 
| 334 | 
            +
            FE20,FE52
         | 
| 335 | 
            +
            FE54,FE66
         | 
| 336 | 
            +
            FE68,FE6B
         | 
| 337 | 
            +
            FE70,FE74
         | 
| 338 | 
            +
            FE76,FEFC
         | 
| 339 | 
            +
            FEFF,FEFF
         | 
| 340 | 
            +
            FF01,FFBE
         | 
| 341 | 
            +
            FFC2,FFC7
         | 
| 342 | 
            +
            FFCA,FFCF
         | 
| 343 | 
            +
            FFD2,FFD7
         | 
| 344 | 
            +
            FFDA,FFDC
         | 
| 345 | 
            +
            FFE0,FFE6
         | 
| 346 | 
            +
            FFE8,FFEE
         | 
| 347 | 
            +
            FFF9,FFFD
         | 
| 348 | 
            +
            10000,1000B
         | 
| 349 | 
            +
            1000D,10026
         | 
| 350 | 
            +
            10028,1003A
         | 
| 351 | 
            +
            1003C,1003D
         | 
| 352 | 
            +
            1003F,1004D
         | 
| 353 | 
            +
            10050,1005D
         | 
| 354 | 
            +
            10080,100FA
         | 
| 355 | 
            +
            10100,10102
         | 
| 356 | 
            +
            10107,10133
         | 
| 357 | 
            +
            10137,1018E
         | 
| 358 | 
            +
            10190,1019B
         | 
| 359 | 
            +
            101A0,101A0
         | 
| 360 | 
            +
            101D0,101FD
         | 
| 361 | 
            +
            10280,1029C
         | 
| 362 | 
            +
            102A0,102D0
         | 
| 363 | 
            +
            102E0,102FB
         | 
| 364 | 
            +
            10300,10323
         | 
| 365 | 
            +
            1032D,1034A
         | 
| 366 | 
            +
            10350,1037A
         | 
| 367 | 
            +
            10380,1039D
         | 
| 368 | 
            +
            1039F,103C3
         | 
| 369 | 
            +
            103C8,103D5
         | 
| 370 | 
            +
            10400,1049D
         | 
| 371 | 
            +
            104A0,104A9
         | 
| 372 | 
            +
            104B0,104D3
         | 
| 373 | 
            +
            104D8,104FB
         | 
| 374 | 
            +
            10500,10527
         | 
| 375 | 
            +
            10530,10563
         | 
| 376 | 
            +
            1056F,1056F
         | 
| 377 | 
            +
            10600,10736
         | 
| 378 | 
            +
            10740,10755
         | 
| 379 | 
            +
            10760,10767
         | 
| 380 | 
            +
            10800,10805
         | 
| 381 | 
            +
            10808,10808
         | 
| 382 | 
            +
            1080A,10835
         | 
| 383 | 
            +
            10837,10838
         | 
| 384 | 
            +
            1083C,1083C
         | 
| 385 | 
            +
            1083F,10855
         | 
| 386 | 
            +
            10857,1089E
         | 
| 387 | 
            +
            108A7,108AF
         | 
| 388 | 
            +
            108E0,108F2
         | 
| 389 | 
            +
            108F4,108F5
         | 
| 390 | 
            +
            108FB,1091B
         | 
| 391 | 
            +
            1091F,10939
         | 
| 392 | 
            +
            1093F,1093F
         | 
| 393 | 
            +
            10980,109B7
         | 
| 394 | 
            +
            109BC,109CF
         | 
| 395 | 
            +
            109D2,10A03
         | 
| 396 | 
            +
            10A05,10A06
         | 
| 397 | 
            +
            10A0C,10A13
         | 
| 398 | 
            +
            10A15,10A17
         | 
| 399 | 
            +
            10A19,10A35
         | 
| 400 | 
            +
            10A38,10A3A
         | 
| 401 | 
            +
            10A3F,10A48
         | 
| 402 | 
            +
            10A50,10A58
         | 
| 403 | 
            +
            10A60,10A9F
         | 
| 404 | 
            +
            10AC0,10AE6
         | 
| 405 | 
            +
            10AEB,10AF6
         | 
| 406 | 
            +
            10B00,10B35
         | 
| 407 | 
            +
            10B39,10B55
         | 
| 408 | 
            +
            10B58,10B72
         | 
| 409 | 
            +
            10B78,10B91
         | 
| 410 | 
            +
            10B99,10B9C
         | 
| 411 | 
            +
            10BA9,10BAF
         | 
| 412 | 
            +
            10C00,10C48
         | 
| 413 | 
            +
            10C80,10CB2
         | 
| 414 | 
            +
            10CC0,10CF2
         | 
| 415 | 
            +
            10CFA,10D27
         | 
| 416 | 
            +
            10D30,10D39
         | 
| 417 | 
            +
            10E60,10E7E
         | 
| 418 | 
            +
            10F00,10F27
         | 
| 419 | 
            +
            10F30,10F59
         | 
| 420 | 
            +
            10FE0,10FF6
         | 
| 421 | 
            +
            11000,1104D
         | 
| 422 | 
            +
            11052,1106F
         | 
| 423 | 
            +
            1107F,110C1
         | 
| 424 | 
            +
            110CD,110CD
         | 
| 425 | 
            +
            110D0,110E8
         | 
| 426 | 
            +
            110F0,110F9
         | 
| 427 | 
            +
            11100,11134
         | 
| 428 | 
            +
            11136,11146
         | 
| 429 | 
            +
            11150,11176
         | 
| 430 | 
            +
            11180,111CD
         | 
| 431 | 
            +
            111D0,111DF
         | 
| 432 | 
            +
            111E1,111F4
         | 
| 433 | 
            +
            11200,11211
         | 
| 434 | 
            +
            11213,1123E
         | 
| 435 | 
            +
            11280,11286
         | 
| 436 | 
            +
            11288,11288
         | 
| 437 | 
            +
            1128A,1128D
         | 
| 438 | 
            +
            1128F,1129D
         | 
| 439 | 
            +
            1129F,112A9
         | 
| 440 | 
            +
            112B0,112EA
         | 
| 441 | 
            +
            112F0,112F9
         | 
| 442 | 
            +
            11300,11303
         | 
| 443 | 
            +
            11305,1130C
         | 
| 444 | 
            +
            1130F,11310
         | 
| 445 | 
            +
            11313,11328
         | 
| 446 | 
            +
            1132A,11330
         | 
| 447 | 
            +
            11332,11333
         | 
| 448 | 
            +
            11335,11339
         | 
| 449 | 
            +
            1133B,11344
         | 
| 450 | 
            +
            11347,11348
         | 
| 451 | 
            +
            1134B,1134D
         | 
| 452 | 
            +
            11350,11350
         | 
| 453 | 
            +
            11357,11357
         | 
| 454 | 
            +
            1135D,11363
         | 
| 455 | 
            +
            11366,1136C
         | 
| 456 | 
            +
            11370,11374
         | 
| 457 | 
            +
            11400,11459
         | 
| 458 | 
            +
            1145B,1145B
         | 
| 459 | 
            +
            1145D,1145F
         | 
| 460 | 
            +
            11480,114C7
         | 
| 461 | 
            +
            114D0,114D9
         | 
| 462 | 
            +
            11580,115B5
         | 
| 463 | 
            +
            115B8,115DD
         | 
| 464 | 
            +
            11600,11644
         | 
| 465 | 
            +
            11650,11659
         | 
| 466 | 
            +
            11660,1166C
         | 
| 467 | 
            +
            11680,116B8
         | 
| 468 | 
            +
            116C0,116C9
         | 
| 469 | 
            +
            11700,1171A
         | 
| 470 | 
            +
            1171D,1172B
         | 
| 471 | 
            +
            11730,1173F
         | 
| 472 | 
            +
            11800,1183B
         | 
| 473 | 
            +
            118A0,118F2
         | 
| 474 | 
            +
            118FF,118FF
         | 
| 475 | 
            +
            119A0,119A7
         | 
| 476 | 
            +
            119AA,119D7
         | 
| 477 | 
            +
            119DA,119E4
         | 
| 478 | 
            +
            11A00,11A47
         | 
| 479 | 
            +
            11A50,11AA2
         | 
| 480 | 
            +
            11AC0,11AF8
         | 
| 481 | 
            +
            11C00,11C08
         | 
| 482 | 
            +
            11C0A,11C36
         | 
| 483 | 
            +
            11C38,11C45
         | 
| 484 | 
            +
            11C50,11C6C
         | 
| 485 | 
            +
            11C70,11C8F
         | 
| 486 | 
            +
            11C92,11CA7
         | 
| 487 | 
            +
            11CA9,11CB6
         | 
| 488 | 
            +
            11D00,11D06
         | 
| 489 | 
            +
            11D08,11D09
         | 
| 490 | 
            +
            11D0B,11D36
         | 
| 491 | 
            +
            11D3A,11D3A
         | 
| 492 | 
            +
            11D3C,11D3D
         | 
| 493 | 
            +
            11D3F,11D47
         | 
| 494 | 
            +
            11D50,11D59
         | 
| 495 | 
            +
            11D60,11D65
         | 
| 496 | 
            +
            11D67,11D68
         | 
| 497 | 
            +
            11D6A,11D8E
         | 
| 498 | 
            +
            11D90,11D91
         | 
| 499 | 
            +
            11D93,11D98
         | 
| 500 | 
            +
            11DA0,11DA9
         | 
| 501 | 
            +
            11EE0,11EF8
         | 
| 502 | 
            +
            11FC0,11FF1
         | 
| 503 | 
            +
            11FFF,12399
         | 
| 504 | 
            +
            12400,1246E
         | 
| 505 | 
            +
            12470,12474
         | 
| 506 | 
            +
            12480,12543
         | 
| 507 | 
            +
            13000,1342E
         | 
| 508 | 
            +
            13430,13438
         | 
| 509 | 
            +
            14400,14646
         | 
| 510 | 
            +
            16800,16A38
         | 
| 511 | 
            +
            16A40,16A5E
         | 
| 512 | 
            +
            16A60,16A69
         | 
| 513 | 
            +
            16A6E,16A6F
         | 
| 514 | 
            +
            16AD0,16AED
         | 
| 515 | 
            +
            16AF0,16AF5
         | 
| 516 | 
            +
            16B00,16B45
         | 
| 517 | 
            +
            16B50,16B59
         | 
| 518 | 
            +
            16B5B,16B61
         | 
| 519 | 
            +
            16B63,16B77
         | 
| 520 | 
            +
            16B7D,16B8F
         | 
| 521 | 
            +
            16E40,16E9A
         | 
| 522 | 
            +
            16F00,16F4A
         | 
| 523 | 
            +
            16F4F,16F87
         | 
| 524 | 
            +
            16F8F,16F9F
         | 
| 525 | 
            +
            16FE0,16FE3
         | 
| 526 | 
            +
            17000,187F7
         | 
| 527 | 
            +
            18800,18AF2
         | 
| 528 | 
            +
            1B000,1B11E
         | 
| 529 | 
            +
            1B150,1B152
         | 
| 530 | 
            +
            1B164,1B167
         | 
| 531 | 
            +
            1B170,1B2FB
         | 
| 532 | 
            +
            1BC00,1BC6A
         | 
| 533 | 
            +
            1BC70,1BC7C
         | 
| 534 | 
            +
            1BC80,1BC88
         | 
| 535 | 
            +
            1BC90,1BC99
         | 
| 536 | 
            +
            1BC9C,1BCA3
         | 
| 537 | 
            +
            1D000,1D0F5
         | 
| 538 | 
            +
            1D100,1D126
         | 
| 539 | 
            +
            1D129,1D1E8
         | 
| 540 | 
            +
            1D200,1D245
         | 
| 541 | 
            +
            1D2E0,1D2F3
         | 
| 542 | 
            +
            1D300,1D356
         | 
| 543 | 
            +
            1D360,1D378
         | 
| 544 | 
            +
            1D400,1D454
         | 
| 545 | 
            +
            1D456,1D49C
         | 
| 546 | 
            +
            1D49E,1D49F
         | 
| 547 | 
            +
            1D4A2,1D4A2
         | 
| 548 | 
            +
            1D4A5,1D4A6
         | 
| 549 | 
            +
            1D4A9,1D4AC
         | 
| 550 | 
            +
            1D4AE,1D4B9
         | 
| 551 | 
            +
            1D4BB,1D4BB
         | 
| 552 | 
            +
            1D4BD,1D4C3
         | 
| 553 | 
            +
            1D4C5,1D505
         | 
| 554 | 
            +
            1D507,1D50A
         | 
| 555 | 
            +
            1D50D,1D514
         | 
| 556 | 
            +
            1D516,1D51C
         | 
| 557 | 
            +
            1D51E,1D539
         | 
| 558 | 
            +
            1D53B,1D53E
         | 
| 559 | 
            +
            1D540,1D544
         | 
| 560 | 
            +
            1D546,1D546
         | 
| 561 | 
            +
            1D54A,1D550
         | 
| 562 | 
            +
            1D552,1D6A5
         | 
| 563 | 
            +
            1D6A8,1D7CB
         | 
| 564 | 
            +
            1D7CE,1DA8B
         | 
| 565 | 
            +
            1DA9B,1DA9F
         | 
| 566 | 
            +
            1DAA1,1DAAF
         | 
| 567 | 
            +
            1E000,1E006
         | 
| 568 | 
            +
            1E008,1E018
         | 
| 569 | 
            +
            1E01B,1E021
         | 
| 570 | 
            +
            1E023,1E024
         | 
| 571 | 
            +
            1E026,1E02A
         | 
| 572 | 
            +
            1E100,1E12C
         | 
| 573 | 
            +
            1E130,1E13D
         | 
| 574 | 
            +
            1E140,1E149
         | 
| 575 | 
            +
            1E14E,1E14F
         | 
| 576 | 
            +
            1E2C0,1E2F9
         | 
| 577 | 
            +
            1E2FF,1E2FF
         | 
| 578 | 
            +
            1E800,1E8C4
         | 
| 579 | 
            +
            1E8C7,1E8D6
         | 
| 580 | 
            +
            1E900,1E94B
         | 
| 581 | 
            +
            1E950,1E959
         | 
| 582 | 
            +
            1E95E,1E95F
         | 
| 583 | 
            +
            1EC71,1ECB4
         | 
| 584 | 
            +
            1ED01,1ED3D
         | 
| 585 | 
            +
            1EE00,1EE03
         | 
| 586 | 
            +
            1EE05,1EE1F
         | 
| 587 | 
            +
            1EE21,1EE22
         | 
| 588 | 
            +
            1EE24,1EE24
         | 
| 589 | 
            +
            1EE27,1EE27
         | 
| 590 | 
            +
            1EE29,1EE32
         | 
| 591 | 
            +
            1EE34,1EE37
         | 
| 592 | 
            +
            1EE39,1EE39
         | 
| 593 | 
            +
            1EE3B,1EE3B
         | 
| 594 | 
            +
            1EE42,1EE42
         | 
| 595 | 
            +
            1EE47,1EE47
         | 
| 596 | 
            +
            1EE49,1EE49
         | 
| 597 | 
            +
            1EE4B,1EE4B
         | 
| 598 | 
            +
            1EE4D,1EE4F
         | 
| 599 | 
            +
            1EE51,1EE52
         | 
| 600 | 
            +
            1EE54,1EE54
         | 
| 601 | 
            +
            1EE57,1EE57
         | 
| 602 | 
            +
            1EE59,1EE59
         | 
| 603 | 
            +
            1EE5B,1EE5B
         | 
| 604 | 
            +
            1EE5D,1EE5D
         | 
| 605 | 
            +
            1EE5F,1EE5F
         | 
| 606 | 
            +
            1EE61,1EE62
         | 
| 607 | 
            +
            1EE64,1EE64
         | 
| 608 | 
            +
            1EE67,1EE6A
         | 
| 609 | 
            +
            1EE6C,1EE72
         | 
| 610 | 
            +
            1EE74,1EE77
         | 
| 611 | 
            +
            1EE79,1EE7C
         | 
| 612 | 
            +
            1EE7E,1EE7E
         | 
| 613 | 
            +
            1EE80,1EE89
         | 
| 614 | 
            +
            1EE8B,1EE9B
         | 
| 615 | 
            +
            1EEA1,1EEA3
         | 
| 616 | 
            +
            1EEA5,1EEA9
         | 
| 617 | 
            +
            1EEAB,1EEBB
         | 
| 618 | 
            +
            1EEF0,1EEF1
         | 
| 619 | 
            +
            1F000,1F02B
         | 
| 620 | 
            +
            1F030,1F093
         | 
| 621 | 
            +
            1F0A0,1F0AE
         | 
| 622 | 
            +
            1F0B1,1F0BF
         | 
| 623 | 
            +
            1F0C1,1F0CF
         | 
| 624 | 
            +
            1F0D1,1F0F5
         | 
| 625 | 
            +
            1F100,1F10C
         | 
| 626 | 
            +
            1F110,1F16C
         | 
| 627 | 
            +
            1F170,1F1AC
         | 
| 628 | 
            +
            1F1E6,1F202
         | 
| 629 | 
            +
            1F210,1F23B
         | 
| 630 | 
            +
            1F240,1F248
         | 
| 631 | 
            +
            1F250,1F251
         | 
| 632 | 
            +
            1F260,1F265
         | 
| 633 | 
            +
            1F300,1F6D5
         | 
| 634 | 
            +
            1F6E0,1F6EC
         | 
| 635 | 
            +
            1F6F0,1F6FA
         | 
| 636 | 
            +
            1F700,1F773
         | 
| 637 | 
            +
            1F780,1F7D8
         | 
| 638 | 
            +
            1F7E0,1F7EB
         | 
| 639 | 
            +
            1F800,1F80B
         | 
| 640 | 
            +
            1F810,1F847
         | 
| 641 | 
            +
            1F850,1F859
         | 
| 642 | 
            +
            1F860,1F887
         | 
| 643 | 
            +
            1F890,1F8AD
         | 
| 644 | 
            +
            1F900,1F90B
         | 
| 645 | 
            +
            1F90D,1F971
         | 
| 646 | 
            +
            1F973,1F976
         | 
| 647 | 
            +
            1F97A,1F9A2
         | 
| 648 | 
            +
            1F9A5,1F9AA
         | 
| 649 | 
            +
            1F9AE,1F9CA
         | 
| 650 | 
            +
            1F9CD,1FA53
         | 
| 651 | 
            +
            1FA60,1FA6D
         | 
| 652 | 
            +
            1FA70,1FA73
         | 
| 653 | 
            +
            1FA78,1FA7A
         | 
| 654 | 
            +
            1FA80,1FA82
         | 
| 655 | 
            +
            1FA90,1FA95
         | 
| 656 | 
            +
            20000,2A6D6
         | 
| 657 | 
            +
            2A700,2B734
         | 
| 658 | 
            +
            2B740,2B81D
         | 
| 659 | 
            +
            2B820,2CEA1
         | 
| 660 | 
            +
            2CEB0,2EBE0
         | 
| 661 | 
            +
            2F800,2FA1D
         | 
| 662 | 
            +
            E0001,E0001
         | 
| 663 | 
            +
            E0020,E007F
         | 
| 664 | 
            +
            E0100,E01EF
         | 
| 665 | 
            +
            F0000,FFFFD
         | 
| 666 | 
            +
            100000,10FFFD
         |