@mapbox/jsxtreme-markdown
Version:
Transform Markdown into JSX or React component modules
65 lines (48 loc) • 1.39 kB
JavaScript
;
var trim = require('string.prototype.trim');
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 (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--;
}
values[position] = values[position].slice(stops[index] + 1);
}
}
values.shift();
return values.join(lineFeed);
}