string_renderer.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { Engine } from '../common/engine.js';
  2. import { AbstractAudioRenderer } from './abstract_audio_renderer.js';
  3. import { personalityMarkup } from './audio_util.js';
  4. export class StringRenderer extends AbstractAudioRenderer {
  5. markup(descrs) {
  6. let str = '';
  7. const markup = personalityMarkup(descrs);
  8. const clean = markup.filter((x) => x.span);
  9. if (!clean.length) {
  10. return str;
  11. }
  12. const len = clean.length - 1;
  13. for (let i = 0, descr; (descr = clean[i]); i++) {
  14. if (descr.span) {
  15. str += this.merge(descr.span);
  16. }
  17. if (i >= len) {
  18. continue;
  19. }
  20. const join = descr.join;
  21. str += typeof join === 'undefined' ? this.separator : join;
  22. }
  23. return str;
  24. }
  25. }
  26. export class CountingRenderer extends StringRenderer {
  27. finalize(str) {
  28. const output = super.finalize(str);
  29. const count = Engine.getInstance().modality === 'braille' ? '⣿⠀⣿⠀⣿⠀⣿⠀⣿⠀' : '0123456789';
  30. let second = new Array(Math.trunc(output.length / 10) + 1).join(count);
  31. second += count.slice(0, output.length % 10);
  32. return output + '\n' + second;
  33. }
  34. }