unindent.js 713 B

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * Strips from each line any leading whitespace that is shared by all lines.
  3. *
  4. * @param str string
  5. * @returns string
  6. */
  7. module.exports = function unindent(str) {
  8. var lines = str.split('\n');
  9. var xs = lines.filter(function (x) {
  10. return /\S/.test(x);
  11. }).sort();
  12. if (xs.length === 0)
  13. return str;
  14. var a = xs[0];
  15. var b = xs[xs.length - 1];
  16. var maxLength = Math.min(a.length, b.length);
  17. var i = 0;
  18. while (i < maxLength &&
  19. /\s/.test(a.charAt(i)) &&
  20. a.charAt(i) === b.charAt(i)) {
  21. i += 1;
  22. }
  23. if (i === 0)
  24. return str;
  25. return lines.map(function (line) {
  26. return line.substr(i);
  27. }).join('\n');
  28. };