remark-parse-no-trim
Version:
remark plugin to parse Markdown
64 lines (47 loc) • 1.31 kB
JavaScript
var repeat = require('repeat-string')
var getIndent = require('./get-indentation')
module.exports = indentation
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
values.unshift(repeat(space, maximum) + exclamationMark)
while (position--) {
indentation = getIndent(values[position])
matrix[position] = indentation.stops
if (values[position].trim().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--
}
values[position] = values[position].slice(stops[index] + 1)
}
}
values.shift()
return values.join(lineFeed)
}