numbers_sv.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.NUMBERS = void 0;
  4. const messages_js_1 = require("../messages.js");
  5. function hundredsToWords_(num) {
  6. let n = num % 1000;
  7. let str = '';
  8. const hundreds = Math.floor(n / 100);
  9. str += exports.NUMBERS.ones[hundreds]
  10. ? (hundreds === 1 ? '' : exports.NUMBERS.ones[hundreds] + exports.NUMBERS.numSep) + 'hundra'
  11. : '';
  12. n = n % 100;
  13. if (n) {
  14. str += str ? exports.NUMBERS.numSep : '';
  15. str +=
  16. exports.NUMBERS.ones[n] ||
  17. exports.NUMBERS.tens[Math.floor(n / 10)] +
  18. (n % 10 ? exports.NUMBERS.numSep + exports.NUMBERS.ones[n % 10] : '');
  19. }
  20. return str;
  21. }
  22. function numberToWords(num, ordinal = false) {
  23. if (num === 0) {
  24. return exports.NUMBERS.zero;
  25. }
  26. if (num >= Math.pow(10, 36)) {
  27. return num.toString();
  28. }
  29. let pos = 0;
  30. let str = '';
  31. while (num > 0) {
  32. const hundreds = num % 1000;
  33. if (hundreds) {
  34. const large = exports.NUMBERS.large[pos];
  35. const plural = hundreds > 1 && pos > 1 && !ordinal ? 'er' : '';
  36. str =
  37. (pos === 1 && hundreds === 1
  38. ? ''
  39. : (pos > 1 && hundreds === 1 ? 'en' : hundredsToWords_(num % 1000)) +
  40. (pos > 1 ? ' ' : '')) +
  41. (pos ? large + plural + (pos > 1 ? ' ' : '') : '') +
  42. str;
  43. }
  44. num = Math.floor(num / 1000);
  45. pos++;
  46. }
  47. return str.replace(/ $/, '');
  48. }
  49. function numberToOrdinal(num, plural) {
  50. if (num === 1) {
  51. return plural ? 'hel' : 'hel';
  52. }
  53. if (num === 2) {
  54. return plural ? 'halva' : 'halv';
  55. }
  56. let ordinal = wordOrdinal(num);
  57. ordinal = ordinal.match(/de$/) ? ordinal.replace(/de$/, '') : ordinal;
  58. return ordinal + (plural ? 'delar' : 'del');
  59. }
  60. function wordOrdinal(num) {
  61. let ordinal = numberToWords(num, true);
  62. if (ordinal.match(/^noll$/)) {
  63. ordinal = 'nollte';
  64. }
  65. else if (ordinal.match(/ett$/)) {
  66. ordinal = ordinal.replace(/ett$/, 'första');
  67. }
  68. else if (ordinal.match(/två$/)) {
  69. ordinal = ordinal.replace(/två$/, 'andra');
  70. }
  71. else if (ordinal.match(/tre$/)) {
  72. ordinal = ordinal.replace(/tre$/, 'tredje');
  73. }
  74. else if (ordinal.match(/fyra$/)) {
  75. ordinal = ordinal.replace(/fyra$/, 'fjärde');
  76. }
  77. else if (ordinal.match(/fem$/)) {
  78. ordinal = ordinal.replace(/fem$/, 'femte');
  79. }
  80. else if (ordinal.match(/sex$/)) {
  81. ordinal = ordinal.replace(/sex$/, 'sjätte');
  82. }
  83. else if (ordinal.match(/sju$/)) {
  84. ordinal = ordinal.replace(/sju$/, 'sjunde');
  85. }
  86. else if (ordinal.match(/åtta$/)) {
  87. ordinal = ordinal.replace(/åtta$/, 'åttonde');
  88. }
  89. else if (ordinal.match(/nio$/)) {
  90. ordinal = ordinal.replace(/nio$/, 'nionde');
  91. }
  92. else if (ordinal.match(/tio$/)) {
  93. ordinal = ordinal.replace(/tio$/, 'tionde');
  94. }
  95. else if (ordinal.match(/elva$/)) {
  96. ordinal = ordinal.replace(/elva$/, 'elfte');
  97. }
  98. else if (ordinal.match(/tolv$/)) {
  99. ordinal = ordinal.replace(/tolv$/, 'tolfte');
  100. }
  101. else if (ordinal.match(/tusen$/)) {
  102. ordinal = ordinal.replace(/tusen$/, 'tusonde');
  103. }
  104. else if (ordinal.match(/jard$/) || ordinal.match(/jon$/)) {
  105. ordinal = ordinal + 'te';
  106. }
  107. else {
  108. ordinal = ordinal + 'de';
  109. }
  110. return ordinal;
  111. }
  112. function numericOrdinal(num) {
  113. const str = num.toString();
  114. if (str.match(/11$|12$/)) {
  115. return str + ':e';
  116. }
  117. return str + (str.match(/1$|2$/) ? ':a' : ':e');
  118. }
  119. exports.NUMBERS = (0, messages_js_1.NUMBERS)({
  120. wordOrdinal: wordOrdinal,
  121. numericOrdinal: numericOrdinal,
  122. numberToWords: numberToWords,
  123. numberToOrdinal: numberToOrdinal
  124. });