unicode-confusable 1.13.0 → 1.14.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0fb80c9f71641f4246d0b7fe969d6495c09678168204cf88dbf660a08e83e96
4
- data.tar.gz: 71b09a54d8a909ab9a4718b0d3a561572cf7325e8f91febafadcfdc4d68b6b42
3
+ metadata.gz: b6bc7e62b19cb936a3bc164d08264194866173ddacaff98354b3c2fc35705229
4
+ data.tar.gz: f5e4951ecc316d29c7c56a3355a330f9f7c9200efeb1aa6f04ee23ec96a75a15
5
5
  SHA512:
6
- metadata.gz: 6b2d5fd1fd5fa69645693e266c4180edc4c6b042289f28f69a424f116d2f3ca4dd17560d824bd164942079c56891c016497b0eac9b5d3bd513e27b9ec03595cb
7
- data.tar.gz: f4614d86cb2a393e8e83ddf83f3fd4d65d35ddfacc53dc192439eef1d79c692b0e025853010f6878adce8e8c7d17bbb86f1355f1de6cd939ad09ad9bdb18a3b3
6
+ metadata.gz: ce84aa52f44f53b94c062663ab53fbbdf7429ca00c43b32098d097996b558ecf21ac999ff9872be4b02c074285d0002f4f91193124a3b8176d19e52dfbf9b104
7
+ data.tar.gz: 79604e8f5dfae6d5e5a1abe1bc9757071e32ee5ff51b2e6d29df0e241e5867d831d976f67f9679656c15e47576ac54b2b47e617f5d6f9102b1e3e737efb73c4c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ## CHANGELOG
2
2
 
3
+ ### 1.14.1
4
+
5
+ - Use regex to remove default ignorable codepoints, speeds up confusable check,
6
+ closes #2
7
+
8
+ ### 1.14.0
9
+
10
+ - Unicode 18.0
11
+
3
12
  ### 1.13.0
4
13
 
5
14
  - Unicode 17.0
data/Gemfile.lock CHANGED
@@ -1,16 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- unicode-confusable (1.13.0)
4
+ unicode-confusable (1.14.0)
5
+ charcutter (>= 0.1.0, < 2.0)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
10
+ charcutter (0.1.0)
11
+ drb (2.2.3)
9
12
  io-console (0.6.0)
10
13
  irb (1.8.1)
11
14
  rdoc
12
15
  reline (>= 0.3.8)
13
- minitest (5.20.0)
16
+ minitest (6.0.6)
17
+ drb (~> 2.0)
18
+ prism (~> 1.5)
19
+ prism (1.9.0)
14
20
  psych (5.1.0)
15
21
  stringio
16
22
  rake (13.0.6)
data/MIT-LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016-2025 Jan Lelis, https://janlelis.com
1
+ Copyright (c) 2016-2026 Jan Lelis, https://janlelis.com
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -2,14 +2,12 @@
2
2
 
3
3
  Compares two strings if they are visually confusable as described in [Unicode® Technical Standard #39](https://www.unicode.org/reports/tr39/#Confusable_Detection): Both strings get transformed into a skeleton format before comparing them. The skeleton is generated by normalizing the string ([NFD](http://unicode.org/reports/tr15/#Norm_Forms)), removing ignorable characters, replacing [confusable characters](https://unicode.org/Public/security/16.0.0/confusables.txt), and normalizing the string again.
4
4
 
5
- Unicode version: **17.0.0** (September 2025)
5
+ Unicode version: **18.0.0** (September 2026)
6
6
 
7
7
  \* The Unicode normalization [depends on your Ruby version](https://idiosyncratic-ruby.com/73-unicode-version-mapping.html)
8
8
 
9
9
  Please note: The TR39 standard now includes detection of confusables based on bidi formatting (i.e. right-to-left text). This is currently not supported by this gen.
10
10
 
11
- Supported Rubies: **3.x** (might stil work: **2.x**)
12
-
13
11
  ## Usage
14
12
 
15
13
  ### Confusable?
@@ -39,14 +37,14 @@ List all characters that map to the confusable exemplar given:
39
37
 
40
38
  ```ruby
41
39
  Unicode::Confusable.list("o", false)
42
- # => ["ం", "ಂ", "ം", "ං", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ჿ", "օ", "ס", "ه", "𞸤", "𞹤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ഠ", "ဝ", "𐓪", "𑣈", "𑣗", "𐐬"]
40
+ # => ["ం", "ಂ", "ം", "ං", "𑌂", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "᪀", "᪐", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ᲂ", "ჿ", "օ", "ס", "ه", "𞸤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ࡀ", "ߋ", "ഠ", "ᯪ", "ဝ", "𐴇", "𑄤", "ᩅ", "𐓪", "ᄋ", "ㅇ", "ᄋ", "ᆼ", "𑣈", "𑣗", "𐤬", "𐐬"]
43
41
  ```
44
42
 
45
43
  If you omit the second parameter, it will also show confusables, where the given character is just a part of:
46
44
 
47
45
  ```ruby
48
46
  Unicode::Confusable.list("o")
49
- # => ["⒪", "ꜵ", "℅", "ᴔ", "ꭁ", "ꭂ", "ﷲ", "№", "ం", "ಂ", "ം", "ං", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ჿ", "օ", "ס", "ه", "𞸤", "𞹤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ഠ", "ဝ", "𐓪", "𑣈", "𑣗", "𐐬", "ۿ", "ø", "ꬾ", "ɵ", "ꝋ", "ⲑ", "ө", "ѳ", "ꮎ", "ꮻ", "ꭴ", "ﳙ", "ơ", "œ", "ɶ", "∞", "ꝏ", "ꚙ", "ﳗ", "ﱑ", "ﳘ", "ﱒ", "ﶓ", "ﶔ", "ﱓ", "ﱔ", "ൟ", "თ", "တ", "ꭣ", "ﲠ", "ﳢ", "ﲥ", "ﳤ", "ﷻ", "ﴱ", "ﳨ", "ﴲ", "ﳪ", "ﷺ", "ﷷ", "ﳍ", "ﳖ", "ﳯ", "ﳞ", "ﳱ", "ﳦ", "ﲛ", "ﳠ", "ﯭ", "ﯬ"]
47
+ # => ["⒪", "㈇", "㈕", "㈝", "㈞", "ꜵ", "℅", "ꭃ", "ꭄ", "㏇", "ᴔ", "ꭁ", "ꭂ", "㏒", "ﷲ", "№", "ం", "ಂ", "ം", "ං", "𑌂", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "᪀", "᪐", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ᲂ", "ჿ", "օ", "ס", "ه", "𞸤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ࡀ", "ߋ", "ഠ", "ᯪ", "ဝ", "𐴇", "𑄤", "ᩅ", "𐓪", "ᄋ", "ㅇ", "ᄋ", "ᆼ", "𑣈", "𑣗", "𐤬", "𐐬", "ۿ", "ة", "ﺔ", "ﺓ", "ۃ", "ø", "ꬾ", "ꚢ", "ɵ", "ꝋ", "ⲑ", "ө", "ѳ", "ꮎ", "ꮻ", "ꭴ", "ﮥ", "ﮤ", "ﳙ", "œ", "ɶ", "\u{1DF5E}", "𞹤", "∞", "ꝏ", "ꚙ", "ᅇ", "ㆀ", "ᇮ", "\u{1DF5F}", "㍵", "ѹ", "ﳗ", "ﱑ", "ﳘ", "ﱒ", "ﶓ", "ﶔ", "ﱓ", "ﱔ", "ൟ", "თ", "တ", "𑄖", "ᨲ", "ᅁ", "ᇬ", "ᇭ", "ᅂ", "ꥶ", "ᅃ", "ᅄ", "ᅅ", "ᇱ", "ㆂ", "ᅈ", "ᅉ", "ᇯ", "ᅊ", "ᅋ", "ꥷ", "ᅆ", "ᇲ", "ㆃ", "㏖", "ꭣ", "ﲠ", "ﳢ", "ﲥ", "ﳤ", "ﷻ", "𞱵", "ﴱ", "ﳨ", "ﴲ", "ﳪ", "ﷺ", "𞲱", "ﷷ", "𞲣", "ﳍ", "𞲟", "𞲞", "ﳖ", "ﳯ", "ﳞ", "ﳱ", "ﳦ", "ﲛ", "ﳠ", "ﯭ", "ﯬ", "ᄛ", "ퟝ", "ꥫ", "ᇕ", "ᄝ", "ㅱ", "ᇢ", "ᄫ", "ㅸ", "ᇦ", "ᄬ", "ㅹ", "ᄵ", "ퟫ", "ᅍ", "ᅗ", "ㆄ", "ᇴ", "ퟴ"]
50
48
  ```
51
49
 
52
50
  ## No Bidi-Confusable Check
@@ -61,5 +59,5 @@ See [unicode-x](https://github.com/janlelis/unicode-x) for more Unicode related
61
59
 
62
60
  ## MIT License
63
61
 
64
- - Copyright (C) 2016-2025 Jan Lelis <https://janlelis.com>. Released under the MIT license.
62
+ - Copyright (C) 2016-2026 Jan Lelis <https://janlelis.com>. Released under the MIT license.
65
63
  - Unicode data: https://www.unicode.org/copyright.html#Exhibit1
Binary file
@@ -2,8 +2,8 @@
2
2
 
3
3
  module Unicode
4
4
  module Confusable
5
- VERSION = "1.13.0"
6
- UNICODE_VERSION = "17.0.0"
5
+ VERSION = "1.14.1"
6
+ UNICODE_VERSION = "18.0.0"
7
7
  DATA_DIRECTORY = File.expand_path(File.dirname(__FILE__) + "/../../../data/").freeze
8
8
  INDEX_FILENAME = (DATA_DIRECTORY + "/confusable.marshal.gz").freeze
9
9
  end
@@ -1,11 +1,10 @@
1
1
  require_relative "confusable/constants"
2
2
 
3
3
  require 'unicode_normalize/normalize'
4
+ require 'charcutter'
4
5
 
5
6
  module Unicode
6
7
  module Confusable
7
- autoload :IGNORABLE, File.expand_path('confusable/ignorable', __dir__)
8
-
9
8
  def self.confusable?(string1, string2)
10
9
  skeleton(string1) == skeleton(string2)
11
10
  end
@@ -13,10 +12,10 @@ module Unicode
13
12
  def self.skeleton(string)
14
13
  require_relative 'confusable/index' unless defined? ::Unicode::Confusable::INDEX
15
14
  UnicodeNormalize.normalize(
16
- UnicodeNormalize.normalize(string, :nfd).each_codepoint.map{ |codepoint|
17
- unless IGNORABLE.include?(codepoint)
18
- INDEX[:CONFUSABLE][codepoint] || codepoint
19
- end
15
+ Charcutter[
16
+ UnicodeNormalize.normalize(string, :nfd)
17
+ ].deny(:ignorable).each_codepoint.map{ |codepoint|
18
+ INDEX[:CONFUSABLE][codepoint] || codepoint
20
19
  }.flatten.compact.pack("U*"), :nfd
21
20
  )
22
21
  end
@@ -0,0 +1,7 @@
1
+ require 'benchmark'
2
+ require 'unicode/confusable'
3
+
4
+ test_str = "some long string" * 1000
5
+ Benchmark.bm do |x|
6
+ x.report("skeleton") { 500.times { Unicode::Confusable.skeleton(test_str) } }
7
+ end
@@ -28,13 +28,13 @@ describe Unicode::Confusable do
28
28
 
29
29
  describe ".list(char)" do
30
30
  it "will return list of confusables for a character, also confusables where given character is part of" do
31
- assert_equal ["⒪", "ꜵ", "℅", "ᴔ", "ꭁ", "ꭂ", "ﷲ", "№", "ం", "ಂ", "ം", "ං", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ჿ", "օ", "ס", "ه", "𞸤", "𞹤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ഠ", "ဝ", "𐓪", "𑣈", "𑣗", "𐐬", "ۿ", "ø", "ꬾ", "ɵ", "ꝋ", "ⲑ", "ө", "ѳ", "ꮎ", "ꮻ", "ꭴ", "ﳙ", "ơ", "œ", "ɶ", "∞", "ꝏ", "ꚙ", "ﳗ", "ﱑ", "ﳘ", "ﱒ", "ﶓ", "ﶔ", "ﱓ", "ﱔ", "ൟ", "თ", "တ", "ꭣ", "ﲠ", "ﳢ", "ﲥ", "ﳤ", "ﷻ", "ﴱ", "ﳨ", "ﴲ", "ﳪ", "ﷺ", "ﷷ", "ﳍ", "ﳖ", "ﳯ", "ﳞ", "ﳱ", "ﳦ", "ﲛ", "ﳠ", "ﯭ", "ﯬ"], Unicode::Confusable.list("o")
31
+ assert_equal ["⒪", "㈇", "㈕", "㈝", "㈞", "ꜵ", "℅", "ꭃ", "ꭄ", "㏇", "ᴔ", "ꭁ", "ꭂ", "㏒", "ﷲ", "№", "ం", "ಂ", "ം", "ං", "𑌂", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "᪀", "᪐", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ᲂ", "ჿ", "օ", "ס", "ه", "𞸤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ࡀ", "ߋ", "ഠ", "ᯪ", "ဝ", "𐴇", "𑄤", "ᩅ", "𐓪", "ᄋ", "ㅇ", "ᄋ", "ᆼ", "𑣈", "𑣗", "𐤬", "𐐬", "ۿ", "ة", "ﺔ", "ﺓ", "ۃ", "ø", "ꬾ", "ꚢ", "ɵ", "ꝋ", "ⲑ", "ө", "ѳ", "ꮎ", "ꮻ", "ꭴ", "ﮥ", "ﮤ", "ﳙ", "œ", "ɶ", "\u{1DF5E}", "𞹤", "∞", "ꝏ", "ꚙ", "ᅇ", "ㆀ", "ᇮ", "\u{1DF5F}", "㍵", "ѹ", "ﳗ", "ﱑ", "ﳘ", "ﱒ", "ﶓ", "ﶔ", "ﱓ", "ﱔ", "ൟ", "თ", "တ", "𑄖", "ᨲ", "ᅁ", "ᇬ", "ᇭ", "ᅂ", "ꥶ", "ᅃ", "ᅄ", "ᅅ", "ᇱ", "ㆂ", "ᅈ", "ᅉ", "ᇯ", "ᅊ", "ᅋ", "ꥷ", "ᅆ", "ᇲ", "ㆃ", "㏖", "ꭣ", "ﲠ", "ﳢ", "ﲥ", "ﳤ", "ﷻ", "𞱵", "ﴱ", "ﳨ", "ﴲ", "ﳪ", "ﷺ", "𞲱", "ﷷ", "𞲣", "ﳍ", "𞲟", "𞲞", "ﳖ", "ﳯ", "ﳞ", "ﳱ", "ﳦ", "ﲛ", "ﳠ", "ﯭ", "ﯬ", "ᄛ", "ퟝ", "ꥫ", "ᇕ", "ᄝ", "ㅱ", "ᇢ", "ᄫ", "ㅸ", "ᇦ", "ᄬ", "ㅹ", "ᄵ", "ퟫ", "ᅍ", "ᅗ", "ㆄ", "ᇴ", "ퟴ"], Unicode::Confusable.list("o")
32
32
  end
33
33
  end
34
34
 
35
35
  describe ".list(char, false)" do
36
36
  it "will return list of confusables for a character, only direct confusables" do
37
- assert_equal ["ం", "ಂ", "ം", "ං", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ჿ", "օ", "ס", "ه", "𞸤", "𞹤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ഠ", "ဝ", "𐓪", "𑣈", "𑣗", "𐐬"], Unicode::Confusable.list("o", false)
37
+ assert_equal ["ం", "ಂ", "ം", "ං", "𑌂", "०", "০", "੦", "૦", "୦", "௦", "౦", "൦", "๐", "໐", "၀", "០", "᪀", "᪐", "𑓐", "٥", "۵", "o", "ℴ", "𝐨", "𝑜", "𝒐", "𝓸", "𝔬", "𝕠", "𝖔", "𝗈", "𝗼", "𝘰", "𝙤", "𝚘", "ᴏ", "ᴑ", "ꬽ", "ο", "𝛐", "𝜊", "𝝄", "𝝾", "𝞸", "σ", "𝛔", "𝜎", "𝝈", "𝞂", "𝞼", "ⲟ", "ϭ", "о", "ᲂ", "ჿ", "օ", "ס", "ه", "𞸤", "𞺄", "ﻫ", "ﻬ", "ﻪ", "ﻩ", "ھ", "ﮬ", "ﮭ", "ﮫ", "ﮪ", "ہ", "ﮨ", "ﮩ", "ﮧ", "ﮦ", "ە", "ࡀ", "ߋ", "ഠ", "ᯪ", "ဝ", "𐴇", "𑄤", "ᩅ", "𐓪", "ᄋ", "ㅇ", "ᄋ", "ᆼ", "𑣈", "𑣗", "𐤬", "𐐬"], Unicode::Confusable.list("o", false)
38
38
  end
39
39
  end
40
40
  end
@@ -14,9 +14,9 @@ Gem::Specification.new do |gem|
14
14
 
15
15
  gem.files = Dir["{**/}{.*,*}"].select{ |path| File.file?(path) && path !~ /^pkg/ }
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
17
  gem.require_paths = ["lib"]
19
18
  gem.metadata = { "rubygems_mfa_required" => "true" }
20
19
 
21
20
  gem.required_ruby_version = ">= 2.2"
21
+ gem.add_dependency "charcutter", ">= 0.1.0", "< 2.0"
22
22
  end
metadata CHANGED
@@ -1,16 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicode-confusable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.0
4
+ version: 1.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Lelis
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-09-09 00:00:00.000000000 Z
12
- dependencies: []
13
- description: "[Unicode 17.0.0] Compares two strings if they are visually confusable
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: charcutter
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 0.1.0
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 0.1.0
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '2.0'
32
+ description: "[Unicode 18.0.0] Compares two strings if they are visually confusable
14
33
  as described in Unicode® Technical Standard #39: Both strings get transformed into
15
34
  a skeleton format before comparing them. The skeleton is generated by normalizing
16
35
  the string, replacing confusable characters, and then normalizing the string again."
@@ -34,6 +53,7 @@ files:
34
53
  - lib/unicode/confusable/ignorable.rb
35
54
  - lib/unicode/confusable/index.rb
36
55
  - lib/unicode/confusable/string_ext.rb
56
+ - scripts/benchmark.rb
37
57
  - sig/unicode-confusable.rbs
38
58
  - spec/unicode_confusable_spec.rb
39
59
  - unicode-confusable.gemspec
@@ -42,7 +62,6 @@ licenses:
42
62
  - MIT
43
63
  metadata:
44
64
  rubygems_mfa_required: 'true'
45
- post_install_message:
46
65
  rdoc_options: []
47
66
  require_paths:
48
67
  - lib
@@ -57,9 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
76
  - !ruby/object:Gem::Version
58
77
  version: '0'
59
78
  requirements: []
60
- rubygems_version: 3.5.21
61
- signing_key:
79
+ rubygems_version: 4.0.10
62
80
  specification_version: 4
63
81
  summary: Detect characters that look visually similar.
64
- test_files:
65
- - spec/unicode_confusable_spec.rb
82
+ test_files: []