# `Unicode.Transform.Builtin`
[🔗](https://github.com/elixir-unicode/unicode_transform/blob/v1.1.0/lib/unicode/transform/builtin.ex#L1)

Implements built-in transforms defined by the Unicode Standard.

These transforms are not defined by rules but by operations
in the Unicode Standard:

* `Any-NFC`, `Any-NFD`, `Any-NFKC`, `Any-NFKD` — normalization forms.

* `Any-Lower`, `Any-Upper`, `Any-Title` — case transformations.

* `Any-Null` — identity (no effect).

* `Any-Remove` — removes all characters.

# `apply`

```elixir
@spec apply(String.t(), String.t()) :: String.t()
```

Applies a built-in transform to a string.

### Arguments

* `string` — the input string.

* `name` — the transform name.

### Returns

The transformed string.

### Examples

    iex> Unicode.Transform.Builtin.apply("hello", "Upper")
    "HELLO"

    # NFD decomposes "Ä" (U+00C4) into "A" plus a combining diaeresis.
    iex> byte_size(Unicode.Transform.Builtin.apply("Ä", "NFD"))
    3

# `builtin?`

```elixir
@spec builtin?(String.t()) :: boolean()
```

Returns whether the given transform name is a built-in transform.

### Arguments

* `name` — the transform name string.

### Returns

`true` if the transform is built-in, `false` otherwise.

# `case_transform?`

```elixir
@spec case_transform?(String.t()) :: boolean()
```

Returns `true` if the given name is a case transform (Upper, Lower, Title).

### Arguments

* `name` — the transform name.

### Returns

`true` if the transform is a case transform, `false` otherwise.

# `inverse`

```elixir
@spec inverse(String.t()) :: String.t() | nil
```

Returns the inverse of a built-in transform name.

### Arguments

* `name` — the transform name.

### Returns

The inverse transform name, or `nil` if no inverse exists.

---

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