@harbour-enterprises/superdoc 0.28.0 → 0.28.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/dist/chunks/{PdfViewer-D-d9sxeo.cjs → PdfViewer-Can0yoW4.cjs} +1 -1
- package/dist/chunks/{PdfViewer-COOBTu0Z.es.js → PdfViewer-DJkdA-8o.es.js} +1 -1
- package/dist/chunks/default-BS6z0SoE-BS6z0SoE.es.js +5 -0
- package/dist/chunks/default-BS6z0SoE-Gl4f7Y7J.cjs +4 -0
- package/dist/chunks/{index-lzF76amP.cjs → index-BY-vlgKe.cjs} +3 -3
- package/dist/chunks/index-CHAKf7mX-C5aFF6Zl.es.js +2213 -0
- package/dist/chunks/index-CHAKf7mX-Dx-DOGGJ.cjs +2213 -0
- package/dist/chunks/index-CSaZZzfe-BzemjgYL.cjs +264 -0
- package/dist/chunks/index-CSaZZzfe-CSaZZzfe.es.js +265 -0
- package/dist/chunks/index-C_x_N6Uh-DJn8hIEt.es.js +2200 -0
- package/dist/chunks/index-C_x_N6Uh-Db3CUJMX.cjs +2200 -0
- package/dist/chunks/index-Cd3D_8gF-CFhMnajQ.es.js +862 -0
- package/dist/chunks/index-Cd3D_8gF-DKJ_wTu_.cjs +861 -0
- package/dist/chunks/index-CvBqQJbG-CvBqQJbG.es.js +878 -0
- package/dist/chunks/index-CvBqQJbG-Dwm0THD7.cjs +877 -0
- package/dist/chunks/index-DRCvimau-Cw339678.es.js +9876 -0
- package/dist/chunks/index-DRCvimau-H4Ck3S9a.cjs +9876 -0
- package/dist/chunks/index-D_sWOSiG-BtDZzJ6I.cjs +588 -0
- package/dist/chunks/index-D_sWOSiG-DE96TaT5.es.js +588 -0
- package/dist/chunks/{index-CeV3gm4O.es.js → index-DidXsI6u.es.js} +3 -3
- package/dist/chunks/index-njnq8umX-DU2xcaHZ.es.js +845 -0
- package/dist/chunks/index-njnq8umX-_TfP84XP.cjs +845 -0
- package/dist/chunks/{super-editor.es-CBBT9MkW.es.js → super-editor.es-Br566URP.es.js} +6453 -24109
- package/dist/chunks/{super-editor.es-CsOCPht5.cjs → super-editor.es-ksiTgGLm.cjs} +6362 -24018
- package/dist/core/types/index.d.ts +6 -6
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/super-editor/ai-writer.es.js +2 -2
- package/dist/super-editor/chunks/{converter-3mtRTJOI.js → converter-D6Z6OmA3.js} +49 -49
- package/dist/super-editor/chunks/default-BS6z0SoE.js +5 -0
- package/dist/super-editor/chunks/{docx-zipper-DIkBRy6i.js → docx-zipper-Dni97kMT.js} +1 -1
- package/dist/super-editor/chunks/{editor-DakKNLen.js → editor-D3TKfdXs.js} +3694 -21351
- package/dist/super-editor/chunks/index-CHAKf7mX.js +2213 -0
- package/dist/super-editor/chunks/index-CSaZZzfe.js +265 -0
- package/dist/super-editor/chunks/index-C_x_N6Uh.js +2200 -0
- package/dist/super-editor/chunks/index-Cd3D_8gF.js +862 -0
- package/dist/super-editor/chunks/index-CvBqQJbG.js +878 -0
- package/dist/super-editor/chunks/index-DRCvimau.js +9876 -0
- package/dist/super-editor/chunks/index-D_sWOSiG.js +588 -0
- package/dist/super-editor/chunks/index-njnq8umX.js +845 -0
- package/dist/super-editor/chunks/{toolbar-D4J4zzEp.js → toolbar-fNE3luLB.js} +2 -2
- package/dist/super-editor/converter.es.js +2 -2
- package/dist/super-editor/docx-zipper.es.js +2 -2
- package/dist/super-editor/editor.es.js +3 -3
- package/dist/super-editor/file-zipper.es.js +1 -1
- package/dist/super-editor/super-editor/src/core/Editor.d.ts +2 -2
- package/dist/super-editor/super-editor/src/extensions/track-changes/permission-helpers.d.ts +6 -6
- package/dist/super-editor/super-editor.es.js +15 -15
- package/dist/super-editor/toolbar.es.js +2 -2
- package/dist/super-editor.cjs +1 -1
- package/dist/super-editor.es.js +1 -1
- package/dist/superdoc.cjs +2 -2
- package/dist/superdoc.es.js +2 -2
- package/dist/superdoc.umd.js +73962 -73924
- package/dist/superdoc.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,862 @@
|
|
|
1
|
+
import { p as phrasing, v as visit, t as toString, E as EXIT } from "./index-CSaZZzfe-CSaZZzfe.es.js";
|
|
2
|
+
function blockquote(node, _, state, info) {
|
|
3
|
+
const exit = state.enter("blockquote");
|
|
4
|
+
const tracker = state.createTracker(info);
|
|
5
|
+
tracker.move("> ");
|
|
6
|
+
tracker.shift(2);
|
|
7
|
+
const value = state.indentLines(
|
|
8
|
+
state.containerFlow(node, tracker.current()),
|
|
9
|
+
map$1
|
|
10
|
+
);
|
|
11
|
+
exit();
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
function map$1(line, _, blank) {
|
|
15
|
+
return ">" + (blank ? "" : " ") + line;
|
|
16
|
+
}
|
|
17
|
+
function patternInScope(stack, pattern) {
|
|
18
|
+
return listInScope(stack, pattern.inConstruct, true) && !listInScope(stack, pattern.notInConstruct, false);
|
|
19
|
+
}
|
|
20
|
+
function listInScope(stack, list2, none) {
|
|
21
|
+
if (typeof list2 === "string") {
|
|
22
|
+
list2 = [list2];
|
|
23
|
+
}
|
|
24
|
+
if (!list2 || list2.length === 0) {
|
|
25
|
+
return none;
|
|
26
|
+
}
|
|
27
|
+
let index = -1;
|
|
28
|
+
while (++index < list2.length) {
|
|
29
|
+
if (stack.includes(list2[index])) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
function hardBreak(_, _1, state, info) {
|
|
36
|
+
let index = -1;
|
|
37
|
+
while (++index < state.unsafe.length) {
|
|
38
|
+
if (state.unsafe[index].character === "\n" && patternInScope(state.stack, state.unsafe[index])) {
|
|
39
|
+
return /[ \t]/.test(info.before) ? "" : " ";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return "\\\n";
|
|
43
|
+
}
|
|
44
|
+
function longestStreak(value, substring) {
|
|
45
|
+
const source = String(value);
|
|
46
|
+
let index = source.indexOf(substring);
|
|
47
|
+
let expected = index;
|
|
48
|
+
let count = 0;
|
|
49
|
+
let max = 0;
|
|
50
|
+
if (typeof substring !== "string") {
|
|
51
|
+
throw new TypeError("Expected substring");
|
|
52
|
+
}
|
|
53
|
+
while (index !== -1) {
|
|
54
|
+
if (index === expected) {
|
|
55
|
+
if (++count > max) {
|
|
56
|
+
max = count;
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
count = 1;
|
|
60
|
+
}
|
|
61
|
+
expected = index + substring.length;
|
|
62
|
+
index = source.indexOf(substring, expected);
|
|
63
|
+
}
|
|
64
|
+
return max;
|
|
65
|
+
}
|
|
66
|
+
function formatCodeAsIndented(node, state) {
|
|
67
|
+
return Boolean(
|
|
68
|
+
state.options.fences === false && node.value && // If there’s no info…
|
|
69
|
+
!node.lang && // And there’s a non-whitespace character…
|
|
70
|
+
/[^ \r\n]/.test(node.value) && // And the value doesn’t start or end in a blank…
|
|
71
|
+
!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(node.value)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function checkFence(state) {
|
|
75
|
+
const marker = state.options.fence || "`";
|
|
76
|
+
if (marker !== "`" && marker !== "~") {
|
|
77
|
+
throw new Error(
|
|
78
|
+
"Cannot serialize code with `" + marker + "` for `options.fence`, expected `` ` `` or `~`"
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
return marker;
|
|
82
|
+
}
|
|
83
|
+
function code(node, _, state, info) {
|
|
84
|
+
const marker = checkFence(state);
|
|
85
|
+
const raw = node.value || "";
|
|
86
|
+
const suffix = marker === "`" ? "GraveAccent" : "Tilde";
|
|
87
|
+
if (formatCodeAsIndented(node, state)) {
|
|
88
|
+
const exit2 = state.enter("codeIndented");
|
|
89
|
+
const value2 = state.indentLines(raw, map);
|
|
90
|
+
exit2();
|
|
91
|
+
return value2;
|
|
92
|
+
}
|
|
93
|
+
const tracker = state.createTracker(info);
|
|
94
|
+
const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3));
|
|
95
|
+
const exit = state.enter("codeFenced");
|
|
96
|
+
let value = tracker.move(sequence);
|
|
97
|
+
if (node.lang) {
|
|
98
|
+
const subexit = state.enter(`codeFencedLang${suffix}`);
|
|
99
|
+
value += tracker.move(
|
|
100
|
+
state.safe(node.lang, {
|
|
101
|
+
before: value,
|
|
102
|
+
after: " ",
|
|
103
|
+
encode: ["`"],
|
|
104
|
+
...tracker.current()
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
subexit();
|
|
108
|
+
}
|
|
109
|
+
if (node.lang && node.meta) {
|
|
110
|
+
const subexit = state.enter(`codeFencedMeta${suffix}`);
|
|
111
|
+
value += tracker.move(" ");
|
|
112
|
+
value += tracker.move(
|
|
113
|
+
state.safe(node.meta, {
|
|
114
|
+
before: value,
|
|
115
|
+
after: "\n",
|
|
116
|
+
encode: ["`"],
|
|
117
|
+
...tracker.current()
|
|
118
|
+
})
|
|
119
|
+
);
|
|
120
|
+
subexit();
|
|
121
|
+
}
|
|
122
|
+
value += tracker.move("\n");
|
|
123
|
+
if (raw) {
|
|
124
|
+
value += tracker.move(raw + "\n");
|
|
125
|
+
}
|
|
126
|
+
value += tracker.move(sequence);
|
|
127
|
+
exit();
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
function map(line, _, blank) {
|
|
131
|
+
return (blank ? "" : " ") + line;
|
|
132
|
+
}
|
|
133
|
+
function checkQuote(state) {
|
|
134
|
+
const marker = state.options.quote || '"';
|
|
135
|
+
if (marker !== '"' && marker !== "'") {
|
|
136
|
+
throw new Error(
|
|
137
|
+
"Cannot serialize title with `" + marker + "` for `options.quote`, expected `\"`, or `'`"
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
return marker;
|
|
141
|
+
}
|
|
142
|
+
function definition(node, _, state, info) {
|
|
143
|
+
const quote = checkQuote(state);
|
|
144
|
+
const suffix = quote === '"' ? "Quote" : "Apostrophe";
|
|
145
|
+
const exit = state.enter("definition");
|
|
146
|
+
let subexit = state.enter("label");
|
|
147
|
+
const tracker = state.createTracker(info);
|
|
148
|
+
let value = tracker.move("[");
|
|
149
|
+
value += tracker.move(
|
|
150
|
+
state.safe(state.associationId(node), {
|
|
151
|
+
before: value,
|
|
152
|
+
after: "]",
|
|
153
|
+
...tracker.current()
|
|
154
|
+
})
|
|
155
|
+
);
|
|
156
|
+
value += tracker.move("]: ");
|
|
157
|
+
subexit();
|
|
158
|
+
if (
|
|
159
|
+
// If there’s no url, or…
|
|
160
|
+
!node.url || // If there are control characters or whitespace.
|
|
161
|
+
/[\0- \u007F]/.test(node.url)
|
|
162
|
+
) {
|
|
163
|
+
subexit = state.enter("destinationLiteral");
|
|
164
|
+
value += tracker.move("<");
|
|
165
|
+
value += tracker.move(
|
|
166
|
+
state.safe(node.url, { before: value, after: ">", ...tracker.current() })
|
|
167
|
+
);
|
|
168
|
+
value += tracker.move(">");
|
|
169
|
+
} else {
|
|
170
|
+
subexit = state.enter("destinationRaw");
|
|
171
|
+
value += tracker.move(
|
|
172
|
+
state.safe(node.url, {
|
|
173
|
+
before: value,
|
|
174
|
+
after: node.title ? " " : "\n",
|
|
175
|
+
...tracker.current()
|
|
176
|
+
})
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
subexit();
|
|
180
|
+
if (node.title) {
|
|
181
|
+
subexit = state.enter(`title${suffix}`);
|
|
182
|
+
value += tracker.move(" " + quote);
|
|
183
|
+
value += tracker.move(
|
|
184
|
+
state.safe(node.title, {
|
|
185
|
+
before: value,
|
|
186
|
+
after: quote,
|
|
187
|
+
...tracker.current()
|
|
188
|
+
})
|
|
189
|
+
);
|
|
190
|
+
value += tracker.move(quote);
|
|
191
|
+
subexit();
|
|
192
|
+
}
|
|
193
|
+
exit();
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
function checkEmphasis(state) {
|
|
197
|
+
const marker = state.options.emphasis || "*";
|
|
198
|
+
if (marker !== "*" && marker !== "_") {
|
|
199
|
+
throw new Error(
|
|
200
|
+
"Cannot serialize emphasis with `" + marker + "` for `options.emphasis`, expected `*`, or `_`"
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
return marker;
|
|
204
|
+
}
|
|
205
|
+
function encodeCharacterReference(code2) {
|
|
206
|
+
return "&#x" + code2.toString(16).toUpperCase() + ";";
|
|
207
|
+
}
|
|
208
|
+
const asciiAlpha = regexCheck(/[A-Za-z]/);
|
|
209
|
+
const asciiAlphanumeric = regexCheck(/[\dA-Za-z]/);
|
|
210
|
+
function asciiControl(code2) {
|
|
211
|
+
return (
|
|
212
|
+
// Special whitespace codes (which have negative values), C0 and Control
|
|
213
|
+
// character DEL
|
|
214
|
+
code2 !== null && (code2 < 32 || code2 === 127)
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
function markdownLineEnding(code2) {
|
|
218
|
+
return code2 !== null && code2 < -2;
|
|
219
|
+
}
|
|
220
|
+
function markdownLineEndingOrSpace(code2) {
|
|
221
|
+
return code2 !== null && (code2 < 0 || code2 === 32);
|
|
222
|
+
}
|
|
223
|
+
function markdownSpace(code2) {
|
|
224
|
+
return code2 === -2 || code2 === -1 || code2 === 32;
|
|
225
|
+
}
|
|
226
|
+
const unicodePunctuation = regexCheck(/\p{P}|\p{S}/u);
|
|
227
|
+
const unicodeWhitespace = regexCheck(/\s/);
|
|
228
|
+
function regexCheck(regex) {
|
|
229
|
+
return check;
|
|
230
|
+
function check(code2) {
|
|
231
|
+
return code2 !== null && code2 > -1 && regex.test(String.fromCharCode(code2));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function classifyCharacter(code2) {
|
|
235
|
+
if (code2 === null || markdownLineEndingOrSpace(code2) || unicodeWhitespace(code2)) {
|
|
236
|
+
return 1;
|
|
237
|
+
}
|
|
238
|
+
if (unicodePunctuation(code2)) {
|
|
239
|
+
return 2;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function encodeInfo(outside, inside, marker) {
|
|
243
|
+
const outsideKind = classifyCharacter(outside);
|
|
244
|
+
const insideKind = classifyCharacter(inside);
|
|
245
|
+
if (outsideKind === void 0) {
|
|
246
|
+
return insideKind === void 0 ? (
|
|
247
|
+
// Letter inside:
|
|
248
|
+
// we have to encode *both* letters for `_` as it is looser.
|
|
249
|
+
// it already forms for `*` (and GFMs `~`).
|
|
250
|
+
marker === "_" ? { inside: true, outside: true } : { inside: false, outside: false }
|
|
251
|
+
) : insideKind === 1 ? (
|
|
252
|
+
// Whitespace inside: encode both (letter, whitespace).
|
|
253
|
+
{ inside: true, outside: true }
|
|
254
|
+
) : (
|
|
255
|
+
// Punctuation inside: encode outer (letter)
|
|
256
|
+
{ inside: false, outside: true }
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
if (outsideKind === 1) {
|
|
260
|
+
return insideKind === void 0 ? (
|
|
261
|
+
// Letter inside: already forms.
|
|
262
|
+
{ inside: false, outside: false }
|
|
263
|
+
) : insideKind === 1 ? (
|
|
264
|
+
// Whitespace inside: encode both (whitespace).
|
|
265
|
+
{ inside: true, outside: true }
|
|
266
|
+
) : (
|
|
267
|
+
// Punctuation inside: already forms.
|
|
268
|
+
{ inside: false, outside: false }
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
return insideKind === void 0 ? (
|
|
272
|
+
// Letter inside: already forms.
|
|
273
|
+
{ inside: false, outside: false }
|
|
274
|
+
) : insideKind === 1 ? (
|
|
275
|
+
// Whitespace inside: encode inner (whitespace).
|
|
276
|
+
{ inside: true, outside: false }
|
|
277
|
+
) : (
|
|
278
|
+
// Punctuation inside: already forms.
|
|
279
|
+
{ inside: false, outside: false }
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
emphasis.peek = emphasisPeek;
|
|
283
|
+
function emphasis(node, _, state, info) {
|
|
284
|
+
const marker = checkEmphasis(state);
|
|
285
|
+
const exit = state.enter("emphasis");
|
|
286
|
+
const tracker = state.createTracker(info);
|
|
287
|
+
const before = tracker.move(marker);
|
|
288
|
+
let between = tracker.move(
|
|
289
|
+
state.containerPhrasing(node, {
|
|
290
|
+
after: marker,
|
|
291
|
+
before,
|
|
292
|
+
...tracker.current()
|
|
293
|
+
})
|
|
294
|
+
);
|
|
295
|
+
const betweenHead = between.charCodeAt(0);
|
|
296
|
+
const open = encodeInfo(
|
|
297
|
+
info.before.charCodeAt(info.before.length - 1),
|
|
298
|
+
betweenHead,
|
|
299
|
+
marker
|
|
300
|
+
);
|
|
301
|
+
if (open.inside) {
|
|
302
|
+
between = encodeCharacterReference(betweenHead) + between.slice(1);
|
|
303
|
+
}
|
|
304
|
+
const betweenTail = between.charCodeAt(between.length - 1);
|
|
305
|
+
const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);
|
|
306
|
+
if (close.inside) {
|
|
307
|
+
between = between.slice(0, -1) + encodeCharacterReference(betweenTail);
|
|
308
|
+
}
|
|
309
|
+
const after = tracker.move(marker);
|
|
310
|
+
exit();
|
|
311
|
+
state.attentionEncodeSurroundingInfo = {
|
|
312
|
+
after: close.outside,
|
|
313
|
+
before: open.outside
|
|
314
|
+
};
|
|
315
|
+
return before + between + after;
|
|
316
|
+
}
|
|
317
|
+
function emphasisPeek(_, _1, state) {
|
|
318
|
+
return state.options.emphasis || "*";
|
|
319
|
+
}
|
|
320
|
+
function formatHeadingAsSetext(node, state) {
|
|
321
|
+
let literalWithBreak = false;
|
|
322
|
+
visit(node, function(node2) {
|
|
323
|
+
if ("value" in node2 && /\r?\n|\r/.test(node2.value) || node2.type === "break") {
|
|
324
|
+
literalWithBreak = true;
|
|
325
|
+
return EXIT;
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
return Boolean(
|
|
329
|
+
(!node.depth || node.depth < 3) && toString(node) && (state.options.setext || literalWithBreak)
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
function heading(node, _, state, info) {
|
|
333
|
+
const rank = Math.max(Math.min(6, node.depth || 1), 1);
|
|
334
|
+
const tracker = state.createTracker(info);
|
|
335
|
+
if (formatHeadingAsSetext(node, state)) {
|
|
336
|
+
const exit2 = state.enter("headingSetext");
|
|
337
|
+
const subexit2 = state.enter("phrasing");
|
|
338
|
+
const value2 = state.containerPhrasing(node, {
|
|
339
|
+
...tracker.current(),
|
|
340
|
+
before: "\n",
|
|
341
|
+
after: "\n"
|
|
342
|
+
});
|
|
343
|
+
subexit2();
|
|
344
|
+
exit2();
|
|
345
|
+
return value2 + "\n" + (rank === 1 ? "=" : "-").repeat(
|
|
346
|
+
// The whole size…
|
|
347
|
+
value2.length - // Minus the position of the character after the last EOL (or
|
|
348
|
+
// 0 if there is none)…
|
|
349
|
+
(Math.max(value2.lastIndexOf("\r"), value2.lastIndexOf("\n")) + 1)
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
const sequence = "#".repeat(rank);
|
|
353
|
+
const exit = state.enter("headingAtx");
|
|
354
|
+
const subexit = state.enter("phrasing");
|
|
355
|
+
tracker.move(sequence + " ");
|
|
356
|
+
let value = state.containerPhrasing(node, {
|
|
357
|
+
before: "# ",
|
|
358
|
+
after: "\n",
|
|
359
|
+
...tracker.current()
|
|
360
|
+
});
|
|
361
|
+
if (/^[\t ]/.test(value)) {
|
|
362
|
+
value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1);
|
|
363
|
+
}
|
|
364
|
+
value = value ? sequence + " " + value : sequence;
|
|
365
|
+
if (state.options.closeAtx) {
|
|
366
|
+
value += " " + sequence;
|
|
367
|
+
}
|
|
368
|
+
subexit();
|
|
369
|
+
exit();
|
|
370
|
+
return value;
|
|
371
|
+
}
|
|
372
|
+
html.peek = htmlPeek;
|
|
373
|
+
function html(node) {
|
|
374
|
+
return node.value || "";
|
|
375
|
+
}
|
|
376
|
+
function htmlPeek() {
|
|
377
|
+
return "<";
|
|
378
|
+
}
|
|
379
|
+
image.peek = imagePeek;
|
|
380
|
+
function image(node, _, state, info) {
|
|
381
|
+
const quote = checkQuote(state);
|
|
382
|
+
const suffix = quote === '"' ? "Quote" : "Apostrophe";
|
|
383
|
+
const exit = state.enter("image");
|
|
384
|
+
let subexit = state.enter("label");
|
|
385
|
+
const tracker = state.createTracker(info);
|
|
386
|
+
let value = tracker.move("![");
|
|
387
|
+
value += tracker.move(
|
|
388
|
+
state.safe(node.alt, { before: value, after: "]", ...tracker.current() })
|
|
389
|
+
);
|
|
390
|
+
value += tracker.move("](");
|
|
391
|
+
subexit();
|
|
392
|
+
if (
|
|
393
|
+
// If there’s no url but there is a title…
|
|
394
|
+
!node.url && node.title || // If there are control characters or whitespace.
|
|
395
|
+
/[\0- \u007F]/.test(node.url)
|
|
396
|
+
) {
|
|
397
|
+
subexit = state.enter("destinationLiteral");
|
|
398
|
+
value += tracker.move("<");
|
|
399
|
+
value += tracker.move(
|
|
400
|
+
state.safe(node.url, { before: value, after: ">", ...tracker.current() })
|
|
401
|
+
);
|
|
402
|
+
value += tracker.move(">");
|
|
403
|
+
} else {
|
|
404
|
+
subexit = state.enter("destinationRaw");
|
|
405
|
+
value += tracker.move(
|
|
406
|
+
state.safe(node.url, {
|
|
407
|
+
before: value,
|
|
408
|
+
after: node.title ? " " : ")",
|
|
409
|
+
...tracker.current()
|
|
410
|
+
})
|
|
411
|
+
);
|
|
412
|
+
}
|
|
413
|
+
subexit();
|
|
414
|
+
if (node.title) {
|
|
415
|
+
subexit = state.enter(`title${suffix}`);
|
|
416
|
+
value += tracker.move(" " + quote);
|
|
417
|
+
value += tracker.move(
|
|
418
|
+
state.safe(node.title, {
|
|
419
|
+
before: value,
|
|
420
|
+
after: quote,
|
|
421
|
+
...tracker.current()
|
|
422
|
+
})
|
|
423
|
+
);
|
|
424
|
+
value += tracker.move(quote);
|
|
425
|
+
subexit();
|
|
426
|
+
}
|
|
427
|
+
value += tracker.move(")");
|
|
428
|
+
exit();
|
|
429
|
+
return value;
|
|
430
|
+
}
|
|
431
|
+
function imagePeek() {
|
|
432
|
+
return "!";
|
|
433
|
+
}
|
|
434
|
+
imageReference.peek = imageReferencePeek;
|
|
435
|
+
function imageReference(node, _, state, info) {
|
|
436
|
+
const type = node.referenceType;
|
|
437
|
+
const exit = state.enter("imageReference");
|
|
438
|
+
let subexit = state.enter("label");
|
|
439
|
+
const tracker = state.createTracker(info);
|
|
440
|
+
let value = tracker.move("![");
|
|
441
|
+
const alt = state.safe(node.alt, {
|
|
442
|
+
before: value,
|
|
443
|
+
after: "]",
|
|
444
|
+
...tracker.current()
|
|
445
|
+
});
|
|
446
|
+
value += tracker.move(alt + "][");
|
|
447
|
+
subexit();
|
|
448
|
+
const stack = state.stack;
|
|
449
|
+
state.stack = [];
|
|
450
|
+
subexit = state.enter("reference");
|
|
451
|
+
const reference = state.safe(state.associationId(node), {
|
|
452
|
+
before: value,
|
|
453
|
+
after: "]",
|
|
454
|
+
...tracker.current()
|
|
455
|
+
});
|
|
456
|
+
subexit();
|
|
457
|
+
state.stack = stack;
|
|
458
|
+
exit();
|
|
459
|
+
if (type === "full" || !alt || alt !== reference) {
|
|
460
|
+
value += tracker.move(reference + "]");
|
|
461
|
+
} else if (type === "shortcut") {
|
|
462
|
+
value = value.slice(0, -1);
|
|
463
|
+
} else {
|
|
464
|
+
value += tracker.move("]");
|
|
465
|
+
}
|
|
466
|
+
return value;
|
|
467
|
+
}
|
|
468
|
+
function imageReferencePeek() {
|
|
469
|
+
return "!";
|
|
470
|
+
}
|
|
471
|
+
inlineCode.peek = inlineCodePeek;
|
|
472
|
+
function inlineCode(node, _, state) {
|
|
473
|
+
let value = node.value || "";
|
|
474
|
+
let sequence = "`";
|
|
475
|
+
let index = -1;
|
|
476
|
+
while (new RegExp("(^|[^`])" + sequence + "([^`]|$)").test(value)) {
|
|
477
|
+
sequence += "`";
|
|
478
|
+
}
|
|
479
|
+
if (/[^ \r\n]/.test(value) && (/^[ \r\n]/.test(value) && /[ \r\n]$/.test(value) || /^`|`$/.test(value))) {
|
|
480
|
+
value = " " + value + " ";
|
|
481
|
+
}
|
|
482
|
+
while (++index < state.unsafe.length) {
|
|
483
|
+
const pattern = state.unsafe[index];
|
|
484
|
+
const expression = state.compilePattern(pattern);
|
|
485
|
+
let match;
|
|
486
|
+
if (!pattern.atBreak) continue;
|
|
487
|
+
while (match = expression.exec(value)) {
|
|
488
|
+
let position = match.index;
|
|
489
|
+
if (value.charCodeAt(position) === 10 && value.charCodeAt(position - 1) === 13) {
|
|
490
|
+
position--;
|
|
491
|
+
}
|
|
492
|
+
value = value.slice(0, position) + " " + value.slice(match.index + 1);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
return sequence + value + sequence;
|
|
496
|
+
}
|
|
497
|
+
function inlineCodePeek() {
|
|
498
|
+
return "`";
|
|
499
|
+
}
|
|
500
|
+
function formatLinkAsAutolink(node, state) {
|
|
501
|
+
const raw = toString(node);
|
|
502
|
+
return Boolean(
|
|
503
|
+
!state.options.resourceLink && // If there’s a url…
|
|
504
|
+
node.url && // And there’s a no title…
|
|
505
|
+
!node.title && // And the content of `node` is a single text node…
|
|
506
|
+
node.children && node.children.length === 1 && node.children[0].type === "text" && // And if the url is the same as the content…
|
|
507
|
+
(raw === node.url || "mailto:" + raw === node.url) && // And that starts w/ a protocol…
|
|
508
|
+
/^[a-z][a-z+.-]+:/i.test(node.url) && // And that doesn’t contain ASCII control codes (character escapes and
|
|
509
|
+
// references don’t work), space, or angle brackets…
|
|
510
|
+
!/[\0- <>\u007F]/.test(node.url)
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
link.peek = linkPeek;
|
|
514
|
+
function link(node, _, state, info) {
|
|
515
|
+
const quote = checkQuote(state);
|
|
516
|
+
const suffix = quote === '"' ? "Quote" : "Apostrophe";
|
|
517
|
+
const tracker = state.createTracker(info);
|
|
518
|
+
let exit;
|
|
519
|
+
let subexit;
|
|
520
|
+
if (formatLinkAsAutolink(node, state)) {
|
|
521
|
+
const stack = state.stack;
|
|
522
|
+
state.stack = [];
|
|
523
|
+
exit = state.enter("autolink");
|
|
524
|
+
let value2 = tracker.move("<");
|
|
525
|
+
value2 += tracker.move(
|
|
526
|
+
state.containerPhrasing(node, {
|
|
527
|
+
before: value2,
|
|
528
|
+
after: ">",
|
|
529
|
+
...tracker.current()
|
|
530
|
+
})
|
|
531
|
+
);
|
|
532
|
+
value2 += tracker.move(">");
|
|
533
|
+
exit();
|
|
534
|
+
state.stack = stack;
|
|
535
|
+
return value2;
|
|
536
|
+
}
|
|
537
|
+
exit = state.enter("link");
|
|
538
|
+
subexit = state.enter("label");
|
|
539
|
+
let value = tracker.move("[");
|
|
540
|
+
value += tracker.move(
|
|
541
|
+
state.containerPhrasing(node, {
|
|
542
|
+
before: value,
|
|
543
|
+
after: "](",
|
|
544
|
+
...tracker.current()
|
|
545
|
+
})
|
|
546
|
+
);
|
|
547
|
+
value += tracker.move("](");
|
|
548
|
+
subexit();
|
|
549
|
+
if (
|
|
550
|
+
// If there’s no url but there is a title…
|
|
551
|
+
!node.url && node.title || // If there are control characters or whitespace.
|
|
552
|
+
/[\0- \u007F]/.test(node.url)
|
|
553
|
+
) {
|
|
554
|
+
subexit = state.enter("destinationLiteral");
|
|
555
|
+
value += tracker.move("<");
|
|
556
|
+
value += tracker.move(
|
|
557
|
+
state.safe(node.url, { before: value, after: ">", ...tracker.current() })
|
|
558
|
+
);
|
|
559
|
+
value += tracker.move(">");
|
|
560
|
+
} else {
|
|
561
|
+
subexit = state.enter("destinationRaw");
|
|
562
|
+
value += tracker.move(
|
|
563
|
+
state.safe(node.url, {
|
|
564
|
+
before: value,
|
|
565
|
+
after: node.title ? " " : ")",
|
|
566
|
+
...tracker.current()
|
|
567
|
+
})
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
subexit();
|
|
571
|
+
if (node.title) {
|
|
572
|
+
subexit = state.enter(`title${suffix}`);
|
|
573
|
+
value += tracker.move(" " + quote);
|
|
574
|
+
value += tracker.move(
|
|
575
|
+
state.safe(node.title, {
|
|
576
|
+
before: value,
|
|
577
|
+
after: quote,
|
|
578
|
+
...tracker.current()
|
|
579
|
+
})
|
|
580
|
+
);
|
|
581
|
+
value += tracker.move(quote);
|
|
582
|
+
subexit();
|
|
583
|
+
}
|
|
584
|
+
value += tracker.move(")");
|
|
585
|
+
exit();
|
|
586
|
+
return value;
|
|
587
|
+
}
|
|
588
|
+
function linkPeek(node, _, state) {
|
|
589
|
+
return formatLinkAsAutolink(node, state) ? "<" : "[";
|
|
590
|
+
}
|
|
591
|
+
linkReference.peek = linkReferencePeek;
|
|
592
|
+
function linkReference(node, _, state, info) {
|
|
593
|
+
const type = node.referenceType;
|
|
594
|
+
const exit = state.enter("linkReference");
|
|
595
|
+
let subexit = state.enter("label");
|
|
596
|
+
const tracker = state.createTracker(info);
|
|
597
|
+
let value = tracker.move("[");
|
|
598
|
+
const text2 = state.containerPhrasing(node, {
|
|
599
|
+
before: value,
|
|
600
|
+
after: "]",
|
|
601
|
+
...tracker.current()
|
|
602
|
+
});
|
|
603
|
+
value += tracker.move(text2 + "][");
|
|
604
|
+
subexit();
|
|
605
|
+
const stack = state.stack;
|
|
606
|
+
state.stack = [];
|
|
607
|
+
subexit = state.enter("reference");
|
|
608
|
+
const reference = state.safe(state.associationId(node), {
|
|
609
|
+
before: value,
|
|
610
|
+
after: "]",
|
|
611
|
+
...tracker.current()
|
|
612
|
+
});
|
|
613
|
+
subexit();
|
|
614
|
+
state.stack = stack;
|
|
615
|
+
exit();
|
|
616
|
+
if (type === "full" || !text2 || text2 !== reference) {
|
|
617
|
+
value += tracker.move(reference + "]");
|
|
618
|
+
} else if (type === "shortcut") {
|
|
619
|
+
value = value.slice(0, -1);
|
|
620
|
+
} else {
|
|
621
|
+
value += tracker.move("]");
|
|
622
|
+
}
|
|
623
|
+
return value;
|
|
624
|
+
}
|
|
625
|
+
function linkReferencePeek() {
|
|
626
|
+
return "[";
|
|
627
|
+
}
|
|
628
|
+
function checkBullet(state) {
|
|
629
|
+
const marker = state.options.bullet || "*";
|
|
630
|
+
if (marker !== "*" && marker !== "+" && marker !== "-") {
|
|
631
|
+
throw new Error(
|
|
632
|
+
"Cannot serialize items with `" + marker + "` for `options.bullet`, expected `*`, `+`, or `-`"
|
|
633
|
+
);
|
|
634
|
+
}
|
|
635
|
+
return marker;
|
|
636
|
+
}
|
|
637
|
+
function checkBulletOther(state) {
|
|
638
|
+
const bullet = checkBullet(state);
|
|
639
|
+
const bulletOther = state.options.bulletOther;
|
|
640
|
+
if (!bulletOther) {
|
|
641
|
+
return bullet === "*" ? "-" : "*";
|
|
642
|
+
}
|
|
643
|
+
if (bulletOther !== "*" && bulletOther !== "+" && bulletOther !== "-") {
|
|
644
|
+
throw new Error(
|
|
645
|
+
"Cannot serialize items with `" + bulletOther + "` for `options.bulletOther`, expected `*`, `+`, or `-`"
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
if (bulletOther === bullet) {
|
|
649
|
+
throw new Error(
|
|
650
|
+
"Expected `bullet` (`" + bullet + "`) and `bulletOther` (`" + bulletOther + "`) to be different"
|
|
651
|
+
);
|
|
652
|
+
}
|
|
653
|
+
return bulletOther;
|
|
654
|
+
}
|
|
655
|
+
function checkBulletOrdered(state) {
|
|
656
|
+
const marker = state.options.bulletOrdered || ".";
|
|
657
|
+
if (marker !== "." && marker !== ")") {
|
|
658
|
+
throw new Error(
|
|
659
|
+
"Cannot serialize items with `" + marker + "` for `options.bulletOrdered`, expected `.` or `)`"
|
|
660
|
+
);
|
|
661
|
+
}
|
|
662
|
+
return marker;
|
|
663
|
+
}
|
|
664
|
+
function checkRule(state) {
|
|
665
|
+
const marker = state.options.rule || "*";
|
|
666
|
+
if (marker !== "*" && marker !== "-" && marker !== "_") {
|
|
667
|
+
throw new Error(
|
|
668
|
+
"Cannot serialize rules with `" + marker + "` for `options.rule`, expected `*`, `-`, or `_`"
|
|
669
|
+
);
|
|
670
|
+
}
|
|
671
|
+
return marker;
|
|
672
|
+
}
|
|
673
|
+
function list(node, parent, state, info) {
|
|
674
|
+
const exit = state.enter("list");
|
|
675
|
+
const bulletCurrent = state.bulletCurrent;
|
|
676
|
+
let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state);
|
|
677
|
+
const bulletOther = node.ordered ? bullet === "." ? ")" : "." : checkBulletOther(state);
|
|
678
|
+
let useDifferentMarker = parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false;
|
|
679
|
+
if (!node.ordered) {
|
|
680
|
+
const firstListItem = node.children ? node.children[0] : void 0;
|
|
681
|
+
if (
|
|
682
|
+
// Bullet could be used as a thematic break marker:
|
|
683
|
+
(bullet === "*" || bullet === "-") && // Empty first list item:
|
|
684
|
+
firstListItem && (!firstListItem.children || !firstListItem.children[0]) && // Directly in two other list items:
|
|
685
|
+
state.stack[state.stack.length - 1] === "list" && state.stack[state.stack.length - 2] === "listItem" && state.stack[state.stack.length - 3] === "list" && state.stack[state.stack.length - 4] === "listItem" && // That are each the first child.
|
|
686
|
+
state.indexStack[state.indexStack.length - 1] === 0 && state.indexStack[state.indexStack.length - 2] === 0 && state.indexStack[state.indexStack.length - 3] === 0
|
|
687
|
+
) {
|
|
688
|
+
useDifferentMarker = true;
|
|
689
|
+
}
|
|
690
|
+
if (checkRule(state) === bullet && firstListItem) {
|
|
691
|
+
let index = -1;
|
|
692
|
+
while (++index < node.children.length) {
|
|
693
|
+
const item = node.children[index];
|
|
694
|
+
if (item && item.type === "listItem" && item.children && item.children[0] && item.children[0].type === "thematicBreak") {
|
|
695
|
+
useDifferentMarker = true;
|
|
696
|
+
break;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
if (useDifferentMarker) {
|
|
702
|
+
bullet = bulletOther;
|
|
703
|
+
}
|
|
704
|
+
state.bulletCurrent = bullet;
|
|
705
|
+
const value = state.containerFlow(node, info);
|
|
706
|
+
state.bulletLastUsed = bullet;
|
|
707
|
+
state.bulletCurrent = bulletCurrent;
|
|
708
|
+
exit();
|
|
709
|
+
return value;
|
|
710
|
+
}
|
|
711
|
+
function checkListItemIndent(state) {
|
|
712
|
+
const style = state.options.listItemIndent || "one";
|
|
713
|
+
if (style !== "tab" && style !== "one" && style !== "mixed") {
|
|
714
|
+
throw new Error(
|
|
715
|
+
"Cannot serialize items with `" + style + "` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`"
|
|
716
|
+
);
|
|
717
|
+
}
|
|
718
|
+
return style;
|
|
719
|
+
}
|
|
720
|
+
function listItem(node, parent, state, info) {
|
|
721
|
+
const listItemIndent = checkListItemIndent(state);
|
|
722
|
+
let bullet = state.bulletCurrent || checkBullet(state);
|
|
723
|
+
if (parent && parent.type === "list" && parent.ordered) {
|
|
724
|
+
bullet = (typeof parent.start === "number" && parent.start > -1 ? parent.start : 1) + (state.options.incrementListMarker === false ? 0 : parent.children.indexOf(node)) + bullet;
|
|
725
|
+
}
|
|
726
|
+
let size = bullet.length + 1;
|
|
727
|
+
if (listItemIndent === "tab" || listItemIndent === "mixed" && (parent && parent.type === "list" && parent.spread || node.spread)) {
|
|
728
|
+
size = Math.ceil(size / 4) * 4;
|
|
729
|
+
}
|
|
730
|
+
const tracker = state.createTracker(info);
|
|
731
|
+
tracker.move(bullet + " ".repeat(size - bullet.length));
|
|
732
|
+
tracker.shift(size);
|
|
733
|
+
const exit = state.enter("listItem");
|
|
734
|
+
const value = state.indentLines(
|
|
735
|
+
state.containerFlow(node, tracker.current()),
|
|
736
|
+
map2
|
|
737
|
+
);
|
|
738
|
+
exit();
|
|
739
|
+
return value;
|
|
740
|
+
function map2(line, index, blank) {
|
|
741
|
+
if (index) {
|
|
742
|
+
return (blank ? "" : " ".repeat(size)) + line;
|
|
743
|
+
}
|
|
744
|
+
return (blank ? bullet : bullet + " ".repeat(size - bullet.length)) + line;
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
function paragraph(node, _, state, info) {
|
|
748
|
+
const exit = state.enter("paragraph");
|
|
749
|
+
const subexit = state.enter("phrasing");
|
|
750
|
+
const value = state.containerPhrasing(node, info);
|
|
751
|
+
subexit();
|
|
752
|
+
exit();
|
|
753
|
+
return value;
|
|
754
|
+
}
|
|
755
|
+
function root(node, _, state, info) {
|
|
756
|
+
const hasPhrasing = node.children.some(function(d) {
|
|
757
|
+
return phrasing(d);
|
|
758
|
+
});
|
|
759
|
+
const container = hasPhrasing ? state.containerPhrasing : state.containerFlow;
|
|
760
|
+
return container.call(state, node, info);
|
|
761
|
+
}
|
|
762
|
+
function checkStrong(state) {
|
|
763
|
+
const marker = state.options.strong || "*";
|
|
764
|
+
if (marker !== "*" && marker !== "_") {
|
|
765
|
+
throw new Error(
|
|
766
|
+
"Cannot serialize strong with `" + marker + "` for `options.strong`, expected `*`, or `_`"
|
|
767
|
+
);
|
|
768
|
+
}
|
|
769
|
+
return marker;
|
|
770
|
+
}
|
|
771
|
+
strong.peek = strongPeek;
|
|
772
|
+
function strong(node, _, state, info) {
|
|
773
|
+
const marker = checkStrong(state);
|
|
774
|
+
const exit = state.enter("strong");
|
|
775
|
+
const tracker = state.createTracker(info);
|
|
776
|
+
const before = tracker.move(marker + marker);
|
|
777
|
+
let between = tracker.move(
|
|
778
|
+
state.containerPhrasing(node, {
|
|
779
|
+
after: marker,
|
|
780
|
+
before,
|
|
781
|
+
...tracker.current()
|
|
782
|
+
})
|
|
783
|
+
);
|
|
784
|
+
const betweenHead = between.charCodeAt(0);
|
|
785
|
+
const open = encodeInfo(
|
|
786
|
+
info.before.charCodeAt(info.before.length - 1),
|
|
787
|
+
betweenHead,
|
|
788
|
+
marker
|
|
789
|
+
);
|
|
790
|
+
if (open.inside) {
|
|
791
|
+
between = encodeCharacterReference(betweenHead) + between.slice(1);
|
|
792
|
+
}
|
|
793
|
+
const betweenTail = between.charCodeAt(between.length - 1);
|
|
794
|
+
const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker);
|
|
795
|
+
if (close.inside) {
|
|
796
|
+
between = between.slice(0, -1) + encodeCharacterReference(betweenTail);
|
|
797
|
+
}
|
|
798
|
+
const after = tracker.move(marker + marker);
|
|
799
|
+
exit();
|
|
800
|
+
state.attentionEncodeSurroundingInfo = {
|
|
801
|
+
after: close.outside,
|
|
802
|
+
before: open.outside
|
|
803
|
+
};
|
|
804
|
+
return before + between + after;
|
|
805
|
+
}
|
|
806
|
+
function strongPeek(_, _1, state) {
|
|
807
|
+
return state.options.strong || "*";
|
|
808
|
+
}
|
|
809
|
+
function text(node, _, state, info) {
|
|
810
|
+
return state.safe(node.value, info);
|
|
811
|
+
}
|
|
812
|
+
function checkRuleRepetition(state) {
|
|
813
|
+
const repetition = state.options.ruleRepetition || 3;
|
|
814
|
+
if (repetition < 3) {
|
|
815
|
+
throw new Error(
|
|
816
|
+
"Cannot serialize rules with repetition `" + repetition + "` for `options.ruleRepetition`, expected `3` or more"
|
|
817
|
+
);
|
|
818
|
+
}
|
|
819
|
+
return repetition;
|
|
820
|
+
}
|
|
821
|
+
function thematicBreak(_, _1, state) {
|
|
822
|
+
const value = (checkRule(state) + (state.options.ruleSpaces ? " " : "")).repeat(checkRuleRepetition(state));
|
|
823
|
+
return state.options.ruleSpaces ? value.slice(0, -1) : value;
|
|
824
|
+
}
|
|
825
|
+
const handle = {
|
|
826
|
+
blockquote,
|
|
827
|
+
break: hardBreak,
|
|
828
|
+
code,
|
|
829
|
+
definition,
|
|
830
|
+
emphasis,
|
|
831
|
+
hardBreak,
|
|
832
|
+
heading,
|
|
833
|
+
html,
|
|
834
|
+
image,
|
|
835
|
+
imageReference,
|
|
836
|
+
inlineCode,
|
|
837
|
+
link,
|
|
838
|
+
linkReference,
|
|
839
|
+
list,
|
|
840
|
+
listItem,
|
|
841
|
+
paragraph,
|
|
842
|
+
root,
|
|
843
|
+
strong,
|
|
844
|
+
text,
|
|
845
|
+
thematicBreak
|
|
846
|
+
};
|
|
847
|
+
export {
|
|
848
|
+
formatHeadingAsSetext as a,
|
|
849
|
+
markdownLineEnding as b,
|
|
850
|
+
classifyCharacter as c,
|
|
851
|
+
markdownSpace as d,
|
|
852
|
+
encodeCharacterReference as e,
|
|
853
|
+
formatCodeAsIndented as f,
|
|
854
|
+
unicodePunctuation as g,
|
|
855
|
+
handle as h,
|
|
856
|
+
asciiAlphanumeric as i,
|
|
857
|
+
asciiAlpha as j,
|
|
858
|
+
asciiControl as k,
|
|
859
|
+
markdownLineEndingOrSpace as m,
|
|
860
|
+
patternInScope as p,
|
|
861
|
+
unicodeWhitespace as u
|
|
862
|
+
};
|