Unicode::Confusable
![[travis]](https://travis-ci.org/janlelis/unicode-confusable.png)
Compares two strings if they are visually confusable as described in Unicode® Technical Standard #39: Both strings get transformed into a skeleton format before comparing them. The skeleton is generated by normalizing the string (NFD), replacing confusable characters, and normalizing the string again.
Unicode version: 10.0.0
Supported Rubies: 2.4, 2.3, 2.2
Usage
require "unicode/confusable"
Unicode::Confusable.confusable? "a", "b" # => false
Unicode::Confusable.confusable? "C", "С" # => true
Unicode::Confusable.confusable? "ℜ𝘂ᖯʏ", "Ruby" # => true
Unicode::Confusable.confusable? "Michael", "Michae1" # => true
Unicode::Confusable.confusable? "⁇", "?" # => false
Unicode::Confusable.confusable? "⁇", "??" # => true
Skeleton
Unicode::Confusable.skeleton "ℜ𝘂ᖯʏ" # => "Ruby"
Please note: The skeleton is an intermediate representation, not meant for any other use than testing confusability, according to the standard.
No Advanced Detection
TR 39 also describes mechanisms for a more exact recognition of confusables, also within the same string:
- Single-script confusable
- Mixed-script confusable
- Whole-script confusable
This is currently not supported by this gem.
See unicode-x for more Unicode related micro libraries.
MIT License
- Copyright (C) 2016-2017 Jan Lelis http://janlelis.com. Released under the MIT license.
- Unicode data: http://www.unicode.org/copyright.html#Exhibit1