12#include "../utility/utility.hpp"
13#include "../i18n/i18n.hpp"
14#include "../macros.hpp"
22namespace hi {
inline namespace v1 {
84 return static_cast<plurality_mask>(std::to_underlying(lhs) | std::to_underlying(rhs));
96 hi_axiom(not to_bool((1 << std::to_underlying(value)) & ~std::to_underlying(mask)));
106 [[nodiscard]]
constexpr size_t index(
size_t n)
const noexcept
110 hilet value_as_mask = (1 << (std::to_underlying(value) + 1)) - 1;
128struct plural_operand {
131 unsigned long long n = 0;
135 unsigned long long f = 0;
139 unsigned long long t = 0;
157 constexpr plural_operand(std::integral
auto value) noexcept :
n(std::abs(value)),
i(
narrow_cast<uint8_t>(decimal_width(value))) {}
164[[nodiscard]]
constexpr plurality cardinal_plural_bambara(plural_operand)
noexcept
169[[nodiscard]]
constexpr plurality cardinal_plural_cebuano(plural_operand op)
noexcept
173 (op.v == 0 and op.i >= 1 and op.i <= 3) or
174 (op.v == 0 and op.i % 10 != 4 and op.i % 10 != 6 and op.i % 10 != 9) or
175 (op.v != 0 and op.f % 10 != 4 and op.f % 10 != 6 and op.f % 10 != 9)) {
185[[nodiscard]]
constexpr plurality cardinal_plural_central_atlas_tamazight(
plural_operand op)
noexcept
188 if (op.n == 0 or op.n == 1 or (op.n >= 11 and op.n <= 99)) {
198[[nodiscard]]
constexpr plurality cardinal_plural_icelandic(
plural_operand op)
noexcept
201 if ((op.t == 0 and op.i % 10 == 1 and op.i % 100 != 11) or op.t != 0) {
211[[nodiscard]]
constexpr plurality cardinal_plural_akan(
plural_operand op)
noexcept
214 if (op.n == 0 or op.n == 1) {
224[[nodiscard]]
constexpr plurality cardinal_plural_afrikaans(
plural_operand op)
noexcept
237[[nodiscard]]
constexpr plurality cardinal_plural_latvian(
plural_operand op)
noexcept
242 (op.n % 100 >= 11 and op.n % 100 <= 19) or
243 (op.v == 2 and op.f % 100 >= 11 and op.f % 100 <= 19)) {
246 (op.n % 10 == 1 and op.n % 100 != 11) or
247 (op.v == 2 and op.f % 10 == 1 and op.f % 100 != 11) or
248 (op.v != 2 and op.f % 10 == 1)) {
258[[nodiscard]]
constexpr plurality cardinal_plural_colognian(
plural_operand op)
noexcept
263 }
else if (op.n == 1) {
273[[nodiscard]]
constexpr plurality cardinal_plural_inari_sami(
plural_operand op)
noexcept
278 }
else if (op.n == 2) {
288[[nodiscard]]
constexpr plurality cardinal_plural_belarusian(
plural_operand op)
noexcept
291 if (op.n % 10 == 1 and op.n % 100 != 11) {
293 }
else if (op.n % 10 >= 2 and op.n % 10 <= 4 and not (op.n % 100 >= 12 and op.n % 100 <= 14)) {
297 (op.n % 10 >= 5 and op.n % 10 <= 9) or
298 (op.n % 100 >= 11 and op.n % 100 <= 14)) {
308[[nodiscard]]
constexpr plurality cardinal_plural_polish(
plural_operand op)
noexcept
312 if (op.n == 1 and op.v == 0) {
314 }
else if (op.v == 0 and (op.n % 10 >= 2 and op.n % 10 <= 4) and not (op.n % 100 >= 12 and op.n % 100 <= 14)) {
317 (op.v == 0 and op.n != 1 and op.n % 10 >= 0 and op.n % 10 <= 1) or
318 (op.v == 0 and op.n % 10 >= 5 and op.n % 10 <= 9) or
319 (op.v == 0 and op.n % 100 >= 12 and op.n % 100 <= 14)) {
329[[nodiscard]]
constexpr plurality cardinal_plural_lithuanian(
plural_operand op)
noexcept
332 if (op.n % 10 == 1 and not (op.n % 100 >= 11 and op.n % 100 <= 19)) {
334 }
else if (op.n % 10 >= 2 and op.n % 10 <= 9 and not (op.n % 100 >= 11 and op.n % 100 <= 19)) {
336 }
else if (op.f != 0) {
346[[nodiscard]]
constexpr plurality cardinal_plural_bosnian(
plural_operand op)
noexcept
351 (op.v == 0 and op.n % 10 == 1 and op.n % 100 != 11) or
352 (op.f % 10 == 1 and op.f % 100 != 11)) {
355 (op.v == 0 and op.n % 10 >= 2 and op.n % 10 <= 4 and not (op.n % 100 >= 12 and op.n % 100 <= 14)) or
356 (op.f % 10 >= 2 and op.f % 10 <= 4 and not (op.f % 100 >= 12 and op.n % 100 <= 14))) {
366[[nodiscard]]
constexpr plurality cardinal_plural_tachelhit(
plural_operand op)
noexcept
369 if (op.i == 0 or op.n == 1) {
371 }
else if (op.n >= 2 and op.n <= 10) {
381[[nodiscard]]
constexpr plurality cardinal_plural_moldavian(
plural_operand op)
noexcept
386 if (op.n == 1 and op.v == 0) {
391 (op.n % 100 >= 2 and op.n % 100 <= 19)) {
401[[nodiscard]]
constexpr plurality cardinal_plural_czech(
plural_operand op)
noexcept
406 if (op.n == 1 and op.v == 0) {
408 }
else if (op.n >= 2 and op.n <= 4 and op.v == 0) {
410 }
else if (op.v != 0) {
420[[nodiscard]]
constexpr plurality cardinal_plural_manx(
plural_operand op)
noexcept
425 if (op.v == 0 and op.n % 10 == 1) {
427 }
else if (op.v == 0 and op.n % 10 == 2) {
429 }
else if (op.v == 0 and (
430 op.n % 100 == 0 or op.n % 100 == 20 or op.n % 100 == 40 or op.n % 100 == 60 or op.n % 100 == 80)) {
432 }
else if (op.v != 0) {
442[[nodiscard]]
constexpr plurality cardinal_plural_scottish_gaelic(
plural_operand op)
noexcept
445 if (op.n == 1 or op.n == 11) {
447 }
else if (op.n == 2 or op.n == 12) {
449 }
else if ((op.n >= 3 and op.n <= 10) or (op.n >= 13 and op.n <= 19)) {
459[[nodiscard]]
constexpr plurality cardinal_plural_breton(
plural_operand op)
noexcept
462 if (op.n % 10 == 1 and op.n % 100 != 11 and op.n % 100 != 71 and op.n % 100 != 91) {
464 }
else if (op.n % 10 == 2 and op.n % 100 != 12 and op.n % 100 != 72 and op.n % 100 != 92) {
467 (op.n % 10 == 3 or op.n % 10 == 4 or op.n % 10 == 9) and
468 (not (op.n % 100 >= 10 and op.n % 100 <= 19) and
469 not (op.n % 100 >= 70 and op.n % 100 <= 79) and
470 not (op.n % 100 >= 90 and op.n % 100 <= 99))) {
472 }
else if (op.n != 0 and op.n % 1'000'000 == 0) {
482[[nodiscard]]
constexpr plurality cardinal_plural_lower_sorbian(
plural_operand op)
noexcept
488 (op.v == 0 and op.n % 100 == 1) or
492 (op.v == 0 and op.n % 100 == 2) or
496 (op.v == 0 and op.n % 100 >= 3 and op.n % 100 <= 4) or
497 (op.f % 100 >= 3 and op.f % 100 <= 4)) {
507[[nodiscard]]
constexpr plurality cardinal_plural_hebrew(
plural_operand op)
noexcept
512 if (op.n == 1 and op.v == 0) {
514 }
else if (op.n == 2 and op.v == 0) {
516 }
else if (op.v == 0 and not (op.n >= 0 and op.n <= 10) and op.n % 10 == 0) {
526[[nodiscard]]
constexpr plurality cardinal_plural_maltese(
plural_operand op)
noexcept
531 }
else if (op.n == 0 or (op.n % 100 >= 2 and op.n % 100 <= 10)) {
533 }
else if (op.n % 100 >= 11 and op.n % 100 <= 19) {
543[[nodiscard]]
constexpr plurality cardinal_plural_irish(
plural_operand op)
noexcept
548 }
else if (op.n == 2) {
550 }
else if (op.n >= 3 and op.n <= 6) {
552 }
else if (op.n >= 7 and op.n <= 10) {
562[[nodiscard]]
constexpr plurality cardinal_plural_arabic(
plural_operand op)
noexcept
567 }
else if (op.n == 1) {
569 }
else if (op.n == 2) {
571 }
else if (op.n % 100 >= 3 and op.n % 100 <= 10) {
573 }
else if (op.n % 100 >= 11 and op.n % 100 <= 99) {
586[[nodiscard]]
constexpr plurality cardinal_plural_welsh(
plural_operand op)
noexcept
591 }
else if (op.n == 1) {
593 }
else if (op.n == 2) {
595 }
else if (op.n == 3) {
597 }
else if (op.n == 6) {
610[[nodiscard]]
constexpr plurality cardinal_plural_cornish(
plural_operand op)
noexcept
615 }
else if (op.n == 1) {
623 (op.n % 1'000 == 0 and (
624 (op.n % 100'000 >= 1'000 and op.n % 100'000 <= 20'000) or
625 op.n % 100'000 == 40'000 or
626 op.n % 100'000 == 60'000 or
627 op.n % 100'000 == 80'000)) or
628 (op.n != 0 and op.n % 1'000'000 == 100'000)) {
637 }
else if (op.n != 1 and (
658[[nodiscard]]
constexpr auto cardinal_plural_table_init() noexcept
660 auto r = std::array<cardinal_plural_fptr, 32768>{};
666 for (
auto& rule_ptr : r) {
667 rule_ptr = cardinal_plural_bambara;
671 r[iso_639{
"ceb"}.intrinsic()] = cardinal_plural_cebuano;
672 r[iso_639{
"fil"}.intrinsic()] = cardinal_plural_cebuano;
673 r[iso_639{
"tl"}.intrinsic()] = cardinal_plural_cebuano;
676 r[iso_639{
"tzm"}.intrinsic()] = cardinal_plural_central_atlas_tamazight;
679 r[iso_639{
"is"}.intrinsic()] = cardinal_plural_icelandic;
680 r[iso_639{
"mk"}.intrinsic()] = cardinal_plural_icelandic;
683 r[iso_639{
"ak"}.intrinsic()] = cardinal_plural_akan;
684 r[iso_639{
"am"}.intrinsic()] = cardinal_plural_akan;
685 r[iso_639{
"hy"}.intrinsic()] = cardinal_plural_akan;
686 r[iso_639{
"as"}.intrinsic()] = cardinal_plural_akan;
687 r[iso_639{
"bn"}.intrinsic()] = cardinal_plural_akan;
688 r[iso_639{
"bh"}.intrinsic()] = cardinal_plural_akan;
689 r[iso_639{
"fr"}.intrinsic()] = cardinal_plural_akan;
690 r[iso_639{
"ff"}.intrinsic()] = cardinal_plural_akan;
692 r[iso_639{
"gu"}.intrinsic()] = cardinal_plural_akan;
693 r[iso_639{
"guw"}.intrinsic()] = cardinal_plural_akan;
694 r[iso_639{
"hi"}.intrinsic()] = cardinal_plural_akan;
695 r[iso_639{
"kab"}.intrinsic()] = cardinal_plural_akan;
696 r[iso_639{
"kn"}.intrinsic()] = cardinal_plural_akan;
697 r[iso_639{
"ln"}.intrinsic()] = cardinal_plural_akan;
698 r[iso_639{
"mg"}.intrinsic()] = cardinal_plural_akan;
699 r[iso_639{
"nso"}.intrinsic()] = cardinal_plural_akan;
701 r[iso_639{
"fa"}.intrinsic()] = cardinal_plural_akan;
702 r[iso_639{
"pt"}.intrinsic()] = cardinal_plural_akan;
703 r[iso_639{
"pa"}.intrinsic()] = cardinal_plural_akan;
704 r[iso_639{
"si"}.intrinsic()] = cardinal_plural_akan;
705 r[iso_639{
"ti"}.intrinsic()] = cardinal_plural_akan;
706 r[iso_639{
"wa"}.intrinsic()] = cardinal_plural_akan;
707 r[iso_639{
"zu"}.intrinsic()] = cardinal_plural_akan;
710 r[iso_639{
"af"}.intrinsic()] = cardinal_plural_afrikaans;
711 r[iso_639{
"sq"}.intrinsic()] = cardinal_plural_afrikaans;
712 r[iso_639{
"an"}.intrinsic()] = cardinal_plural_afrikaans;
713 r[iso_639{
"ast"}.intrinsic()] = cardinal_plural_afrikaans;
714 r[iso_639{
"asa"}.intrinsic()] = cardinal_plural_afrikaans;
715 r[iso_639{
"az"}.intrinsic()] = cardinal_plural_afrikaans;
716 r[iso_639{
"eu"}.intrinsic()] = cardinal_plural_afrikaans;
718 r[iso_639{
"bem"}.intrinsic()] = cardinal_plural_afrikaans;
719 r[iso_639{
"bez"}.intrinsic()] = cardinal_plural_afrikaans;
720 r[iso_639{
"brx"}.intrinsic()] = cardinal_plural_afrikaans;
721 r[iso_639{
"bg"}.intrinsic()] = cardinal_plural_afrikaans;
722 r[iso_639{
"ca"}.intrinsic()] = cardinal_plural_afrikaans;
723 r[iso_639{
"ckb"}.intrinsic()] = cardinal_plural_afrikaans;
724 r[iso_639{
"ce"}.intrinsic()] = cardinal_plural_afrikaans;
726 r[iso_639{
"chr"}.intrinsic()] = cardinal_plural_afrikaans;
727 r[iso_639{
"cgg"}.intrinsic()] = cardinal_plural_afrikaans;
728 r[iso_639{
"da"}.intrinsic()] = cardinal_plural_afrikaans;
729 r[iso_639{
"dv"}.intrinsic()] = cardinal_plural_afrikaans;
730 r[iso_639{
"nl"}.intrinsic()] = cardinal_plural_afrikaans;
731 r[iso_639{
"en"}.intrinsic()] = cardinal_plural_afrikaans;
732 r[iso_639{
"eo"}.intrinsic()] = cardinal_plural_afrikaans;
733 r[iso_639{
"et"}.intrinsic()] = cardinal_plural_afrikaans;
736 r[iso_639{
"ee"}.intrinsic()] = cardinal_plural_afrikaans;
737 r[iso_639{
"fo"}.intrinsic()] = cardinal_plural_afrikaans;
738 r[iso_639{
"fi"}.intrinsic()] = cardinal_plural_afrikaans;
739 r[iso_639{
"fur"}.intrinsic()] = cardinal_plural_afrikaans;
740 r[iso_639{
"gl"}.intrinsic()] = cardinal_plural_afrikaans;
741 r[iso_639{
"lg"}.intrinsic()] = cardinal_plural_afrikaans;
743 r[iso_639{
"ka"}.intrinsic()] = cardinal_plural_afrikaans;
744 r[iso_639{
"de"}.intrinsic()] = cardinal_plural_afrikaans;
745 r[iso_639{
"el"}.intrinsic()] = cardinal_plural_afrikaans;
746 r[iso_639{
"ha"}.intrinsic()] = cardinal_plural_afrikaans;
747 r[iso_639{
"haw"}.intrinsic()] = cardinal_plural_afrikaans;
748 r[iso_639{
"hu"}.intrinsic()] = cardinal_plural_afrikaans;
749 r[iso_639{
"io"}.intrinsic()] = cardinal_plural_afrikaans;
750 r[iso_639{
"ia"}.intrinsic()] = cardinal_plural_afrikaans;
752 r[iso_639{
"it"}.intrinsic()] = cardinal_plural_afrikaans;
753 r[iso_639{
"kaj"}.intrinsic()] = cardinal_plural_afrikaans;
754 r[iso_639{
"kkj"}.intrinsic()] = cardinal_plural_afrikaans;
755 r[iso_639{
"kl"}.intrinsic()] = cardinal_plural_afrikaans;
756 r[iso_639{
"ks"}.intrinsic()] = cardinal_plural_afrikaans;
757 r[iso_639{
"kk"}.intrinsic()] = cardinal_plural_afrikaans;
758 r[iso_639{
"ku"}.intrinsic()] = cardinal_plural_afrikaans;
759 r[iso_639{
"ky"}.intrinsic()] = cardinal_plural_afrikaans;
761 r[iso_639{
"lb"}.intrinsic()] = cardinal_plural_afrikaans;
762 r[iso_639{
"jmc"}.intrinsic()] = cardinal_plural_afrikaans;
763 r[iso_639{
"ml"}.intrinsic()] = cardinal_plural_afrikaans;
764 r[iso_639{
"mr"}.intrinsic()] = cardinal_plural_afrikaans;
765 r[iso_639{
"mas"}.intrinsic()] = cardinal_plural_afrikaans;
766 r[iso_639{
"mgo"}.intrinsic()] = cardinal_plural_afrikaans;
767 r[iso_639{
"mn"}.intrinsic()] = cardinal_plural_afrikaans;
769 r[iso_639{
"nah"}.intrinsic()] = cardinal_plural_afrikaans;
770 r[iso_639{
"ne"}.intrinsic()] = cardinal_plural_afrikaans;
771 r[iso_639{
"nnh"}.intrinsic()] = cardinal_plural_afrikaans;
772 r[iso_639{
"jgo"}.intrinsic()] = cardinal_plural_afrikaans;
773 r[iso_639{
"ns"}.intrinsic()] = cardinal_plural_afrikaans;
774 r[iso_639{
"no"}.intrinsic()] = cardinal_plural_afrikaans;
776 r[iso_639{
"nb"}.intrinsic()] = cardinal_plural_afrikaans;
777 r[iso_639{
"nn"}.intrinsic()] = cardinal_plural_afrikaans;
778 r[iso_639{
"ny"}.intrinsic()] = cardinal_plural_afrikaans;
779 r[iso_639{
"nyn"}.intrinsic()] = cardinal_plural_afrikaans;
780 r[iso_639{
"or"}.intrinsic()] = cardinal_plural_afrikaans;
781 r[iso_639{
"om"}.intrinsic()] = cardinal_plural_afrikaans;
783 r[iso_639{
"os"}.intrinsic()] = cardinal_plural_afrikaans;
784 r[iso_639{
"pap"}.intrinsic()] = cardinal_plural_afrikaans;
785 r[iso_639{
"ps"}.intrinsic()] = cardinal_plural_afrikaans;
786 r[iso_639{
"rm"}.intrinsic()] = cardinal_plural_afrikaans;
787 r[iso_639{
"rof"}.intrinsic()] = cardinal_plural_afrikaans;
788 r[iso_639{
"rwk"}.intrinsic()] = cardinal_plural_afrikaans;
789 r[iso_639{
"ssy"}.intrinsic()] = cardinal_plural_afrikaans;
790 r[iso_639{
"saq"}.intrinsic()] = cardinal_plural_afrikaans;
792 r[iso_639{
"sc"}.intrinsic()] = cardinal_plural_afrikaans;
793 r[iso_639{
"seh"}.intrinsic()] = cardinal_plural_afrikaans;
794 r[iso_639{
"ksb"}.intrinsic()] = cardinal_plural_afrikaans;
795 r[iso_639{
"sn"}.intrinsic()] = cardinal_plural_afrikaans;
796 r[iso_639{
"scn"}.intrinsic()] = cardinal_plural_afrikaans;
797 r[iso_639{
"sd"}.intrinsic()] = cardinal_plural_afrikaans;
798 r[iso_639{
"xog"}.intrinsic()] = cardinal_plural_afrikaans;
799 r[iso_639{
"so"}.intrinsic()] = cardinal_plural_afrikaans;
801 r[iso_639{
"nr"}.intrinsic()] = cardinal_plural_afrikaans;
802 r[iso_639{
"sdh"}.intrinsic()] = cardinal_plural_afrikaans;
803 r[iso_639{
"st"}.intrinsic()] = cardinal_plural_afrikaans;
804 r[iso_639{
"es"}.intrinsic()] = cardinal_plural_afrikaans;
805 r[iso_639{
"sw"}.intrinsic()] = cardinal_plural_afrikaans;
807 r[iso_639{
"ss"}.intrinsic()] = cardinal_plural_afrikaans;
808 r[iso_639{
"sv"}.intrinsic()] = cardinal_plural_afrikaans;
809 r[iso_639{
"gsw"}.intrinsic()] = cardinal_plural_afrikaans;
810 r[iso_639{
"syr"}.intrinsic()] = cardinal_plural_afrikaans;
811 r[iso_639{
"ta"}.intrinsic()] = cardinal_plural_afrikaans;
812 r[iso_639{
"te"}.intrinsic()] = cardinal_plural_afrikaans;
813 r[iso_639{
"teo"}.intrinsic()] = cardinal_plural_afrikaans;
814 r[iso_639{
"tig"}.intrinsic()] = cardinal_plural_afrikaans;
816 r[iso_639{
"ts"}.intrinsic()] = cardinal_plural_afrikaans;
817 r[iso_639{
"tn"}.intrinsic()] = cardinal_plural_afrikaans;
818 r[iso_639{
"tr"}.intrinsic()] = cardinal_plural_afrikaans;
819 r[iso_639{
"tk"}.intrinsic()] = cardinal_plural_afrikaans;
820 r[iso_639{
"kcg"}.intrinsic()] = cardinal_plural_afrikaans;
821 r[iso_639{
"ur"}.intrinsic()] = cardinal_plural_afrikaans;
822 r[iso_639{
"ug"}.intrinsic()] = cardinal_plural_afrikaans;
823 r[iso_639{
"uz"}.intrinsic()] = cardinal_plural_afrikaans;
824 r[iso_639{
"ve"}.intrinsic()] = cardinal_plural_afrikaans;
826 r[iso_639{
"vo"}.intrinsic()] = cardinal_plural_afrikaans;
827 r[iso_639{
"vun"}.intrinsic()] = cardinal_plural_afrikaans;
828 r[iso_639{
"wae"}.intrinsic()] = cardinal_plural_afrikaans;
829 r[iso_639{
"fy"}.intrinsic()] = cardinal_plural_afrikaans;
830 r[iso_639{
"xh"}.intrinsic()] = cardinal_plural_afrikaans;
831 r[iso_639{
"ji"}.intrinsic()] = cardinal_plural_afrikaans;
832 r[iso_639{
"yi"}.intrinsic()] = cardinal_plural_afrikaans;
835 r[iso_639{
"lv"}.intrinsic()] = cardinal_plural_latvian;
836 r[iso_639{
"prg"}.intrinsic()] = cardinal_plural_latvian;
839 r[iso_639{
"ksh"}.intrinsic()] = cardinal_plural_colognian;
840 r[iso_639{
"lag"}.intrinsic()] = cardinal_plural_colognian;
843 r[iso_639{
"smn"}.intrinsic()] = cardinal_plural_inari_sami;
844 r[iso_639{
"iu"}.intrinsic()] = cardinal_plural_inari_sami;
845 r[iso_639{
"smj"}.intrinsic()] = cardinal_plural_inari_sami;
846 r[iso_639{
"naq"}.intrinsic()] = cardinal_plural_inari_sami;
847 r[iso_639{
"se"}.intrinsic()] = cardinal_plural_inari_sami;
849 r[iso_639{
"smi"}.intrinsic()] = cardinal_plural_inari_sami;
850 r[iso_639{
"sms"}.intrinsic()] = cardinal_plural_inari_sami;
851 r[iso_639{
"sma"}.intrinsic()] = cardinal_plural_inari_sami;
854 r[iso_639{
"be"}.intrinsic()] = cardinal_plural_belarusian;
855 r[iso_639{
"ru"}.intrinsic()] = cardinal_plural_belarusian;
856 r[iso_639{
"uk"}.intrinsic()] = cardinal_plural_belarusian;
859 r[iso_639{
"pl"}.intrinsic()] = cardinal_plural_polish;
862 r[iso_639{
"lt"}.intrinsic()] = cardinal_plural_lithuanian;
865 r[iso_639{
"bs"}.intrinsic()] = cardinal_plural_bosnian;
866 r[iso_639{
"hr"}.intrinsic()] = cardinal_plural_bosnian;
867 r[iso_639{
"sr"}.intrinsic()] = cardinal_plural_bosnian;
868 r[iso_639{
"sh"}.intrinsic()] = cardinal_plural_bosnian;
871 r[iso_639{
"shi"}.intrinsic()] = cardinal_plural_tachelhit;
874 r[iso_639{
"mo"}.intrinsic()] = cardinal_plural_moldavian;
875 r[iso_639{
"ro"}.intrinsic()] = cardinal_plural_moldavian;
878 r[iso_639{
"cs"}.intrinsic()] = cardinal_plural_czech;
879 r[iso_639{
"sk"}.intrinsic()] = cardinal_plural_czech;
882 r[iso_639{
"gv"}.intrinsic()] = cardinal_plural_manx;
885 r[iso_639{
"gd"}.intrinsic()] = cardinal_plural_scottish_gaelic;
888 r[iso_639{
"br"}.intrinsic()] = cardinal_plural_breton;
891 r[iso_639{
"dsb"}.intrinsic()] = cardinal_plural_lower_sorbian;
892 r[iso_639{
"sl"}.intrinsic()] = cardinal_plural_lower_sorbian;
893 r[iso_639{
"hsb"}.intrinsic()] = cardinal_plural_lower_sorbian;
896 r[iso_639{
"he"}.intrinsic()] = cardinal_plural_hebrew;
899 r[iso_639{
"mt"}.intrinsic()] = cardinal_plural_maltese;
902 r[iso_639{
"ga"}.intrinsic()] = cardinal_plural_irish;
905 r[iso_639{
"ar"}.intrinsic()] = cardinal_plural_arabic;
906 r[iso_639{
"ars"}.intrinsic()] = cardinal_plural_arabic;
909 r[iso_639{
"cy"}.intrinsic()] = cardinal_plural_welsh;
912 r[iso_639{
"kw"}.intrinsic()] = cardinal_plural_cornish;
917constexpr auto cardinal_plural_table = cardinal_plural_table_init();
932 return cardinal_plural_afrikaans(detail::plural_operand(n));
935 hilet language_index = language.region.intrinsic();
936 hi_axiom_bounds(language_index, detail::cardinal_plural_table);
937 return detail::cardinal_plural_table[language_index](detail::plural_operand(n));
@ other
The gui_event does not have associated data.
Definition gui_event_variant.hpp:22
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
The HikoGUI API version 1.
Definition lookahead_iterator.hpp:6
plurality_value
The plurality value of a cardinal or ordinal number.
Definition unicode_plural.hpp:26
@ other
Any other number, every language will have at least this.
Definition unicode_plural.hpp:49
@ few
The number is part of few, and this means something in the current language.
Definition unicode_plural.hpp:41
@ many
The number is part of many, and this means something in the current language.
Definition unicode_plural.hpp:45
@ two
The number was two, and this means something in the current language.
Definition unicode_plural.hpp:37
@ zero
The number was zero, and this means something in the current language.
Definition unicode_plural.hpp:29
@ one
The number was one, and this means something in the current language.
Definition unicode_plural.hpp:33
plurality_mask
A mask of plurality values that this language supports.
Definition unicode_plural.hpp:54
@ other
Any other number, every language will have at least this.
Definition unicode_plural.hpp:77
@ few
The number is part of few, and this means something in the current language.
Definition unicode_plural.hpp:69
@ many
The number is part of many, and this means something in the current language.
Definition unicode_plural.hpp:73
@ two
The number was two, and this means something in the current language.
Definition unicode_plural.hpp:65
@ zero
The number was zero, and this means something in the current language.
Definition unicode_plural.hpp:57
@ one
The number was one, and this means something in the current language.
Definition unicode_plural.hpp:61
constexpr plurality cardinal_plural(language_tag language, std::integral auto n) noexcept
Get plural information of a number in a given language.
Definition unicode_plural.hpp:927
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377
The IETF BCP 47 language tag.
Definition language_tag_intf.hpp:28
Plurality of a number.
Definition unicode_plural.hpp:89
constexpr size_t index(size_t n) const noexcept
Get an index to select between translations.
Definition unicode_plural.hpp:106
The operand for the unicode-plural rules.
Definition unicode_plural.hpp:128
uint8_t i
Number of digits in the value.
Definition unicode_plural.hpp:143
unsigned long long f
Visible fraction digits with trailing zeros.
Definition unicode_plural.hpp:135
uint8_t c
Compact decimal exponent value.
Definition unicode_plural.hpp:155
unsigned long long t
Visible fraction digits without trailing zeros.
Definition unicode_plural.hpp:139
uint8_t w
Number of visible fraction digits without trailing zeros.
Definition unicode_plural.hpp:151
uint8_t v
Number of visible fraction digits with trailing zeros.
Definition unicode_plural.hpp:147
unsigned long long n
Absolute value.
Definition unicode_plural.hpp:131