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.
Summary
Functions
Process a list of collation elements according to the variable weight rules.
Functions
@spec process( [Cldr.Collation.Element.t()], :non_ignorable | :shifted, non_neg_integer() ) :: [ {Cldr.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_ignorableor:shifted.max_variable_primary- the maximum primary weight for variable elements.
Returns
A list of {element, quaternary_weight} tuples.
For :non_ignorable, quaternary is always 0.
For :shifted:
Variable CEs: L1/L2/L3 become 0, L4 = original L1.
Ignorable CEs following a variable: all weights become 0, L4 = 0.
Regular CEs with primary > 0: L4 =
0xFFFF.Primary-ignorable CEs not after a variable: L4 =
0.
Examples
iex> elems = [{0x23EC, 0x0020, 0x0002, false}]
iex> [{elem, q}] = Cldr.Collation.Variable.process(elems, :non_ignorable, 0x0B61)
iex> {Cldr.Collation.Element.primary(elem), q}
{0x23EC, 0}