123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- 'use strict'
-
- var search = /[\0\t\n\r]/g
-
- function preprocess() {
- var start = true
- var column = 1
- var buffer = ''
- var atCarriageReturn
- return preprocessor
-
- function preprocessor(value, encoding, end) {
- var chunks = []
- var match
- var next
- var startPosition
- var endPosition
- var code
- value = buffer + value.toString(encoding)
- startPosition = 0
- buffer = ''
-
- if (start) {
- if (value.charCodeAt(0) === 65279) {
- startPosition++
- }
-
- start = undefined
- }
-
- while (startPosition < value.length) {
- search.lastIndex = startPosition
- match = search.exec(value)
- endPosition = match ? match.index : value.length
- code = value.charCodeAt(endPosition)
-
- if (!match) {
- buffer = value.slice(startPosition)
- break
- }
-
- if (code === 10 && startPosition === endPosition && atCarriageReturn) {
- chunks.push(-3)
- atCarriageReturn = undefined
- } else {
- if (atCarriageReturn) {
- chunks.push(-5)
- atCarriageReturn = undefined
- }
-
- if (startPosition < endPosition) {
- chunks.push(value.slice(startPosition, endPosition))
- column += endPosition - startPosition
- }
-
- if (code === 0) {
- chunks.push(65533)
- column++
- } else if (code === 9) {
- next = Math.ceil(column / 4) * 4
- chunks.push(-2)
-
- while (column++ < next) chunks.push(-1)
- } else if (code === 10) {
- chunks.push(-4)
- column = 1
- } // Must be carriage return.
- else {
- atCarriageReturn = true
- column = 1
- }
- }
-
- startPosition = endPosition + 1
- }
-
- if (end) {
- if (atCarriageReturn) chunks.push(-5)
- if (buffer) chunks.push(buffer)
- chunks.push(null)
- }
-
- return chunks
- }
- }
-
- module.exports = preprocess
|