text_collapse.js 768 B

123456789101112131415161718192021222324252627282930313233
  1. // Merge adjacent text nodes into one, and re-calculate all token levels
  2. //
  3. 'use strict';
  4. module.exports = function text_collapse(state) {
  5. var curr, last,
  6. level = 0,
  7. tokens = state.tokens,
  8. max = state.tokens.length;
  9. for (curr = last = 0; curr < max; curr++) {
  10. // re-calculate levels
  11. level += tokens[curr].nesting;
  12. tokens[curr].level = level;
  13. if (tokens[curr].type === 'text' &&
  14. curr + 1 < max &&
  15. tokens[curr + 1].type === 'text') {
  16. // collapse two adjacent text nodes
  17. tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;
  18. } else {
  19. if (curr !== last) { tokens[last] = tokens[curr]; }
  20. last++;
  21. }
  22. }
  23. if (curr !== last) {
  24. tokens.length = last;
  25. }
  26. };