# `Unicode.CharacterName`
[🔗](https://github.com/elixir-unicode/unicode/blob/v2.0.0/lib/unicode/character_name.ex#L1)

Resolves Unicode character names to their codepoint.

Names are taken from the `Name` field of the Unicode Character Database
(`UnicodeData.txt`) and matched loosely: case, whitespace, `_` and `-` are
ignored (as in `\N{...}` name lookups). Codepoints whose name is a bracketed
label such as `<control>`, or an algorithmically-named range (CJK ideographs,
Hangul syllables), are not included.

The names are prefix-compressed (front-coded) into a single sorted binary blob
with block restart points, and looked up with a binary search over the restart
names followed by a scan-decode within one block. This keeps the table compact
(about 0.4MB resident at runtime, versus roughly 1.2MB uncompressed) without
materialising a large map.

# `count`

```elixir
@spec count() :: non_neg_integer()
```

Returns the number of names in the table.

# `to_codepoint`

```elixir
@spec to_codepoint(String.t()) :: {:ok, pos_integer()} | :error
```

Returns the codepoint for a Unicode character name.

### Arguments

* `name` is a Unicode character name as a string, matched loosely.

### Returns

* `{:ok, codepoint}` or

* `:error` if the name is not known.

### Examples

    iex> Unicode.CharacterName.to_codepoint("LATIN SMALL LETTER A")
    {:ok, 97}

    iex> Unicode.CharacterName.to_codepoint("bullet")
    {:ok, 8226}

    iex> Unicode.CharacterName.to_codepoint("Not A Real Name")
    :error

---

*Consult [api-reference.md](api-reference.md) for complete listing*
