Packages

Elixir implementation of Unicode TR39 skeleton algorithm. Ref: https://unicode.org/reports/tr39/

Current section

Files

Jump to
ex_confusables lib ex_confusables.ex
Raw

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?("ℰlixir", "Elixir")
true
"""
@spec confusable?(String.t(), String.t()) :: boolean()
def confusable?(s1, s2) do
skeleton(s1) === skeleton(s2)
end
@doc false
def confusable2?(s1, s2) do
skeleton2(s1) === skeleton2(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("ℰlixir")
"Elixir"
"""
@spec skeleton(String.t()) :: String.t()
def skeleton(s) do
for c <- :unicode.characters_to_list(s) do
Confusables.parse_char(c)
end
|> :unicode.characters_to_nfd_binary()
end
@doc false
def skeleton2(s) do
:unicode.characters_to_binary(s)
|> Confusables.parse()
|> :unicode.characters_to_nfd_binary()
end
end