mdast-util-dl-list 0.1.0
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 +21 -0
- package/README.md +76 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.js +993 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Yohei Kanamura
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# mdast-util-dl-list
|
|
2
|
+
|
|
3
|
+
Utilities for parsing and serializing definition lists
|
|
4
|
+
in **mdast**.
|
|
5
|
+
|
|
6
|
+
This package converts colon-based definition list syntax
|
|
7
|
+
into mdast nodes and supports round-trip markdown serialization.
|
|
8
|
+
|
|
9
|
+
For the detailed definition list syntax,
|
|
10
|
+
→ **[docs/syntax.md](https://github.com/kanemu/unified-dl-list/blob/main/docs/syntax.md)**.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install mdast-util-dl-list
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
or with pnpm:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pnpm add mdast-util-dl-list
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
### Parsing (from markdown)
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
import { fromMarkdown } from 'mdast-util-from-markdown'
|
|
30
|
+
import { dlListFromMarkdown } from 'mdast-util-dl-list'
|
|
31
|
+
import { dlList } from 'micromark-extension-dl-list'
|
|
32
|
+
|
|
33
|
+
const tree = fromMarkdown(': term\n : description\n', {
|
|
34
|
+
extensions: [dlList()],
|
|
35
|
+
mdastExtensions: [dlListFromMarkdown()]
|
|
36
|
+
})
|
|
37
|
+
console.log(tree);
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Serializing (to markdown)
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
import { toMarkdown } from 'mdast-util-to-markdown'
|
|
44
|
+
import { dlListToMarkdown } from 'mdast-util-dl-list'
|
|
45
|
+
|
|
46
|
+
// const tree = <your mdast tree>
|
|
47
|
+
const markdown = toMarkdown(tree, {
|
|
48
|
+
extensions: [dlListToMarkdown()]
|
|
49
|
+
})
|
|
50
|
+
console.log(markdown);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## What this package does
|
|
54
|
+
|
|
55
|
+
* Defines mdast node types for definition lists
|
|
56
|
+
* Converts micromark tokens into mdast nodes
|
|
57
|
+
* Supports multiple `<dd>` entries per `<dt>`
|
|
58
|
+
* Supports round-trip serialization back to markdown
|
|
59
|
+
|
|
60
|
+
## What this package does NOT do
|
|
61
|
+
|
|
62
|
+
* Does not parse raw markdown by itself
|
|
63
|
+
* Does not generate HTML
|
|
64
|
+
* Does not install remark plugins
|
|
65
|
+
|
|
66
|
+
## Related packages
|
|
67
|
+
|
|
68
|
+
This package is part of the **[unified-dl-list](https://github.com/kanemu/unified-dl-list)** monorepo:
|
|
69
|
+
|
|
70
|
+
- [`remark-dl-list`](https://github.com/kanemu/unified-dl-list/tree/main/packages/remark-dl-list)
|
|
71
|
+
- [`micromark-extension-dl-list`](https://github.com/kanemu/unified-dl-list/tree/main/packages/micromark-extension-dl-list)
|
|
72
|
+
- [`hast-util-dl-list`](https://github.com/kanemu/unified-dl-list/tree/main/packages/hast-util-dl-list)
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Extension } from 'mdast-util-from-markdown';
|
|
2
|
+
import { Data, PhrasingContent, RootContent } from 'mdast';
|
|
3
|
+
import { Position } from 'unist';
|
|
4
|
+
import { Unsafe, Join, Handle } from 'mdast-util-to-markdown';
|
|
5
|
+
|
|
6
|
+
type DlListFromMarkdownOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* Maximum nesting depth when re-parsing nested definition lists inside dd.
|
|
9
|
+
* This is a recursion guard to avoid infinite reparsing.
|
|
10
|
+
*
|
|
11
|
+
* Default: 8
|
|
12
|
+
*/
|
|
13
|
+
maxDepth?: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Minimal “Parent-like” shape for custom mdast nodes.
|
|
17
|
+
*
|
|
18
|
+
* We intentionally do NOT extend mdast.Parent because it fixes the element type
|
|
19
|
+
* of `children` (often RootContent[] or similar), which conflicts with our custom
|
|
20
|
+
* child unions.
|
|
21
|
+
*/
|
|
22
|
+
interface DlParent {
|
|
23
|
+
children: unknown[];
|
|
24
|
+
data?: Data;
|
|
25
|
+
position?: Position;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* `<dl>`
|
|
29
|
+
*/
|
|
30
|
+
interface DefinitionList extends DlParent {
|
|
31
|
+
type: 'definitionList';
|
|
32
|
+
children: DefinitionItem[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A group of `<dt>` + `<dd>*` inside a `<dl>`.
|
|
36
|
+
*/
|
|
37
|
+
interface DefinitionItem extends DlParent {
|
|
38
|
+
type: 'definitionItem';
|
|
39
|
+
children: Array<DefinitionTerm | DefinitionDescription>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* `<dt>` (inline only)
|
|
43
|
+
*/
|
|
44
|
+
interface DefinitionTerm extends DlParent {
|
|
45
|
+
type: 'definitionTerm';
|
|
46
|
+
children: PhrasingContent[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* `<dd>`
|
|
50
|
+
*
|
|
51
|
+
* NOTE:
|
|
52
|
+
* - dd can contain inline phrasing nodes AND flow/root children
|
|
53
|
+
* when we re-parse container blocks inside dd.
|
|
54
|
+
* - We intentionally store inline phrasing nodes directly under dd (no <p> wrapper),
|
|
55
|
+
* to match the HTML renderer behavior.
|
|
56
|
+
*/
|
|
57
|
+
interface DefinitionDescription extends DlParent {
|
|
58
|
+
type: 'definitionDescription';
|
|
59
|
+
children: Array<PhrasingContent | RootContent>;
|
|
60
|
+
}
|
|
61
|
+
type DefinitionNode = DefinitionList | DefinitionItem | DefinitionTerm | DefinitionDescription;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* mdast extension for dl-list.
|
|
65
|
+
*
|
|
66
|
+
* Current micromark token model (2026-01):
|
|
67
|
+
* - dt inline text comes from `dlTermText` (plus `dlHardBreak` for continuation newline)
|
|
68
|
+
* - dd content is stored in `dlDescContainer` (a flow chunk), which is re-parsed as Markdown
|
|
69
|
+
* - dd does NOT use `dlDescText`
|
|
70
|
+
*
|
|
71
|
+
* Behavior alignment with micromark-extension-dl-list/html.js:
|
|
72
|
+
* - dd container is deindented by `_dlIndent` columns
|
|
73
|
+
* - normalize list-indent and nested-dl-indent inside dd container
|
|
74
|
+
* - if container parses to a single paragraph, unwrap to phrasing directly under dd
|
|
75
|
+
*/
|
|
76
|
+
declare function dlListFromMarkdown(options?: DlListFromMarkdownOptions): Extension;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* to-markdown extension for serializing definition list nodes back to colon-based syntax.
|
|
80
|
+
*
|
|
81
|
+
* This serializer is intentionally strict about *not inserting extra blank lines*
|
|
82
|
+
* inside dl/dt/dd blocks. (Tests rely on this behavior.)
|
|
83
|
+
*/
|
|
84
|
+
declare function dlListToMarkdown(): {
|
|
85
|
+
unsafe: Unsafe[];
|
|
86
|
+
join: Join[];
|
|
87
|
+
handlers: Record<string, Handle>;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export { type DefinitionDescription, type DefinitionItem, type DefinitionList, type DefinitionNode, type DefinitionTerm, type DlListFromMarkdownOptions, dlListFromMarkdown, dlListToMarkdown };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,993 @@
|
|
|
1
|
+
// src/from-markdown.ts
|
|
2
|
+
import { fromMarkdown } from "mdast-util-from-markdown";
|
|
3
|
+
|
|
4
|
+
// ../../node_modules/.pnpm/micromark-util-symbol@2.0.1/node_modules/micromark-util-symbol/lib/codes.js
|
|
5
|
+
var codes = (
|
|
6
|
+
/** @type {const} */
|
|
7
|
+
{
|
|
8
|
+
carriageReturn: -5,
|
|
9
|
+
lineFeed: -4,
|
|
10
|
+
carriageReturnLineFeed: -3,
|
|
11
|
+
horizontalTab: -2,
|
|
12
|
+
virtualSpace: -1,
|
|
13
|
+
eof: null,
|
|
14
|
+
nul: 0,
|
|
15
|
+
soh: 1,
|
|
16
|
+
stx: 2,
|
|
17
|
+
etx: 3,
|
|
18
|
+
eot: 4,
|
|
19
|
+
enq: 5,
|
|
20
|
+
ack: 6,
|
|
21
|
+
bel: 7,
|
|
22
|
+
bs: 8,
|
|
23
|
+
ht: 9,
|
|
24
|
+
// `\t`
|
|
25
|
+
lf: 10,
|
|
26
|
+
// `\n`
|
|
27
|
+
vt: 11,
|
|
28
|
+
// `\v`
|
|
29
|
+
ff: 12,
|
|
30
|
+
// `\f`
|
|
31
|
+
cr: 13,
|
|
32
|
+
// `\r`
|
|
33
|
+
so: 14,
|
|
34
|
+
si: 15,
|
|
35
|
+
dle: 16,
|
|
36
|
+
dc1: 17,
|
|
37
|
+
dc2: 18,
|
|
38
|
+
dc3: 19,
|
|
39
|
+
dc4: 20,
|
|
40
|
+
nak: 21,
|
|
41
|
+
syn: 22,
|
|
42
|
+
etb: 23,
|
|
43
|
+
can: 24,
|
|
44
|
+
em: 25,
|
|
45
|
+
sub: 26,
|
|
46
|
+
esc: 27,
|
|
47
|
+
fs: 28,
|
|
48
|
+
gs: 29,
|
|
49
|
+
rs: 30,
|
|
50
|
+
us: 31,
|
|
51
|
+
space: 32,
|
|
52
|
+
exclamationMark: 33,
|
|
53
|
+
// `!`
|
|
54
|
+
quotationMark: 34,
|
|
55
|
+
// `"`
|
|
56
|
+
numberSign: 35,
|
|
57
|
+
// `#`
|
|
58
|
+
dollarSign: 36,
|
|
59
|
+
// `$`
|
|
60
|
+
percentSign: 37,
|
|
61
|
+
// `%`
|
|
62
|
+
ampersand: 38,
|
|
63
|
+
// `&`
|
|
64
|
+
apostrophe: 39,
|
|
65
|
+
// `'`
|
|
66
|
+
leftParenthesis: 40,
|
|
67
|
+
// `(`
|
|
68
|
+
rightParenthesis: 41,
|
|
69
|
+
// `)`
|
|
70
|
+
asterisk: 42,
|
|
71
|
+
// `*`
|
|
72
|
+
plusSign: 43,
|
|
73
|
+
// `+`
|
|
74
|
+
comma: 44,
|
|
75
|
+
// `,`
|
|
76
|
+
dash: 45,
|
|
77
|
+
// `-`
|
|
78
|
+
dot: 46,
|
|
79
|
+
// `.`
|
|
80
|
+
slash: 47,
|
|
81
|
+
// `/`
|
|
82
|
+
digit0: 48,
|
|
83
|
+
// `0`
|
|
84
|
+
digit1: 49,
|
|
85
|
+
// `1`
|
|
86
|
+
digit2: 50,
|
|
87
|
+
// `2`
|
|
88
|
+
digit3: 51,
|
|
89
|
+
// `3`
|
|
90
|
+
digit4: 52,
|
|
91
|
+
// `4`
|
|
92
|
+
digit5: 53,
|
|
93
|
+
// `5`
|
|
94
|
+
digit6: 54,
|
|
95
|
+
// `6`
|
|
96
|
+
digit7: 55,
|
|
97
|
+
// `7`
|
|
98
|
+
digit8: 56,
|
|
99
|
+
// `8`
|
|
100
|
+
digit9: 57,
|
|
101
|
+
// `9`
|
|
102
|
+
colon: 58,
|
|
103
|
+
// `:`
|
|
104
|
+
semicolon: 59,
|
|
105
|
+
// `;`
|
|
106
|
+
lessThan: 60,
|
|
107
|
+
// `<`
|
|
108
|
+
equalsTo: 61,
|
|
109
|
+
// `=`
|
|
110
|
+
greaterThan: 62,
|
|
111
|
+
// `>`
|
|
112
|
+
questionMark: 63,
|
|
113
|
+
// `?`
|
|
114
|
+
atSign: 64,
|
|
115
|
+
// `@`
|
|
116
|
+
uppercaseA: 65,
|
|
117
|
+
// `A`
|
|
118
|
+
uppercaseB: 66,
|
|
119
|
+
// `B`
|
|
120
|
+
uppercaseC: 67,
|
|
121
|
+
// `C`
|
|
122
|
+
uppercaseD: 68,
|
|
123
|
+
// `D`
|
|
124
|
+
uppercaseE: 69,
|
|
125
|
+
// `E`
|
|
126
|
+
uppercaseF: 70,
|
|
127
|
+
// `F`
|
|
128
|
+
uppercaseG: 71,
|
|
129
|
+
// `G`
|
|
130
|
+
uppercaseH: 72,
|
|
131
|
+
// `H`
|
|
132
|
+
uppercaseI: 73,
|
|
133
|
+
// `I`
|
|
134
|
+
uppercaseJ: 74,
|
|
135
|
+
// `J`
|
|
136
|
+
uppercaseK: 75,
|
|
137
|
+
// `K`
|
|
138
|
+
uppercaseL: 76,
|
|
139
|
+
// `L`
|
|
140
|
+
uppercaseM: 77,
|
|
141
|
+
// `M`
|
|
142
|
+
uppercaseN: 78,
|
|
143
|
+
// `N`
|
|
144
|
+
uppercaseO: 79,
|
|
145
|
+
// `O`
|
|
146
|
+
uppercaseP: 80,
|
|
147
|
+
// `P`
|
|
148
|
+
uppercaseQ: 81,
|
|
149
|
+
// `Q`
|
|
150
|
+
uppercaseR: 82,
|
|
151
|
+
// `R`
|
|
152
|
+
uppercaseS: 83,
|
|
153
|
+
// `S`
|
|
154
|
+
uppercaseT: 84,
|
|
155
|
+
// `T`
|
|
156
|
+
uppercaseU: 85,
|
|
157
|
+
// `U`
|
|
158
|
+
uppercaseV: 86,
|
|
159
|
+
// `V`
|
|
160
|
+
uppercaseW: 87,
|
|
161
|
+
// `W`
|
|
162
|
+
uppercaseX: 88,
|
|
163
|
+
// `X`
|
|
164
|
+
uppercaseY: 89,
|
|
165
|
+
// `Y`
|
|
166
|
+
uppercaseZ: 90,
|
|
167
|
+
// `Z`
|
|
168
|
+
leftSquareBracket: 91,
|
|
169
|
+
// `[`
|
|
170
|
+
backslash: 92,
|
|
171
|
+
// `\`
|
|
172
|
+
rightSquareBracket: 93,
|
|
173
|
+
// `]`
|
|
174
|
+
caret: 94,
|
|
175
|
+
// `^`
|
|
176
|
+
underscore: 95,
|
|
177
|
+
// `_`
|
|
178
|
+
graveAccent: 96,
|
|
179
|
+
// `` ` ``
|
|
180
|
+
lowercaseA: 97,
|
|
181
|
+
// `a`
|
|
182
|
+
lowercaseB: 98,
|
|
183
|
+
// `b`
|
|
184
|
+
lowercaseC: 99,
|
|
185
|
+
// `c`
|
|
186
|
+
lowercaseD: 100,
|
|
187
|
+
// `d`
|
|
188
|
+
lowercaseE: 101,
|
|
189
|
+
// `e`
|
|
190
|
+
lowercaseF: 102,
|
|
191
|
+
// `f`
|
|
192
|
+
lowercaseG: 103,
|
|
193
|
+
// `g`
|
|
194
|
+
lowercaseH: 104,
|
|
195
|
+
// `h`
|
|
196
|
+
lowercaseI: 105,
|
|
197
|
+
// `i`
|
|
198
|
+
lowercaseJ: 106,
|
|
199
|
+
// `j`
|
|
200
|
+
lowercaseK: 107,
|
|
201
|
+
// `k`
|
|
202
|
+
lowercaseL: 108,
|
|
203
|
+
// `l`
|
|
204
|
+
lowercaseM: 109,
|
|
205
|
+
// `m`
|
|
206
|
+
lowercaseN: 110,
|
|
207
|
+
// `n`
|
|
208
|
+
lowercaseO: 111,
|
|
209
|
+
// `o`
|
|
210
|
+
lowercaseP: 112,
|
|
211
|
+
// `p`
|
|
212
|
+
lowercaseQ: 113,
|
|
213
|
+
// `q`
|
|
214
|
+
lowercaseR: 114,
|
|
215
|
+
// `r`
|
|
216
|
+
lowercaseS: 115,
|
|
217
|
+
// `s`
|
|
218
|
+
lowercaseT: 116,
|
|
219
|
+
// `t`
|
|
220
|
+
lowercaseU: 117,
|
|
221
|
+
// `u`
|
|
222
|
+
lowercaseV: 118,
|
|
223
|
+
// `v`
|
|
224
|
+
lowercaseW: 119,
|
|
225
|
+
// `w`
|
|
226
|
+
lowercaseX: 120,
|
|
227
|
+
// `x`
|
|
228
|
+
lowercaseY: 121,
|
|
229
|
+
// `y`
|
|
230
|
+
lowercaseZ: 122,
|
|
231
|
+
// `z`
|
|
232
|
+
leftCurlyBrace: 123,
|
|
233
|
+
// `{`
|
|
234
|
+
verticalBar: 124,
|
|
235
|
+
// `|`
|
|
236
|
+
rightCurlyBrace: 125,
|
|
237
|
+
// `}`
|
|
238
|
+
tilde: 126,
|
|
239
|
+
// `~`
|
|
240
|
+
del: 127,
|
|
241
|
+
// Unicode Specials block.
|
|
242
|
+
byteOrderMarker: 65279,
|
|
243
|
+
// Unicode Specials block.
|
|
244
|
+
replacementCharacter: 65533
|
|
245
|
+
// `�`
|
|
246
|
+
}
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
// ../../node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js
|
|
250
|
+
var asciiAlpha = regexCheck(/[A-Za-z]/);
|
|
251
|
+
var asciiAlphanumeric = regexCheck(/[\dA-Za-z]/);
|
|
252
|
+
var asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/);
|
|
253
|
+
var asciiDigit = regexCheck(/\d/);
|
|
254
|
+
var asciiHexDigit = regexCheck(/[\dA-Fa-f]/);
|
|
255
|
+
var asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);
|
|
256
|
+
function markdownLineEnding(code) {
|
|
257
|
+
return code !== null && code < -2;
|
|
258
|
+
}
|
|
259
|
+
var unicodePunctuation = regexCheck(new RegExp("\\p{P}|\\p{S}", "u"));
|
|
260
|
+
var unicodeWhitespace = regexCheck(/\s/);
|
|
261
|
+
function regexCheck(regex) {
|
|
262
|
+
return check;
|
|
263
|
+
function check(code) {
|
|
264
|
+
return code !== null && code > -1 && regex.test(String.fromCharCode(code));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// ../micromark-extension-dl-list/src/constants.js
|
|
269
|
+
var TAB_SIZE = 4;
|
|
270
|
+
var MAX_PREFIX_COLS = 4;
|
|
271
|
+
|
|
272
|
+
// ../micromark-extension-dl-list/src/util.js
|
|
273
|
+
function isEof(code) {
|
|
274
|
+
return code === codes.eof;
|
|
275
|
+
}
|
|
276
|
+
function isIndent(code) {
|
|
277
|
+
return code === codes.space || code === codes.ht || code === codes.virtualSpace || code === codes.horizontalTab;
|
|
278
|
+
}
|
|
279
|
+
function consumeSafe(effects, code) {
|
|
280
|
+
if (typeof code !== "number") return;
|
|
281
|
+
effects.consume(code);
|
|
282
|
+
}
|
|
283
|
+
function advanceColumn(col, code) {
|
|
284
|
+
if (code === codes.ht || code === codes.horizontalTab) {
|
|
285
|
+
const r = col % TAB_SIZE;
|
|
286
|
+
return col + (r === 0 ? TAB_SIZE : TAB_SIZE - r);
|
|
287
|
+
}
|
|
288
|
+
return col + 1;
|
|
289
|
+
}
|
|
290
|
+
function consumeLineEndingSafe(effects, code) {
|
|
291
|
+
if (!markdownLineEnding(code)) return;
|
|
292
|
+
effects.enter("dlLineEnding");
|
|
293
|
+
effects.consume(code);
|
|
294
|
+
effects.exit("dlLineEnding");
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ../micromark-extension-dl-list/src/lookahead.js
|
|
298
|
+
function checkPrefixFactory() {
|
|
299
|
+
return {
|
|
300
|
+
tokenize(effects2, ok2, nok2) {
|
|
301
|
+
let col = 0;
|
|
302
|
+
return start2;
|
|
303
|
+
function start2(code) {
|
|
304
|
+
if (isEof(code)) return nok2(code);
|
|
305
|
+
if (code === codes.colon) return ok2(code);
|
|
306
|
+
if (isIndent(code) && col < MAX_PREFIX_COLS) {
|
|
307
|
+
col = advanceColumn(col, code);
|
|
308
|
+
consumeSafe(effects2, code);
|
|
309
|
+
if (col > MAX_PREFIX_COLS) return nok2(code);
|
|
310
|
+
return start2;
|
|
311
|
+
}
|
|
312
|
+
return nok2(code);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
function checkAfterEolContinueFactory() {
|
|
318
|
+
return {
|
|
319
|
+
tokenize(effects2, ok2, nok2) {
|
|
320
|
+
let opened = false;
|
|
321
|
+
return start2;
|
|
322
|
+
function start2(code) {
|
|
323
|
+
if (isEof(code)) return ok2(code);
|
|
324
|
+
if (!markdownLineEnding(code)) return nok2(code);
|
|
325
|
+
effects2.enter("dlCheck");
|
|
326
|
+
opened = true;
|
|
327
|
+
effects2.consume(code);
|
|
328
|
+
return head;
|
|
329
|
+
}
|
|
330
|
+
function head(code) {
|
|
331
|
+
if (isEof(code)) return endOk(code);
|
|
332
|
+
if (markdownLineEnding(code)) return endNok(code);
|
|
333
|
+
if (code === codes.colon) return endOk(code);
|
|
334
|
+
if (isIndent(code)) return endOk(code);
|
|
335
|
+
return endNok(code);
|
|
336
|
+
}
|
|
337
|
+
function endOk(code) {
|
|
338
|
+
if (opened) {
|
|
339
|
+
effects2.exit("dlCheck");
|
|
340
|
+
opened = false;
|
|
341
|
+
}
|
|
342
|
+
return ok2(code);
|
|
343
|
+
}
|
|
344
|
+
function endNok(code) {
|
|
345
|
+
if (opened) {
|
|
346
|
+
effects2.exit("dlCheck");
|
|
347
|
+
opened = false;
|
|
348
|
+
}
|
|
349
|
+
return nok2(code);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
function checkDlStartFactory(baseIndentArg, ddIndentArg) {
|
|
355
|
+
return {
|
|
356
|
+
tokenize(effects2, ok2, nok2) {
|
|
357
|
+
let col = 0;
|
|
358
|
+
let opened = false;
|
|
359
|
+
return start2;
|
|
360
|
+
function start2(code) {
|
|
361
|
+
if (isEof(code)) return nok2(code);
|
|
362
|
+
if (code !== codes.colon) return nok2(code);
|
|
363
|
+
effects2.enter("dlCheck");
|
|
364
|
+
opened = true;
|
|
365
|
+
effects2.consume(code);
|
|
366
|
+
return restOfLine;
|
|
367
|
+
}
|
|
368
|
+
function restOfLine(code) {
|
|
369
|
+
if (isEof(code)) return endOk(code);
|
|
370
|
+
if (markdownLineEnding(code)) {
|
|
371
|
+
effects2.consume(code);
|
|
372
|
+
col = 0;
|
|
373
|
+
return nextLineHead;
|
|
374
|
+
}
|
|
375
|
+
effects2.consume(code);
|
|
376
|
+
return restOfLine;
|
|
377
|
+
}
|
|
378
|
+
function nextLineHead(code) {
|
|
379
|
+
if (isEof(code)) return endOk(code);
|
|
380
|
+
if (markdownLineEnding(code)) return endOk(code);
|
|
381
|
+
if (isIndent(code) && col < 512) {
|
|
382
|
+
col = advanceColumn(col, code);
|
|
383
|
+
effects2.consume(code);
|
|
384
|
+
return nextLineHead;
|
|
385
|
+
}
|
|
386
|
+
if (code === codes.colon && (col === baseIndentArg || col === ddIndentArg)) {
|
|
387
|
+
return endOk(code);
|
|
388
|
+
}
|
|
389
|
+
if (col > baseIndentArg) return endOk(code);
|
|
390
|
+
return endNok(code);
|
|
391
|
+
}
|
|
392
|
+
function endOk(code) {
|
|
393
|
+
if (opened) {
|
|
394
|
+
effects2.exit("dlCheck");
|
|
395
|
+
opened = false;
|
|
396
|
+
}
|
|
397
|
+
return ok2(code);
|
|
398
|
+
}
|
|
399
|
+
function endNok(code) {
|
|
400
|
+
if (opened) {
|
|
401
|
+
effects2.exit("dlCheck");
|
|
402
|
+
opened = false;
|
|
403
|
+
}
|
|
404
|
+
return nok2(code);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// ../micromark-extension-dl-list/src/tokenize.js
|
|
411
|
+
function tokenizeDlList(effects, ok, nok) {
|
|
412
|
+
let baseIndent = 0;
|
|
413
|
+
let ddIndent = 4;
|
|
414
|
+
let lastField = null;
|
|
415
|
+
let listOpen = false;
|
|
416
|
+
let itemOpen = false;
|
|
417
|
+
let termOpen = false;
|
|
418
|
+
let descOpen = false;
|
|
419
|
+
let termTextOpen = false;
|
|
420
|
+
const closeTermTextIfOpen = () => {
|
|
421
|
+
if (termTextOpen) {
|
|
422
|
+
effects.exit("dlTermText");
|
|
423
|
+
termTextOpen = false;
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
const closeTermIfOpen = () => {
|
|
427
|
+
closeTermTextIfOpen();
|
|
428
|
+
if (termOpen) {
|
|
429
|
+
effects.exit("dlTerm");
|
|
430
|
+
termOpen = false;
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
const closeDescIfOpen = () => {
|
|
434
|
+
if (descOpen) {
|
|
435
|
+
effects.exit("dlDesc");
|
|
436
|
+
descOpen = false;
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
const closeFieldIfOpen = () => {
|
|
440
|
+
closeDescIfOpen();
|
|
441
|
+
closeTermIfOpen();
|
|
442
|
+
lastField = null;
|
|
443
|
+
};
|
|
444
|
+
const closeItemIfOpen = () => {
|
|
445
|
+
closeFieldIfOpen();
|
|
446
|
+
if (itemOpen) {
|
|
447
|
+
effects.exit("dlItem");
|
|
448
|
+
itemOpen = false;
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
const closeAll = () => {
|
|
452
|
+
closeItemIfOpen();
|
|
453
|
+
if (listOpen) {
|
|
454
|
+
effects.exit("dlList");
|
|
455
|
+
listOpen = false;
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
const start = (code) => {
|
|
459
|
+
baseIndent = 0;
|
|
460
|
+
ddIndent = 4;
|
|
461
|
+
lastField = null;
|
|
462
|
+
listOpen = false;
|
|
463
|
+
itemOpen = false;
|
|
464
|
+
termOpen = false;
|
|
465
|
+
descOpen = false;
|
|
466
|
+
termTextOpen = false;
|
|
467
|
+
return prefix(code, 0);
|
|
468
|
+
};
|
|
469
|
+
const prefix = (code, col) => {
|
|
470
|
+
if (isEof(code)) return nok(code);
|
|
471
|
+
if (code === codes.colon) {
|
|
472
|
+
let onOk2 = function() {
|
|
473
|
+
baseIndent = col;
|
|
474
|
+
ddIndent = baseIndent + 4;
|
|
475
|
+
effects.enter("dlList");
|
|
476
|
+
listOpen = true;
|
|
477
|
+
return termMarker(code);
|
|
478
|
+
};
|
|
479
|
+
var onOk = onOk2;
|
|
480
|
+
if (col > 3) return nok(code);
|
|
481
|
+
return effects.check(
|
|
482
|
+
checkDlStartFactory(col, col + 4),
|
|
483
|
+
onOk2,
|
|
484
|
+
nok
|
|
485
|
+
)(code);
|
|
486
|
+
}
|
|
487
|
+
if (isIndent(code) && col < MAX_PREFIX_COLS) {
|
|
488
|
+
let onOk2 = function() {
|
|
489
|
+
return prefixConsume(code, 0);
|
|
490
|
+
};
|
|
491
|
+
var onOk = onOk2;
|
|
492
|
+
return effects.check(checkPrefixFactory(), onOk2, nok)(code);
|
|
493
|
+
}
|
|
494
|
+
return nok(code);
|
|
495
|
+
};
|
|
496
|
+
const prefixConsume = (code, col) => {
|
|
497
|
+
if (isEof(code)) return nok(code);
|
|
498
|
+
if (code === codes.colon) {
|
|
499
|
+
let onOk2 = function() {
|
|
500
|
+
baseIndent = col;
|
|
501
|
+
ddIndent = baseIndent + 4;
|
|
502
|
+
effects.enter("dlList");
|
|
503
|
+
listOpen = true;
|
|
504
|
+
return termMarker(code);
|
|
505
|
+
};
|
|
506
|
+
var onOk = onOk2;
|
|
507
|
+
if (col > 3) return nok(code);
|
|
508
|
+
return effects.check(
|
|
509
|
+
checkDlStartFactory(col, col + 4),
|
|
510
|
+
onOk2,
|
|
511
|
+
nok
|
|
512
|
+
)(code);
|
|
513
|
+
}
|
|
514
|
+
if (isIndent(code) && col < MAX_PREFIX_COLS) {
|
|
515
|
+
effects.enter("dlIndent");
|
|
516
|
+
consumeSafe(effects, code);
|
|
517
|
+
effects.exit("dlIndent");
|
|
518
|
+
const nextCol = advanceColumn(col, code);
|
|
519
|
+
if (nextCol > MAX_PREFIX_COLS) return nok(code);
|
|
520
|
+
return (c) => prefixConsume(c, nextCol);
|
|
521
|
+
}
|
|
522
|
+
return nok(code);
|
|
523
|
+
};
|
|
524
|
+
const termMarker = (code) => {
|
|
525
|
+
if (isEof(code) || code !== codes.colon) return nok(code);
|
|
526
|
+
closeItemIfOpen();
|
|
527
|
+
effects.enter("dlItem");
|
|
528
|
+
itemOpen = true;
|
|
529
|
+
effects.enter("dlTerm");
|
|
530
|
+
termOpen = true;
|
|
531
|
+
lastField = "term";
|
|
532
|
+
consumeSafe(effects, code);
|
|
533
|
+
return afterMarkerToTerm;
|
|
534
|
+
};
|
|
535
|
+
const afterMarkerToTerm = (code) => {
|
|
536
|
+
if (isEof(code) || markdownLineEnding(code)) return afterEol(code);
|
|
537
|
+
if (isIndent(code)) {
|
|
538
|
+
effects.enter("dlMarkerSpace");
|
|
539
|
+
consumeSafe(effects, code);
|
|
540
|
+
effects.exit("dlMarkerSpace");
|
|
541
|
+
return termTextStart;
|
|
542
|
+
}
|
|
543
|
+
return termTextStart(code);
|
|
544
|
+
};
|
|
545
|
+
const termTextStart = (code) => {
|
|
546
|
+
effects.enter("dlTermText");
|
|
547
|
+
termTextOpen = true;
|
|
548
|
+
return termText(code);
|
|
549
|
+
};
|
|
550
|
+
const termText = (code) => {
|
|
551
|
+
if (isEof(code) || markdownLineEnding(code)) {
|
|
552
|
+
effects.exit("dlTermText");
|
|
553
|
+
termTextOpen = false;
|
|
554
|
+
return afterEol(code);
|
|
555
|
+
}
|
|
556
|
+
consumeSafe(effects, code);
|
|
557
|
+
return termText;
|
|
558
|
+
};
|
|
559
|
+
const afterEol = (code) => {
|
|
560
|
+
if (isEof(code)) {
|
|
561
|
+
closeAll();
|
|
562
|
+
return ok(code);
|
|
563
|
+
}
|
|
564
|
+
if (!markdownLineEnding(code)) return nok(code);
|
|
565
|
+
return effects.check(
|
|
566
|
+
checkAfterEolContinueFactory(),
|
|
567
|
+
onContinue,
|
|
568
|
+
onStop
|
|
569
|
+
)(code);
|
|
570
|
+
function onContinue() {
|
|
571
|
+
consumeLineEndingSafe(effects, code);
|
|
572
|
+
return lineStart;
|
|
573
|
+
}
|
|
574
|
+
function onStop() {
|
|
575
|
+
closeAll();
|
|
576
|
+
return ok(code);
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
const lineStart = (code) => {
|
|
580
|
+
if (isEof(code) || markdownLineEnding(code)) {
|
|
581
|
+
closeAll();
|
|
582
|
+
return ok(code);
|
|
583
|
+
}
|
|
584
|
+
if (code === codes.colon) {
|
|
585
|
+
closeFieldIfOpen();
|
|
586
|
+
return termMarker(code);
|
|
587
|
+
}
|
|
588
|
+
if (isIndent(code)) return scanIndent(code, 0);
|
|
589
|
+
closeAll();
|
|
590
|
+
return ok(code);
|
|
591
|
+
};
|
|
592
|
+
const scanIndent = (code, col) => {
|
|
593
|
+
if (isEof(code)) {
|
|
594
|
+
closeAll();
|
|
595
|
+
return ok(code);
|
|
596
|
+
}
|
|
597
|
+
if (isIndent(code) && col < 512) {
|
|
598
|
+
effects.enter("dlIndent");
|
|
599
|
+
consumeSafe(effects, code);
|
|
600
|
+
effects.exit("dlIndent");
|
|
601
|
+
const nextCol = advanceColumn(col, code);
|
|
602
|
+
return (c) => scanIndent(c, nextCol);
|
|
603
|
+
}
|
|
604
|
+
if (col >= ddIndent && code === codes.colon) {
|
|
605
|
+
closeTermIfOpen();
|
|
606
|
+
return descMarker(code);
|
|
607
|
+
}
|
|
608
|
+
if (col === baseIndent && code === codes.colon) {
|
|
609
|
+
closeFieldIfOpen();
|
|
610
|
+
return termMarker(code);
|
|
611
|
+
}
|
|
612
|
+
if (col > baseIndent) {
|
|
613
|
+
if (!termOpen && !descOpen) {
|
|
614
|
+
closeAll();
|
|
615
|
+
return ok(code);
|
|
616
|
+
}
|
|
617
|
+
return continuationLine(code);
|
|
618
|
+
}
|
|
619
|
+
closeAll();
|
|
620
|
+
return ok(code);
|
|
621
|
+
};
|
|
622
|
+
const descMarker = (code) => {
|
|
623
|
+
if (isEof(code) || code !== codes.colon) return nok(code);
|
|
624
|
+
closeDescIfOpen();
|
|
625
|
+
effects.enter("dlDesc");
|
|
626
|
+
descOpen = true;
|
|
627
|
+
lastField = "desc";
|
|
628
|
+
consumeSafe(effects, code);
|
|
629
|
+
return afterMarkerToDesc;
|
|
630
|
+
};
|
|
631
|
+
const afterMarkerToDesc = (code) => {
|
|
632
|
+
if (isEof(code)) return afterEol(code);
|
|
633
|
+
if (markdownLineEnding(code)) {
|
|
634
|
+
const t2 = effects.enter("dlDescContainer");
|
|
635
|
+
t2._dlIndent = ddIndent;
|
|
636
|
+
return descContainerContent(code);
|
|
637
|
+
}
|
|
638
|
+
if (isIndent(code)) {
|
|
639
|
+
effects.enter("dlMarkerSpace");
|
|
640
|
+
consumeSafe(effects, code);
|
|
641
|
+
effects.exit("dlMarkerSpace");
|
|
642
|
+
return afterMarkerToDesc;
|
|
643
|
+
}
|
|
644
|
+
const t = effects.enter("dlDescContainer");
|
|
645
|
+
t._dlIndent = ddIndent;
|
|
646
|
+
return descContainerContent(code);
|
|
647
|
+
};
|
|
648
|
+
const descContainerContent = (code) => {
|
|
649
|
+
if (isEof(code)) {
|
|
650
|
+
effects.exit("dlDescContainer");
|
|
651
|
+
closeAll();
|
|
652
|
+
return ok(code);
|
|
653
|
+
}
|
|
654
|
+
if (markdownLineEnding(code)) {
|
|
655
|
+
let onContinue2 = function() {
|
|
656
|
+
consumeLineEndingSafe(effects, code);
|
|
657
|
+
return descContainerLineStart;
|
|
658
|
+
}, onStop2 = function() {
|
|
659
|
+
effects.exit("dlDescContainer");
|
|
660
|
+
closeAll();
|
|
661
|
+
return ok(code);
|
|
662
|
+
};
|
|
663
|
+
var onContinue = onContinue2, onStop = onStop2;
|
|
664
|
+
return effects.check(
|
|
665
|
+
checkAfterEolContinueFactory(),
|
|
666
|
+
onContinue2,
|
|
667
|
+
onStop2
|
|
668
|
+
)(code);
|
|
669
|
+
}
|
|
670
|
+
consumeSafe(effects, code);
|
|
671
|
+
return descContainerContent;
|
|
672
|
+
};
|
|
673
|
+
const descContainerLineStart = (code) => {
|
|
674
|
+
if (isEof(code)) {
|
|
675
|
+
effects.exit("dlDescContainer");
|
|
676
|
+
closeAll();
|
|
677
|
+
return ok(code);
|
|
678
|
+
}
|
|
679
|
+
if (markdownLineEnding(code)) {
|
|
680
|
+
consumeLineEndingSafe(effects, code);
|
|
681
|
+
return descContainerLineStart;
|
|
682
|
+
}
|
|
683
|
+
if (code === codes.colon) {
|
|
684
|
+
effects.exit("dlDescContainer");
|
|
685
|
+
closeDescIfOpen();
|
|
686
|
+
return lineStart(code);
|
|
687
|
+
}
|
|
688
|
+
if (isIndent(code)) return descContainerScanIndent(code, 0);
|
|
689
|
+
effects.exit("dlDescContainer");
|
|
690
|
+
closeAll();
|
|
691
|
+
return ok(code);
|
|
692
|
+
};
|
|
693
|
+
const descContainerScanIndent = (code, col) => {
|
|
694
|
+
if (isEof(code)) {
|
|
695
|
+
effects.exit("dlDescContainer");
|
|
696
|
+
closeAll();
|
|
697
|
+
return ok(code);
|
|
698
|
+
}
|
|
699
|
+
if (isIndent(code) && col < 512) {
|
|
700
|
+
consumeSafe(effects, code);
|
|
701
|
+
const nextCol = advanceColumn(col, code);
|
|
702
|
+
return (c) => descContainerScanIndent(c, nextCol);
|
|
703
|
+
}
|
|
704
|
+
if (col === baseIndent && code === codes.colon) {
|
|
705
|
+
effects.exit("dlDescContainer");
|
|
706
|
+
closeDescIfOpen();
|
|
707
|
+
return termMarker(code);
|
|
708
|
+
}
|
|
709
|
+
if (col === ddIndent && code === codes.colon) {
|
|
710
|
+
effects.exit("dlDescContainer");
|
|
711
|
+
closeDescIfOpen();
|
|
712
|
+
return descMarker(code);
|
|
713
|
+
}
|
|
714
|
+
return descContainerContent(code);
|
|
715
|
+
};
|
|
716
|
+
const continuationLine = (code) => {
|
|
717
|
+
effects.enter("dlHardBreak");
|
|
718
|
+
effects.exit("dlHardBreak");
|
|
719
|
+
if (lastField === "term" && termOpen) {
|
|
720
|
+
effects.enter("dlTermText");
|
|
721
|
+
termTextOpen = true;
|
|
722
|
+
return contTextAsTerm(code);
|
|
723
|
+
}
|
|
724
|
+
if (lastField === "desc" && descOpen) {
|
|
725
|
+
const t = effects.enter("dlDescContainer");
|
|
726
|
+
t._dlIndent = ddIndent;
|
|
727
|
+
return descContainerContent(code);
|
|
728
|
+
}
|
|
729
|
+
closeAll();
|
|
730
|
+
return ok(code);
|
|
731
|
+
};
|
|
732
|
+
const contTextAsTerm = (code) => {
|
|
733
|
+
if (isEof(code) || markdownLineEnding(code)) {
|
|
734
|
+
effects.exit("dlTermText");
|
|
735
|
+
termTextOpen = false;
|
|
736
|
+
return afterEol(code);
|
|
737
|
+
}
|
|
738
|
+
consumeSafe(effects, code);
|
|
739
|
+
return contTextAsTerm;
|
|
740
|
+
};
|
|
741
|
+
return start;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
// ../micromark-extension-dl-list/src/syntax.js
|
|
745
|
+
function dlList() {
|
|
746
|
+
const construct = { name: "dlList", tokenize: tokenizeDlList, concrete: true };
|
|
747
|
+
return {
|
|
748
|
+
flow: {
|
|
749
|
+
[codes.colon]: construct,
|
|
750
|
+
[codes.space]: construct,
|
|
751
|
+
[codes.ht]: construct
|
|
752
|
+
}
|
|
753
|
+
};
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
// src/from-markdown.ts
|
|
757
|
+
function dlListFromMarkdown(options = {}) {
|
|
758
|
+
const maxDepth = options.maxDepth ?? 8;
|
|
759
|
+
return {
|
|
760
|
+
enter: {
|
|
761
|
+
dlList(token) {
|
|
762
|
+
this.enter({ type: "definitionList", children: [] }, token);
|
|
763
|
+
},
|
|
764
|
+
dlItem(token) {
|
|
765
|
+
this.enter({ type: "definitionItem", children: [] }, token);
|
|
766
|
+
},
|
|
767
|
+
dlTerm(token) {
|
|
768
|
+
this.enter({ type: "definitionTerm", children: [], _dlRaw: "" }, token);
|
|
769
|
+
},
|
|
770
|
+
dlDesc(token) {
|
|
771
|
+
this.enter({ type: "definitionDescription", children: [] }, token);
|
|
772
|
+
},
|
|
773
|
+
// continuation newline inside dt (tokenizer emits dlHardBreak)
|
|
774
|
+
dlHardBreak() {
|
|
775
|
+
const dt = peekTop(this);
|
|
776
|
+
if (dt?.type === "definitionTerm") {
|
|
777
|
+
dt._dlRaw += "\n";
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
},
|
|
781
|
+
exit: {
|
|
782
|
+
// dt inline text (we keep it as raw; parse at dt exit)
|
|
783
|
+
dlTermText(token) {
|
|
784
|
+
const dt = peekTop(this);
|
|
785
|
+
if (dt?.type === "definitionTerm") {
|
|
786
|
+
dt._dlRaw += this.sliceSerialize(token);
|
|
787
|
+
}
|
|
788
|
+
},
|
|
789
|
+
// dd body (flow chunk) — main path in current tokenizer
|
|
790
|
+
dlDescContainer(token) {
|
|
791
|
+
if (maxDepth <= 0) return;
|
|
792
|
+
const dd = peekTop(this);
|
|
793
|
+
if (dd?.type !== "definitionDescription") return;
|
|
794
|
+
let raw = this.sliceSerialize(token);
|
|
795
|
+
const indentCols = token._dlIndent ?? 0;
|
|
796
|
+
raw = deindentByColumns(raw, indentCols);
|
|
797
|
+
raw = normalizeFlatListIndentInDd(raw);
|
|
798
|
+
raw = normalizeNestedDlIndentInDd(raw);
|
|
799
|
+
const tree = fromMarkdown(raw, {
|
|
800
|
+
extensions: [dlList()],
|
|
801
|
+
mdastExtensions: [dlListFromMarkdown({ maxDepth: maxDepth - 1 })]
|
|
802
|
+
});
|
|
803
|
+
const children = tree.children ?? [];
|
|
804
|
+
if (children.length === 1 && children[0]?.type === "paragraph") {
|
|
805
|
+
dd.children.push(...children[0].children ?? []);
|
|
806
|
+
} else {
|
|
807
|
+
dd.children.push(...children);
|
|
808
|
+
}
|
|
809
|
+
},
|
|
810
|
+
dlTerm(token) {
|
|
811
|
+
const dt = peekTop(this);
|
|
812
|
+
if (dt?.type === "definitionTerm") {
|
|
813
|
+
const raw = String(dt._dlRaw ?? "").trimEnd();
|
|
814
|
+
dt.children = parseInlineToPhrasing(raw);
|
|
815
|
+
delete dt._dlRaw;
|
|
816
|
+
}
|
|
817
|
+
this.exit(token);
|
|
818
|
+
},
|
|
819
|
+
dlDesc(token) {
|
|
820
|
+
this.exit(token);
|
|
821
|
+
},
|
|
822
|
+
dlItem(token) {
|
|
823
|
+
this.exit(token);
|
|
824
|
+
},
|
|
825
|
+
dlList(token) {
|
|
826
|
+
this.exit(token);
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
};
|
|
830
|
+
}
|
|
831
|
+
function peekTop(ctx) {
|
|
832
|
+
const stack = ctx.stack;
|
|
833
|
+
if (!stack || stack.length === 0) return;
|
|
834
|
+
return stack[stack.length - 1];
|
|
835
|
+
}
|
|
836
|
+
function parseInlineToPhrasing(raw) {
|
|
837
|
+
const t = raw.trimEnd();
|
|
838
|
+
if (!t) return [];
|
|
839
|
+
const tree = fromMarkdown(t);
|
|
840
|
+
const first = tree.children?.[0];
|
|
841
|
+
if (first?.type === "paragraph") return first.children ?? [];
|
|
842
|
+
return tree.children ?? [];
|
|
843
|
+
}
|
|
844
|
+
var TAB_SIZE2 = 4;
|
|
845
|
+
function deindentByColumns(raw, cols) {
|
|
846
|
+
if (!cols) return raw;
|
|
847
|
+
const text = raw.replace(/\r\n?/g, "\n");
|
|
848
|
+
const lines = text.split("\n");
|
|
849
|
+
return lines.map((line) => {
|
|
850
|
+
let col = 0;
|
|
851
|
+
let i = 0;
|
|
852
|
+
while (i < line.length && col < cols) {
|
|
853
|
+
const ch = line.charCodeAt(i);
|
|
854
|
+
if (ch === 32) {
|
|
855
|
+
col += 1;
|
|
856
|
+
i += 1;
|
|
857
|
+
continue;
|
|
858
|
+
}
|
|
859
|
+
if (ch === 9) {
|
|
860
|
+
const r = col % TAB_SIZE2;
|
|
861
|
+
const step = r === 0 ? TAB_SIZE2 : TAB_SIZE2 - r;
|
|
862
|
+
if (col + step > cols) break;
|
|
863
|
+
col += step;
|
|
864
|
+
i += 1;
|
|
865
|
+
continue;
|
|
866
|
+
}
|
|
867
|
+
break;
|
|
868
|
+
}
|
|
869
|
+
return line.slice(i);
|
|
870
|
+
}).join("\n");
|
|
871
|
+
}
|
|
872
|
+
function isListMarkerLine(line) {
|
|
873
|
+
return /^([-*]|\d+\.)\s/.test(line);
|
|
874
|
+
}
|
|
875
|
+
function normalizeFlatListIndentInDd(raw) {
|
|
876
|
+
const text = raw.replace(/\r\n?/g, "\n");
|
|
877
|
+
const lines = text.split("\n");
|
|
878
|
+
let firstIdx = -1;
|
|
879
|
+
for (let i = 0; i < lines.length; i++) {
|
|
880
|
+
if (lines[i].trim() !== "") {
|
|
881
|
+
firstIdx = i;
|
|
882
|
+
break;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
if (firstIdx === -1) return raw;
|
|
886
|
+
const first = lines[firstIdx];
|
|
887
|
+
if (!isListMarkerLine(first)) return raw;
|
|
888
|
+
for (let i = firstIdx + 1; i < lines.length; i++) {
|
|
889
|
+
const line = lines[i];
|
|
890
|
+
if (line.startsWith(" ") && isListMarkerLine(line.slice(2))) {
|
|
891
|
+
lines[i] = line.slice(2);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
return lines.join("\n");
|
|
895
|
+
}
|
|
896
|
+
function normalizeNestedDlIndentInDd(raw) {
|
|
897
|
+
const text = raw.replace(/\r\n?/g, "\n");
|
|
898
|
+
const lines = text.split("\n");
|
|
899
|
+
let firstIdx = -1;
|
|
900
|
+
for (let i = 0; i < lines.length; i++) {
|
|
901
|
+
if (lines[i].trim() !== "") {
|
|
902
|
+
firstIdx = i;
|
|
903
|
+
break;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
if (firstIdx === -1) return raw;
|
|
907
|
+
if (!lines[firstIdx].startsWith(":")) return raw;
|
|
908
|
+
for (let i = firstIdx + 1; i < lines.length; i++) {
|
|
909
|
+
const line = lines[i];
|
|
910
|
+
if (!line.startsWith(" ")) continue;
|
|
911
|
+
let n = 0;
|
|
912
|
+
while (n < line.length && line.charCodeAt(n) === 32) n++;
|
|
913
|
+
if (n >= 2 && line.charCodeAt(n) === 58 && (n - 2) % 4 === 0) {
|
|
914
|
+
lines[i] = line.slice(2);
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
return lines.join("\n");
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
// src/to-markdown.ts
|
|
921
|
+
function getState(state, self) {
|
|
922
|
+
return state ?? self;
|
|
923
|
+
}
|
|
924
|
+
function dlListToMarkdown() {
|
|
925
|
+
const unsafe = [
|
|
926
|
+
{
|
|
927
|
+
character: ":",
|
|
928
|
+
atBreak: true,
|
|
929
|
+
// Keep the original constraints to avoid accidental triggering.
|
|
930
|
+
before: "(^|[\\n\\r]) {0,3}$",
|
|
931
|
+
after: "([\\t ]|$)"
|
|
932
|
+
}
|
|
933
|
+
];
|
|
934
|
+
const join = (left, right, parent) => {
|
|
935
|
+
const type = parent?.type;
|
|
936
|
+
if (type === "definitionList" || type === "definitionItem") return 0;
|
|
937
|
+
return void 0;
|
|
938
|
+
};
|
|
939
|
+
const handlers = {
|
|
940
|
+
definitionList,
|
|
941
|
+
definitionItem,
|
|
942
|
+
definitionTerm,
|
|
943
|
+
definitionDescription
|
|
944
|
+
};
|
|
945
|
+
return { unsafe, join: [join], handlers };
|
|
946
|
+
function definitionList(node, parent, state, info) {
|
|
947
|
+
const s = getState(state, this);
|
|
948
|
+
let out = "";
|
|
949
|
+
for (const child of node.children || []) {
|
|
950
|
+
out += s.handle(child, node, s, info);
|
|
951
|
+
}
|
|
952
|
+
out = out.replace(/\n{3,}/g, "\n\n");
|
|
953
|
+
out = out.replace(/\n+$/, "");
|
|
954
|
+
return out;
|
|
955
|
+
}
|
|
956
|
+
function definitionItem(node, parent, state, info) {
|
|
957
|
+
const s = getState(state, this);
|
|
958
|
+
let out = "";
|
|
959
|
+
for (const child of node.children || []) {
|
|
960
|
+
out += s.handle(child, node, s, info);
|
|
961
|
+
}
|
|
962
|
+
out = out.replace(/\n{3,}/g, "\n\n");
|
|
963
|
+
return out;
|
|
964
|
+
}
|
|
965
|
+
function definitionTerm(node, parent, state, info) {
|
|
966
|
+
const s = getState(state, this);
|
|
967
|
+
const value = s.containerPhrasing(node, info).replace(/\s+$/, "");
|
|
968
|
+
const out = s.indentLines(
|
|
969
|
+
value,
|
|
970
|
+
(line, i) => i === 0 ? `: ${line}` : ` ${line}`
|
|
971
|
+
);
|
|
972
|
+
return out.replace(/\n+$/, "") + "\n";
|
|
973
|
+
}
|
|
974
|
+
function definitionDescription(node, parent, state, info) {
|
|
975
|
+
const s = getState(state, this);
|
|
976
|
+
let value = "";
|
|
977
|
+
for (const child of node.children || []) {
|
|
978
|
+
value += s.handle(child, node, s, info);
|
|
979
|
+
}
|
|
980
|
+
value = value.replace(/\n{3,}/g, "\n\n");
|
|
981
|
+
value = value.replace(/\s+$/, "");
|
|
982
|
+
const out = s.indentLines(value, (line, i) => {
|
|
983
|
+
if (line === "") return "";
|
|
984
|
+
return i === 0 ? ` : ${line}` : ` ${line}`;
|
|
985
|
+
});
|
|
986
|
+
return out.replace(/\n+$/, "") + "\n";
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
export {
|
|
990
|
+
dlListFromMarkdown,
|
|
991
|
+
dlListToMarkdown
|
|
992
|
+
};
|
|
993
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/from-markdown.ts","../../../node_modules/.pnpm/micromark-util-symbol@2.0.1/node_modules/micromark-util-symbol/lib/codes.js","../../../node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js","../../micromark-extension-dl-list/src/constants.js","../../micromark-extension-dl-list/src/util.js","../../micromark-extension-dl-list/src/lookahead.js","../../micromark-extension-dl-list/src/tokenize.js","../../micromark-extension-dl-list/src/syntax.js","../src/to-markdown.ts"],"sourcesContent":["import { fromMarkdown, type CompileContext, type Extension, type Token } from 'mdast-util-from-markdown'\nimport { dlList } from '../../micromark-extension-dl-list/src'\nimport type { DlListFromMarkdownOptions } from './types'\nimport type { RootContent, PhrasingContent } from 'mdast'\n\n/**\n * mdast extension for dl-list.\n *\n * Current micromark token model (2026-01):\n * - dt inline text comes from `dlTermText` (plus `dlHardBreak` for continuation newline)\n * - dd content is stored in `dlDescContainer` (a flow chunk), which is re-parsed as Markdown\n * - dd does NOT use `dlDescText`\n *\n * Behavior alignment with micromark-extension-dl-list/html.js:\n * - dd container is deindented by `_dlIndent` columns\n * - normalize list-indent and nested-dl-indent inside dd container\n * - if container parses to a single paragraph, unwrap to phrasing directly under dd\n */\nexport function dlListFromMarkdown(options: DlListFromMarkdownOptions = {}): Extension {\n const maxDepth = options.maxDepth ?? 8\n\n return {\n enter: {\n dlList(this: CompileContext, token: Token) {\n this.enter({ type: 'definitionList', children: [] } as any, token)\n },\n\n dlItem(this: CompileContext, token: Token) {\n this.enter({ type: 'definitionItem', children: [] } as any, token)\n },\n\n dlTerm(this: CompileContext, token: Token) {\n // We collect dt raw as text and parse once at exit (so micromark hard-breaks become '\\n').\n this.enter({ type: 'definitionTerm', children: [], _dlRaw: '' } as any, token)\n },\n\n dlDesc(this: CompileContext, token: Token) {\n this.enter({ type: 'definitionDescription', children: [] } as any, token)\n },\n\n // continuation newline inside dt (tokenizer emits dlHardBreak)\n dlHardBreak(this: CompileContext) {\n const dt = peekTop(this)\n if (dt?.type === 'definitionTerm') {\n dt._dlRaw += '\\n'\n }\n }\n },\n\n exit: {\n // dt inline text (we keep it as raw; parse at dt exit)\n dlTermText(this: CompileContext, token: Token) {\n const dt = peekTop(this)\n if (dt?.type === 'definitionTerm') {\n dt._dlRaw += this.sliceSerialize(token)\n }\n },\n\n // dd body (flow chunk) — main path in current tokenizer\n dlDescContainer(this: CompileContext, token: Token) {\n if (maxDepth <= 0) return\n\n const dd = peekTop(this)\n if (dd?.type !== 'definitionDescription') return\n\n let raw = this.sliceSerialize(token)\n const indentCols = (token as any)._dlIndent ?? 0\n\n raw = deindentByColumns(raw, indentCols)\n raw = normalizeFlatListIndentInDd(raw)\n raw = normalizeNestedDlIndentInDd(raw)\n\n const tree = fromMarkdown(raw, {\n extensions: [dlList()],\n mdastExtensions: [dlListFromMarkdown({ maxDepth: maxDepth - 1 })]\n })\n\n const children = (tree.children ?? []) as RootContent[]\n\n // Align with HTML: unwrap single <p> into phrasing directly under dd.\n if (children.length === 1 && children[0]?.type === 'paragraph') {\n dd.children.push(...(((children[0] as any).children ?? []) as PhrasingContent[]))\n } else {\n dd.children.push(...children)\n }\n },\n\n dlTerm(this: CompileContext, token: Token) {\n const dt = peekTop(this)\n if (dt?.type === 'definitionTerm') {\n const raw: string = String(dt._dlRaw ?? '').trimEnd()\n dt.children = parseInlineToPhrasing(raw)\n delete dt._dlRaw\n }\n this.exit(token)\n },\n\n dlDesc(this: CompileContext, token: Token) {\n // dd children are built by dlDescContainer; nothing to finalize here.\n this.exit(token)\n },\n\n dlItem(this: CompileContext, token: Token) {\n this.exit(token)\n },\n\n dlList(this: CompileContext, token: Token) {\n this.exit(token)\n }\n }\n }\n}\n\nfunction peekTop(ctx: CompileContext): any | undefined {\n const stack = (ctx as any).stack as any[] | undefined\n if (!stack || stack.length === 0) return\n return stack[stack.length - 1]\n}\n\n/**\n * Parse inline markdown into phrasing children.\n * We parse as a tiny document and unwrap a single paragraph if present.\n */\nfunction parseInlineToPhrasing(raw: string): PhrasingContent[] {\n const t = raw.trimEnd()\n if (!t) return []\n const tree = fromMarkdown(t)\n const first = tree.children?.[0]\n if (first?.type === 'paragraph') return (first.children ?? []) as PhrasingContent[]\n return (tree.children ?? []) as any\n}\n\n// ---- dd container normalization (must match micromark-extension-dl-list/html.js) ----\n\nconst TAB_SIZE = 4\n\nfunction deindentByColumns(raw: string, cols: number): string {\n if (!cols) return raw\n const text = raw.replace(/\\r\\n?/g, '\\n')\n const lines = text.split('\\n')\n\n return lines\n .map((line) => {\n let col = 0\n let i = 0\n\n while (i < line.length && col < cols) {\n const ch = line.charCodeAt(i)\n\n // space\n if (ch === 0x20) {\n col += 1\n i += 1\n continue\n }\n\n // tab (tab stop = 4)\n if (ch === 0x09) {\n const r = col % TAB_SIZE\n const step = r === 0 ? TAB_SIZE : TAB_SIZE - r\n // cannot split a tab; if it would cross boundary, keep it\n if (col + step > cols) break\n col += step\n i += 1\n continue\n }\n\n break\n }\n\n return line.slice(i)\n })\n .join('\\n')\n}\n\nfunction isListMarkerLine(line: string): boolean {\n return /^([-*]|\\d+\\.)\\s/.test(line)\n}\n\n/**\n * If a dd container starts with a list marker at column 0,\n * outdent subsequent list-marker lines that start with exactly 2 spaces.\n */\nfunction normalizeFlatListIndentInDd(raw: string): string {\n const text = raw.replace(/\\r\\n?/g, '\\n')\n const lines = text.split('\\n')\n\n let firstIdx = -1\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].trim() !== '') {\n firstIdx = i\n break\n }\n }\n if (firstIdx === -1) return raw\n\n const first = lines[firstIdx]\n if (!isListMarkerLine(first)) return raw\n\n for (let i = firstIdx + 1; i < lines.length; i++) {\n const line = lines[i]\n if (line.startsWith(' ') && isListMarkerLine(line.slice(2))) {\n lines[i] = line.slice(2)\n }\n }\n\n return lines.join('\\n')\n}\n\n/**\n * If a dd container starts with \":\" at column 0,\n * normalize subsequent \":\" lines that were indented by +2 spaces for visual alignment.\n * Remove exactly 2 leading spaces when it turns the indent into a multiple of 4.\n */\nfunction normalizeNestedDlIndentInDd(raw: string): string {\n const text = raw.replace(/\\r\\n?/g, '\\n')\n const lines = text.split('\\n')\n\n let firstIdx = -1\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].trim() !== '') {\n firstIdx = i\n break\n }\n }\n if (firstIdx === -1) return raw\n if (!lines[firstIdx].startsWith(':')) return raw\n\n for (let i = firstIdx + 1; i < lines.length; i++) {\n const line = lines[i]\n if (!line.startsWith(' ')) continue\n\n // count leading spaces\n let n = 0\n while (n < line.length && line.charCodeAt(n) === 0x20) n++\n\n // first non-space is \":\" and (n-2) is multiple of 4 -> drop 2 spaces\n if (n >= 2 && line.charCodeAt(n) === 0x3a /* : */ && (n - 2) % 4 === 0) {\n lines[i] = line.slice(2)\n }\n }\n\n return lines.join('\\n')\n}\n","/**\n * Character codes.\n *\n * This module is compiled away!\n *\n * micromark works based on character codes.\n * This module contains constants for the ASCII block and the replacement\n * character.\n * A couple of them are handled in a special way, such as the line endings\n * (CR, LF, and CR+LF, commonly known as end-of-line: EOLs), the tab (horizontal\n * tab) and its expansion based on what column it’s at (virtual space),\n * and the end-of-file (eof) character.\n * As values are preprocessed before handling them, the actual characters LF,\n * CR, HT, and NUL (which is present as the replacement character), are\n * guaranteed to not exist.\n *\n * Unicode basic latin block.\n */\nexport const codes = /** @type {const} */ ({\n carriageReturn: -5,\n lineFeed: -4,\n carriageReturnLineFeed: -3,\n horizontalTab: -2,\n virtualSpace: -1,\n eof: null,\n nul: 0,\n soh: 1,\n stx: 2,\n etx: 3,\n eot: 4,\n enq: 5,\n ack: 6,\n bel: 7,\n bs: 8,\n ht: 9, // `\\t`\n lf: 10, // `\\n`\n vt: 11, // `\\v`\n ff: 12, // `\\f`\n cr: 13, // `\\r`\n so: 14,\n si: 15,\n dle: 16,\n dc1: 17,\n dc2: 18,\n dc3: 19,\n dc4: 20,\n nak: 21,\n syn: 22,\n etb: 23,\n can: 24,\n em: 25,\n sub: 26,\n esc: 27,\n fs: 28,\n gs: 29,\n rs: 30,\n us: 31,\n space: 32,\n exclamationMark: 33, // `!`\n quotationMark: 34, // `\"`\n numberSign: 35, // `#`\n dollarSign: 36, // `$`\n percentSign: 37, // `%`\n ampersand: 38, // `&`\n apostrophe: 39, // `'`\n leftParenthesis: 40, // `(`\n rightParenthesis: 41, // `)`\n asterisk: 42, // `*`\n plusSign: 43, // `+`\n comma: 44, // `,`\n dash: 45, // `-`\n dot: 46, // `.`\n slash: 47, // `/`\n digit0: 48, // `0`\n digit1: 49, // `1`\n digit2: 50, // `2`\n digit3: 51, // `3`\n digit4: 52, // `4`\n digit5: 53, // `5`\n digit6: 54, // `6`\n digit7: 55, // `7`\n digit8: 56, // `8`\n digit9: 57, // `9`\n colon: 58, // `:`\n semicolon: 59, // `;`\n lessThan: 60, // `<`\n equalsTo: 61, // `=`\n greaterThan: 62, // `>`\n questionMark: 63, // `?`\n atSign: 64, // `@`\n uppercaseA: 65, // `A`\n uppercaseB: 66, // `B`\n uppercaseC: 67, // `C`\n uppercaseD: 68, // `D`\n uppercaseE: 69, // `E`\n uppercaseF: 70, // `F`\n uppercaseG: 71, // `G`\n uppercaseH: 72, // `H`\n uppercaseI: 73, // `I`\n uppercaseJ: 74, // `J`\n uppercaseK: 75, // `K`\n uppercaseL: 76, // `L`\n uppercaseM: 77, // `M`\n uppercaseN: 78, // `N`\n uppercaseO: 79, // `O`\n uppercaseP: 80, // `P`\n uppercaseQ: 81, // `Q`\n uppercaseR: 82, // `R`\n uppercaseS: 83, // `S`\n uppercaseT: 84, // `T`\n uppercaseU: 85, // `U`\n uppercaseV: 86, // `V`\n uppercaseW: 87, // `W`\n uppercaseX: 88, // `X`\n uppercaseY: 89, // `Y`\n uppercaseZ: 90, // `Z`\n leftSquareBracket: 91, // `[`\n backslash: 92, // `\\`\n rightSquareBracket: 93, // `]`\n caret: 94, // `^`\n underscore: 95, // `_`\n graveAccent: 96, // `` ` ``\n lowercaseA: 97, // `a`\n lowercaseB: 98, // `b`\n lowercaseC: 99, // `c`\n lowercaseD: 100, // `d`\n lowercaseE: 101, // `e`\n lowercaseF: 102, // `f`\n lowercaseG: 103, // `g`\n lowercaseH: 104, // `h`\n lowercaseI: 105, // `i`\n lowercaseJ: 106, // `j`\n lowercaseK: 107, // `k`\n lowercaseL: 108, // `l`\n lowercaseM: 109, // `m`\n lowercaseN: 110, // `n`\n lowercaseO: 111, // `o`\n lowercaseP: 112, // `p`\n lowercaseQ: 113, // `q`\n lowercaseR: 114, // `r`\n lowercaseS: 115, // `s`\n lowercaseT: 116, // `t`\n lowercaseU: 117, // `u`\n lowercaseV: 118, // `v`\n lowercaseW: 119, // `w`\n lowercaseX: 120, // `x`\n lowercaseY: 121, // `y`\n lowercaseZ: 122, // `z`\n leftCurlyBrace: 123, // `{`\n verticalBar: 124, // `|`\n rightCurlyBrace: 125, // `}`\n tilde: 126, // `~`\n del: 127,\n // Unicode Specials block.\n byteOrderMarker: 65_279,\n // Unicode Specials block.\n replacementCharacter: 65_533 // `�`\n})\n","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","/**\n * Tab width used for column calculation.\n * CommonMark / micromark treat a tab stop as 4 columns in indentation contexts.\n *\n * @type {number}\n */\nexport const TAB_SIZE = 4\n\n/**\n * Upper bound (exclusive) of indentation columns allowed before `:` to start a dl-list construct.\n *\n * - CommonMark list rule allows up to 3 columns of indentation (0–3).\n * - We keep it as an exclusive upper bound so callers can write `col < MAX_PREFIX_COLS`.\n *\n * @type {number}\n */\nexport const MAX_PREFIX_COLS = 4\n","import { markdownLineEnding } from 'micromark-util-character'\nimport { codes } from 'micromark-util-symbol'\nimport { TAB_SIZE } from './constants.js'\n\n/**\n * @param {number|null} code\n * @returns {boolean}\n */\nexport function isEof(code) {\n return code === codes.eof\n}\n\n/**\n * True for indentation codes that micromark uses at line starts.\n *\n * @param {number|null} code\n * @returns {boolean}\n */\nexport function isIndent(code) {\n return (\n code === codes.space ||\n code === codes.ht ||\n code === codes.virtualSpace ||\n code === codes.horizontalTab\n )\n}\n\n/**\n * Consume a code only when it represents a number.\n * (micromark uses negative “virtual” codes too; those are still numbers and are valid to consume.)\n *\n * @param {import('micromark-util-types').Effects} effects\n * @param {number|null} code\n * @returns {void}\n */\nexport function consumeSafe(effects, code) {\n if (typeof code !== 'number') return\n effects.consume(code)\n}\n\n/**\n * Advance column count by one character, respecting TAB_SIZE.\n *\n * @param {number} col\n * @param {number|null} code\n * @returns {number}\n */\nexport function advanceColumn(col, code) {\n if (code === codes.ht || code === codes.horizontalTab) {\n const r = col % TAB_SIZE\n return col + (r === 0 ? TAB_SIZE : TAB_SIZE - r)\n }\n return col + 1\n}\n\n/**\n * Consume a line ending as a token (`dlLineEnding`) so downstream can reason about it.\n *\n * NOTE:\n * - Do not call this in the \"blank line ends dl-list\" path.\n * In that case, the EOL must remain for CommonMark to see the blank-line boundary.\n *\n * @param {import('micromark-util-types').Effects} effects\n * @param {number|null} code\n * @returns {void}\n */\nexport function consumeLineEndingSafe(effects, code) {\n if (!markdownLineEnding(code)) return\n effects.enter('dlLineEnding')\n effects.consume(code)\n effects.exit('dlLineEnding')\n}\n","import { markdownLineEnding } from 'micromark-util-character'\nimport { codes } from 'micromark-util-symbol'\nimport { MAX_PREFIX_COLS } from './constants.js'\nimport { isEof, isIndent, consumeSafe, advanceColumn } from './util.js'\n\n/**\n * Lookahead tokenizers used by dl-list to confirm start / continuation without consuming input.\n *\n * These are separated from tokenize.js to keep the main tokenizer readable.\n */\n\n/**\n * Check whether the current line can start dl-list after optional indentation (<= 3 cols).\n * Succeeds when it can reach ':' before exceeding MAX_PREFIX_COLS.\n */\nexport function checkPrefixFactory() {\n return {\n tokenize(effects2, ok2, nok2) {\n let col = 0\n return start2\n\n /** @type {import('micromark-util-types').State} */\n function start2(code) {\n if (isEof(code)) return nok2(code)\n if (code === codes.colon) return ok2(code)\n\n if (isIndent(code) && col < MAX_PREFIX_COLS) {\n col = advanceColumn(col, code)\n consumeSafe(effects2, code)\n if (col > MAX_PREFIX_COLS) return nok2(code)\n return start2\n }\n\n return nok2(code)\n }\n }\n }\n}\n\n/**\n * Check whether the dl-list should continue after a line ending.\n *\n * - ok when next line begins with ':' or indentation\n * - stop on blank line (do not consume blank-line EOL in the main tokenizer)\n */\nexport function checkAfterEolContinueFactory() {\n return {\n tokenize(effects2, ok2, nok2) {\n let opened = false\n return start2\n\n function start2(code) {\n if (isEof(code)) return ok2(code)\n if (!markdownLineEnding(code)) return nok2(code)\n\n effects2.enter('dlCheck')\n opened = true\n\n // consume the line ending so we can inspect the next line head\n effects2.consume(code)\n return head\n }\n\n function head(code) {\n if (isEof(code)) return endOk(code)\n if (markdownLineEnding(code)) return endNok(code) // blank line -> stop\n if (code === codes.colon) return endOk(code)\n if (isIndent(code)) return endOk(code)\n return endNok(code)\n }\n\n function endOk(code) {\n if (opened) {\n effects2.exit('dlCheck')\n opened = false\n }\n return ok2(code)\n }\n\n function endNok(code) {\n if (opened) {\n effects2.exit('dlCheck')\n opened = false\n }\n return nok2(code)\n }\n }\n }\n}\n\n/**\n * Check whether a ':' at baseIndent can start a dl-list.\n *\n * Requires:\n * - the ':' line itself exists\n * - next line is EOF or blank, OR\n * - next line begins with ':' at baseIndent or ddIndent, OR\n * - next line is indented beyond baseIndent (continuation for dt)\n */\nexport function checkDlStartFactory(baseIndentArg, ddIndentArg) {\n return {\n tokenize(effects2, ok2, nok2) {\n let col = 0\n let opened = false\n return start2\n\n function start2(code) {\n if (isEof(code)) return nok2(code)\n if (code !== codes.colon) return nok2(code)\n\n effects2.enter('dlCheck')\n opened = true\n\n effects2.consume(code) // ':'\n return restOfLine\n }\n\n function restOfLine(code) {\n if (isEof(code)) return endOk(code)\n\n if (markdownLineEnding(code)) {\n effects2.consume(code) // consume EOL to inspect next line head\n col = 0\n return nextLineHead\n }\n\n effects2.consume(code)\n return restOfLine\n }\n\n function nextLineHead(code) {\n if (isEof(code)) return endOk(code) // allow EOF\n if (markdownLineEnding(code)) return endOk(code) // allow blank line\n\n if (isIndent(code) && col < 512) {\n col = advanceColumn(col, code)\n effects2.consume(code)\n return nextLineHead\n }\n\n // next line must start a field: \":\" at baseIndent or ddIndent\n if (code === codes.colon && (col === baseIndentArg || col === ddIndentArg)) {\n return endOk(code)\n }\n\n // allow an indented, non-blank continuation line for the term\n if (col > baseIndentArg) return endOk(code)\n\n return endNok(code)\n }\n\n function endOk(code) {\n if (opened) {\n effects2.exit('dlCheck')\n opened = false\n }\n return ok2(code)\n }\n\n function endNok(code) {\n if (opened) {\n effects2.exit('dlCheck')\n opened = false\n }\n return nok2(code)\n }\n }\n }\n}\n","import { markdownLineEnding } from 'micromark-util-character'\nimport { codes } from 'micromark-util-symbol'\nimport { MAX_PREFIX_COLS } from './constants.js'\nimport {\n isEof,\n isIndent,\n consumeSafe,\n advanceColumn,\n consumeLineEndingSafe\n} from './util.js'\nimport {\n checkPrefixFactory,\n checkAfterEolContinueFactory,\n checkDlStartFactory\n} from './lookahead.js'\n\n/**\n * Tokenize a dl-list at flow level.\n *\n * @internal\n * @this {import('micromark-util-types').TokenizeContext}\n * @param {import('micromark-util-types').Effects} effects\n * @param {import('micromark-util-types').State} ok\n * @param {import('micromark-util-types').State} nok\n * @returns {import('micromark-util-types').State}\n */\nexport function tokenizeDlList(effects, ok, nok) {\n /** @type {number} */\n let baseIndent = 0\n\n /** @type {number} */\n let ddIndent = 4\n\n /** @type {'term'|'desc'|null} */\n let lastField = null\n\n /** @type {boolean} */\n let listOpen = false\n /** @type {boolean} */\n let itemOpen = false\n /** @type {boolean} */\n let termOpen = false\n /** @type {boolean} */\n let descOpen = false\n /** @type {boolean} */\n let termTextOpen = false\n\n const closeTermTextIfOpen = () => {\n if (termTextOpen) {\n effects.exit('dlTermText')\n termTextOpen = false\n }\n }\n\n const closeTermIfOpen = () => {\n closeTermTextIfOpen()\n if (termOpen) {\n effects.exit('dlTerm')\n termOpen = false\n }\n }\n\n const closeDescIfOpen = () => {\n if (descOpen) {\n effects.exit('dlDesc')\n descOpen = false\n }\n }\n\n const closeFieldIfOpen = () => {\n closeDescIfOpen()\n closeTermIfOpen()\n lastField = null\n }\n\n const closeItemIfOpen = () => {\n closeFieldIfOpen()\n if (itemOpen) {\n effects.exit('dlItem')\n itemOpen = false\n }\n }\n\n const closeAll = () => {\n closeItemIfOpen()\n if (listOpen) {\n effects.exit('dlList')\n listOpen = false\n }\n }\n\n const start = (code) => {\n baseIndent = 0\n ddIndent = 4\n lastField = null\n listOpen = false\n itemOpen = false\n termOpen = false\n descOpen = false\n termTextOpen = false\n return prefix(code, 0)\n }\n\n const prefix = (code, col) => {\n if (isEof(code)) return nok(code)\n\n if (code === codes.colon) {\n if (col > 3) return nok(code)\n\n return effects.check(\n checkDlStartFactory(col, col + 4),\n onOk,\n nok\n )(code)\n\n function onOk() {\n baseIndent = col\n ddIndent = baseIndent + 4\n effects.enter('dlList')\n listOpen = true\n return termMarker(code)\n }\n }\n\n if (isIndent(code) && col < MAX_PREFIX_COLS) {\n return effects.check(checkPrefixFactory(), onOk, nok)(code)\n function onOk() {\n return prefixConsume(code, 0)\n }\n }\n\n return nok(code)\n }\n\n const prefixConsume = (code, col) => {\n if (isEof(code)) return nok(code)\n\n if (code === codes.colon) {\n if (col > 3) return nok(code)\n\n return effects.check(\n checkDlStartFactory(col, col + 4),\n onOk,\n nok\n )(code)\n\n function onOk() {\n baseIndent = col\n ddIndent = baseIndent + 4\n effects.enter('dlList')\n listOpen = true\n return termMarker(code)\n }\n }\n\n if (isIndent(code) && col < MAX_PREFIX_COLS) {\n effects.enter('dlIndent')\n consumeSafe(effects, code)\n effects.exit('dlIndent')\n\n const nextCol = advanceColumn(col, code)\n if (nextCol > MAX_PREFIX_COLS) return nok(code)\n\n return (c) => prefixConsume(c, nextCol)\n }\n\n return nok(code)\n }\n\n const termMarker = (code) => {\n if (isEof(code) || code !== codes.colon) return nok(code)\n\n closeItemIfOpen()\n\n effects.enter('dlItem')\n itemOpen = true\n\n effects.enter('dlTerm')\n termOpen = true\n lastField = 'term'\n\n consumeSafe(effects, code) // ':'\n return afterMarkerToTerm\n }\n\n const afterMarkerToTerm = (code) => {\n if (isEof(code) || markdownLineEnding(code)) return afterEol(code)\n\n if (isIndent(code)) {\n effects.enter('dlMarkerSpace')\n consumeSafe(effects, code)\n effects.exit('dlMarkerSpace')\n return termTextStart\n }\n\n return termTextStart(code)\n }\n\n const termTextStart = (code) => {\n effects.enter('dlTermText')\n termTextOpen = true\n return termText(code)\n }\n\n const termText = (code) => {\n if (isEof(code) || markdownLineEnding(code)) {\n effects.exit('dlTermText')\n termTextOpen = false\n return afterEol(code)\n }\n consumeSafe(effects, code)\n return termText\n }\n\n const afterEol = (code) => {\n if (isEof(code)) {\n closeAll()\n return ok(code)\n }\n if (!markdownLineEnding(code)) return nok(code)\n\n // Decide whether to continue *before* claiming the line ending.\n // If we stop here, leave the line ending to the parent tokenizer.\n return effects.check(\n checkAfterEolContinueFactory(),\n onContinue,\n onStop\n )(code)\n\n function onContinue() {\n consumeLineEndingSafe(effects, code)\n return lineStart\n }\n\n function onStop() {\n closeAll()\n return ok(code)\n }\n }\n\n const lineStart = (code) => {\n if (isEof(code) || markdownLineEnding(code)) {\n closeAll()\n return ok(code)\n }\n\n if (code === codes.colon) {\n closeFieldIfOpen()\n return termMarker(code)\n }\n\n if (isIndent(code)) return scanIndent(code, 0)\n\n closeAll()\n return ok(code)\n }\n\n const scanIndent = (code, col) => {\n if (isEof(code)) {\n closeAll()\n return ok(code)\n }\n\n if (isIndent(code) && col < 512) {\n effects.enter('dlIndent')\n consumeSafe(effects, code)\n effects.exit('dlIndent')\n\n const nextCol = advanceColumn(col, code)\n return (c) => scanIndent(c, nextCol)\n }\n\n if (col >= ddIndent && code === codes.colon) {\n closeTermIfOpen()\n return descMarker(code)\n }\n\n if (col === baseIndent && code === codes.colon) {\n closeFieldIfOpen()\n return termMarker(code)\n }\n\n if (col > baseIndent) {\n if (!termOpen && !descOpen) {\n closeAll()\n return ok(code)\n }\n return continuationLine(code)\n }\n\n closeAll()\n return ok(code)\n }\n\n const descMarker = (code) => {\n if (isEof(code) || code !== codes.colon) return nok(code)\n\n closeDescIfOpen()\n\n effects.enter('dlDesc')\n descOpen = true\n lastField = 'desc'\n\n consumeSafe(effects, code) // ':'\n return afterMarkerToDesc\n }\n\n const afterMarkerToDesc = (code) => {\n if (isEof(code)) return afterEol(code)\n\n // IMPORTANT:\n // Even if the dd marker line ends immediately, open a container so\n // subsequent indented lines become part of this dd.\n // (This removes the need for dlDescText.)\n if (markdownLineEnding(code)) {\n const t = effects.enter('dlDescContainer')\n // @ts-ignore\n t._dlIndent = ddIndent\n return descContainerContent(code)\n }\n\n // dd マーカー直後のスペースはコンテナに入れない(見た目調整用)\n if (isIndent(code)) {\n effects.enter('dlMarkerSpace')\n consumeSafe(effects, code)\n effects.exit('dlMarkerSpace')\n return afterMarkerToDesc\n }\n\n const t = effects.enter('dlDescContainer')\n // html.js が参照する deindent 量(columns)\n // @ts-ignore\n t._dlIndent = ddIndent\n\n return descContainerContent(code)\n }\n\n const descContainerContent = (code) => {\n if (isEof(code)) {\n effects.exit('dlDescContainer')\n closeAll()\n return ok(code)\n }\n\n if (markdownLineEnding(code)) {\n return effects.check(\n checkAfterEolContinueFactory(),\n onContinue,\n onStop\n )(code)\n\n function onContinue() {\n consumeLineEndingSafe(effects, code)\n return descContainerLineStart\n }\n\n function onStop() {\n effects.exit('dlDescContainer')\n closeAll()\n return ok(code)\n }\n }\n\n consumeSafe(effects, code)\n return descContainerContent\n }\n\n const descContainerLineStart = (code) => {\n if (isEof(code)) {\n effects.exit('dlDescContainer')\n closeAll()\n return ok(code)\n }\n\n if (markdownLineEnding(code)) {\n // 空行はコンテナに含める(段落分離に必要)\n consumeLineEndingSafe(effects, code)\n return descContainerLineStart\n }\n\n // 次行が \":\" で始まる (= 次の term / 同階層) 場合、dd コンテナを閉じて tokenizer 側で処理\n if (code === codes.colon) {\n effects.exit('dlDescContainer')\n closeDescIfOpen()\n return lineStart(code)\n }\n\n if (isIndent(code)) return descContainerScanIndent(code, 0)\n\n // インデント無しは dl-list 終了\n effects.exit('dlDescContainer')\n closeAll()\n return ok(code)\n }\n\n const descContainerScanIndent = (code, col) => {\n if (isEof(code)) {\n effects.exit('dlDescContainer')\n closeAll()\n return ok(code)\n }\n\n if (isIndent(code) && col < 512) {\n // コンテナなので indent もそのまま入れる\n consumeSafe(effects, code)\n const nextCol = advanceColumn(col, code)\n return (c) => descContainerScanIndent(c, nextCol)\n }\n\n if (col === baseIndent && code === codes.colon) {\n effects.exit('dlDescContainer')\n closeDescIfOpen()\n return termMarker(code)\n }\n\n // 深いインデントの \":\" は dd 本文(入れ子 dl 等)の可能性があるので閉じない\n if (col === ddIndent && code === codes.colon) {\n effects.exit('dlDescContainer')\n closeDescIfOpen()\n return descMarker(code)\n }\n\n // それ以外は dd 本文継続(この行の残りを食う)\n return descContainerContent(code)\n }\n\n const continuationLine = (code) => {\n effects.enter('dlHardBreak')\n effects.exit('dlHardBreak')\n\n if (lastField === 'term' && termOpen) {\n effects.enter('dlTermText')\n termTextOpen = true\n return contTextAsTerm(code)\n }\n\n if (lastField === 'desc' && descOpen) {\n // Fallback safety:\n // If we ever reach here with an open dd but no container,\n // treat continuation as dd container content (no dlDescText).\n const t = effects.enter('dlDescContainer')\n // @ts-ignore\n t._dlIndent = ddIndent\n return descContainerContent(code)\n }\n\n closeAll()\n return ok(code)\n }\n\n const contTextAsTerm = (code) => {\n if (isEof(code) || markdownLineEnding(code)) {\n effects.exit('dlTermText')\n termTextOpen = false\n return afterEol(code)\n }\n consumeSafe(effects, code)\n return contTextAsTerm\n }\n\n return start\n}\n","import { codes } from 'micromark-util-symbol'\nimport { tokenizeDlList } from './tokenize.js'\n\n/**\n * Micromark extension for colon-based definition lists.\n *\n * Syntax (flow):\n * - A line whose first non-indentation character within 0–3 columns is `:` starts a dl-list.\n * - The first `:` line is a term (`dt`).\n * - Subsequent lines indented by 4+ columns and starting with `:` are descriptions (`dd`).\n * - Continuation lines (indented, without `:`) are appended to the last opened dt/dd.\n *\n * Design constraints:\n * - Do not consume indentation unless dl-list is confirmed by lookahead.\n * - Do not consume blank-line EOL that terminates the list.\n *\n * @returns {import('micromark-util-types').Extension}\n */\nexport function dlList() {\n /** @type {import('micromark-util-types').Construct} */\n const construct = { name: 'dlList', tokenize: tokenizeDlList, concrete: true }\n\n /** @type {import('micromark-util-types').Extension} */\n return {\n flow: {\n [codes.colon]: construct,\n [codes.space]: construct,\n [codes.ht]: construct\n }\n }\n}\n","import type { Handle, Join, Unsafe, Info, State } from 'mdast-util-to-markdown'\nimport type {\n DefinitionList,\n DefinitionItem,\n DefinitionTerm,\n DefinitionDescription\n} from './types'\n\ntype AnyNode = any\n\nfunction getState(state: State | undefined, self: any): State {\n return (state ?? self) as State\n}\n\n/**\n * to-markdown extension for serializing definition list nodes back to colon-based syntax.\n *\n * This serializer is intentionally strict about *not inserting extra blank lines*\n * inside dl/dt/dd blocks. (Tests rely on this behavior.)\n */\nexport function dlListToMarkdown(): {\n unsafe: Unsafe[]\n join: Join[]\n handlers: Record<string, Handle>\n} {\n const unsafe: Unsafe[] = [\n {\n character: ':',\n atBreak: true,\n // Keep the original constraints to avoid accidental triggering.\n before: '(^|[\\\\n\\\\r]) {0,3}$',\n after: '([\\\\t ]|$)'\n }\n ]\n\n const join: Join = (left, right, parent) => {\n const type = (parent as any)?.type\n // Prevent the compiler from inserting blank lines between dt/dd inside an item.\n if (type === 'definitionList' || type === 'definitionItem') return 0\n return undefined as any\n }\n\n const handlers: Record<string, Handle> = {\n definitionList,\n definitionItem,\n definitionTerm,\n definitionDescription\n }\n\n return { unsafe, join: [join], handlers }\n\n function definitionList(\n this: State,\n node: DefinitionList,\n parent: AnyNode | undefined,\n state: State | undefined,\n info: Info\n ): string {\n const s = getState(state, this)\n\n let out = ''\n for (const child of node.children || []) {\n out += s.handle(child as any, node as any, s, info)\n }\n\n // collapse excessive blank lines *inside* dl\n out = out.replace(/\\n{3,}/g, '\\n\\n')\n\n // IMPORTANT:\n // Do NOT force a trailing newline here.\n // Let remark-stringify handle block separation.\n out = out.replace(/\\n+$/, '')\n\n return out\n }\n\n function definitionItem(\n this: State,\n node: DefinitionItem,\n parent: AnyNode | undefined,\n state: State | undefined,\n info: Info\n ): string {\n const s = getState(state, this)\n\n let out = ''\n for (const child of node.children || []) {\n out += s.handle(child as any, node as any, s, info)\n }\n\n // 保険:空行が3つ以上連続しないようにする\n out = out.replace(/\\n{3,}/g, '\\n\\n')\n\n return out\n }\n\n function definitionTerm(\n this: State,\n node: DefinitionTerm,\n parent: AnyNode | undefined,\n state: State | undefined,\n info: Info\n ): string {\n const s = getState(state, this)\n\n // NOTE: mdast-util-to-markdown v2 の State#containerPhrasing は (node, info) の形\n const value = (s as any).containerPhrasing(node as any, info).replace(/\\s+$/, '')\n\n // 先頭行は \": \"、継続は \" \"\n const out = s.indentLines(value, (line: string, i: number) =>\n i === 0 ? `: ${line}` : ` ${line}`\n )\n\n return out.replace(/\\n+$/, '') + '\\n'\n }\n\n function definitionDescription(\n this: State,\n node: DefinitionDescription,\n parent: AnyNode | undefined,\n state: State | undefined,\n info: Info\n ): string {\n const s = getState(state, this)\n\n // dd は phrasing + flow が混在するので、子を順に handle して連結する。\n // unwrap 済み(children が phrasing 直下)の場合もこのままで問題ない。\n let value = ''\n for (const child of node.children || []) {\n value += s.handle(child as any, node as any, s, info)\n }\n\n // dd 内で空行が多すぎるケースを抑制(dl 内での見通し用・安全)\n value = value.replace(/\\n{3,}/g, '\\n\\n')\n\n // 末尾の余計な空白/改行はここで落としてからインデントする\n value = value.replace(/\\s+$/, '')\n\n // 先頭行は \" : \"、継続は \" \"\n // ただし “空行” はスペースを入れずに完全な空行のままにする\n // (スペースのみの行を量産すると diff が汚れやすい)\n const out = s.indentLines(value, (line: string, i: number) => {\n if (line === '') return ''\n return i === 0 ? ` : ${line}` : ` ${line}`\n })\n\n return out.replace(/\\n+$/, '') + '\\n'\n }\n}\n"],"mappings":"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","names":["onOk","t","onContinue","onStop","TAB_SIZE"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mdast-util-dl-list",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "mdast utilities only for colon-based definition lists: mdast node generation and markdown serialization support for <dl>, <dt>, and <dd>.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Yohei Kanamura",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/kanemu/unified-dl-list",
|
|
11
|
+
"directory": "packages/mdast-util-dl-list"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/kanemu/unified-dl-list/tree/main/packages/mdast-util-dl-list",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/kanemu/unified-dl-list/issues"
|
|
16
|
+
},
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/**",
|
|
27
|
+
"README.md",
|
|
28
|
+
"LICENSE"
|
|
29
|
+
],
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"mdast-util-from-markdown": "^2.0.2",
|
|
32
|
+
"mdast-util-to-markdown": "^2.1.2",
|
|
33
|
+
"micromark-extension-dl-list": "^0.1.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/mdast": "^4.0.4",
|
|
37
|
+
"@types/unist": "^3.0.3",
|
|
38
|
+
"rimraf": "^6.1.2",
|
|
39
|
+
"tsup": "^8.5.1",
|
|
40
|
+
"typescript": "^5.4.0"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"unified",
|
|
44
|
+
"remark",
|
|
45
|
+
"mdast",
|
|
46
|
+
"mdast-util",
|
|
47
|
+
"markdown",
|
|
48
|
+
"definition-list",
|
|
49
|
+
"dl",
|
|
50
|
+
"dt",
|
|
51
|
+
"dd"
|
|
52
|
+
],
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsup",
|
|
55
|
+
"clean": "rimraf dist",
|
|
56
|
+
"test": "pnpm build && node --test ./test/*.test.js",
|
|
57
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
58
|
+
}
|
|
59
|
+
}
|