antv-l7/node_modules/detab/index.js

47 lines
970 B
JavaScript

'use strict'
module.exports = detab
var repeat = require('repeat-string')
var tab = 0x09
var lineFeed = 0x0a
var carriageReturn = 0x0d
// Replace tabs with spaces, being smart about which column the tab is at and
// which size should be used.
function detab(value, size) {
var string = typeof value === 'string'
var length = string && value.length
var start = 0
var index = -1
var column = -1
var tabSize = size || 4
var results = []
var code
var add
if (!string) {
throw new Error('detab expected string')
}
while (++index < length) {
code = value.charCodeAt(index)
if (code === tab) {
add = tabSize - ((column + 1) % tabSize)
column += add
results.push(value.slice(start, index) + repeat(' ', add))
start = index + 1
} else if (code === lineFeed || code === carriageReturn) {
column = -1
} else {
column++
}
}
results.push(value.slice(start))
return results.join('')
}