@depup/markdown-it 14.1.1-depup.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +31 -0
- package/bin/markdown-it.mjs +107 -0
- package/changes.json +10 -0
- package/dist/index.cjs.js +5547 -0
- package/dist/markdown-it.js +6969 -0
- package/dist/markdown-it.min.js +2 -0
- package/index.mjs +1 -0
- package/lib/common/html_blocks.mjs +67 -0
- package/lib/common/html_re.mjs +25 -0
- package/lib/common/utils.mjs +304 -0
- package/lib/helpers/index.mjs +11 -0
- package/lib/helpers/parse_link_destination.mjs +77 -0
- package/lib/helpers/parse_link_label.mjs +49 -0
- package/lib/helpers/parse_link_title.mjs +66 -0
- package/lib/index.mjs +565 -0
- package/lib/parser_block.mjs +134 -0
- package/lib/parser_core.mjs +62 -0
- package/lib/parser_inline.mjs +197 -0
- package/lib/presets/commonmark.mjs +88 -0
- package/lib/presets/default.mjs +47 -0
- package/lib/presets/zero.mjs +70 -0
- package/lib/renderer.mjs +322 -0
- package/lib/ruler.mjs +340 -0
- package/lib/rules_block/blockquote.mjs +209 -0
- package/lib/rules_block/code.mjs +30 -0
- package/lib/rules_block/fence.mjs +94 -0
- package/lib/rules_block/heading.mjs +51 -0
- package/lib/rules_block/hr.mjs +40 -0
- package/lib/rules_block/html_block.mjs +69 -0
- package/lib/rules_block/lheading.mjs +82 -0
- package/lib/rules_block/list.mjs +331 -0
- package/lib/rules_block/paragraph.mjs +46 -0
- package/lib/rules_block/reference.mjs +212 -0
- package/lib/rules_block/state_block.mjs +220 -0
- package/lib/rules_block/table.mjs +228 -0
- package/lib/rules_core/block.mjs +13 -0
- package/lib/rules_core/inline.mjs +11 -0
- package/lib/rules_core/linkify.mjs +134 -0
- package/lib/rules_core/normalize.mjs +17 -0
- package/lib/rules_core/replacements.mjs +101 -0
- package/lib/rules_core/smartquotes.mjs +193 -0
- package/lib/rules_core/state_core.mjs +17 -0
- package/lib/rules_core/text_join.mjs +43 -0
- package/lib/rules_inline/autolink.mjs +72 -0
- package/lib/rules_inline/backticks.mjs +60 -0
- package/lib/rules_inline/balance_pairs.mjs +124 -0
- package/lib/rules_inline/emphasis.mjs +123 -0
- package/lib/rules_inline/entity.mjs +51 -0
- package/lib/rules_inline/escape.mjs +69 -0
- package/lib/rules_inline/fragments_join.mjs +38 -0
- package/lib/rules_inline/html_inline.mjs +50 -0
- package/lib/rules_inline/image.mjs +138 -0
- package/lib/rules_inline/link.mjs +139 -0
- package/lib/rules_inline/linkify.mjs +63 -0
- package/lib/rules_inline/newline.mjs +42 -0
- package/lib/rules_inline/state_inline.mjs +123 -0
- package/lib/rules_inline/strikethrough.mjs +127 -0
- package/lib/rules_inline/text.mjs +86 -0
- package/lib/token.mjs +191 -0
- package/package.json +109 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Proceess '\n'
|
|
2
|
+
|
|
3
|
+
import { isSpace } from '../common/utils.mjs'
|
|
4
|
+
|
|
5
|
+
export default function newline (state, silent) {
|
|
6
|
+
let pos = state.pos
|
|
7
|
+
|
|
8
|
+
if (state.src.charCodeAt(pos) !== 0x0A/* \n */) { return false }
|
|
9
|
+
|
|
10
|
+
const pmax = state.pending.length - 1
|
|
11
|
+
const max = state.posMax
|
|
12
|
+
|
|
13
|
+
// ' \n' -> hardbreak
|
|
14
|
+
// Lookup in pending chars is bad practice! Don't copy to other rules!
|
|
15
|
+
// Pending string is stored in concat mode, indexed lookups will cause
|
|
16
|
+
// convertion to flat mode.
|
|
17
|
+
if (!silent) {
|
|
18
|
+
if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {
|
|
19
|
+
if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {
|
|
20
|
+
// Find whitespaces tail of pending chars.
|
|
21
|
+
let ws = pmax - 1
|
|
22
|
+
while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--
|
|
23
|
+
|
|
24
|
+
state.pending = state.pending.slice(0, ws)
|
|
25
|
+
state.push('hardbreak', 'br', 0)
|
|
26
|
+
} else {
|
|
27
|
+
state.pending = state.pending.slice(0, -1)
|
|
28
|
+
state.push('softbreak', 'br', 0)
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
state.push('softbreak', 'br', 0)
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
pos++
|
|
36
|
+
|
|
37
|
+
// skip heading spaces for next line
|
|
38
|
+
while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }
|
|
39
|
+
|
|
40
|
+
state.pos = pos
|
|
41
|
+
return true
|
|
42
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Inline parser state
|
|
2
|
+
|
|
3
|
+
import Token from '../token.mjs'
|
|
4
|
+
import { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'
|
|
5
|
+
|
|
6
|
+
function StateInline (src, md, env, outTokens) {
|
|
7
|
+
this.src = src
|
|
8
|
+
this.env = env
|
|
9
|
+
this.md = md
|
|
10
|
+
this.tokens = outTokens
|
|
11
|
+
this.tokens_meta = Array(outTokens.length)
|
|
12
|
+
|
|
13
|
+
this.pos = 0
|
|
14
|
+
this.posMax = this.src.length
|
|
15
|
+
this.level = 0
|
|
16
|
+
this.pending = ''
|
|
17
|
+
this.pendingLevel = 0
|
|
18
|
+
|
|
19
|
+
// Stores { start: end } pairs. Useful for backtrack
|
|
20
|
+
// optimization of pairs parse (emphasis, strikes).
|
|
21
|
+
this.cache = {}
|
|
22
|
+
|
|
23
|
+
// List of emphasis-like delimiters for current tag
|
|
24
|
+
this.delimiters = []
|
|
25
|
+
|
|
26
|
+
// Stack of delimiter lists for upper level tags
|
|
27
|
+
this._prev_delimiters = []
|
|
28
|
+
|
|
29
|
+
// backtick length => last seen position
|
|
30
|
+
this.backticks = {}
|
|
31
|
+
this.backticksScanned = false
|
|
32
|
+
|
|
33
|
+
// Counter used to disable inline linkify-it execution
|
|
34
|
+
// inside <a> and markdown links
|
|
35
|
+
this.linkLevel = 0
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Flush pending text
|
|
39
|
+
//
|
|
40
|
+
StateInline.prototype.pushPending = function () {
|
|
41
|
+
const token = new Token('text', '', 0)
|
|
42
|
+
token.content = this.pending
|
|
43
|
+
token.level = this.pendingLevel
|
|
44
|
+
this.tokens.push(token)
|
|
45
|
+
this.pending = ''
|
|
46
|
+
return token
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Push new token to "stream".
|
|
50
|
+
// If pending text exists - flush it as text token
|
|
51
|
+
//
|
|
52
|
+
StateInline.prototype.push = function (type, tag, nesting) {
|
|
53
|
+
if (this.pending) {
|
|
54
|
+
this.pushPending()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const token = new Token(type, tag, nesting)
|
|
58
|
+
let token_meta = null
|
|
59
|
+
|
|
60
|
+
if (nesting < 0) {
|
|
61
|
+
// closing tag
|
|
62
|
+
this.level--
|
|
63
|
+
this.delimiters = this._prev_delimiters.pop()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
token.level = this.level
|
|
67
|
+
|
|
68
|
+
if (nesting > 0) {
|
|
69
|
+
// opening tag
|
|
70
|
+
this.level++
|
|
71
|
+
this._prev_delimiters.push(this.delimiters)
|
|
72
|
+
this.delimiters = []
|
|
73
|
+
token_meta = { delimiters: this.delimiters }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
this.pendingLevel = this.level
|
|
77
|
+
this.tokens.push(token)
|
|
78
|
+
this.tokens_meta.push(token_meta)
|
|
79
|
+
return token
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Scan a sequence of emphasis-like markers, and determine whether
|
|
83
|
+
// it can start an emphasis sequence or end an emphasis sequence.
|
|
84
|
+
//
|
|
85
|
+
// - start - position to scan from (it should point at a valid marker);
|
|
86
|
+
// - canSplitWord - determine if these markers can be found inside a word
|
|
87
|
+
//
|
|
88
|
+
StateInline.prototype.scanDelims = function (start, canSplitWord) {
|
|
89
|
+
const max = this.posMax
|
|
90
|
+
const marker = this.src.charCodeAt(start)
|
|
91
|
+
|
|
92
|
+
// treat beginning of the line as a whitespace
|
|
93
|
+
const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20
|
|
94
|
+
|
|
95
|
+
let pos = start
|
|
96
|
+
while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }
|
|
97
|
+
|
|
98
|
+
const count = pos - start
|
|
99
|
+
|
|
100
|
+
// treat end of the line as a whitespace
|
|
101
|
+
const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20
|
|
102
|
+
|
|
103
|
+
const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))
|
|
104
|
+
const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))
|
|
105
|
+
|
|
106
|
+
const isLastWhiteSpace = isWhiteSpace(lastChar)
|
|
107
|
+
const isNextWhiteSpace = isWhiteSpace(nextChar)
|
|
108
|
+
|
|
109
|
+
const left_flanking =
|
|
110
|
+
!isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)
|
|
111
|
+
const right_flanking =
|
|
112
|
+
!isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)
|
|
113
|
+
|
|
114
|
+
const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)
|
|
115
|
+
const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)
|
|
116
|
+
|
|
117
|
+
return { can_open, can_close, length: count }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// re-export Token class to use in block rules
|
|
121
|
+
StateInline.prototype.Token = Token
|
|
122
|
+
|
|
123
|
+
export default StateInline
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// ~~strike through~~
|
|
2
|
+
//
|
|
3
|
+
|
|
4
|
+
// Insert each marker as a separate text token, and add it to delimiter list
|
|
5
|
+
//
|
|
6
|
+
function strikethrough_tokenize (state, silent) {
|
|
7
|
+
const start = state.pos
|
|
8
|
+
const marker = state.src.charCodeAt(start)
|
|
9
|
+
|
|
10
|
+
if (silent) { return false }
|
|
11
|
+
|
|
12
|
+
if (marker !== 0x7E/* ~ */) { return false }
|
|
13
|
+
|
|
14
|
+
const scanned = state.scanDelims(state.pos, true)
|
|
15
|
+
let len = scanned.length
|
|
16
|
+
const ch = String.fromCharCode(marker)
|
|
17
|
+
|
|
18
|
+
if (len < 2) { return false }
|
|
19
|
+
|
|
20
|
+
let token
|
|
21
|
+
|
|
22
|
+
if (len % 2) {
|
|
23
|
+
token = state.push('text', '', 0)
|
|
24
|
+
token.content = ch
|
|
25
|
+
len--
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
for (let i = 0; i < len; i += 2) {
|
|
29
|
+
token = state.push('text', '', 0)
|
|
30
|
+
token.content = ch + ch
|
|
31
|
+
|
|
32
|
+
state.delimiters.push({
|
|
33
|
+
marker,
|
|
34
|
+
length: 0, // disable "rule of 3" length checks meant for emphasis
|
|
35
|
+
token: state.tokens.length - 1,
|
|
36
|
+
end: -1,
|
|
37
|
+
open: scanned.can_open,
|
|
38
|
+
close: scanned.can_close
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
state.pos += scanned.length
|
|
43
|
+
|
|
44
|
+
return true
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function postProcess (state, delimiters) {
|
|
48
|
+
let token
|
|
49
|
+
const loneMarkers = []
|
|
50
|
+
const max = delimiters.length
|
|
51
|
+
|
|
52
|
+
for (let i = 0; i < max; i++) {
|
|
53
|
+
const startDelim = delimiters[i]
|
|
54
|
+
|
|
55
|
+
if (startDelim.marker !== 0x7E/* ~ */) {
|
|
56
|
+
continue
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (startDelim.end === -1) {
|
|
60
|
+
continue
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const endDelim = delimiters[startDelim.end]
|
|
64
|
+
|
|
65
|
+
token = state.tokens[startDelim.token]
|
|
66
|
+
token.type = 's_open'
|
|
67
|
+
token.tag = 's'
|
|
68
|
+
token.nesting = 1
|
|
69
|
+
token.markup = '~~'
|
|
70
|
+
token.content = ''
|
|
71
|
+
|
|
72
|
+
token = state.tokens[endDelim.token]
|
|
73
|
+
token.type = 's_close'
|
|
74
|
+
token.tag = 's'
|
|
75
|
+
token.nesting = -1
|
|
76
|
+
token.markup = '~~'
|
|
77
|
+
token.content = ''
|
|
78
|
+
|
|
79
|
+
if (state.tokens[endDelim.token - 1].type === 'text' &&
|
|
80
|
+
state.tokens[endDelim.token - 1].content === '~') {
|
|
81
|
+
loneMarkers.push(endDelim.token - 1)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// If a marker sequence has an odd number of characters, it's splitted
|
|
86
|
+
// like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the
|
|
87
|
+
// start of the sequence.
|
|
88
|
+
//
|
|
89
|
+
// So, we have to move all those markers after subsequent s_close tags.
|
|
90
|
+
//
|
|
91
|
+
while (loneMarkers.length) {
|
|
92
|
+
const i = loneMarkers.pop()
|
|
93
|
+
let j = i + 1
|
|
94
|
+
|
|
95
|
+
while (j < state.tokens.length && state.tokens[j].type === 's_close') {
|
|
96
|
+
j++
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
j--
|
|
100
|
+
|
|
101
|
+
if (i !== j) {
|
|
102
|
+
token = state.tokens[j]
|
|
103
|
+
state.tokens[j] = state.tokens[i]
|
|
104
|
+
state.tokens[i] = token
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Walk through delimiter list and replace text tokens with tags
|
|
110
|
+
//
|
|
111
|
+
function strikethrough_postProcess (state) {
|
|
112
|
+
const tokens_meta = state.tokens_meta
|
|
113
|
+
const max = state.tokens_meta.length
|
|
114
|
+
|
|
115
|
+
postProcess(state, state.delimiters)
|
|
116
|
+
|
|
117
|
+
for (let curr = 0; curr < max; curr++) {
|
|
118
|
+
if (tokens_meta[curr] && tokens_meta[curr].delimiters) {
|
|
119
|
+
postProcess(state, tokens_meta[curr].delimiters)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export default {
|
|
125
|
+
tokenize: strikethrough_tokenize,
|
|
126
|
+
postProcess: strikethrough_postProcess
|
|
127
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Skip text characters for text token, place those to pending buffer
|
|
2
|
+
// and increment current pos
|
|
3
|
+
|
|
4
|
+
// Rule to skip pure text
|
|
5
|
+
// '{}$%@~+=:' reserved for extentions
|
|
6
|
+
|
|
7
|
+
// !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \, ], ^, _, `, {, |, }, or ~
|
|
8
|
+
|
|
9
|
+
// !!!! Don't confuse with "Markdown ASCII Punctuation" chars
|
|
10
|
+
// http://spec.commonmark.org/0.15/#ascii-punctuation-character
|
|
11
|
+
function isTerminatorChar (ch) {
|
|
12
|
+
switch (ch) {
|
|
13
|
+
case 0x0A/* \n */:
|
|
14
|
+
case 0x21/* ! */:
|
|
15
|
+
case 0x23/* # */:
|
|
16
|
+
case 0x24/* $ */:
|
|
17
|
+
case 0x25/* % */:
|
|
18
|
+
case 0x26/* & */:
|
|
19
|
+
case 0x2A/* * */:
|
|
20
|
+
case 0x2B/* + */:
|
|
21
|
+
case 0x2D/* - */:
|
|
22
|
+
case 0x3A/* : */:
|
|
23
|
+
case 0x3C/* < */:
|
|
24
|
+
case 0x3D/* = */:
|
|
25
|
+
case 0x3E/* > */:
|
|
26
|
+
case 0x40/* @ */:
|
|
27
|
+
case 0x5B/* [ */:
|
|
28
|
+
case 0x5C/* \ */:
|
|
29
|
+
case 0x5D/* ] */:
|
|
30
|
+
case 0x5E/* ^ */:
|
|
31
|
+
case 0x5F/* _ */:
|
|
32
|
+
case 0x60/* ` */:
|
|
33
|
+
case 0x7B/* { */:
|
|
34
|
+
case 0x7D/* } */:
|
|
35
|
+
case 0x7E/* ~ */:
|
|
36
|
+
return true
|
|
37
|
+
default:
|
|
38
|
+
return false
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default function text (state, silent) {
|
|
43
|
+
let pos = state.pos
|
|
44
|
+
|
|
45
|
+
while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {
|
|
46
|
+
pos++
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (pos === state.pos) { return false }
|
|
50
|
+
|
|
51
|
+
if (!silent) { state.pending += state.src.slice(state.pos, pos) }
|
|
52
|
+
|
|
53
|
+
state.pos = pos
|
|
54
|
+
|
|
55
|
+
return true
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Alternative implementation, for memory.
|
|
59
|
+
//
|
|
60
|
+
// It costs 10% of performance, but allows extend terminators list, if place it
|
|
61
|
+
// to `ParserInline` property. Probably, will switch to it sometime, such
|
|
62
|
+
// flexibility required.
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
var TERMINATOR_RE = /[\n!#$%&*+\-:<=>@[\\\]^_`{}~]/;
|
|
66
|
+
|
|
67
|
+
module.exports = function text(state, silent) {
|
|
68
|
+
var pos = state.pos,
|
|
69
|
+
idx = state.src.slice(pos).search(TERMINATOR_RE);
|
|
70
|
+
|
|
71
|
+
// first char is terminator -> empty text
|
|
72
|
+
if (idx === 0) { return false; }
|
|
73
|
+
|
|
74
|
+
// no terminator -> text till end of string
|
|
75
|
+
if (idx < 0) {
|
|
76
|
+
if (!silent) { state.pending += state.src.slice(pos); }
|
|
77
|
+
state.pos = state.src.length;
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!silent) { state.pending += state.src.slice(pos, pos + idx); }
|
|
82
|
+
|
|
83
|
+
state.pos += idx;
|
|
84
|
+
|
|
85
|
+
return true;
|
|
86
|
+
}; */
|
package/lib/token.mjs
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// Token class
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* class Token
|
|
5
|
+
**/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* new Token(type, tag, nesting)
|
|
9
|
+
*
|
|
10
|
+
* Create new token and fill passed properties.
|
|
11
|
+
**/
|
|
12
|
+
function Token (type, tag, nesting) {
|
|
13
|
+
/**
|
|
14
|
+
* Token#type -> String
|
|
15
|
+
*
|
|
16
|
+
* Type of the token (string, e.g. "paragraph_open")
|
|
17
|
+
**/
|
|
18
|
+
this.type = type
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Token#tag -> String
|
|
22
|
+
*
|
|
23
|
+
* html tag name, e.g. "p"
|
|
24
|
+
**/
|
|
25
|
+
this.tag = tag
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Token#attrs -> Array
|
|
29
|
+
*
|
|
30
|
+
* Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`
|
|
31
|
+
**/
|
|
32
|
+
this.attrs = null
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Token#map -> Array
|
|
36
|
+
*
|
|
37
|
+
* Source map info. Format: `[ line_begin, line_end ]`
|
|
38
|
+
**/
|
|
39
|
+
this.map = null
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Token#nesting -> Number
|
|
43
|
+
*
|
|
44
|
+
* Level change (number in {-1, 0, 1} set), where:
|
|
45
|
+
*
|
|
46
|
+
* - `1` means the tag is opening
|
|
47
|
+
* - `0` means the tag is self-closing
|
|
48
|
+
* - `-1` means the tag is closing
|
|
49
|
+
**/
|
|
50
|
+
this.nesting = nesting
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Token#level -> Number
|
|
54
|
+
*
|
|
55
|
+
* nesting level, the same as `state.level`
|
|
56
|
+
**/
|
|
57
|
+
this.level = 0
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Token#children -> Array
|
|
61
|
+
*
|
|
62
|
+
* An array of child nodes (inline and img tokens)
|
|
63
|
+
**/
|
|
64
|
+
this.children = null
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Token#content -> String
|
|
68
|
+
*
|
|
69
|
+
* In a case of self-closing tag (code, html, fence, etc.),
|
|
70
|
+
* it has contents of this tag.
|
|
71
|
+
**/
|
|
72
|
+
this.content = ''
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Token#markup -> String
|
|
76
|
+
*
|
|
77
|
+
* '*' or '_' for emphasis, fence string for fence, etc.
|
|
78
|
+
**/
|
|
79
|
+
this.markup = ''
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Token#info -> String
|
|
83
|
+
*
|
|
84
|
+
* Additional information:
|
|
85
|
+
*
|
|
86
|
+
* - Info string for "fence" tokens
|
|
87
|
+
* - The value "auto" for autolink "link_open" and "link_close" tokens
|
|
88
|
+
* - The string value of the item marker for ordered-list "list_item_open" tokens
|
|
89
|
+
**/
|
|
90
|
+
this.info = ''
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Token#meta -> Object
|
|
94
|
+
*
|
|
95
|
+
* A place for plugins to store an arbitrary data
|
|
96
|
+
**/
|
|
97
|
+
this.meta = null
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Token#block -> Boolean
|
|
101
|
+
*
|
|
102
|
+
* True for block-level tokens, false for inline tokens.
|
|
103
|
+
* Used in renderer to calculate line breaks
|
|
104
|
+
**/
|
|
105
|
+
this.block = false
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Token#hidden -> Boolean
|
|
109
|
+
*
|
|
110
|
+
* If it's true, ignore this element when rendering. Used for tight lists
|
|
111
|
+
* to hide paragraphs.
|
|
112
|
+
**/
|
|
113
|
+
this.hidden = false
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Token.attrIndex(name) -> Number
|
|
118
|
+
*
|
|
119
|
+
* Search attribute index by name.
|
|
120
|
+
**/
|
|
121
|
+
Token.prototype.attrIndex = function attrIndex (name) {
|
|
122
|
+
if (!this.attrs) { return -1 }
|
|
123
|
+
|
|
124
|
+
const attrs = this.attrs
|
|
125
|
+
|
|
126
|
+
for (let i = 0, len = attrs.length; i < len; i++) {
|
|
127
|
+
if (attrs[i][0] === name) { return i }
|
|
128
|
+
}
|
|
129
|
+
return -1
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Token.attrPush(attrData)
|
|
134
|
+
*
|
|
135
|
+
* Add `[ name, value ]` attribute to list. Init attrs if necessary
|
|
136
|
+
**/
|
|
137
|
+
Token.prototype.attrPush = function attrPush (attrData) {
|
|
138
|
+
if (this.attrs) {
|
|
139
|
+
this.attrs.push(attrData)
|
|
140
|
+
} else {
|
|
141
|
+
this.attrs = [attrData]
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Token.attrSet(name, value)
|
|
147
|
+
*
|
|
148
|
+
* Set `name` attribute to `value`. Override old value if exists.
|
|
149
|
+
**/
|
|
150
|
+
Token.prototype.attrSet = function attrSet (name, value) {
|
|
151
|
+
const idx = this.attrIndex(name)
|
|
152
|
+
const attrData = [name, value]
|
|
153
|
+
|
|
154
|
+
if (idx < 0) {
|
|
155
|
+
this.attrPush(attrData)
|
|
156
|
+
} else {
|
|
157
|
+
this.attrs[idx] = attrData
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Token.attrGet(name)
|
|
163
|
+
*
|
|
164
|
+
* Get the value of attribute `name`, or null if it does not exist.
|
|
165
|
+
**/
|
|
166
|
+
Token.prototype.attrGet = function attrGet (name) {
|
|
167
|
+
const idx = this.attrIndex(name)
|
|
168
|
+
let value = null
|
|
169
|
+
if (idx >= 0) {
|
|
170
|
+
value = this.attrs[idx][1]
|
|
171
|
+
}
|
|
172
|
+
return value
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Token.attrJoin(name, value)
|
|
177
|
+
*
|
|
178
|
+
* Join value to existing attribute via space. Or create new attribute if not
|
|
179
|
+
* exists. Useful to operate with token classes.
|
|
180
|
+
**/
|
|
181
|
+
Token.prototype.attrJoin = function attrJoin (name, value) {
|
|
182
|
+
const idx = this.attrIndex(name)
|
|
183
|
+
|
|
184
|
+
if (idx < 0) {
|
|
185
|
+
this.attrPush([name, value])
|
|
186
|
+
} else {
|
|
187
|
+
this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export default Token
|
package/package.json
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@depup/markdown-it",
|
|
3
|
+
"version": "14.1.1-depup.1",
|
|
4
|
+
"description": "[DepUp] Markdown-it - modern pluggable markdown parser.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"depup",
|
|
7
|
+
"dependency-bumped",
|
|
8
|
+
"updated-deps",
|
|
9
|
+
"markdown-it",
|
|
10
|
+
"markdown",
|
|
11
|
+
"parser",
|
|
12
|
+
"commonmark",
|
|
13
|
+
"markdown-it-plugin"
|
|
14
|
+
],
|
|
15
|
+
"repository": "markdown-it/markdown-it",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"main": "dist/index.cjs.js",
|
|
18
|
+
"module": "index.mjs",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"import": "./index.mjs",
|
|
22
|
+
"require": "./dist/index.cjs.js"
|
|
23
|
+
},
|
|
24
|
+
"./*": {
|
|
25
|
+
"require": "./*",
|
|
26
|
+
"import": "./*"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"bin": {
|
|
30
|
+
"markdown-it": "bin/markdown-it.mjs"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"lint": "eslint .",
|
|
34
|
+
"test": "npm run lint && CJS_ONLY=1 npm run build && c8 --exclude dist --exclude test -r text -r html -r lcov mocha && node support/specsplit.mjs",
|
|
35
|
+
"doc": "node support/build_doc.mjs",
|
|
36
|
+
"gh-doc": "npm run doc && gh-pages -d apidoc -f",
|
|
37
|
+
"demo": "npm run lint && node support/build_demo.mjs",
|
|
38
|
+
"gh-demo": "npm run demo && gh-pages -d demo -f -b master -r git@github.com:markdown-it/markdown-it.github.io.git",
|
|
39
|
+
"build": "rollup -c support/rollup.config.mjs",
|
|
40
|
+
"benchmark-deps": "npm install --prefix benchmark/extra/ -g marked@0.3.6 commonmark@0.26.0 markdown-it/markdown-it.git#2.2.1",
|
|
41
|
+
"specsplit": "support/specsplit.mjs good -o test/fixtures/commonmark/good.txt && support/specsplit.mjs bad -o test/fixtures/commonmark/bad.txt && support/specsplit.mjs",
|
|
42
|
+
"todo": "grep 'TODO' -n -r ./lib 2>/dev/null"
|
|
43
|
+
},
|
|
44
|
+
"files": [
|
|
45
|
+
"index.mjs",
|
|
46
|
+
"lib/",
|
|
47
|
+
"dist/",
|
|
48
|
+
"changes.json",
|
|
49
|
+
"README.md"
|
|
50
|
+
],
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"argparse": "^2.0.1",
|
|
53
|
+
"entities": "^8.0.0",
|
|
54
|
+
"linkify-it": "^5.0.0",
|
|
55
|
+
"mdurl": "^2.0.0",
|
|
56
|
+
"punycode.js": "^2.3.1",
|
|
57
|
+
"uc.micro": "^2.1.0"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
61
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
62
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
63
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
64
|
+
"ansi": "^0.3.0",
|
|
65
|
+
"benchmark": "~2.1.0",
|
|
66
|
+
"c8": "^8.0.1",
|
|
67
|
+
"chai": "^4.2.0",
|
|
68
|
+
"eslint": "^8.4.1",
|
|
69
|
+
"eslint-config-standard": "^17.1.0",
|
|
70
|
+
"express": "^4.14.0",
|
|
71
|
+
"gh-pages": "^6.1.0",
|
|
72
|
+
"highlight.js": "^11.9.0",
|
|
73
|
+
"jest-worker": "^29.7.0",
|
|
74
|
+
"markdown-it-abbr": "^2.0.0",
|
|
75
|
+
"markdown-it-container": "^4.0.0",
|
|
76
|
+
"markdown-it-deflist": "^3.0.0",
|
|
77
|
+
"markdown-it-emoji": "^3.0.0",
|
|
78
|
+
"markdown-it-footnote": "^4.0.0",
|
|
79
|
+
"markdown-it-for-inline": "^2.0.1",
|
|
80
|
+
"markdown-it-ins": "^4.0.0",
|
|
81
|
+
"markdown-it-mark": "^4.0.0",
|
|
82
|
+
"markdown-it-sub": "^2.0.0",
|
|
83
|
+
"markdown-it-sup": "^2.0.0",
|
|
84
|
+
"markdown-it-testgen": "^0.1.3",
|
|
85
|
+
"mocha": "^10.2.0",
|
|
86
|
+
"ndoc": "^6.0.0",
|
|
87
|
+
"needle": "^3.0.0",
|
|
88
|
+
"rollup": "^4.5.0",
|
|
89
|
+
"shelljs": "^0.8.4",
|
|
90
|
+
"supertest": "^6.0.1"
|
|
91
|
+
},
|
|
92
|
+
"mocha": {
|
|
93
|
+
"inline-diffs": true,
|
|
94
|
+
"timeout": 60000
|
|
95
|
+
},
|
|
96
|
+
"depup": {
|
|
97
|
+
"changes": {
|
|
98
|
+
"entities": {
|
|
99
|
+
"from": "^4.4.0",
|
|
100
|
+
"to": "^8.0.0"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"depsUpdated": 1,
|
|
104
|
+
"originalPackage": "markdown-it",
|
|
105
|
+
"originalVersion": "14.1.1",
|
|
106
|
+
"processedAt": "2026-03-17T12:29:00.719Z",
|
|
107
|
+
"smokeTest": "passed"
|
|
108
|
+
}
|
|
109
|
+
}
|