std::optional<CodePoint> Normalizer::compose (CodePoint starter, CodePoint joiner) const noexcept { return compose_impl( starter, joiner, locale.Compositions.begin(), locale.Compositions.end() ); }
constexpr ull compose(ull p1, ull p2) { return size(p1) + 0x10* compose_impl(p1,p2, 0);}
constexpr ull compose_impl(ull p1, ull p2, ull c) { return apply(p2, apply(p1,c)) + 16ull * ( (c+1 <size(p1) ? compose_impl(p1,p2,c+1ull) : 0)); }