'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('') }