'use strict' var trim = require('trim') var repeat = require('repeat-string') var getIndent = require('./get-indentation') module.exports = indentation var tab = '\t' var lineFeed = '\n' var space = ' ' var exclamationMark = '!' // Remove the minimum indent from every line in `value`. Supports both tab, // spaced, and mixed indentation (as well as possible). function indentation(value, maximum) { var values = value.split(lineFeed) var position = values.length + 1 var minIndent = Infinity var matrix = [] var index var indentation var stops var padding values.unshift(repeat(space, maximum) + exclamationMark) while (position--) { indentation = getIndent(values[position]) matrix[position] = indentation.stops if (trim(values[position]).length === 0) { continue } if (indentation.indent) { if (indentation.indent > 0 && indentation.indent < minIndent) { minIndent = indentation.indent } } else { minIndent = Infinity break } } if (minIndent !== Infinity) { position = values.length while (position--) { stops = matrix[position] index = minIndent while (index && !(index in stops)) { index-- } if ( trim(values[position]).length !== 0 && minIndent && index !== minIndent ) { padding = tab } else { padding = '' } values[position] = padding + values[position].slice(index in stops ? stops[index] + 1 : 0) } } values.shift() return values.join(lineFeed) }