locale_nemeth.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { createLocale } from '../locale.js';
  2. import { NUMBERS } from '../numbers/numbers_nemeth.js';
  3. import { identityTransformer } from '../transformers.js';
  4. const simpleEnglish = function (letter) {
  5. return letter.match(RegExp('^' + locale.ALPHABETS.languagePrefix.english))
  6. ? letter.slice(1)
  7. : letter;
  8. };
  9. const postfixCombiner = function (letter, font, _number) {
  10. letter = simpleEnglish(letter);
  11. return font ? letter + font : letter;
  12. };
  13. const germanCombiner = function (letter, font, _cap) {
  14. return font + simpleEnglish(letter);
  15. };
  16. const embellishCombiner = function (letter, font, num) {
  17. letter = simpleEnglish(letter);
  18. return font + (num ? num : '') + letter + '⠻';
  19. };
  20. const doubleEmbellishCombiner = function (letter, font, num) {
  21. letter = simpleEnglish(letter);
  22. return font + (num ? num : '') + letter + '⠻⠻';
  23. };
  24. const parensCombiner = function (letter, font, _number) {
  25. letter = simpleEnglish(letter);
  26. return font + letter + '⠾';
  27. };
  28. let locale = null;
  29. export function nemeth() {
  30. if (!locale) {
  31. locale = create();
  32. }
  33. return locale;
  34. }
  35. function create() {
  36. const loc = createLocale();
  37. loc.NUMBERS = NUMBERS;
  38. loc.COMBINERS = {
  39. postfixCombiner: postfixCombiner,
  40. germanCombiner: germanCombiner,
  41. embellishCombiner: embellishCombiner,
  42. doubleEmbellishCombiner: doubleEmbellishCombiner,
  43. parensCombiner: parensCombiner
  44. };
  45. loc.FUNCTIONS.fracNestDepth = (_node) => false;
  46. loc.FUNCTIONS.fontRegexp = (font) => RegExp('^' + font);
  47. loc.FUNCTIONS.si = identityTransformer;
  48. loc.ALPHABETS.combiner = (letter, font, num) => {
  49. return font ? font + num + letter : simpleEnglish(letter);
  50. };
  51. loc.ALPHABETS.digitTrans = { default: NUMBERS.numberToWords };
  52. return loc;
  53. }