# `Localize.Collation.Variable`
[🔗](https://github.com/elixir-localize/localize/blob/v0.39.0/lib/localize/collation/variable.ex#L1)

Variable weight handling for the collation algorithm.

In the UCA, "variable" collation elements are those for spaces, punctuation,
and optionally symbols and currency signs. The `alternate` setting controls
how these are handled:

* `:non_ignorable` - Variable CEs keep all their weights (default for CLDR).

* `:shifted` - Variable CEs have L1/L2/L3 zeroed, original L1 moves to L4.

# `process`

```elixir
@spec process(
  [Localize.Collation.Element.t()],
  :non_ignorable | :shifted,
  non_neg_integer()
) :: [
  {Localize.Collation.Element.t(), non_neg_integer()}
]
```

Process a list of collation elements according to the variable weight rules.

### Arguments

* `elements` - a list of collation element tuples.

* `alternate` - the variable handling mode: `:non_ignorable` or `:shifted`.

* `max_variable_primary` - the maximum primary weight for variable elements.

### Returns

A list of `{element, quaternary_weight}` tuples.

### Examples

    iex> elems = [{0x23EC, 0x0020, 0x0002, false}]
    iex> [{elem, q}] = Localize.Collation.Variable.process(elems, :non_ignorable, 0x0B61)
    iex> {Localize.Collation.Element.primary(elem), q}
    {0x23EC, 0}

---

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