🎉 initiate project *astro_rewrite*
This commit is contained in:
parent
ffd4d5e86c
commit
2ba37bfbe3
8658 changed files with 2268794 additions and 2538 deletions
110
node_modules/micromark/lib/preprocess.js
generated
vendored
Normal file
110
node_modules/micromark/lib/preprocess.js
generated
vendored
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
/**
|
||||
* @typedef {import('micromark-util-types').Chunk} Chunk
|
||||
* @typedef {import('micromark-util-types').Code} Code
|
||||
* @typedef {import('micromark-util-types').Encoding} Encoding
|
||||
* @typedef {import('micromark-util-types').Value} Value
|
||||
*/
|
||||
|
||||
/**
|
||||
* @callback Preprocessor
|
||||
* @param {Value} value
|
||||
* @param {Encoding | null | undefined} [encoding]
|
||||
* @param {boolean | null | undefined} [end=false]
|
||||
* @returns {Array<Chunk>}
|
||||
*/
|
||||
|
||||
const search = /[\0\t\n\r]/g
|
||||
|
||||
/**
|
||||
* @returns {Preprocessor}
|
||||
*/
|
||||
export function preprocess() {
|
||||
let column = 1
|
||||
let buffer = ''
|
||||
/** @type {boolean | undefined} */
|
||||
let start = true
|
||||
/** @type {boolean | undefined} */
|
||||
let atCarriageReturn
|
||||
return preprocessor
|
||||
|
||||
/** @type {Preprocessor} */
|
||||
function preprocessor(value, encoding, end) {
|
||||
/** @type {Array<Chunk>} */
|
||||
const chunks = []
|
||||
/** @type {RegExpMatchArray | null} */
|
||||
let match
|
||||
/** @type {number} */
|
||||
let next
|
||||
/** @type {number} */
|
||||
let startPosition
|
||||
/** @type {number} */
|
||||
let endPosition
|
||||
/** @type {Code} */
|
||||
let code
|
||||
|
||||
// @ts-expect-error `Buffer` does allow an encoding.
|
||||
value = buffer + value.toString(encoding)
|
||||
startPosition = 0
|
||||
buffer = ''
|
||||
if (start) {
|
||||
// To do: `markdown-rs` actually parses BOMs (byte order mark).
|
||||
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
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue