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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/CHANGELOG.md +19 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +4 -3
  6. data/Rakefile +12 -5
  7. data/ext/character_set/character_set.c +91 -67
  8. data/ext/character_set/java/src/main/java/org/jaynetics/characterset/CharacterSetService.java +15 -0
  9. data/ext/character_set/java/src/main/java/org/jaynetics/characterset/RubyCharacterSet.java +493 -0
  10. data/ext/character_set/java/src/main/java/org/jaynetics/characterset/StringOperations.java +138 -0
  11. data/lib/character_set/character_set.jar +0 -0
  12. data/lib/character_set/core_ext/regexp_ext.rb +8 -0
  13. data/lib/character_set/expression_converter.rb +37 -54
  14. data/lib/character_set/java.rb +6 -0
  15. data/lib/character_set/parser.rb +5 -3
  16. data/lib/character_set/predefined_sets/assigned.cps +95 -58
  17. data/lib/character_set/predefined_sets/emoji.cps +9 -11
  18. data/lib/character_set/predefined_sets.rb +1 -1
  19. data/lib/character_set/ruby_fallback/character_set_methods.rb +7 -14
  20. data/lib/character_set/ruby_fallback/set_methods.rb +215 -53
  21. data/lib/character_set/ruby_fallback.rb +4 -2
  22. data/lib/character_set/set_method_adapters.rb +1 -1
  23. data/lib/character_set/shared_methods.rb +43 -2
  24. data/lib/character_set/version.rb +1 -1
  25. data/lib/character_set/writer.rb +1 -1
  26. data/lib/character_set.rb +6 -1
  27. metadata +10 -53
  28. data/.gitattributes +0 -3
  29. data/.github/workflows/gouteur.yml +0 -20
  30. data/.github/workflows/lint.yml +0 -29
  31. data/.github/workflows/tests.yml +0 -26
  32. data/.gitignore +0 -33
  33. data/.gouteur.yml +0 -2
  34. data/.rspec +0 -3
  35. data/BENCHMARK.md +0 -90
  36. data/Gemfile +0 -20
  37. data/bin/console +0 -21
  38. data/bin/setup +0 -8
  39. data/character_set.gemspec +0 -24
  40. data/ext/character_set/unicode_casefold_table.h +0 -1438
  41. data/ext/character_set/unicode_casefold_table.h.tmpl +0 -11
  42. data/lib/character_set/ruby_fallback/vendored_set_classes.rb +0 -492
  43. data/tasks/benchmark.rake +0 -20
  44. data/tasks/benchmarks/count_in.rb +0 -13
  45. data/tasks/benchmarks/cover.rb +0 -25
  46. data/tasks/benchmarks/delete_in.rb +0 -29
  47. data/tasks/benchmarks/keep_in.rb +0 -29
  48. data/tasks/benchmarks/scan.rb +0 -13
  49. data/tasks/benchmarks/shared.rb +0 -28
  50. data/tasks/benchmarks/used_by.rb +0 -25
  51. data/tasks/benchmarks/z_add.rb +0 -12
  52. data/tasks/benchmarks/z_delete.rb +0 -12
  53. data/tasks/benchmarks/z_merge.rb +0 -15
  54. data/tasks/benchmarks/z_minmax.rb +0 -12
  55. data/tasks/sync_casefold_data.rake +0 -20
  56. data/tasks/sync_predefined_sets.rake +0 -9
  57. data/tasks/sync_ruby_spec.rake +0 -65
@@ -1,12 +0,0 @@
1
- require_relative './shared'
2
-
3
- cs = CharacterSet.new(0..0x10FFFF)
4
- ss = SortedSet.new(0..0x10FFFF)
5
-
6
- benchmark(
7
- caption: 'Removing entries',
8
- cases: {
9
- 'CharacterSet#delete' => -> { cs.delete(rand(0x10FFFF)) },
10
- 'SortedSet#delete' => -> { ss.delete(rand(0x10FFFF)) },
11
- }
12
- )
@@ -1,15 +0,0 @@
1
- require_relative './shared'
2
-
3
- cs1 = CharacterSet.new(0...0x88000)
4
- cs2 = CharacterSet.new(0x88000..0x10FFFF)
5
-
6
- ss1 = SortedSet.new(0...0x88000)
7
- ss2 = SortedSet.new(0x88000..0x10FFFF)
8
-
9
- benchmark(
10
- caption: 'Merging entries',
11
- cases: {
12
- 'CharacterSet#merge' => -> { cs1.merge(cs2) },
13
- 'SortedSet#merge' => -> { ss1.merge(ss2) },
14
- }
15
- )
@@ -1,12 +0,0 @@
1
- require_relative './shared'
2
-
3
- cs = CharacterSet.new(0..0xFFFF)
4
- ss = SortedSet.new(0..0xFFFF)
5
-
6
- benchmark(
7
- caption: 'Getting the min and max',
8
- cases: {
9
- 'CharacterSet#minmax' => -> { cs.minmax },
10
- 'SortedSet#minmax' => -> { ss.minmax },
11
- }
12
- )
@@ -1,20 +0,0 @@
1
- desc 'Download unicode casefold data and write new C header file'
2
- task :sync_casefold_data do
3
- src_path = './CaseFolding.txt'
4
- dst_path = "#{__dir__}/../ext/character_set/unicode_casefold_table.h"
5
-
6
- `wget http://www.unicode.org/Public/UNIDATA/CaseFolding.txt`
7
-
8
- mapping = File.foreach(src_path).each_with_object({}) do |line, hash|
9
- from, type, to = line.split(/\s*;\s*/).first(3)
10
- # type 'C' stands for 'common', excludes mappings to multiple chars
11
- hash[from] = to if type == 'C'
12
- end.sort
13
-
14
- content = File.read(dst_path + '.tmpl')
15
- .sub(/(CASEFOLD_COUNT )0/, "\\1#{mapping.count}")
16
- .sub('{}', ['{', mapping.map { |a, b| "{0x#{a},0x#{b}}," }, '}'].join("\n"))
17
-
18
- File.write(dst_path, content)
19
- File.unlink(src_path)
20
- end
@@ -1,9 +0,0 @@
1
- desc 'Update codepoint data for predefined sets, based on Onigmo'
2
- task :sync_predefined_sets do
3
- %w[assigned emoji whitespace].each do |prop|
4
- require 'regexp_property_values'
5
- ranges = RegexpPropertyValues[prop].matched_ranges
6
- str = ranges.map { |r| "#{r.min.to_s(16)},#{r.max.to_s(16)}\n" }.join.upcase
7
- File.write("#{__dir__}/../lib/character_set/predefined_sets/#{prop}.cps", str, mode: 'w')
8
- end
9
- end
@@ -1,65 +0,0 @@
1
- desc 'Download relevant ruby/spec tests, adapt to CharacterSet and its variants'
2
- task :sync_ruby_spec do
3
- require 'fileutils'
4
-
5
- variants = {
6
- 'CharacterSet' => "#{__dir__}/../spec/ruby-spec/library/character_set",
7
- 'CharacterSet::Pure' => "#{__dir__}/../spec/ruby-spec/library/character_set_pure",
8
- }
9
-
10
- # download fresh specs from ruby/spec repository
11
- variants.each do |_, dir|
12
- FileUtils.rm_rf(dir)
13
- `svn export https://github.com/ruby/spec/trunk/library/set/sortedset #{dir}`
14
- end
15
-
16
- # make copies for each CharacterSet variant
17
- base = variants.first[1]
18
- variants.each_value { |dir| FileUtils.copy_entry(base, dir) unless dir == base }
19
-
20
- # adapt specs to work with CharacterSet
21
- variants.each do |class_name, dir|
22
- Dir["#{dir}/**/*.rb"].each do |spec|
23
- # ignore some tests that do not apply or are covered otherwise
24
- if spec =~ %r{/(classify|divide|flatten|initialize|pretty_print)}
25
- File.delete(spec)
26
- next
27
- end
28
-
29
- adapted_content =
30
- File.read(spec).
31
- # adapt class name
32
- gsub('SortedSet', (spec['/shared/'] ? 'variant' : class_name)).
33
- gsub(/(it_behaves_like :[^,\n]+), (:[^,\n]+)/, "\\1, #{class_name}, \\2").
34
- # get shared specs from a single shared dir at the parent level
35
- gsub(/(require_relative ['"])(shared\/)/, '\1../\2').
36
- # make 'mspec' syntax rspec-compatible
37
- gsub(/describe (.*), shared.*$/, 'shared_examples \1 do |variant, method|').
38
- gsub(/be_(false|true)/, 'be \1').
39
- gsub('stub!', 'stub').
40
- gsub('mock', 'double').
41
- gsub('@method', 'method').
42
- # remove unneeded requires
43
- gsub(/require 'set'\n/, '').
44
- gsub(/require.*spec_helper.*\n/, '').
45
- gsub(/\A\n+/, '').
46
- # make examples use Integers/codepoints
47
- gsub(/1\.0|"cat"|"dog"|"hello"|"test"/, '0').
48
- gsub('"one"', '1').
49
- gsub('"two"', '2').
50
- gsub('"three"', '3').
51
- gsub('"four"', '4').
52
- gsub('"five"', '5').
53
- gsub(/x.(size|length) == 3/, 'x != 3').
54
- gsub(/x.(size|length) != 3/, 'x == 3').
55
- gsub(/(add)\(\d\)(\.to_a \}.should raise)/, '\1(:foo)\2')
56
-
57
- File.open(spec, 'w') { |f| f.puts adapted_content }
58
- end
59
- end
60
-
61
- # keep only one copy of the shared specs, at the parent level
62
- FileUtils.rm_rf(base + '/../shared')
63
- FileUtils.mv(base + '/shared', base + '/../')
64
- variants.each_value { |dir| FileUtils.rm_rf(dir + '/shared') }
65
- end