module Unicode::Confusable
Constants
- DATA_DIRECTORY
- INDEX
- INDEX_FILENAME
- UNICODE_VERSION
- VERSION
Public Class Methods
confusable?(string1, string2)
click to toggle source
# File lib/unicode/confusable.rb, line 7 def self.confusable?(string1, string2) skeleton(string1) == skeleton(string2) end
list(char, partial_mapping_allowed = true)
click to toggle source
# File lib/unicode/confusable.rb, line 20 def self.list(char, partial_mapping_allowed = true) require_relative 'confusable/index' unless defined? ::Unicode::Confusable::INDEX codepoint = char.codepoints.first or raise ArgumentError, "no data given to Unicode::Confusable.list" if partial_mapping_allowed INDEX.select{ |k,v| v == codepoint || v.is_a?(Array) && v.include?(codepoint) }.keys.map{ |codepoint| [codepoint].pack("U*") } else INDEX.select{ |k,v| v == codepoint }.keys.map{ |codepoint| [codepoint].pack("U") } end end
skeleton(string)
click to toggle source
# File lib/unicode/confusable.rb, line 11 def self.skeleton(string) require_relative 'confusable/index' unless defined? ::Unicode::Confusable::INDEX UnicodeNormalize.normalize( UnicodeNormalize.normalize(string, :nfd).each_codepoint.map{ |codepoint| INDEX[codepoint] || codepoint }.flatten.pack("U*"), :nfd ) end