123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- var splitRE = /\r?\n/g
- var emptyRE = /^\s*$/
- var needFixRE = /^(\r?\n)*[\t\s]/
- module.exports = function deindent (str) {
- if (!needFixRE.test(str)) {
- return str
- }
- var lines = str.split(splitRE)
- var min = Infinity
- var type, cur, c
- for (var i = 0; i < lines.length; i++) {
- var line = lines[i]
- if (!emptyRE.test(line)) {
- if (!type) {
- c = line.charAt(0)
- if (c === ' ' || c === '\t') {
- type = c
- cur = count(line, type)
- if (cur < min) {
- min = cur
- }
- } else {
- return str
- }
- } else {
- cur = count(line, type)
- if (cur < min) {
- min = cur
- }
- }
- }
- }
- return lines.map(function (line) {
- return line.slice(min)
- }).join('\n')
- }
- function count (line, type) {
- var i = 0
- while (line.charAt(i) === type) {
- i++
- }
- return i
- }
|