xml_renderer.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.XmlRenderer = void 0;
  4. const engine_js_1 = require("../common/engine.js");
  5. const AudioUtil = require("./audio_util.js");
  6. const markup_renderer_js_1 = require("./markup_renderer.js");
  7. class XmlRenderer extends markup_renderer_js_1.MarkupRenderer {
  8. markup(descrs) {
  9. this.setScaleFunction(-2, 2, -100, 100, 2);
  10. const markup = AudioUtil.personalityMarkup(descrs);
  11. const result = [];
  12. const currentOpen = [];
  13. for (let i = 0, descr; (descr = markup[i]); i++) {
  14. if (descr.span) {
  15. result.push(this.merge(descr.span));
  16. continue;
  17. }
  18. if (AudioUtil.isPauseElement(descr)) {
  19. result.push(this.pause(descr));
  20. continue;
  21. }
  22. if (descr.close.length) {
  23. for (let j = 0; j < descr.close.length; j++) {
  24. const last = currentOpen.pop();
  25. if (descr.close.indexOf(last) === -1) {
  26. throw new engine_js_1.SREError('Unknown closing markup element: ' + last);
  27. }
  28. result.push(this.closeTag(last));
  29. }
  30. }
  31. if (descr.open.length) {
  32. const open = AudioUtil.sortClose(descr.open.slice(), markup.slice(i + 1));
  33. open.forEach((o) => {
  34. result.push(this.prosodyElement(o, descr[o]));
  35. currentOpen.push(o);
  36. });
  37. }
  38. }
  39. return result.join(' ');
  40. }
  41. }
  42. exports.XmlRenderer = XmlRenderer;