Packages
Elixir implementation of Unicode TR39 skeleton algorithm. Ref: https://unicode.org/reports/tr39/
Current section
Files
Jump to
Current section
Files
lib/ex_confusables.ex
defmodule ExConfusables do
@moduledoc """
Documentation for `ExConfusables`.
"""
alias ExConfusables.Confusables
@doc """
Check if two strings are confusable for each other.
## Examples
iex> ExConfusables.confusable?("𝓔׀і⨯ꭵ𝕣", "Elixir")
true
"""
@spec confusable?(String.t(), String.t()) :: boolean()
def confusable?(s1, s2) do
skeleton(s1) === skeleton(s2)
end
@doc """
Transforms a unicode string by replacing unusual characters with similar-looking common characters,
as specified by the [Unicode Standard Annex #39](http://www.unicode.org/reports/tr39/).
## Examples
iex> ExConfusables.skeleton("𝓔׀і⨯ꭵ𝕣")
"Elixir"
"""
@spec skeleton(String.t()) :: String.t()
def skeleton(s) do
for <<c::utf8 <- :unicode.characters_to_binary(s)>> do
Confusables.prototype(c)
end
|> :unicode.characters_to_nfd_binary()
end
end