punctuation_renderer.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.PunctuationRenderer = void 0;
  4. const EngineConst = require("../common/engine_const.js");
  5. const abstract_audio_renderer_js_1 = require("./abstract_audio_renderer.js");
  6. const AudioUtil = require("./audio_util.js");
  7. class PunctuationRenderer extends abstract_audio_renderer_js_1.AbstractAudioRenderer {
  8. markup(descrs) {
  9. const markup = AudioUtil.personalityMarkup(descrs);
  10. let str = '';
  11. let pause = null;
  12. let span = false;
  13. for (let i = 0, descr; (descr = markup[i]); i++) {
  14. if (AudioUtil.isMarkupElement(descr)) {
  15. continue;
  16. }
  17. if (AudioUtil.isPauseElement(descr)) {
  18. pause = descr;
  19. continue;
  20. }
  21. if (pause) {
  22. str += this.pause(pause[EngineConst.personalityProps.PAUSE]);
  23. pause = null;
  24. }
  25. str += (span ? this.separator : '') + this.merge(descr.span);
  26. span = true;
  27. }
  28. return str;
  29. }
  30. pause(pause) {
  31. let newPause;
  32. if (typeof pause === 'number') {
  33. if (pause <= 250) {
  34. newPause = 'short';
  35. }
  36. else if (pause <= 500) {
  37. newPause = 'medium';
  38. }
  39. else {
  40. newPause = 'long';
  41. }
  42. }
  43. else {
  44. newPause = pause;
  45. }
  46. return PunctuationRenderer.PAUSE_PUNCTUATION.get(newPause) || '';
  47. }
  48. }
  49. exports.PunctuationRenderer = PunctuationRenderer;
  50. PunctuationRenderer.PAUSE_PUNCTUATION = new Map([
  51. ['short', ','],
  52. ['medium', ';'],
  53. ['long', '.']
  54. ]);