12#include "../utility/module.hpp"
13#include "../i18n/module.hpp"
19namespace hi {
inline namespace v1 {
81 return static_cast<plurality_mask>(to_underlying(lhs) | to_underlying(rhs));
93 hi_axiom(not to_bool(to_underlying(value) & ~to_underlying(mask)));
103 [[nodiscard]]
constexpr size_t index(
size_t n)
const noexcept
107 hilet value_as_mask = (1 << (to_underlying(value) + 1)) - 1;
110 hilet i = std::popcount(narrow_cast<uint8_t>(value_as_mask & to_underlying(mask))) - 1;
128 unsigned long long n = 0;
132 unsigned long long f = 0;
136 unsigned long long t = 0;
154 constexpr plural_operand(std::integral
auto value) noexcept :
n(std::abs(value)),
i(narrow_cast<uint8_t>(decimal_width(value))) {}
161[[nodiscard]]
constexpr plurality cardinal_plural_bambara(plural_operand)
noexcept
166[[nodiscard]]
constexpr plurality cardinal_plural_cebuano(plural_operand op)
noexcept
170 (op.v == 0 and op.i >= 1 and op.i <= 3) or
171 (op.v == 0 and op.i % 10 != 4 and op.i % 10 != 6 and op.i % 10 != 9) or
172 (op.v != 0 and op.f % 10 != 4 and op.f % 10 != 6 and op.f % 10 != 9)) {
182[[nodiscard]]
constexpr plurality cardinal_plural_central_atlas_tamazight(plural_operand op)
noexcept
185 if (op.n == 0 or op.n == 1 or (op.n >= 11 and op.n <= 99)) {
195[[nodiscard]]
constexpr plurality cardinal_plural_icelandic(plural_operand op)
noexcept
198 if ((op.t == 0 and op.i % 10 == 1 and op.i % 100 != 11) or op.t != 0) {
208[[nodiscard]]
constexpr plurality cardinal_plural_akan(plural_operand op)
noexcept
211 if (op.n == 0 or op.n == 1) {
221[[nodiscard]]
constexpr plurality cardinal_plural_afrikaans(plural_operand op)
noexcept
234[[nodiscard]]
constexpr plurality cardinal_plural_latvian(plural_operand op)
noexcept
239 (op.n % 100 >= 11 and op.n % 100 <= 19) or
240 (op.v == 2 and op.f % 100 >= 11 and op.f % 100 <= 19)) {
243 (op.n % 10 == 1 and op.n % 100 != 11) or
244 (op.v == 2 and op.f % 10 == 1 and op.f % 100 != 11) or
245 (op.v != 2 and op.f % 10 == 1)) {
255[[nodiscard]]
constexpr plurality cardinal_plural_colognian(plural_operand op)
noexcept
260 }
else if (op.n == 1) {
270[[nodiscard]]
constexpr plurality cardinal_plural_inari_sami(plural_operand op)
noexcept
275 }
else if (op.n == 2) {
285[[nodiscard]]
constexpr plurality cardinal_plural_belarusian(plural_operand op)
noexcept
288 if (op.n % 10 == 1 and op.n % 100 != 11) {
290 }
else if (op.n % 10 >= 2 and op.n % 10 <= 4 and not (op.n % 100 >= 12 and op.n % 100 <= 14)) {
294 (op.n % 10 >= 5 and op.n % 10 <= 9) or
295 (op.n % 100 >= 11 and op.n % 100 <= 14)) {
305[[nodiscard]]
constexpr plurality cardinal_plural_polish(plural_operand op)
noexcept
309 if (op.n == 1 and op.v == 0) {
311 }
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)) {
314 (op.v == 0 and op.n != 1 and op.n % 10 >= 0 and op.n % 10 <= 1) or
315 (op.v == 0 and op.n % 10 >= 5 and op.n % 10 <= 9) or
316 (op.v == 0 and op.n % 100 >= 12 and op.n % 100 <= 14)) {
326[[nodiscard]]
constexpr plurality cardinal_plural_lithuanian(plural_operand op)
noexcept
329 if (op.n % 10 == 1 and not (op.n % 100 >= 11 and op.n % 100 <= 19)) {
331 }
else if (op.n % 10 >= 2 and op.n % 10 <= 9 and not (op.n % 100 >= 11 and op.n % 100 <= 19)) {
333 }
else if (op.f != 0) {
343[[nodiscard]]
constexpr plurality cardinal_plural_bosnian(plural_operand op)
noexcept
348 (op.v == 0 and op.n % 10 == 1 and op.n % 100 != 11) or
349 (op.f % 10 == 1 and op.f % 100 != 11)) {
352 (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
353 (op.f % 10 >= 2 and op.f % 10 <= 4 and not (op.f % 100 >= 12 and op.n % 100 <= 14))) {
363[[nodiscard]]
constexpr plurality cardinal_plural_tachelhit(plural_operand op)
noexcept
366 if (op.i == 0 or op.n == 1) {
368 }
else if (op.n >= 2 and op.n <= 10) {
378[[nodiscard]]
constexpr plurality cardinal_plural_moldavian(plural_operand op)
noexcept
383 if (op.n == 1 and op.v == 0) {
388 (op.n % 100 >= 2 and op.n % 100 <= 19)) {
398[[nodiscard]]
constexpr plurality cardinal_plural_czech(plural_operand op)
noexcept
403 if (op.n == 1 and op.v == 0) {
405 }
else if (op.n >= 2 and op.n <= 4 and op.v == 0) {
407 }
else if (op.v != 0) {
417[[nodiscard]]
constexpr plurality cardinal_plural_manx(plural_operand op)
noexcept
422 if (op.v == 0 and op.n % 10 == 1) {
424 }
else if (op.v == 0 and op.n % 10 == 2) {
426 }
else if (op.v == 0 and (
427 op.n % 100 == 0 or op.n % 100 == 20 or op.n % 100 == 40 or op.n % 100 == 60 or op.n % 100 == 80)) {
429 }
else if (op.v != 0) {
439[[nodiscard]]
constexpr plurality cardinal_plural_scottish_gaelic(plural_operand op)
noexcept
442 if (op.n == 1 or op.n == 11) {
444 }
else if (op.n == 2 or op.n == 12) {
446 }
else if ((op.n >= 3 and op.n <= 10) or (op.n >= 13 and op.n <= 19)) {
456[[nodiscard]]
constexpr plurality cardinal_plural_breton(plural_operand op)
noexcept
459 if (op.n % 10 == 1 and op.n % 100 != 11 and op.n % 100 != 71 and op.n % 100 != 91) {
461 }
else if (op.n % 10 == 2 and op.n % 100 != 12 and op.n % 100 != 72 and op.n % 100 != 92) {
464 (op.n % 10 == 3 or op.n % 10 == 4 or op.n % 10 == 9) and
465 (not (op.n % 100 >= 10 and op.n % 100 <= 19) and
466 not (op.n % 100 >= 70 and op.n % 100 <= 79) and
467 not (op.n % 100 >= 90 and op.n % 100 <= 99))) {
469 }
else if (op.n != 0 and op.n % 1'000'000 == 0) {
479[[nodiscard]]
constexpr plurality cardinal_plural_lower_sorbian(plural_operand op)
noexcept
485 (op.v == 0 and op.n % 100 == 1) or
489 (op.v == 0 and op.n % 100 == 2) or
493 (op.v == 0 and op.n % 100 >= 3 and op.n % 100 <= 4) or
494 (op.f % 100 >= 3 and op.f % 100 <= 4)) {
504[[nodiscard]]
constexpr plurality cardinal_plural_hebrew(plural_operand op)
noexcept
509 if (op.n == 1 and op.v == 0) {
511 }
else if (op.n == 2 and op.v == 0) {
513 }
else if (op.v == 0 and not (op.n >= 0 and op.n <= 10) and op.n % 10 == 0) {
523[[nodiscard]]
constexpr plurality cardinal_plural_maltese(plural_operand op)
noexcept
528 }
else if (op.n == 0 or (op.n % 100 >= 2 and op.n % 100 <= 10)) {
530 }
else if (op.n % 100 >= 11 and op.n % 100 <= 19) {
540[[nodiscard]]
constexpr plurality cardinal_plural_irish(plural_operand op)
noexcept
545 }
else if (op.n == 2) {
547 }
else if (op.n >= 3 and op.n <= 6) {
549 }
else if (op.n >= 7 and op.n <= 10) {
559[[nodiscard]]
constexpr plurality cardinal_plural_arabic(plural_operand op)
noexcept
564 }
else if (op.n == 1) {
566 }
else if (op.n == 2) {
568 }
else if (op.n % 100 >= 3 and op.n % 100 <= 10) {
570 }
else if (op.n % 100 >= 11 and op.n % 100 <= 99) {
583[[nodiscard]]
constexpr plurality cardinal_plural_welsh(plural_operand op)
noexcept
588 }
else if (op.n == 1) {
590 }
else if (op.n == 2) {
592 }
else if (op.n == 3) {
594 }
else if (op.n == 6) {
607[[nodiscard]]
constexpr plurality cardinal_plural_cornish(plural_operand op)
noexcept
612 }
else if (op.n == 1) {
620 (op.n % 1'000 == 0 and (
621 (op.n % 100'000 >= 1'000 and op.n % 100'000 <= 20'000) or
622 op.n % 100'000 == 40'000 or
623 op.n % 100'000 == 60'000 or
624 op.n % 100'000 == 80'000)) or
625 (op.n != 0 and op.n % 1'000'000 == 100'000)) {
634 }
else if (op.n != 1 and (
653using cardinal_plural_fptr = plurality (*)(plural_operand);
655[[nodiscard]]
constexpr auto cardinal_plural_table_init() noexcept
663 for (
auto& rule_ptr : r) {
664 rule_ptr = cardinal_plural_bambara;
668 r[iso_639{
"ceb"}.intrinsic()] = cardinal_plural_cebuano;
669 r[iso_639{
"fil"}.intrinsic()] = cardinal_plural_cebuano;
670 r[iso_639{
"tl"}.intrinsic()] = cardinal_plural_cebuano;
673 r[iso_639{
"tzm"}.intrinsic()] = cardinal_plural_central_atlas_tamazight;
676 r[iso_639{
"is"}.intrinsic()] = cardinal_plural_icelandic;
677 r[iso_639{
"mk"}.intrinsic()] = cardinal_plural_icelandic;
680 r[iso_639{
"ak"}.intrinsic()] = cardinal_plural_akan;
681 r[iso_639{
"am"}.intrinsic()] = cardinal_plural_akan;
682 r[iso_639{
"hy"}.intrinsic()] = cardinal_plural_akan;
683 r[iso_639{
"as"}.intrinsic()] = cardinal_plural_akan;
684 r[iso_639{
"bn"}.intrinsic()] = cardinal_plural_akan;
685 r[iso_639{
"bh"}.intrinsic()] = cardinal_plural_akan;
686 r[iso_639{
"fr"}.intrinsic()] = cardinal_plural_akan;
687 r[iso_639{
"ff"}.intrinsic()] = cardinal_plural_akan;
689 r[iso_639{
"gu"}.intrinsic()] = cardinal_plural_akan;
690 r[iso_639{
"guw"}.intrinsic()] = cardinal_plural_akan;
691 r[iso_639{
"hi"}.intrinsic()] = cardinal_plural_akan;
692 r[iso_639{
"kab"}.intrinsic()] = cardinal_plural_akan;
693 r[iso_639{
"kn"}.intrinsic()] = cardinal_plural_akan;
694 r[iso_639{
"ln"}.intrinsic()] = cardinal_plural_akan;
695 r[iso_639{
"mg"}.intrinsic()] = cardinal_plural_akan;
696 r[iso_639{
"nso"}.intrinsic()] = cardinal_plural_akan;
698 r[iso_639{
"fa"}.intrinsic()] = cardinal_plural_akan;
699 r[iso_639{
"pt"}.intrinsic()] = cardinal_plural_akan;
700 r[iso_639{
"pa"}.intrinsic()] = cardinal_plural_akan;
701 r[iso_639{
"si"}.intrinsic()] = cardinal_plural_akan;
702 r[iso_639{
"ti"}.intrinsic()] = cardinal_plural_akan;
703 r[iso_639{
"wa"}.intrinsic()] = cardinal_plural_akan;
704 r[iso_639{
"zu"}.intrinsic()] = cardinal_plural_akan;
707 r[iso_639{
"af"}.intrinsic()] = cardinal_plural_afrikaans;
708 r[iso_639{
"sq"}.intrinsic()] = cardinal_plural_afrikaans;
709 r[iso_639{
"an"}.intrinsic()] = cardinal_plural_afrikaans;
710 r[iso_639{
"ast"}.intrinsic()] = cardinal_plural_afrikaans;
711 r[iso_639{
"asa"}.intrinsic()] = cardinal_plural_afrikaans;
712 r[iso_639{
"az"}.intrinsic()] = cardinal_plural_afrikaans;
713 r[iso_639{
"eu"}.intrinsic()] = cardinal_plural_afrikaans;
715 r[iso_639{
"bem"}.intrinsic()] = cardinal_plural_afrikaans;
716 r[iso_639{
"bez"}.intrinsic()] = cardinal_plural_afrikaans;
717 r[iso_639{
"brx"}.intrinsic()] = cardinal_plural_afrikaans;
718 r[iso_639{
"bg"}.intrinsic()] = cardinal_plural_afrikaans;
719 r[iso_639{
"ca"}.intrinsic()] = cardinal_plural_afrikaans;
720 r[iso_639{
"ckb"}.intrinsic()] = cardinal_plural_afrikaans;
721 r[iso_639{
"ce"}.intrinsic()] = cardinal_plural_afrikaans;
723 r[iso_639{
"chr"}.intrinsic()] = cardinal_plural_afrikaans;
724 r[iso_639{
"cgg"}.intrinsic()] = cardinal_plural_afrikaans;
725 r[iso_639{
"da"}.intrinsic()] = cardinal_plural_afrikaans;
726 r[iso_639{
"dv"}.intrinsic()] = cardinal_plural_afrikaans;
727 r[iso_639{
"nl"}.intrinsic()] = cardinal_plural_afrikaans;
728 r[iso_639{
"en"}.intrinsic()] = cardinal_plural_afrikaans;
729 r[iso_639{
"eo"}.intrinsic()] = cardinal_plural_afrikaans;
730 r[iso_639{
"et"}.intrinsic()] = cardinal_plural_afrikaans;
733 r[iso_639{
"ee"}.intrinsic()] = cardinal_plural_afrikaans;
734 r[iso_639{
"fo"}.intrinsic()] = cardinal_plural_afrikaans;
735 r[iso_639{
"fi"}.intrinsic()] = cardinal_plural_afrikaans;
736 r[iso_639{
"fur"}.intrinsic()] = cardinal_plural_afrikaans;
737 r[iso_639{
"gl"}.intrinsic()] = cardinal_plural_afrikaans;
738 r[iso_639{
"lg"}.intrinsic()] = cardinal_plural_afrikaans;
740 r[iso_639{
"ka"}.intrinsic()] = cardinal_plural_afrikaans;
741 r[iso_639{
"de"}.intrinsic()] = cardinal_plural_afrikaans;
742 r[iso_639{
"el"}.intrinsic()] = cardinal_plural_afrikaans;
743 r[iso_639{
"ha"}.intrinsic()] = cardinal_plural_afrikaans;
744 r[iso_639{
"haw"}.intrinsic()] = cardinal_plural_afrikaans;
745 r[iso_639{
"hu"}.intrinsic()] = cardinal_plural_afrikaans;
746 r[iso_639{
"io"}.intrinsic()] = cardinal_plural_afrikaans;
747 r[iso_639{
"ia"}.intrinsic()] = cardinal_plural_afrikaans;
749 r[iso_639{
"it"}.intrinsic()] = cardinal_plural_afrikaans;
750 r[iso_639{
"kaj"}.intrinsic()] = cardinal_plural_afrikaans;
751 r[iso_639{
"kkj"}.intrinsic()] = cardinal_plural_afrikaans;
752 r[iso_639{
"kl"}.intrinsic()] = cardinal_plural_afrikaans;
753 r[iso_639{
"ks"}.intrinsic()] = cardinal_plural_afrikaans;
754 r[iso_639{
"kk"}.intrinsic()] = cardinal_plural_afrikaans;
755 r[iso_639{
"ku"}.intrinsic()] = cardinal_plural_afrikaans;
756 r[iso_639{
"ky"}.intrinsic()] = cardinal_plural_afrikaans;
758 r[iso_639{
"lb"}.intrinsic()] = cardinal_plural_afrikaans;
759 r[iso_639{
"jmc"}.intrinsic()] = cardinal_plural_afrikaans;
760 r[iso_639{
"ml"}.intrinsic()] = cardinal_plural_afrikaans;
761 r[iso_639{
"mr"}.intrinsic()] = cardinal_plural_afrikaans;
762 r[iso_639{
"mas"}.intrinsic()] = cardinal_plural_afrikaans;
763 r[iso_639{
"mgo"}.intrinsic()] = cardinal_plural_afrikaans;
764 r[iso_639{
"mn"}.intrinsic()] = cardinal_plural_afrikaans;
766 r[iso_639{
"nah"}.intrinsic()] = cardinal_plural_afrikaans;
767 r[iso_639{
"ne"}.intrinsic()] = cardinal_plural_afrikaans;
768 r[iso_639{
"nnh"}.intrinsic()] = cardinal_plural_afrikaans;
769 r[iso_639{
"jgo"}.intrinsic()] = cardinal_plural_afrikaans;
770 r[iso_639{
"ns"}.intrinsic()] = cardinal_plural_afrikaans;
771 r[iso_639{
"no"}.intrinsic()] = cardinal_plural_afrikaans;
773 r[iso_639{
"nb"}.intrinsic()] = cardinal_plural_afrikaans;
774 r[iso_639{
"nn"}.intrinsic()] = cardinal_plural_afrikaans;
775 r[iso_639{
"ny"}.intrinsic()] = cardinal_plural_afrikaans;
776 r[iso_639{
"nyn"}.intrinsic()] = cardinal_plural_afrikaans;
777 r[iso_639{
"or"}.intrinsic()] = cardinal_plural_afrikaans;
778 r[iso_639{
"om"}.intrinsic()] = cardinal_plural_afrikaans;
780 r[iso_639{
"os"}.intrinsic()] = cardinal_plural_afrikaans;
781 r[iso_639{
"pap"}.intrinsic()] = cardinal_plural_afrikaans;
782 r[iso_639{
"ps"}.intrinsic()] = cardinal_plural_afrikaans;
783 r[iso_639{
"rm"}.intrinsic()] = cardinal_plural_afrikaans;
784 r[iso_639{
"rof"}.intrinsic()] = cardinal_plural_afrikaans;
785 r[iso_639{
"rwk"}.intrinsic()] = cardinal_plural_afrikaans;
786 r[iso_639{
"ssy"}.intrinsic()] = cardinal_plural_afrikaans;
787 r[iso_639{
"saq"}.intrinsic()] = cardinal_plural_afrikaans;
789 r[iso_639{
"sc"}.intrinsic()] = cardinal_plural_afrikaans;
790 r[iso_639{
"seh"}.intrinsic()] = cardinal_plural_afrikaans;
791 r[iso_639{
"ksb"}.intrinsic()] = cardinal_plural_afrikaans;
792 r[iso_639{
"sn"}.intrinsic()] = cardinal_plural_afrikaans;
793 r[iso_639{
"scn"}.intrinsic()] = cardinal_plural_afrikaans;
794 r[iso_639{
"sd"}.intrinsic()] = cardinal_plural_afrikaans;
795 r[iso_639{
"xog"}.intrinsic()] = cardinal_plural_afrikaans;
796 r[iso_639{
"so"}.intrinsic()] = cardinal_plural_afrikaans;
798 r[iso_639{
"nr"}.intrinsic()] = cardinal_plural_afrikaans;
799 r[iso_639{
"sdh"}.intrinsic()] = cardinal_plural_afrikaans;
800 r[iso_639{
"st"}.intrinsic()] = cardinal_plural_afrikaans;
801 r[iso_639{
"es"}.intrinsic()] = cardinal_plural_afrikaans;
802 r[iso_639{
"sw"}.intrinsic()] = cardinal_plural_afrikaans;
804 r[iso_639{
"ss"}.intrinsic()] = cardinal_plural_afrikaans;
805 r[iso_639{
"sv"}.intrinsic()] = cardinal_plural_afrikaans;
806 r[iso_639{
"gsw"}.intrinsic()] = cardinal_plural_afrikaans;
807 r[iso_639{
"syr"}.intrinsic()] = cardinal_plural_afrikaans;
808 r[iso_639{
"ta"}.intrinsic()] = cardinal_plural_afrikaans;
809 r[iso_639{
"te"}.intrinsic()] = cardinal_plural_afrikaans;
810 r[iso_639{
"teo"}.intrinsic()] = cardinal_plural_afrikaans;
811 r[iso_639{
"tig"}.intrinsic()] = cardinal_plural_afrikaans;
813 r[iso_639{
"ts"}.intrinsic()] = cardinal_plural_afrikaans;
814 r[iso_639{
"tn"}.intrinsic()] = cardinal_plural_afrikaans;
815 r[iso_639{
"tr"}.intrinsic()] = cardinal_plural_afrikaans;
816 r[iso_639{
"tk"}.intrinsic()] = cardinal_plural_afrikaans;
817 r[iso_639{
"kcg"}.intrinsic()] = cardinal_plural_afrikaans;
818 r[iso_639{
"ur"}.intrinsic()] = cardinal_plural_afrikaans;
819 r[iso_639{
"ug"}.intrinsic()] = cardinal_plural_afrikaans;
820 r[iso_639{
"uz"}.intrinsic()] = cardinal_plural_afrikaans;
821 r[iso_639{
"ve"}.intrinsic()] = cardinal_plural_afrikaans;
823 r[iso_639{
"vo"}.intrinsic()] = cardinal_plural_afrikaans;
824 r[iso_639{
"vun"}.intrinsic()] = cardinal_plural_afrikaans;
825 r[iso_639{
"wae"}.intrinsic()] = cardinal_plural_afrikaans;
826 r[iso_639{
"fy"}.intrinsic()] = cardinal_plural_afrikaans;
827 r[iso_639{
"xh"}.intrinsic()] = cardinal_plural_afrikaans;
828 r[iso_639{
"ji"}.intrinsic()] = cardinal_plural_afrikaans;
829 r[iso_639{
"yi"}.intrinsic()] = cardinal_plural_afrikaans;
832 r[iso_639{
"lv"}.intrinsic()] = cardinal_plural_latvian;
833 r[iso_639{
"prg"}.intrinsic()] = cardinal_plural_latvian;
836 r[iso_639{
"ksh"}.intrinsic()] = cardinal_plural_colognian;
837 r[iso_639{
"lag"}.intrinsic()] = cardinal_plural_colognian;
840 r[iso_639{
"smn"}.intrinsic()] = cardinal_plural_inari_sami;
841 r[iso_639{
"iu"}.intrinsic()] = cardinal_plural_inari_sami;
842 r[iso_639{
"smj"}.intrinsic()] = cardinal_plural_inari_sami;
843 r[iso_639{
"naq"}.intrinsic()] = cardinal_plural_inari_sami;
844 r[iso_639{
"se"}.intrinsic()] = cardinal_plural_inari_sami;
846 r[iso_639{
"smi"}.intrinsic()] = cardinal_plural_inari_sami;
847 r[iso_639{
"sms"}.intrinsic()] = cardinal_plural_inari_sami;
848 r[iso_639{
"sma"}.intrinsic()] = cardinal_plural_inari_sami;
851 r[iso_639{
"be"}.intrinsic()] = cardinal_plural_belarusian;
852 r[iso_639{
"ru"}.intrinsic()] = cardinal_plural_belarusian;
853 r[iso_639{
"uk"}.intrinsic()] = cardinal_plural_belarusian;
856 r[iso_639{
"pl"}.intrinsic()] = cardinal_plural_polish;
859 r[iso_639{
"lt"}.intrinsic()] = cardinal_plural_lithuanian;
862 r[iso_639{
"bs"}.intrinsic()] = cardinal_plural_bosnian;
863 r[iso_639{
"hr"}.intrinsic()] = cardinal_plural_bosnian;
864 r[iso_639{
"sr"}.intrinsic()] = cardinal_plural_bosnian;
865 r[iso_639{
"sh"}.intrinsic()] = cardinal_plural_bosnian;
868 r[iso_639{
"shi"}.intrinsic()] = cardinal_plural_tachelhit;
871 r[iso_639{
"mo"}.intrinsic()] = cardinal_plural_moldavian;
872 r[iso_639{
"ro"}.intrinsic()] = cardinal_plural_moldavian;
875 r[iso_639{
"cs"}.intrinsic()] = cardinal_plural_czech;
876 r[iso_639{
"sk"}.intrinsic()] = cardinal_plural_czech;
879 r[iso_639{
"gv"}.intrinsic()] = cardinal_plural_manx;
882 r[iso_639{
"gd"}.intrinsic()] = cardinal_plural_scottish_gaelic;
885 r[iso_639{
"br"}.intrinsic()] = cardinal_plural_breton;
888 r[iso_639{
"dsb"}.intrinsic()] = cardinal_plural_lower_sorbian;
889 r[iso_639{
"sl"}.intrinsic()] = cardinal_plural_lower_sorbian;
890 r[iso_639{
"hsb"}.intrinsic()] = cardinal_plural_lower_sorbian;
893 r[iso_639{
"he"}.intrinsic()] = cardinal_plural_hebrew;
896 r[iso_639{
"mt"}.intrinsic()] = cardinal_plural_maltese;
899 r[iso_639{
"ga"}.intrinsic()] = cardinal_plural_irish;
902 r[iso_639{
"ar"}.intrinsic()] = cardinal_plural_arabic;
903 r[iso_639{
"ars"}.intrinsic()] = cardinal_plural_arabic;
906 r[iso_639{
"cy"}.intrinsic()] = cardinal_plural_welsh;
909 r[iso_639{
"kw"}.intrinsic()] = cardinal_plural_cornish;
914constexpr auto cardinal_plural_table = cardinal_plural_table_init();
926 if (language == language_tag{
"pt-PT"}) {
929 return cardinal_plural_afrikaans(detail::plural_operand(n));
932 hilet language_index = language.region.intrinsic();
934 return detail::cardinal_plural_table[language_index](detail::plural_operand(n));
944[[nodiscard]]
constexpr size_t cardinal_plural(language_tag language, std::integral
auto n,
size_t size)
noexcept
#define hi_axiom_bounds(x,...)
Specify an axiom that the value is within bounds.
Definition assert.hpp:264
#define hi_assert(expression,...)
Assert if expression is true.
Definition assert.hpp:199
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
@ other
The gui_event does not have associated data.
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
plurality_value
The plurality value of a cardinal or ordinal number.
Definition unicode_plural.hpp:23
@ other
Any other number, every language will have at least this.
@ few
The number is part of few, and this means something in the current language.
@ many
The number is part of many, and this means something in the current language.
@ two
The number was two, and this means something in the current language.
@ zero
The number was zero, and this means something in the current language.
@ one
The number was one, and this means something in the current language.
plurality_mask
A mask of plurality values that this language supports.
Definition unicode_plural.hpp:51
@ other
Any other number, every language will have at least this.
@ few
The number is part of few, and this means something in the current language.
@ many
The number is part of many, and this means something in the current language.
@ two
The number was two, and this means something in the current language.
@ zero
The number was zero, and this means something in the current language.
@ one
The number was one, and this means something in the current language.
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:924
Plurality of a number.
Definition unicode_plural.hpp:86
constexpr size_t index(size_t n) const noexcept
Get an index to select between translations.
Definition unicode_plural.hpp:103
The operand for the unicode-plural rules.
Definition unicode_plural.hpp:125
uint8_t i
Number of digits in the value.
Definition unicode_plural.hpp:140
unsigned long long f
Visible fraction digits with trailing zeros.
Definition unicode_plural.hpp:132
uint8_t c
Compact decimal exponent value.
Definition unicode_plural.hpp:152
unsigned long long t
Visible fraction digits without trailing zeros.
Definition unicode_plural.hpp:136
uint8_t w
Number of visible fraction digits without trailing zeros.
Definition unicode_plural.hpp:148
uint8_t v
Number of visible fraction digits with trailing zeros.
Definition unicode_plural.hpp:144
unsigned long long n
Absolute value.
Definition unicode_plural.hpp:128