38 lines
666 B
JavaScript
38 lines
666 B
JavaScript
|
'use strict'
|
||
|
|
||
|
module.exports = indentation
|
||
|
|
||
|
var tab = '\t'
|
||
|
var space = ' '
|
||
|
|
||
|
var spaceSize = 1
|
||
|
var tabSize = 4
|
||
|
|
||
|
// Gets indentation information for a line.
|
||
|
function indentation(value) {
|
||
|
var index = 0
|
||
|
var indent = 0
|
||
|
var character = value.charAt(index)
|
||
|
var stops = {}
|
||
|
var size
|
||
|
var lastIndent = 0
|
||
|
|
||
|
while (character === tab || character === space) {
|
||
|
size = character === tab ? tabSize : spaceSize
|
||
|
|
||
|
indent += size
|
||
|
|
||
|
if (size > 1) {
|
||
|
indent = Math.floor(indent / size) * size
|
||
|
}
|
||
|
|
||
|
while (lastIndent < indent) {
|
||
|
stops[++lastIndent] = index
|
||
|
}
|
||
|
|
||
|
character = value.charAt(++index)
|
||
|
}
|
||
|
|
||
|
return {indent: indent, stops: stops}
|
||
|
}
|