123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- const search = /[\0\t\n\r]/g
- export function preprocess() {
- let column = 1
- let buffer = ''
-
- let start = true
-
- let atCarriageReturn
- return preprocessor
-
-
- function preprocessor(value, encoding, end) {
-
- const chunks = []
-
- let match
-
- let next
-
- let startPosition
-
- let endPosition
-
- let code
- value =
- buffer +
- (typeof value === 'string'
- ? value.toString()
- : new TextDecoder(encoding || undefined).decode(value))
- 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 !== undefined ? 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
- }
- switch (code) {
- case 0: {
- chunks.push(65533)
- column++
- break
- }
- case 9: {
- next = Math.ceil(column / 4) * 4
- chunks.push(-2)
- while (column++ < next) chunks.push(-1)
- break
- }
- case 10: {
- chunks.push(-4)
- column = 1
- break
- }
- default: {
- atCarriageReturn = true
- column = 1
- }
- }
- }
- startPosition = endPosition + 1
- }
- if (end) {
- if (atCarriageReturn) chunks.push(-5)
- if (buffer) chunks.push(buffer)
- chunks.push(null)
- }
- return chunks
- }
- }
|