character_set 1.7.0-java → 1.9.0-java
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/.rubocop.yml +4 -1
- data/CHANGELOG.md +19 -0
- data/LICENSE.txt +1 -1
- data/README.md +4 -3
- data/Rakefile +12 -5
- data/ext/character_set/character_set.c +91 -67
- data/ext/character_set/java/src/main/java/org/jaynetics/characterset/CharacterSetService.java +15 -0
- data/ext/character_set/java/src/main/java/org/jaynetics/characterset/RubyCharacterSet.java +493 -0
- data/ext/character_set/java/src/main/java/org/jaynetics/characterset/StringOperations.java +138 -0
- data/lib/character_set/character_set.jar +0 -0
- data/lib/character_set/core_ext/regexp_ext.rb +8 -0
- data/lib/character_set/expression_converter.rb +37 -54
- data/lib/character_set/java.rb +6 -0
- data/lib/character_set/parser.rb +5 -3
- data/lib/character_set/predefined_sets/assigned.cps +95 -58
- data/lib/character_set/predefined_sets/emoji.cps +9 -11
- data/lib/character_set/predefined_sets.rb +1 -1
- data/lib/character_set/ruby_fallback/character_set_methods.rb +7 -14
- data/lib/character_set/ruby_fallback/set_methods.rb +215 -53
- data/lib/character_set/ruby_fallback.rb +4 -2
- data/lib/character_set/set_method_adapters.rb +1 -1
- data/lib/character_set/shared_methods.rb +43 -2
- data/lib/character_set/version.rb +1 -1
- data/lib/character_set/writer.rb +1 -1
- data/lib/character_set.rb +6 -1
- metadata +10 -53
- data/.gitattributes +0 -3
- data/.github/workflows/gouteur.yml +0 -20
- data/.github/workflows/lint.yml +0 -29
- data/.github/workflows/tests.yml +0 -26
- data/.gitignore +0 -33
- data/.gouteur.yml +0 -2
- data/.rspec +0 -3
- data/BENCHMARK.md +0 -90
- data/Gemfile +0 -20
- data/bin/console +0 -21
- data/bin/setup +0 -8
- data/character_set.gemspec +0 -24
- data/ext/character_set/unicode_casefold_table.h +0 -1438
- data/ext/character_set/unicode_casefold_table.h.tmpl +0 -11
- data/lib/character_set/ruby_fallback/vendored_set_classes.rb +0 -492
- data/tasks/benchmark.rake +0 -20
- data/tasks/benchmarks/count_in.rb +0 -13
- data/tasks/benchmarks/cover.rb +0 -25
- data/tasks/benchmarks/delete_in.rb +0 -29
- data/tasks/benchmarks/keep_in.rb +0 -29
- data/tasks/benchmarks/scan.rb +0 -13
- data/tasks/benchmarks/shared.rb +0 -28
- data/tasks/benchmarks/used_by.rb +0 -25
- data/tasks/benchmarks/z_add.rb +0 -12
- data/tasks/benchmarks/z_delete.rb +0 -12
- data/tasks/benchmarks/z_merge.rb +0 -15
- data/tasks/benchmarks/z_minmax.rb +0 -12
- data/tasks/sync_casefold_data.rake +0 -20
- data/tasks/sync_predefined_sets.rake +0 -9
- data/tasks/sync_ruby_spec.rake +0 -65
|
@@ -4,86 +4,61 @@ class CharacterSet
|
|
|
4
4
|
|
|
5
5
|
Error = Class.new(ArgumentError)
|
|
6
6
|
|
|
7
|
-
def convert(expression, to = CharacterSet)
|
|
7
|
+
def convert(expression, to = CharacterSet, acc = [])
|
|
8
8
|
CharacterSet.require_optional_dependency('regexp_parser', __method__)
|
|
9
9
|
|
|
10
10
|
case expression
|
|
11
|
-
when Regexp::Expression::Root
|
|
12
|
-
if expression.count != 1
|
|
13
|
-
raise Error, 'Pass a Regexp with exactly one expression, e.g. /[a-z]/'
|
|
14
|
-
end
|
|
15
|
-
convert(expression[0], to)
|
|
16
|
-
|
|
17
11
|
when Regexp::Expression::CharacterSet
|
|
18
|
-
content = expression.map { |subexp| convert(subexp, to) }.reduce(:+)
|
|
19
|
-
content
|
|
20
|
-
expression.negative? ? content.inversion : content
|
|
12
|
+
content = expression.map { |subexp| convert(subexp, to) }.reduce(:+) || to[]
|
|
13
|
+
acc << (expression.negative? ? content.inversion : content)
|
|
21
14
|
|
|
22
15
|
when Regexp::Expression::CharacterSet::Intersection
|
|
23
|
-
expression.map { |subexp| convert(subexp, to) }.reduce(:&)
|
|
24
|
-
|
|
25
|
-
when Regexp::Expression::CharacterSet::IntersectedSequence
|
|
26
|
-
expression.map { |subexp| convert(subexp, to) }.reduce(:+) || to[]
|
|
16
|
+
acc << expression.map { |subexp| convert(subexp, to) }.reduce(:&)
|
|
27
17
|
|
|
28
18
|
when Regexp::Expression::CharacterSet::Range
|
|
29
19
|
start, finish = expression.map { |subexp| convert(subexp, to) }
|
|
30
|
-
to.new((start.min)..(finish.max))
|
|
20
|
+
acc << to.new((start.min)..(finish.max))
|
|
21
|
+
|
|
22
|
+
when Regexp::Expression::Subexpression # root, group, alternation, etc.
|
|
23
|
+
expression.each { |subexp| convert(subexp, to, acc) }
|
|
31
24
|
|
|
32
25
|
when Regexp::Expression::CharacterType::Any
|
|
33
|
-
to.unicode
|
|
26
|
+
acc << to.unicode
|
|
34
27
|
|
|
35
28
|
when Regexp::Expression::CharacterType::Base
|
|
36
29
|
/(?<negative>non)?(?<base_name>.+)/ =~ expression.token
|
|
37
30
|
content =
|
|
38
31
|
if expression.unicode_classes?
|
|
39
|
-
# in u-mode, type shortcuts match the same as \p{<long type name>}
|
|
40
|
-
|
|
32
|
+
# in u-mode, most type shortcuts match the same as \p{<long type name>}
|
|
33
|
+
if base_name == 'linebreak'
|
|
34
|
+
to.from_ranges(10..13, 133..133, 8232..8233)
|
|
35
|
+
else
|
|
36
|
+
to.of_property(base_name)
|
|
37
|
+
end
|
|
41
38
|
else
|
|
42
39
|
# in normal mode, types match only ascii chars
|
|
43
40
|
case base_name.to_sym
|
|
44
|
-
when :digit
|
|
45
|
-
when :hex
|
|
46
|
-
when :
|
|
47
|
-
when :
|
|
41
|
+
when :digit then to.from_ranges(48..57)
|
|
42
|
+
when :hex then to.from_ranges(48..57, 65..70, 97..102)
|
|
43
|
+
when :linebreak then to.from_ranges(10..13)
|
|
44
|
+
when :space then to.from_ranges(9..13, 32..32)
|
|
45
|
+
when :word then to.from_ranges(48..57, 65..90, 95..95, 97..122)
|
|
48
46
|
else raise Error, "Unsupported CharacterType #{base_name}"
|
|
49
47
|
end
|
|
50
48
|
end
|
|
51
|
-
negative ? content.inversion : content
|
|
49
|
+
acc << (negative ? content.inversion : content)
|
|
52
50
|
|
|
53
51
|
when Regexp::Expression::EscapeSequence::CodepointList
|
|
54
|
-
to.new(expression.codepoints)
|
|
52
|
+
content = to.new(expression.codepoints)
|
|
53
|
+
acc << (expression.i? ? content.case_insensitive : content)
|
|
55
54
|
|
|
56
55
|
when Regexp::Expression::EscapeSequence::Base
|
|
57
|
-
to[expression.codepoint]
|
|
58
|
-
|
|
59
|
-
when Regexp::Expression::Group::Capture,
|
|
60
|
-
Regexp::Expression::Group::Passive,
|
|
61
|
-
Regexp::Expression::Group::Named,
|
|
62
|
-
Regexp::Expression::Group::Atomic,
|
|
63
|
-
Regexp::Expression::Group::Options
|
|
64
|
-
case expression.count
|
|
65
|
-
when 0 then to[]
|
|
66
|
-
when 1 then convert(expression.first, to)
|
|
67
|
-
else
|
|
68
|
-
raise Error, 'Groups must contain exactly one expression, e.g. ([a-z])'
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
when Regexp::Expression::Alternation # rubocop:disable Lint/DuplicateBranch
|
|
72
|
-
expression.map { |subexp| convert(subexp, to) }.reduce(:+)
|
|
73
|
-
|
|
74
|
-
when Regexp::Expression::Alternative
|
|
75
|
-
case expression.count
|
|
76
|
-
when 0 then to[]
|
|
77
|
-
when 1 then convert(expression.first, to)
|
|
78
|
-
else
|
|
79
|
-
raise Error, 'Alternatives must contain exactly one expression'
|
|
80
|
-
end
|
|
56
|
+
content = to[expression.codepoint]
|
|
57
|
+
acc << (expression.i? ? content.case_insensitive : content)
|
|
81
58
|
|
|
82
59
|
when Regexp::Expression::Literal
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
end
|
|
86
|
-
to[expression.text.ord]
|
|
60
|
+
content = to[*expression.text.chars]
|
|
61
|
+
acc << (expression.i? ? content.case_insensitive : content)
|
|
87
62
|
|
|
88
63
|
when Regexp::Expression::UnicodeProperty::Base,
|
|
89
64
|
Regexp::Expression::PosixClass
|
|
@@ -91,14 +66,22 @@ class CharacterSet
|
|
|
91
66
|
if expression.type == :posixclass && expression.ascii_classes?
|
|
92
67
|
content = content.ascii_part
|
|
93
68
|
end
|
|
94
|
-
expression.negative? ? content.inversion : content
|
|
69
|
+
acc << (expression.negative? ? content.inversion : content)
|
|
70
|
+
|
|
71
|
+
when Regexp::Expression::Anchor::Base,
|
|
72
|
+
Regexp::Expression::Backreference::Base,
|
|
73
|
+
Regexp::Expression::Keep::Mark,
|
|
74
|
+
Regexp::Expression::Quantifier
|
|
75
|
+
# ignore zero-length and repeat expressions
|
|
95
76
|
|
|
96
77
|
when Regexp::Expression::Base
|
|
97
78
|
raise Error, "Unsupported expression class `#{expression.class}`"
|
|
98
79
|
|
|
99
80
|
else
|
|
100
|
-
raise Error,
|
|
81
|
+
raise Error, 'Pass an expression (result of Regexp::Parser.parse)'
|
|
101
82
|
end
|
|
83
|
+
|
|
84
|
+
acc.reduce(:+) || to[]
|
|
102
85
|
end
|
|
103
86
|
end
|
|
104
87
|
end
|
data/lib/character_set/parser.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class CharacterSet
|
|
2
4
|
module Parser
|
|
3
5
|
module_function
|
|
@@ -18,7 +20,7 @@ class CharacterSet
|
|
|
18
20
|
|
|
19
21
|
def codepoints_from_bracket_expression(string)
|
|
20
22
|
raise ArgumentError, 'pass a String' unless string.is_a?(String)
|
|
21
|
-
raise ArgumentError, 'advanced syntax' if string
|
|
23
|
+
raise ArgumentError, 'advanced syntax' if string.match?(/\\[^uUx]|[^\\]\[|&&/)
|
|
22
24
|
|
|
23
25
|
content = strip_brackets(string)
|
|
24
26
|
literal_content = eval_escapes(content)
|
|
@@ -26,7 +28,7 @@ class CharacterSet
|
|
|
26
28
|
prev_chr = nil
|
|
27
29
|
in_range = false
|
|
28
30
|
|
|
29
|
-
literal_content.each_char.
|
|
31
|
+
literal_content.each_char.filter_map do |chr|
|
|
30
32
|
if chr == '-' && prev_chr && prev_chr != '\\' && prev_chr != '-'
|
|
31
33
|
in_range = true
|
|
32
34
|
nil
|
|
@@ -36,7 +38,7 @@ class CharacterSet
|
|
|
36
38
|
prev_chr = chr
|
|
37
39
|
result
|
|
38
40
|
end
|
|
39
|
-
end.
|
|
41
|
+
end.flatten
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
def strip_brackets(string)
|
|
@@ -19,9 +19,8 @@
|
|
|
19
19
|
840,85B
|
|
20
20
|
85E,85E
|
|
21
21
|
860,86A
|
|
22
|
-
870,
|
|
23
|
-
|
|
24
|
-
898,983
|
|
22
|
+
870,891
|
|
23
|
+
897,983
|
|
25
24
|
985,98C
|
|
26
25
|
98F,990
|
|
27
26
|
993,9A8
|
|
@@ -104,7 +103,7 @@ C46,C48
|
|
|
104
103
|
C4A,C4D
|
|
105
104
|
C55,C56
|
|
106
105
|
C58,C5A
|
|
107
|
-
|
|
106
|
+
C5C,C5D
|
|
108
107
|
C60,C63
|
|
109
108
|
C66,C6F
|
|
110
109
|
C77,C8C
|
|
@@ -116,10 +115,10 @@ CBC,CC4
|
|
|
116
115
|
CC6,CC8
|
|
117
116
|
CCA,CCD
|
|
118
117
|
CD5,CD6
|
|
119
|
-
|
|
118
|
+
CDC,CDE
|
|
120
119
|
CE0,CE3
|
|
121
120
|
CE6,CEF
|
|
122
|
-
CF1,
|
|
121
|
+
CF1,CF3
|
|
123
122
|
D00,D0C
|
|
124
123
|
D0E,D10
|
|
125
124
|
D12,D44
|
|
@@ -149,7 +148,7 @@ EA5,EA5
|
|
|
149
148
|
EA7,EBD
|
|
150
149
|
EC0,EC4
|
|
151
150
|
EC6,EC6
|
|
152
|
-
EC8,
|
|
151
|
+
EC8,ECE
|
|
153
152
|
ED0,ED9
|
|
154
153
|
EDC,EDF
|
|
155
154
|
F00,F47
|
|
@@ -211,13 +210,13 @@ FCE,FDA
|
|
|
211
210
|
1A7F,1A89
|
|
212
211
|
1A90,1A99
|
|
213
212
|
1AA0,1AAD
|
|
214
|
-
1AB0,
|
|
213
|
+
1AB0,1ADD
|
|
214
|
+
1AE0,1AEB
|
|
215
215
|
1B00,1B4C
|
|
216
|
-
|
|
217
|
-
1B80,1BF3
|
|
216
|
+
1B4E,1BF3
|
|
218
217
|
1BFC,1C37
|
|
219
218
|
1C3B,1C49
|
|
220
|
-
1C4D,
|
|
219
|
+
1C4D,1C8A
|
|
221
220
|
1C90,1CBA
|
|
222
221
|
1CBD,1CC7
|
|
223
222
|
1CD0,1CFA
|
|
@@ -241,14 +240,13 @@ FCE,FDA
|
|
|
241
240
|
2066,2071
|
|
242
241
|
2074,208E
|
|
243
242
|
2090,209C
|
|
244
|
-
20A0,
|
|
243
|
+
20A0,20C1
|
|
245
244
|
20D0,20F0
|
|
246
245
|
2100,218B
|
|
247
|
-
2190,
|
|
246
|
+
2190,2429
|
|
248
247
|
2440,244A
|
|
249
248
|
2460,2B73
|
|
250
|
-
2B76,
|
|
251
|
-
2B97,2CF3
|
|
249
|
+
2B76,2CF3
|
|
252
250
|
2CF9,2D25
|
|
253
251
|
2D27,2D27
|
|
254
252
|
2D2D,2D2D
|
|
@@ -267,23 +265,19 @@ FCE,FDA
|
|
|
267
265
|
2E80,2E99
|
|
268
266
|
2E9B,2EF3
|
|
269
267
|
2F00,2FD5
|
|
270
|
-
2FF0,
|
|
271
|
-
3000,303F
|
|
268
|
+
2FF0,303F
|
|
272
269
|
3041,3096
|
|
273
270
|
3099,30FF
|
|
274
271
|
3105,312F
|
|
275
272
|
3131,318E
|
|
276
|
-
3190,
|
|
277
|
-
|
|
273
|
+
3190,31E5
|
|
274
|
+
31EF,321E
|
|
278
275
|
3220,A48C
|
|
279
276
|
A490,A4C6
|
|
280
277
|
A4D0,A62B
|
|
281
278
|
A640,A6F7
|
|
282
|
-
A700,
|
|
283
|
-
|
|
284
|
-
A7D3,A7D3
|
|
285
|
-
A7D5,A7D9
|
|
286
|
-
A7F2,A82C
|
|
279
|
+
A700,A7DC
|
|
280
|
+
A7F1,A82C
|
|
287
281
|
A830,A839
|
|
288
282
|
A840,A877
|
|
289
283
|
A880,A8C5
|
|
@@ -309,7 +303,7 @@ ABF0,ABF9
|
|
|
309
303
|
AC00,D7A3
|
|
310
304
|
D7B0,D7C6
|
|
311
305
|
D7CB,D7FB
|
|
312
|
-
|
|
306
|
+
E000,FA6D
|
|
313
307
|
FA70,FAD9
|
|
314
308
|
FB00,FB06
|
|
315
309
|
FB13,FB17
|
|
@@ -318,10 +312,7 @@ FB38,FB3C
|
|
|
318
312
|
FB3E,FB3E
|
|
319
313
|
FB40,FB41
|
|
320
314
|
FB43,FB44
|
|
321
|
-
FB46,
|
|
322
|
-
FBD3,FD8F
|
|
323
|
-
FD92,FDC7
|
|
324
|
-
FDCF,FDCF
|
|
315
|
+
FB46,FDCF
|
|
325
316
|
FDF0,FE19
|
|
326
317
|
FE20,FE52
|
|
327
318
|
FE54,FE66
|
|
@@ -373,6 +364,7 @@ FFF9,FFFD
|
|
|
373
364
|
105A3,105B1
|
|
374
365
|
105B3,105B9
|
|
375
366
|
105BB,105BC
|
|
367
|
+
105C0,105F3
|
|
376
368
|
10600,10736
|
|
377
369
|
10740,10755
|
|
378
370
|
10760,10767
|
|
@@ -391,7 +383,7 @@ FFF9,FFFD
|
|
|
391
383
|
108F4,108F5
|
|
392
384
|
108FB,1091B
|
|
393
385
|
1091F,10939
|
|
394
|
-
1093F,
|
|
386
|
+
1093F,10959
|
|
395
387
|
10980,109B7
|
|
396
388
|
109BC,109CF
|
|
397
389
|
109D2,10A03
|
|
@@ -416,11 +408,16 @@ FFF9,FFFD
|
|
|
416
408
|
10CC0,10CF2
|
|
417
409
|
10CFA,10D27
|
|
418
410
|
10D30,10D39
|
|
411
|
+
10D40,10D65
|
|
412
|
+
10D69,10D85
|
|
413
|
+
10D8E,10D8F
|
|
419
414
|
10E60,10E7E
|
|
420
415
|
10E80,10EA9
|
|
421
416
|
10EAB,10EAD
|
|
422
417
|
10EB0,10EB1
|
|
423
|
-
|
|
418
|
+
10EC2,10EC7
|
|
419
|
+
10ED0,10ED8
|
|
420
|
+
10EFA,10F27
|
|
424
421
|
10F30,10F59
|
|
425
422
|
10F70,10F89
|
|
426
423
|
10FB0,10FCB
|
|
@@ -437,7 +434,7 @@ FFF9,FFFD
|
|
|
437
434
|
11180,111DF
|
|
438
435
|
111E1,111F4
|
|
439
436
|
11200,11211
|
|
440
|
-
11213,
|
|
437
|
+
11213,11241
|
|
441
438
|
11280,11286
|
|
442
439
|
11288,11288
|
|
443
440
|
1128A,1128D
|
|
@@ -460,6 +457,17 @@ FFF9,FFFD
|
|
|
460
457
|
1135D,11363
|
|
461
458
|
11366,1136C
|
|
462
459
|
11370,11374
|
|
460
|
+
11380,11389
|
|
461
|
+
1138B,1138B
|
|
462
|
+
1138E,1138E
|
|
463
|
+
11390,113B5
|
|
464
|
+
113B7,113C0
|
|
465
|
+
113C2,113C2
|
|
466
|
+
113C5,113C5
|
|
467
|
+
113C7,113CA
|
|
468
|
+
113CC,113D5
|
|
469
|
+
113D7,113D8
|
|
470
|
+
113E1,113E2
|
|
463
471
|
11400,1145B
|
|
464
472
|
1145D,11461
|
|
465
473
|
11480,114C7
|
|
@@ -471,6 +479,7 @@ FFF9,FFFD
|
|
|
471
479
|
11660,1166C
|
|
472
480
|
11680,116B9
|
|
473
481
|
116C0,116C9
|
|
482
|
+
116D0,116E3
|
|
474
483
|
11700,1171A
|
|
475
484
|
1171D,1172B
|
|
476
485
|
11730,11746
|
|
@@ -490,6 +499,10 @@ FFF9,FFFD
|
|
|
490
499
|
11A00,11A47
|
|
491
500
|
11A50,11AA2
|
|
492
501
|
11AB0,11AF8
|
|
502
|
+
11B00,11B09
|
|
503
|
+
11B60,11B67
|
|
504
|
+
11BC0,11BE1
|
|
505
|
+
11BF0,11BF9
|
|
493
506
|
11C00,11C08
|
|
494
507
|
11C0A,11C36
|
|
495
508
|
11C38,11C45
|
|
@@ -510,7 +523,12 @@ FFF9,FFFD
|
|
|
510
523
|
11D90,11D91
|
|
511
524
|
11D93,11D98
|
|
512
525
|
11DA0,11DA9
|
|
526
|
+
11DB0,11DDB
|
|
527
|
+
11DE0,11DE9
|
|
513
528
|
11EE0,11EF8
|
|
529
|
+
11F00,11F10
|
|
530
|
+
11F12,11F3A
|
|
531
|
+
11F3E,11F5A
|
|
514
532
|
11FB0,11FB0
|
|
515
533
|
11FC0,11FF1
|
|
516
534
|
11FFF,12399
|
|
@@ -518,9 +536,10 @@ FFF9,FFFD
|
|
|
518
536
|
12470,12474
|
|
519
537
|
12480,12543
|
|
520
538
|
12F90,12FF2
|
|
521
|
-
13000,
|
|
522
|
-
|
|
539
|
+
13000,13455
|
|
540
|
+
13460,143FA
|
|
523
541
|
14400,14646
|
|
542
|
+
16100,16139
|
|
524
543
|
16800,16A38
|
|
525
544
|
16A40,16A5E
|
|
526
545
|
16A60,16A69
|
|
@@ -533,20 +552,25 @@ FFF9,FFFD
|
|
|
533
552
|
16B5B,16B61
|
|
534
553
|
16B63,16B77
|
|
535
554
|
16B7D,16B8F
|
|
555
|
+
16D40,16D79
|
|
536
556
|
16E40,16E9A
|
|
557
|
+
16EA0,16EB8
|
|
558
|
+
16EBB,16ED3
|
|
537
559
|
16F00,16F4A
|
|
538
560
|
16F4F,16F87
|
|
539
561
|
16F8F,16F9F
|
|
540
562
|
16FE0,16FE4
|
|
541
|
-
16FF0,
|
|
542
|
-
17000,
|
|
543
|
-
|
|
544
|
-
|
|
563
|
+
16FF0,16FF6
|
|
564
|
+
17000,18CD5
|
|
565
|
+
18CFF,18D1E
|
|
566
|
+
18D80,18DF2
|
|
545
567
|
1AFF0,1AFF3
|
|
546
568
|
1AFF5,1AFFB
|
|
547
569
|
1AFFD,1AFFE
|
|
548
570
|
1B000,1B122
|
|
571
|
+
1B132,1B132
|
|
549
572
|
1B150,1B152
|
|
573
|
+
1B155,1B155
|
|
550
574
|
1B164,1B167
|
|
551
575
|
1B170,1B2FB
|
|
552
576
|
1BC00,1BC6A
|
|
@@ -554,6 +578,10 @@ FFF9,FFFD
|
|
|
554
578
|
1BC80,1BC88
|
|
555
579
|
1BC90,1BC99
|
|
556
580
|
1BC9C,1BCA3
|
|
581
|
+
1CC00,1CCFC
|
|
582
|
+
1CD00,1CEB3
|
|
583
|
+
1CEBA,1CED0
|
|
584
|
+
1CEE0,1CEF0
|
|
557
585
|
1CF00,1CF2D
|
|
558
586
|
1CF30,1CF46
|
|
559
587
|
1CF50,1CFC3
|
|
@@ -561,6 +589,7 @@ FFF9,FFFD
|
|
|
561
589
|
1D100,1D126
|
|
562
590
|
1D129,1D1EA
|
|
563
591
|
1D200,1D245
|
|
592
|
+
1D2C0,1D2D3
|
|
564
593
|
1D2E0,1D2F3
|
|
565
594
|
1D300,1D356
|
|
566
595
|
1D360,1D378
|
|
@@ -588,11 +617,14 @@ FFF9,FFFD
|
|
|
588
617
|
1DA9B,1DA9F
|
|
589
618
|
1DAA1,1DAAF
|
|
590
619
|
1DF00,1DF1E
|
|
620
|
+
1DF25,1DF2A
|
|
591
621
|
1E000,1E006
|
|
592
622
|
1E008,1E018
|
|
593
623
|
1E01B,1E021
|
|
594
624
|
1E023,1E024
|
|
595
625
|
1E026,1E02A
|
|
626
|
+
1E030,1E06D
|
|
627
|
+
1E08F,1E08F
|
|
596
628
|
1E100,1E12C
|
|
597
629
|
1E130,1E13D
|
|
598
630
|
1E140,1E149
|
|
@@ -600,6 +632,12 @@ FFF9,FFFD
|
|
|
600
632
|
1E290,1E2AE
|
|
601
633
|
1E2C0,1E2F9
|
|
602
634
|
1E2FF,1E2FF
|
|
635
|
+
1E4D0,1E4F9
|
|
636
|
+
1E5D0,1E5FA
|
|
637
|
+
1E5FF,1E5FF
|
|
638
|
+
1E6C0,1E6DE
|
|
639
|
+
1E6E0,1E6F5
|
|
640
|
+
1E6FE,1E6FF
|
|
603
641
|
1E7E0,1E7E6
|
|
604
642
|
1E7E8,1E7EB
|
|
605
643
|
1E7ED,1E7EE
|
|
@@ -657,11 +695,10 @@ FFF9,FFFD
|
|
|
657
695
|
1F240,1F248
|
|
658
696
|
1F250,1F251
|
|
659
697
|
1F260,1F265
|
|
660
|
-
1F300,
|
|
661
|
-
|
|
698
|
+
1F300,1F6D8
|
|
699
|
+
1F6DC,1F6EC
|
|
662
700
|
1F6F0,1F6FC
|
|
663
|
-
1F700,
|
|
664
|
-
1F780,1F7D8
|
|
701
|
+
1F700,1F7D9
|
|
665
702
|
1F7E0,1F7EB
|
|
666
703
|
1F7F0,1F7F0
|
|
667
704
|
1F800,1F80B
|
|
@@ -669,28 +706,28 @@ FFF9,FFFD
|
|
|
669
706
|
1F850,1F859
|
|
670
707
|
1F860,1F887
|
|
671
708
|
1F890,1F8AD
|
|
672
|
-
1F8B0,
|
|
673
|
-
|
|
709
|
+
1F8B0,1F8BB
|
|
710
|
+
1F8C0,1F8C1
|
|
711
|
+
1F8D0,1F8D8
|
|
712
|
+
1F900,1FA57
|
|
674
713
|
1FA60,1FA6D
|
|
675
|
-
1FA70,
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
1FAE0,1FAE7
|
|
683
|
-
1FAF0,1FAF6
|
|
714
|
+
1FA70,1FA7C
|
|
715
|
+
1FA80,1FA8A
|
|
716
|
+
1FA8E,1FAC6
|
|
717
|
+
1FAC8,1FAC8
|
|
718
|
+
1FACD,1FADC
|
|
719
|
+
1FADF,1FAEA
|
|
720
|
+
1FAEF,1FAF8
|
|
684
721
|
1FB00,1FB92
|
|
685
|
-
1FB94,
|
|
686
|
-
1FBF0,1FBF9
|
|
722
|
+
1FB94,1FBFA
|
|
687
723
|
20000,2A6DF
|
|
688
|
-
2A700,
|
|
689
|
-
|
|
690
|
-
2B820,2CEA1
|
|
724
|
+
2A700,2B81D
|
|
725
|
+
2B820,2CEAD
|
|
691
726
|
2CEB0,2EBE0
|
|
727
|
+
2EBF0,2EE5D
|
|
692
728
|
2F800,2FA1D
|
|
693
729
|
30000,3134A
|
|
730
|
+
31350,33479
|
|
694
731
|
E0001,E0001
|
|
695
732
|
E0020,E007F
|
|
696
733
|
E0100,E01EF
|
|
@@ -131,8 +131,8 @@ AE,AE
|
|
|
131
131
|
1F5FA,1F64F
|
|
132
132
|
1F680,1F6C5
|
|
133
133
|
1F6CB,1F6D2
|
|
134
|
-
1F6D5,
|
|
135
|
-
|
|
134
|
+
1F6D5,1F6D8
|
|
135
|
+
1F6DC,1F6E5
|
|
136
136
|
1F6E9,1F6E9
|
|
137
137
|
1F6EB,1F6EC
|
|
138
138
|
1F6F0,1F6F0
|
|
@@ -142,12 +142,10 @@ AE,AE
|
|
|
142
142
|
1F90C,1F93A
|
|
143
143
|
1F93C,1F945
|
|
144
144
|
1F947,1F9FF
|
|
145
|
-
1FA70,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
1FAE0,1FAE7
|
|
153
|
-
1FAF0,1FAF6
|
|
145
|
+
1FA70,1FA7C
|
|
146
|
+
1FA80,1FA8A
|
|
147
|
+
1FA8E,1FAC6
|
|
148
|
+
1FAC8,1FAC8
|
|
149
|
+
1FACD,1FADC
|
|
150
|
+
1FADF,1FAEA
|
|
151
|
+
1FAEF,1FAF8
|
|
@@ -44,12 +44,11 @@ class CharacterSet
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def cover?(string)
|
|
47
|
-
utf8_str!(string).each_codepoint { |cp|
|
|
48
|
-
true
|
|
47
|
+
utf8_str!(string).each_codepoint.all? { |cp| include?(cp) }
|
|
49
48
|
end
|
|
50
49
|
|
|
51
50
|
def delete_in(string)
|
|
52
|
-
utf8_str!(string).each_codepoint.with_object('') do |cp, new_str|
|
|
51
|
+
utf8_str!(string).each_codepoint.with_object(+'') do |cp, new_str|
|
|
53
52
|
include?(cp) || (new_str << cp)
|
|
54
53
|
end.encode(string.encoding)
|
|
55
54
|
end
|
|
@@ -60,7 +59,7 @@ class CharacterSet
|
|
|
60
59
|
end
|
|
61
60
|
|
|
62
61
|
def keep_in(string)
|
|
63
|
-
utf8_str!(string).each_codepoint.with_object('') do |cp, new_str|
|
|
62
|
+
utf8_str!(string).each_codepoint.with_object(+'') do |cp, new_str|
|
|
64
63
|
include?(cp) && (new_str << cp)
|
|
65
64
|
end.encode(string.encoding)
|
|
66
65
|
end
|
|
@@ -71,14 +70,13 @@ class CharacterSet
|
|
|
71
70
|
end
|
|
72
71
|
|
|
73
72
|
def scan(string)
|
|
74
|
-
utf8_str!(string).each_codepoint.
|
|
75
|
-
|
|
73
|
+
utf8_str!(string).each_codepoint.filter_map do |cp|
|
|
74
|
+
cp.chr('utf-8') if include?(cp)
|
|
76
75
|
end
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
def used_by?(string)
|
|
80
|
-
utf8_str!(string).each_codepoint { |cp|
|
|
81
|
-
false
|
|
79
|
+
utf8_str!(string).each_codepoint.any? { |cp| include?(cp) }
|
|
82
80
|
end
|
|
83
81
|
|
|
84
82
|
def section(from:, upto: 0x10FFFF)
|
|
@@ -98,8 +96,7 @@ class CharacterSet
|
|
|
98
96
|
end
|
|
99
97
|
|
|
100
98
|
def planes
|
|
101
|
-
|
|
102
|
-
inject({}) { |hash, cp| hash.merge((cp / plane_size).floor => 1) }.keys
|
|
99
|
+
map { |cp| cp / 0x10000 }.uniq
|
|
103
100
|
end
|
|
104
101
|
|
|
105
102
|
def plane(num)
|
|
@@ -122,10 +119,6 @@ class CharacterSet
|
|
|
122
119
|
raise ArgumentError, 'pass a String' unless obj.respond_to?(:codepoints)
|
|
123
120
|
obj.encode('utf-8')
|
|
124
121
|
end
|
|
125
|
-
|
|
126
|
-
def make_new_str(original, &block)
|
|
127
|
-
utf8_str!(original).each_codepoint.with_object('', &block)
|
|
128
|
-
end
|
|
129
122
|
end
|
|
130
123
|
end
|
|
131
124
|
end
|