WIP - add extractor, generate snippet_data
This commit is contained in:
77
node_modules/remark-parse/lib/util/remove-indentation.js
generated
vendored
Normal file
77
node_modules/remark-parse/lib/util/remove-indentation.js
generated
vendored
Normal file
@ -0,0 +1,77 @@
|
||||
'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)
|
||||
}
|
||||
Reference in New Issue
Block a user