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