transformers.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Combiners = void 0;
  4. exports.pluralCase = pluralCase;
  5. exports.identityTransformer = identityTransformer;
  6. exports.siCombiner = siCombiner;
  7. exports.convertVulgarFraction = convertVulgarFraction;
  8. exports.vulgarFractionSmall = vulgarFractionSmall;
  9. const semantic_meaning_js_1 = require("../semantic_tree/semantic_meaning.js");
  10. function pluralCase(num, _plural) {
  11. return num.toString();
  12. }
  13. function identityTransformer(input) {
  14. return input.toString();
  15. }
  16. function siCombiner(prefix, unit) {
  17. return prefix + unit.toLowerCase();
  18. }
  19. exports.Combiners = {};
  20. exports.Combiners.identityCombiner = function (a, b, c) {
  21. return a + b + c;
  22. };
  23. exports.Combiners.prefixCombiner = function (letter, font, cap) {
  24. letter = cap ? cap + ' ' + letter : letter;
  25. return font ? font + ' ' + letter : letter;
  26. };
  27. exports.Combiners.postfixCombiner = function (letter, font, cap) {
  28. letter = cap ? cap + ' ' + letter : letter;
  29. return font ? letter + ' ' + font : letter;
  30. };
  31. exports.Combiners.romanceCombiner = function (letter, font, cap) {
  32. letter = cap ? letter + ' ' + cap : letter;
  33. return font ? letter + ' ' + font : letter;
  34. };
  35. function convertVulgarFraction(node, over = '') {
  36. if (!node.childNodes ||
  37. !node.childNodes[0] ||
  38. !node.childNodes[0].childNodes ||
  39. node.childNodes[0].childNodes.length < 2 ||
  40. node.childNodes[0].childNodes[0].tagName !==
  41. semantic_meaning_js_1.SemanticType.NUMBER ||
  42. node.childNodes[0].childNodes[0].getAttribute('role') !==
  43. semantic_meaning_js_1.SemanticRole.INTEGER ||
  44. node.childNodes[0].childNodes[1].tagName !==
  45. semantic_meaning_js_1.SemanticType.NUMBER ||
  46. node.childNodes[0].childNodes[1].getAttribute('role') !==
  47. semantic_meaning_js_1.SemanticRole.INTEGER) {
  48. return { convertible: false, content: node.textContent };
  49. }
  50. const denStr = node.childNodes[0].childNodes[1].textContent;
  51. const enumStr = node.childNodes[0].childNodes[0].textContent;
  52. const denominator = Number(denStr);
  53. const enumerator = Number(enumStr);
  54. if (isNaN(denominator) || isNaN(enumerator)) {
  55. return {
  56. convertible: false,
  57. content: `${enumStr} ${over} ${denStr}`
  58. };
  59. }
  60. return {
  61. convertible: true,
  62. enumerator: enumerator,
  63. denominator: denominator
  64. };
  65. }
  66. function vulgarFractionSmall(node, enumer, denom) {
  67. const conversion = convertVulgarFraction(node);
  68. if (conversion.convertible) {
  69. const enumerator = conversion.enumerator;
  70. const denominator = conversion.denominator;
  71. return (enumerator > 0 &&
  72. enumerator < enumer &&
  73. denominator > 0 &&
  74. denominator < denom);
  75. }
  76. return false;
  77. }