🎉 initiate project *astro_rewrite*
This commit is contained in:
parent
ffd4d5e86c
commit
2ba37bfbe3
8658 changed files with 2268794 additions and 2538 deletions
235
node_modules/micromark-core-commonmark/lib/autolink.js
generated
vendored
Normal file
235
node_modules/micromark-core-commonmark/lib/autolink.js
generated
vendored
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
/**
|
||||
* @typedef {import('micromark-util-types').Construct} Construct
|
||||
* @typedef {import('micromark-util-types').State} State
|
||||
* @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
|
||||
* @typedef {import('micromark-util-types').Tokenizer} Tokenizer
|
||||
*/
|
||||
|
||||
import {
|
||||
asciiAlpha,
|
||||
asciiAlphanumeric,
|
||||
asciiAtext,
|
||||
asciiControl
|
||||
} from 'micromark-util-character'
|
||||
/** @type {Construct} */
|
||||
export const autolink = {
|
||||
name: 'autolink',
|
||||
tokenize: tokenizeAutolink
|
||||
}
|
||||
|
||||
/**
|
||||
* @this {TokenizeContext}
|
||||
* @type {Tokenizer}
|
||||
*/
|
||||
function tokenizeAutolink(effects, ok, nok) {
|
||||
let size = 0
|
||||
return start
|
||||
|
||||
/**
|
||||
* Start of an autolink.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<https://example.com>b
|
||||
* ^
|
||||
* > | a<user@example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function start(code) {
|
||||
effects.enter('autolink')
|
||||
effects.enter('autolinkMarker')
|
||||
effects.consume(code)
|
||||
effects.exit('autolinkMarker')
|
||||
effects.enter('autolinkProtocol')
|
||||
return open
|
||||
}
|
||||
|
||||
/**
|
||||
* After `<`, at protocol or atext.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<https://example.com>b
|
||||
* ^
|
||||
* > | a<user@example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function open(code) {
|
||||
if (asciiAlpha(code)) {
|
||||
effects.consume(code)
|
||||
return schemeOrEmailAtext
|
||||
}
|
||||
return emailAtext(code)
|
||||
}
|
||||
|
||||
/**
|
||||
* At second byte of protocol or atext.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<https://example.com>b
|
||||
* ^
|
||||
* > | a<user@example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function schemeOrEmailAtext(code) {
|
||||
// ASCII alphanumeric and `+`, `-`, and `.`.
|
||||
if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {
|
||||
// Count the previous alphabetical from `open` too.
|
||||
size = 1
|
||||
return schemeInsideOrEmailAtext(code)
|
||||
}
|
||||
return emailAtext(code)
|
||||
}
|
||||
|
||||
/**
|
||||
* In ambiguous protocol or atext.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<https://example.com>b
|
||||
* ^
|
||||
* > | a<user@example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function schemeInsideOrEmailAtext(code) {
|
||||
if (code === 58) {
|
||||
effects.consume(code)
|
||||
size = 0
|
||||
return urlInside
|
||||
}
|
||||
|
||||
// ASCII alphanumeric and `+`, `-`, and `.`.
|
||||
if (
|
||||
(code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&
|
||||
size++ < 32
|
||||
) {
|
||||
effects.consume(code)
|
||||
return schemeInsideOrEmailAtext
|
||||
}
|
||||
size = 0
|
||||
return emailAtext(code)
|
||||
}
|
||||
|
||||
/**
|
||||
* After protocol, in URL.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<https://example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function urlInside(code) {
|
||||
if (code === 62) {
|
||||
effects.exit('autolinkProtocol')
|
||||
effects.enter('autolinkMarker')
|
||||
effects.consume(code)
|
||||
effects.exit('autolinkMarker')
|
||||
effects.exit('autolink')
|
||||
return ok
|
||||
}
|
||||
|
||||
// ASCII control, space, or `<`.
|
||||
if (code === null || code === 32 || code === 60 || asciiControl(code)) {
|
||||
return nok(code)
|
||||
}
|
||||
effects.consume(code)
|
||||
return urlInside
|
||||
}
|
||||
|
||||
/**
|
||||
* In email atext.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<user.name@example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function emailAtext(code) {
|
||||
if (code === 64) {
|
||||
effects.consume(code)
|
||||
return emailAtSignOrDot
|
||||
}
|
||||
if (asciiAtext(code)) {
|
||||
effects.consume(code)
|
||||
return emailAtext
|
||||
}
|
||||
return nok(code)
|
||||
}
|
||||
|
||||
/**
|
||||
* In label, after at-sign or dot.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<user.name@example.com>b
|
||||
* ^ ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function emailAtSignOrDot(code) {
|
||||
return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)
|
||||
}
|
||||
|
||||
/**
|
||||
* In label, where `.` and `>` are allowed.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<user.name@example.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function emailLabel(code) {
|
||||
if (code === 46) {
|
||||
effects.consume(code)
|
||||
size = 0
|
||||
return emailAtSignOrDot
|
||||
}
|
||||
if (code === 62) {
|
||||
// Exit, then change the token type.
|
||||
effects.exit('autolinkProtocol').type = 'autolinkEmail'
|
||||
effects.enter('autolinkMarker')
|
||||
effects.consume(code)
|
||||
effects.exit('autolinkMarker')
|
||||
effects.exit('autolink')
|
||||
return ok
|
||||
}
|
||||
return emailValue(code)
|
||||
}
|
||||
|
||||
/**
|
||||
* In label, where `.` and `>` are *not* allowed.
|
||||
*
|
||||
* Though, this is also used in `emailLabel` to parse other values.
|
||||
*
|
||||
* ```markdown
|
||||
* > | a<user.name@ex-ample.com>b
|
||||
* ^
|
||||
* ```
|
||||
*
|
||||
* @type {State}
|
||||
*/
|
||||
function emailValue(code) {
|
||||
// ASCII alphanumeric or `-`.
|
||||
if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {
|
||||
const next = code === 45 ? emailValue : emailLabel
|
||||
effects.consume(code)
|
||||
return next
|
||||
}
|
||||
return nok(code)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue