text-xform.js 798 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const BaseXform = require('../base-xform');
  2. // <t xml:space="preserve"> is </t>
  3. class TextXform extends BaseXform {
  4. get tag() {
  5. return 't';
  6. }
  7. render(xmlStream, model) {
  8. xmlStream.openNode('t');
  9. if (/^\s|\n|\s$/.test(model)) {
  10. xmlStream.addAttribute('xml:space', 'preserve');
  11. }
  12. xmlStream.writeText(model);
  13. xmlStream.closeNode();
  14. }
  15. get model() {
  16. return this._text
  17. .join('')
  18. .replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16)));
  19. }
  20. parseOpen(node) {
  21. switch (node.name) {
  22. case 't':
  23. this._text = [];
  24. return true;
  25. default:
  26. return false;
  27. }
  28. }
  29. parseText(text) {
  30. this._text.push(text);
  31. }
  32. parseClose() {
  33. return false;
  34. }
  35. }
  36. module.exports = TextXform;