You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
export default serializeChunks |
|
|
|
import assert from 'assert' |
|
import codes from '../character/codes.mjs' |
|
import values from '../character/values.mjs' |
|
import fromCharCode from '../constant/from-char-code.mjs' |
|
|
|
function serializeChunks(chunks) { |
|
var index = -1 |
|
var result = [] |
|
var chunk |
|
var value |
|
var atTab |
|
|
|
while (++index < chunks.length) { |
|
chunk = chunks[index] |
|
|
|
if (typeof chunk === 'string') { |
|
value = chunk |
|
} else if (chunk === codes.carriageReturn) { |
|
value = values.cr |
|
} else if (chunk === codes.lineFeed) { |
|
value = values.lf |
|
} else if (chunk === codes.carriageReturnLineFeed) { |
|
value = values.cr + values.lf |
|
} else if (chunk === codes.horizontalTab) { |
|
value = values.ht |
|
} else if (chunk === codes.virtualSpace) { |
|
if (atTab) continue |
|
value = values.space |
|
} else { |
|
assert.equal(typeof chunk, 'number', 'expected number') |
|
// Currently only replacement character. |
|
value = fromCharCode(chunk) |
|
} |
|
|
|
atTab = chunk === codes.horizontalTab |
|
result.push(value) |
|
} |
|
|
|
return result.join('') |
|
}
|
|
|