@fuzdev/mdz 0.3.0 → 0.5.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 +10 -17
- package/README.md +6 -3
- package/dist/Mdz.svelte +8 -7
- package/dist/Mdz.svelte.d.ts.map +1 -1
- package/dist/MdzNodeView.svelte +74 -30
- package/dist/MdzNodeView.svelte.d.ts +1 -2
- package/dist/MdzNodeView.svelte.d.ts.map +1 -1
- package/dist/MdzPrecompiled.svelte +3 -3
- package/dist/MdzPrecompiled.svelte.d.ts.map +1 -1
- package/dist/MdzRoot.svelte +3 -3
- package/dist/MdzRoot.svelte.d.ts.map +1 -1
- package/dist/MdzStream.svelte +3 -3
- package/dist/MdzStream.svelte.d.ts.map +1 -1
- package/dist/MdzStreamNodeView.svelte +79 -31
- package/dist/MdzStreamNodeView.svelte.d.ts +1 -2
- package/dist/MdzStreamNodeView.svelte.d.ts.map +1 -1
- package/dist/context_helpers.js +1 -1
- package/dist/mdz.d.ts +12 -1
- package/dist/mdz.d.ts.map +1 -1
- package/dist/mdz.js +1 -1
- package/dist/mdz_contexts.d.ts +33 -6
- package/dist/mdz_contexts.d.ts.map +1 -1
- package/dist/mdz_debug_work.d.ts.map +1 -1
- package/dist/mdz_helpers.d.ts +31 -3
- package/dist/mdz_helpers.d.ts.map +1 -1
- package/dist/mdz_helpers.js +104 -12
- package/dist/mdz_lexer.d.ts +3 -1
- package/dist/mdz_lexer.d.ts.map +1 -1
- package/dist/mdz_lexer.js +115 -31
- package/dist/mdz_opcodes.d.ts +3 -1
- package/dist/mdz_opcodes.d.ts.map +1 -1
- package/dist/mdz_opcodes_to_nodes.d.ts.map +1 -1
- package/dist/mdz_opcodes_to_nodes.js +25 -17
- package/dist/mdz_stream_parser.d.ts.map +1 -1
- package/dist/mdz_stream_parser.js +8 -8
- package/dist/mdz_stream_parser_block.js +5 -5
- package/dist/mdz_stream_parser_inline.js +4 -4
- package/dist/mdz_stream_parser_link.d.ts.map +1 -1
- package/dist/mdz_stream_parser_link.js +83 -11
- package/dist/mdz_stream_parser_list.d.ts.map +1 -1
- package/dist/mdz_stream_parser_list.js +13 -7
- package/dist/mdz_stream_parser_state.d.ts.map +1 -1
- package/dist/mdz_stream_parser_state.js +7 -7
- package/dist/mdz_stream_parser_table.d.ts.map +1 -1
- package/dist/mdz_stream_parser_table.js +16 -9
- package/dist/mdz_stream_parser_text.js +2 -2
- package/dist/mdz_stream_parser_url.js +7 -7
- package/dist/mdz_stream_state.svelte.d.ts +3 -1
- package/dist/mdz_stream_state.svelte.d.ts.map +1 -1
- package/dist/mdz_stream_state.svelte.js +4 -0
- package/dist/mdz_to_svelte.d.ts +17 -4
- package/dist/mdz_to_svelte.d.ts.map +1 -1
- package/dist/mdz_to_svelte.js +22 -9
- package/dist/mdz_token_parser.d.ts.map +1 -1
- package/dist/mdz_token_parser.js +25 -11
- package/dist/svelte_preprocess_mdz.d.ts +6 -3
- package/dist/svelte_preprocess_mdz.d.ts.map +1 -1
- package/dist/svelte_preprocess_mdz.js +11 -11
- package/package.json +25 -40
- package/src/lib/context_helpers.ts +2 -2
- package/src/lib/mdz.ts +15 -3
- package/src/lib/mdz_contexts.ts +41 -11
- package/src/lib/mdz_debug_work.ts +1 -1
- package/src/lib/mdz_helpers.ts +164 -43
- package/src/lib/mdz_lexer.ts +173 -80
- package/src/lib/mdz_opcodes.ts +3 -1
- package/src/lib/mdz_opcodes_to_nodes.ts +40 -30
- package/src/lib/mdz_stream_parser.ts +17 -17
- package/src/lib/mdz_stream_parser_block.ts +14 -14
- package/src/lib/mdz_stream_parser_inline.ts +18 -18
- package/src/lib/mdz_stream_parser_link.ts +88 -18
- package/src/lib/mdz_stream_parser_list.ts +31 -25
- package/src/lib/mdz_stream_parser_state.ts +27 -27
- package/src/lib/mdz_stream_parser_table.ts +38 -31
- package/src/lib/mdz_stream_parser_text.ts +3 -3
- package/src/lib/mdz_stream_parser_url.ts +11 -11
- package/src/lib/mdz_stream_state.svelte.ts +11 -8
- package/src/lib/mdz_to_svelte.ts +71 -27
- package/src/lib/mdz_token_parser.ts +52 -38
- package/src/lib/svelte_preprocess_mdz.ts +66 -60
- package/src/lib/tsdoc_mdz.ts +1 -1
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
|
-
import { A_UPPER, LEFT_BRACKET, LEFT_PAREN, MAX_INLINE_NESTING_DEPTH, RIGHT_ANGLE, RIGHT_BRACKET, RIGHT_PAREN, SLASH, SPACE, Z_UPPER, is_letter, is_tag_name_char, is_valid_path_char, mdz_is_safe_reference, mdz_is_url
|
|
8
|
-
import { accumulate_text, alloc_id, buffer_index_of, emit, ensure_paragraph, flush_text, is_run_boundary, offset, pop_stack_entry, push_stack_entry, revert_above
|
|
7
|
+
import { A_UPPER, APOSTROPHE, DOUBLE_QUOTE, EQUALS, LEFT_BRACKET, LEFT_PAREN, MAX_INLINE_NESTING_DEPTH, RIGHT_ANGLE, RIGHT_BRACKET, RIGHT_PAREN, SLASH, SPACE, Z_UPPER, is_letter, is_tag_name_char, is_valid_path_char, mdz_is_safe_reference, mdz_is_url } from './mdz_helpers.js';
|
|
8
|
+
import { accumulate_text, alloc_id, buffer_index_of, emit, ensure_paragraph, flush_text, is_run_boundary, offset, pop_stack_entry, push_stack_entry, revert_above } from './mdz_stream_parser_state.js';
|
|
9
9
|
import { consume_delimiter_as_text } from './mdz_stream_parser_text.js';
|
|
10
10
|
import { mdz_debug_work } from './mdz_debug_work.js';
|
|
11
11
|
// -- Links --
|
|
@@ -119,7 +119,7 @@ export const try_complete_link = (state, link_stack_idx) => {
|
|
|
119
119
|
id: entry.id,
|
|
120
120
|
end: offset(state, i + 1),
|
|
121
121
|
reference,
|
|
122
|
-
link_type
|
|
122
|
+
link_type
|
|
123
123
|
});
|
|
124
124
|
state.active_text_id = null;
|
|
125
125
|
state.pos = i + 1;
|
|
@@ -161,12 +161,84 @@ export const try_tag_open = (state) => {
|
|
|
161
161
|
if (i >= state.buffer.length)
|
|
162
162
|
return 'need_more';
|
|
163
163
|
const name = state.buffer.slice(name_start, i);
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
// Attribute loop: consume space-separated attributes until `/>` or `>`.
|
|
165
|
+
// This widens the held-tag-open rescan surface (the TODO above) with the
|
|
166
|
+
// attribute/value text — still line-bounded, since a newline anywhere aborts
|
|
167
|
+
// the whole tag (`not_match`). Every buffer-end point holds (`need_more`) so
|
|
168
|
+
// the same tree is produced regardless of where feeds split. The quoted-value
|
|
169
|
+
// terminator search reuses `buffer_index_of` (memoized, append-aware) so a
|
|
170
|
+
// long streamed value doesn't rescan quadratically across held retries,
|
|
171
|
+
// matching `try_complete_link`.
|
|
172
|
+
const attributes = [];
|
|
173
|
+
const seen = new Set();
|
|
174
|
+
for (;;) {
|
|
175
|
+
// skip a run of literal spaces only (tabs/newlines are not SPACE)
|
|
176
|
+
let had_space = false;
|
|
177
|
+
while (i < state.buffer.length && state.buffer.charCodeAt(i) === SPACE) {
|
|
178
|
+
i++;
|
|
179
|
+
had_space = true;
|
|
180
|
+
}
|
|
181
|
+
if (i >= state.buffer.length)
|
|
182
|
+
return 'need_more';
|
|
183
|
+
const c = state.buffer.charCodeAt(i);
|
|
184
|
+
// `/>` or `>` ends the open tag — break to the existing self-close / commit
|
|
185
|
+
if (c === SLASH || c === RIGHT_ANGLE)
|
|
186
|
+
break;
|
|
187
|
+
// otherwise an attribute name must follow, space-separated from what
|
|
188
|
+
// precedes it (`<a x="1"y="2">` — `y` abuts the closing quote — reverts)
|
|
189
|
+
if (!is_letter(c))
|
|
190
|
+
return 'not_match';
|
|
191
|
+
if (!had_space)
|
|
192
|
+
return 'not_match';
|
|
193
|
+
// collect the attribute name (same grammar as tag names)
|
|
194
|
+
const attr_start = i;
|
|
195
|
+
i++; // first char already passed is_letter
|
|
196
|
+
while (i < state.buffer.length && is_tag_name_char(state.buffer.charCodeAt(i))) {
|
|
197
|
+
i++;
|
|
198
|
+
}
|
|
199
|
+
if (i >= state.buffer.length)
|
|
200
|
+
return 'need_more'; // mid-name — could still grow
|
|
201
|
+
const attr_name = state.buffer.slice(attr_start, i);
|
|
202
|
+
// duplicate names are ambiguous (Svelte compile-errors) → literal tag
|
|
203
|
+
if (seen.has(attr_name))
|
|
204
|
+
return 'not_match';
|
|
205
|
+
seen.add(attr_name);
|
|
206
|
+
let value = true; // bare name is boolean `true`
|
|
207
|
+
if (state.buffer.charCodeAt(i) === EQUALS) {
|
|
208
|
+
i++; // consume =
|
|
209
|
+
if (i >= state.buffer.length)
|
|
210
|
+
return 'need_more'; // nothing after `=` yet
|
|
211
|
+
// the value must be immediately quoted — no space, no `{`, no unquoted
|
|
212
|
+
const quote_code = state.buffer.charCodeAt(i);
|
|
213
|
+
if (quote_code !== DOUBLE_QUOTE && quote_code !== APOSTROPHE)
|
|
214
|
+
return 'not_match';
|
|
215
|
+
i++; // consume opening quote
|
|
216
|
+
const value_start = i;
|
|
217
|
+
// find the matching quote and the next newline via the memoized,
|
|
218
|
+
// append-aware search; a `>` inside the value is content, consumed
|
|
219
|
+
// atomically here so a `</Name>`-shaped substring never reaches
|
|
220
|
+
// `try_close_tag`
|
|
221
|
+
const quote_str = quote_code === DOUBLE_QUOTE ? '"' : "'";
|
|
222
|
+
const q = buffer_index_of(state, quote_str, value_start);
|
|
223
|
+
const n = buffer_index_of(state, '\n', value_start);
|
|
224
|
+
if (q !== -1 && (n === -1 || q < n)) {
|
|
225
|
+
value = state.buffer.slice(value_start, q);
|
|
226
|
+
i = q + 1; // past the closing quote
|
|
227
|
+
}
|
|
228
|
+
else if (n !== -1 && (q === -1 || n < q)) {
|
|
229
|
+
return 'not_match'; // newline inside the value → literal tag
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
return 'need_more'; // neither found yet — unterminated so far, hold
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
attributes.push({
|
|
236
|
+
name: attr_name,
|
|
237
|
+
value,
|
|
238
|
+
start: offset(state, attr_start),
|
|
239
|
+
end: offset(state, i)
|
|
240
|
+
});
|
|
167
241
|
}
|
|
168
|
-
if (i >= state.buffer.length)
|
|
169
|
-
return 'need_more';
|
|
170
242
|
// check for self-closing />
|
|
171
243
|
if (state.buffer.charCodeAt(i) === SLASH && i + 1 >= state.buffer.length) {
|
|
172
244
|
return 'need_more'; // `/` at the buffer end can't classify yet (`/>` or junk)
|
|
@@ -179,7 +251,7 @@ export const try_tag_open = (state) => {
|
|
|
179
251
|
ensure_paragraph(state);
|
|
180
252
|
const id = alloc_id(state);
|
|
181
253
|
const tag_start = offset(state, start);
|
|
182
|
-
emit(state, { type: 'open', id, node_type, start: tag_start, name });
|
|
254
|
+
emit(state, { type: 'open', id, node_type, start: tag_start, name, attributes });
|
|
183
255
|
emit(state, { type: 'close', id, end: offset(state, i + 2) });
|
|
184
256
|
state.active_text_id = null;
|
|
185
257
|
state.pos = i + 2;
|
|
@@ -199,8 +271,8 @@ export const try_tag_open = (state) => {
|
|
|
199
271
|
ensure_paragraph(state);
|
|
200
272
|
const id = alloc_id(state);
|
|
201
273
|
const tag_start = offset(state, start);
|
|
202
|
-
const delimiter = state.buffer.slice(start, i); // e.g., "<Alert>"
|
|
203
|
-
emit(state, { type: 'open', id, node_type, start: tag_start, name });
|
|
274
|
+
const delimiter = state.buffer.slice(start, i); // e.g., "<Alert>" or "<Alert x="1">"
|
|
275
|
+
emit(state, { type: 'open', id, node_type, start: tag_start, name, attributes });
|
|
204
276
|
push_stack_entry(state, id, node_type, tag_start, delimiter, name);
|
|
205
277
|
state.active_text_id = null;
|
|
206
278
|
state.pos = i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_stream_parser_list.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_parser_list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmBH,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,SAAS,EAad,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CACf;AAoBD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC7B,OAAO,oBAAoB,EAC3B,GAAG,MAAM,EACT,QAAQ,OAAO,KACb,mBAAmB,GAAG,SAAS,GAAG,IAsDpC,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC9B,OAAO,oBAAoB,EAC3B,GAAG,MAAM,EACT,QAAQ,OAAO,KACb,oBAAoB,GAAG,SAAS,GAAG,IAuBrC,CAAC;AAgGF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,oBAAoB,EAAE,QAAQ,OAAO,KAAG,SAY7E,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iBAAiB,GAC7B,OAAO,oBAAoB,EAC3B,QAAQ,OAAO,KACb,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"mdz_stream_parser_list.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_parser_list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmBH,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,SAAS,EAad,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CACf;AAoBD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC7B,OAAO,oBAAoB,EAC3B,GAAG,MAAM,EACT,QAAQ,OAAO,KACb,mBAAmB,GAAG,SAAS,GAAG,IAsDpC,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC9B,OAAO,oBAAoB,EAC3B,GAAG,MAAM,EACT,QAAQ,OAAO,KACb,oBAAoB,GAAG,SAAS,GAAG,IAuBrC,CAAC;AAgGF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,oBAAoB,EAAE,QAAQ,OAAO,KAAG,SAY7E,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iBAAiB,GAC7B,OAAO,oBAAoB,EAC3B,QAAQ,OAAO,KACb,OAAO,GAAG,YA2MZ,CAAC"}
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
-
import { BACKTICK, HYPHEN, MAX_LIST_NUMBER_DIGITS, MIN_CODEBLOCK_BACKTICKS, NEWLINE, NINE, PERIOD, PIPE, RIGHT_ANGLE, SPACE, ZERO, is_line_whitespace, mdz_match_blockquote_prefix, mdz_blockquote_line_has_content
|
|
15
|
+
import { BACKTICK, HYPHEN, MAX_LIST_NUMBER_DIGITS, MIN_CODEBLOCK_BACKTICKS, NEWLINE, NINE, PERIOD, PIPE, RIGHT_ANGLE, SPACE, ZERO, is_line_whitespace, mdz_match_blockquote_prefix, mdz_blockquote_line_has_content } from './mdz_helpers.js';
|
|
16
16
|
import { match_table_in_item_head, open_table_in_item } from './mdz_stream_parser_table.js';
|
|
17
|
-
import { accumulate_text, alloc_id, close_all_list_levels, close_list_item, close_list_level, close_list_run, close_paragraph, emit, extend_accumulated_end, flush_text, offset, push_stack_entry
|
|
17
|
+
import { accumulate_text, alloc_id, close_all_list_levels, close_list_item, close_list_level, close_list_run, close_paragraph, emit, extend_accumulated_end, flush_text, offset, push_stack_entry } from './mdz_stream_parser_state.js';
|
|
18
18
|
/**
|
|
19
19
|
* Whether only line whitespace remains between `from` and the line's end —
|
|
20
20
|
* `'pending'` when the buffer ends inside the run while streaming (the line
|
|
@@ -53,7 +53,7 @@ export const match_list_marker = (state, i, forced) => {
|
|
|
53
53
|
start: i,
|
|
54
54
|
marker_end: after,
|
|
55
55
|
content_start: after,
|
|
56
|
-
empty: true
|
|
56
|
+
empty: true
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
// in bounds: `blank === false` means the scan found a char at or past `after`
|
|
@@ -88,7 +88,7 @@ export const match_list_marker = (state, i, forced) => {
|
|
|
88
88
|
start: i,
|
|
89
89
|
marker_end: after,
|
|
90
90
|
content_start: after,
|
|
91
|
-
empty: true
|
|
91
|
+
empty: true
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
94
|
// in bounds: `blank === false` means the scan found a char at or past `after`
|
|
@@ -168,7 +168,7 @@ const open_list_level = (state, indent, marker) => {
|
|
|
168
168
|
node_type: 'List',
|
|
169
169
|
start,
|
|
170
170
|
ordered: true,
|
|
171
|
-
start_number: marker.number
|
|
171
|
+
start_number: marker.number
|
|
172
172
|
});
|
|
173
173
|
}
|
|
174
174
|
else {
|
|
@@ -378,13 +378,19 @@ export const process_list_line = (state, forced) => {
|
|
|
378
378
|
}
|
|
379
379
|
const id = alloc_id(state);
|
|
380
380
|
const cb_start = offset(state, j);
|
|
381
|
-
emit(state, {
|
|
381
|
+
emit(state, {
|
|
382
|
+
type: 'open',
|
|
383
|
+
id,
|
|
384
|
+
node_type: 'Codeblock',
|
|
385
|
+
start: cb_start,
|
|
386
|
+
lang: fence.lang
|
|
387
|
+
});
|
|
382
388
|
state.codeblock = {
|
|
383
389
|
id,
|
|
384
390
|
backtick_count: fence.backtick_count,
|
|
385
391
|
text_id: null,
|
|
386
392
|
fence_indent: indent,
|
|
387
|
-
start: cb_start
|
|
393
|
+
start: cb_start
|
|
388
394
|
};
|
|
389
395
|
state.active_text_id = null;
|
|
390
396
|
state.pos = fence.content_start;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_stream_parser_state.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_parser_state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mdz_stream_parser_state.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_parser_state.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ export const create_state = () => ({
|
|
|
44
44
|
paragraph_stack_idx: -1,
|
|
45
45
|
last_text_id: null,
|
|
46
46
|
last_text_ended_with_newline: false,
|
|
47
|
-
last_text_was_singleton_newline: false
|
|
47
|
+
last_text_was_singleton_newline: false
|
|
48
48
|
});
|
|
49
49
|
/** @nodocs */
|
|
50
50
|
export const alloc_id = (state) => state.next_id++;
|
|
@@ -64,7 +64,7 @@ export const push_stack_entry = (state, id, node_type, start, delimiter = '', ta
|
|
|
64
64
|
tag_name,
|
|
65
65
|
has_children: false,
|
|
66
66
|
has_non_whitespace_content: false,
|
|
67
|
-
start
|
|
67
|
+
start
|
|
68
68
|
});
|
|
69
69
|
if (node_type === 'Paragraph') {
|
|
70
70
|
state.paragraph_stack_idx = state.stack.length - 1;
|
|
@@ -345,7 +345,7 @@ export const flush_text = (state) => {
|
|
|
345
345
|
type: 'append_text',
|
|
346
346
|
id: state.active_text_id,
|
|
347
347
|
content: state.accumulated_text,
|
|
348
|
-
end: state.accumulated_text_end
|
|
348
|
+
end: state.accumulated_text_end
|
|
349
349
|
});
|
|
350
350
|
}
|
|
351
351
|
else {
|
|
@@ -358,7 +358,7 @@ export const flush_text = (state) => {
|
|
|
358
358
|
content: state.accumulated_text,
|
|
359
359
|
text_type: 'Text',
|
|
360
360
|
start,
|
|
361
|
-
end: state.accumulated_text_end
|
|
361
|
+
end: state.accumulated_text_end
|
|
362
362
|
});
|
|
363
363
|
state.active_text_id = id;
|
|
364
364
|
}
|
|
@@ -436,7 +436,7 @@ export const revert_above = (state, target_idx) => {
|
|
|
436
436
|
type: 'revert',
|
|
437
437
|
id: entry.id,
|
|
438
438
|
replacement_text: entry.delimiter,
|
|
439
|
-
start: entry.start
|
|
439
|
+
start: entry.start
|
|
440
440
|
});
|
|
441
441
|
}
|
|
442
442
|
state.active_text_id = null;
|
|
@@ -489,7 +489,7 @@ export const revert_failed_close = (state, stack_idx) => {
|
|
|
489
489
|
type: 'revert',
|
|
490
490
|
id: entry.id,
|
|
491
491
|
replacement_text: entry.delimiter,
|
|
492
|
-
start: entry.start
|
|
492
|
+
start: entry.start
|
|
493
493
|
});
|
|
494
494
|
// structural opcode seals the prior text run (mirrors `emit`)
|
|
495
495
|
seal_text_run(state);
|
|
@@ -651,7 +651,7 @@ export const close_list_item = (state) => {
|
|
|
651
651
|
emit(state, {
|
|
652
652
|
type: 'close',
|
|
653
653
|
id: entry.id,
|
|
654
|
-
end: entry.has_children ? offset(state) : state.last_empty_item_end
|
|
654
|
+
end: entry.has_children ? offset(state) : state.last_empty_item_end
|
|
655
655
|
});
|
|
656
656
|
state.active_text_id = null;
|
|
657
657
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_stream_parser_table.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_parser_table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,OAAO,
|
|
1
|
+
{"version":3,"file":"mdz_stream_parser_table.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_parser_table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,SAAS,EAQd,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,EAAE,QAAQ,OAAO,KAAG,SAyC9E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,oBAAoB,EAAE,QAAQ,OAAO,KAAG,OAyCjF,CAAC;AA2DF;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,oBAAoB,KAAG,IAczD,CAAC;AAEF,yFAAyF;AACzF,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACpC,OAAO,oBAAoB,EAC3B,cAAc,MAAM,EACpB,eAAe,MAAM,EACrB,QAAQ,OAAO,KACb,eAAe,GAAG,SAAS,GAAG,IAmBhC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC9B,OAAO,oBAAoB,EAC3B,cAAc,MAAM,EACpB,eAAe,MAAM,EACrB,MAAM,eAAe,KACnB,IAsBF,CAAC"}
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* @module
|
|
15
15
|
*/
|
|
16
16
|
import { DEV } from 'esm-env';
|
|
17
|
-
import { NEWLINE, PIPE, is_line_whitespace, mdz_split_table_row, mdz_parse_table_delimiter
|
|
17
|
+
import { NEWLINE, PIPE, is_line_whitespace, mdz_split_table_row, mdz_parse_table_delimiter } from './mdz_helpers.js';
|
|
18
18
|
import { MdzTableCellParser } from './mdz.js';
|
|
19
|
-
import { alloc_id, close_paragraph, emit, flush_text, offset, pop_stack_entry, push_stack_entry
|
|
19
|
+
import { alloc_id, close_paragraph, emit, flush_text, offset, pop_stack_entry, push_stack_entry } from './mdz_stream_parser_state.js';
|
|
20
20
|
/**
|
|
21
21
|
* Try to open a table at a column-0 pipe row. Returns `need_more` until both
|
|
22
22
|
* the header line and its delimiter line are buffered (or, in forced mode,
|
|
@@ -56,7 +56,7 @@ export const try_table_start = (state, forced) => {
|
|
|
56
56
|
state.table = {
|
|
57
57
|
id: table_id,
|
|
58
58
|
item_indent: null,
|
|
59
|
-
cell_parser: new MdzTableCellParser(state.buffer)
|
|
59
|
+
cell_parser: new MdzTableCellParser(state.buffer)
|
|
60
60
|
};
|
|
61
61
|
emit_table_row(state, header_cells, true, start, header_end);
|
|
62
62
|
// skip past the delimiter row to the first potential body line
|
|
@@ -238,13 +238,13 @@ export const open_table_in_item = (state, header_first, marker_indent, head) =>
|
|
|
238
238
|
id: table_id,
|
|
239
239
|
node_type: 'Table',
|
|
240
240
|
start: table_start,
|
|
241
|
-
align: head.align
|
|
241
|
+
align: head.align
|
|
242
242
|
});
|
|
243
243
|
push_stack_entry(state, table_id, 'Table', table_start);
|
|
244
244
|
state.table = {
|
|
245
245
|
id: table_id,
|
|
246
246
|
item_indent: marker_indent,
|
|
247
|
-
cell_parser: new MdzTableCellParser(state.buffer)
|
|
247
|
+
cell_parser: new MdzTableCellParser(state.buffer)
|
|
248
248
|
};
|
|
249
249
|
emit_table_row(state, head.header_cells, true, header_first, head.header_end);
|
|
250
250
|
// leave the cursor on the delimiter's newline (or EOF) — the in-item body-row
|
|
@@ -299,7 +299,7 @@ const emit_inline_nodes = (state, nodes) => {
|
|
|
299
299
|
content: node.content,
|
|
300
300
|
text_type: 'Text',
|
|
301
301
|
start: offset(state, node.start),
|
|
302
|
-
end: offset(state, node.end)
|
|
302
|
+
end: offset(state, node.end)
|
|
303
303
|
});
|
|
304
304
|
break;
|
|
305
305
|
case 'Code':
|
|
@@ -309,7 +309,7 @@ const emit_inline_nodes = (state, nodes) => {
|
|
|
309
309
|
content: node.content,
|
|
310
310
|
text_type: 'Code',
|
|
311
311
|
start: offset(state, node.start),
|
|
312
|
-
end: offset(state, node.end)
|
|
312
|
+
end: offset(state, node.end)
|
|
313
313
|
});
|
|
314
314
|
break;
|
|
315
315
|
case 'Bold':
|
|
@@ -336,7 +336,7 @@ const emit_inline_nodes = (state, nodes) => {
|
|
|
336
336
|
id,
|
|
337
337
|
end: offset(state, node.end),
|
|
338
338
|
reference: node.reference,
|
|
339
|
-
link_type: node.link_type
|
|
339
|
+
link_type: node.link_type
|
|
340
340
|
});
|
|
341
341
|
break;
|
|
342
342
|
}
|
|
@@ -344,7 +344,14 @@ const emit_inline_nodes = (state, nodes) => {
|
|
|
344
344
|
case 'Component': {
|
|
345
345
|
const id = alloc_id(state);
|
|
346
346
|
const s = offset(state, node.start);
|
|
347
|
-
emit(state, {
|
|
347
|
+
emit(state, {
|
|
348
|
+
type: 'open',
|
|
349
|
+
id,
|
|
350
|
+
node_type: node.type,
|
|
351
|
+
start: s,
|
|
352
|
+
name: node.name,
|
|
353
|
+
attributes: node.attributes
|
|
354
|
+
});
|
|
348
355
|
push_stack_entry(state, id, node.type, s, '', node.name);
|
|
349
356
|
emit_inline_nodes(state, node.children);
|
|
350
357
|
pop_stack_entry(state);
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { HTTPS_PREFIX_LENGTH, NEWLINE, SPACE, TAB, TEXT_CLASS_NEWLINE, TEXT_CLASS_PATH, TEXT_CLASS_STOP, TEXT_CLASS_URL, TEXT_SCAN_CLASS, is_word_char, match_url_prefix_case_insensitive
|
|
7
|
-
import { accumulate_text, ensure_paragraph, offset
|
|
6
|
+
import { HTTPS_PREFIX_LENGTH, NEWLINE, SPACE, TAB, TEXT_CLASS_NEWLINE, TEXT_CLASS_PATH, TEXT_CLASS_STOP, TEXT_CLASS_URL, TEXT_SCAN_CLASS, is_word_char, match_url_prefix_case_insensitive } from './mdz_helpers.js';
|
|
7
|
+
import { accumulate_text, ensure_paragraph, offset } from './mdz_stream_parser_state.js';
|
|
8
8
|
import { mdz_debug_work } from './mdz_debug_work.js';
|
|
9
9
|
/**
|
|
10
10
|
* Consume a delimiter at the current position as literal text — the shared
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
-
import { NEWLINE, SPACE, TAB, PERIOD, SLASH, ascii_to_lower, is_valid_path_char, is_word_char, match_url_prefix_case_insensitive, mdz_trim_url_punctuation
|
|
16
|
-
import { accumulate_text, alloc_id, emit, ensure_paragraph, flush_text, offset
|
|
15
|
+
import { NEWLINE, SPACE, TAB, PERIOD, SLASH, ascii_to_lower, is_valid_path_char, is_word_char, match_url_prefix_case_insensitive, mdz_trim_url_punctuation } from './mdz_helpers.js';
|
|
16
|
+
import { accumulate_text, alloc_id, emit, ensure_paragraph, flush_text, offset } from './mdz_stream_parser_state.js';
|
|
17
17
|
const HTTPS_PREFIX = 'https://';
|
|
18
18
|
const HTTP_PREFIX = 'http://';
|
|
19
19
|
/**
|
|
@@ -113,7 +113,7 @@ export const start_pending_url = (state, link_type) => {
|
|
|
113
113
|
link_type,
|
|
114
114
|
confirmed: true,
|
|
115
115
|
viable_https: false,
|
|
116
|
-
viable_http: false
|
|
116
|
+
viable_http: false
|
|
117
117
|
};
|
|
118
118
|
// don't advance pos — URL chars start at current position, handled by process_url_content
|
|
119
119
|
};
|
|
@@ -134,7 +134,7 @@ export const start_speculative_url = (state) => {
|
|
|
134
134
|
link_type: 'external',
|
|
135
135
|
confirmed: false,
|
|
136
136
|
viable_https: true,
|
|
137
|
-
viable_http: true
|
|
137
|
+
viable_http: true
|
|
138
138
|
};
|
|
139
139
|
};
|
|
140
140
|
/**
|
|
@@ -261,7 +261,7 @@ export const complete_pending_url = (state) => {
|
|
|
261
261
|
start: pu.start,
|
|
262
262
|
end: url_end,
|
|
263
263
|
trim_end,
|
|
264
|
-
trim_id
|
|
264
|
+
trim_id
|
|
265
265
|
});
|
|
266
266
|
state.active_text_id = trim_id;
|
|
267
267
|
}
|
|
@@ -274,7 +274,7 @@ export const complete_pending_url = (state) => {
|
|
|
274
274
|
reference,
|
|
275
275
|
link_type: pu.link_type,
|
|
276
276
|
start: pu.start,
|
|
277
|
-
end: url_end
|
|
277
|
+
end: url_end
|
|
278
278
|
});
|
|
279
279
|
state.active_text_id = null;
|
|
280
280
|
}
|
|
@@ -317,7 +317,7 @@ export const scan_auto_link_forced = (state, link_type) => {
|
|
|
317
317
|
content: reference,
|
|
318
318
|
text_type: 'Text',
|
|
319
319
|
start: link_start,
|
|
320
|
-
end: link_end
|
|
320
|
+
end: link_end
|
|
321
321
|
});
|
|
322
322
|
emit(state, { type: 'close', id: link_id, end: link_end, reference, link_type });
|
|
323
323
|
state.active_text_id = null;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
10
|
import type { MdzNodeId, MdzNodeType, MdzOpcode } from './mdz_opcodes.js';
|
|
11
|
-
import type { MdzTableAlign } from './mdz.js';
|
|
11
|
+
import type { MdzAttribute, MdzTableAlign } from './mdz.js';
|
|
12
12
|
/**
|
|
13
13
|
* A reactive node in the stream renderer tree.
|
|
14
14
|
* Fields are `$state` so Svelte re-renders only what changes.
|
|
@@ -22,6 +22,8 @@ export declare class MdzStreamNode {
|
|
|
22
22
|
reference?: string;
|
|
23
23
|
link_type?: 'external' | 'internal';
|
|
24
24
|
name?: string;
|
|
25
|
+
/** Parsed tag attributes (Element/Component nodes); known at open, never mutated, so plain not `$state`. */
|
|
26
|
+
attributes?: Array<MdzAttribute>;
|
|
25
27
|
lang?: string | null;
|
|
26
28
|
heading_id?: string;
|
|
27
29
|
ordered?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_stream_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mdz_stream_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_stream_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5D;;;GAGG;AACH,qBAAa,aAAa;IACzB,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAc;IAE5C,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAY;IAC9B,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,CAAY;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4GAA4G;IAC5G,UAAU,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAY;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7B,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;gBAEL,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW;CAI5C;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;;IAC1B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAc;IAqCxC;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IA8R9B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI;CAK5C"}
|
|
@@ -22,6 +22,8 @@ export class MdzStreamNode {
|
|
|
22
22
|
reference = $state();
|
|
23
23
|
link_type = $state();
|
|
24
24
|
name;
|
|
25
|
+
/** Parsed tag attributes (Element/Component nodes); known at open, never mutated, so plain not `$state`. */
|
|
26
|
+
attributes;
|
|
25
27
|
lang;
|
|
26
28
|
heading_id = $state();
|
|
27
29
|
ordered;
|
|
@@ -92,6 +94,8 @@ export class MdzStreamState {
|
|
|
92
94
|
node.level = opcode.level;
|
|
93
95
|
if (opcode.name !== undefined)
|
|
94
96
|
node.name = opcode.name;
|
|
97
|
+
if (opcode.attributes !== undefined)
|
|
98
|
+
node.attributes = opcode.attributes;
|
|
95
99
|
if (opcode.lang !== undefined)
|
|
96
100
|
node.lang = opcode.lang;
|
|
97
101
|
if (opcode.ordered !== undefined)
|
package/dist/mdz_to_svelte.d.ts
CHANGED
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
* @module
|
|
9
9
|
*/
|
|
10
10
|
import type { MdzNode } from './mdz.js';
|
|
11
|
+
import type { MdzComponentProps } from './mdz_contexts.js';
|
|
12
|
+
/**
|
|
13
|
+
* A build-time component registry entry: an import path, or an import path
|
|
14
|
+
* plus the attribute names passed as props (see `MdzComponentProps`).
|
|
15
|
+
*/
|
|
16
|
+
export type MdzComponentImport = string | {
|
|
17
|
+
path: string;
|
|
18
|
+
props?: MdzComponentProps;
|
|
19
|
+
};
|
|
11
20
|
/**
|
|
12
21
|
* Result of converting `MdzNode` arrays to Svelte markup.
|
|
13
22
|
*/
|
|
@@ -27,10 +36,13 @@ export interface MdzToSvelteResult {
|
|
|
27
36
|
*/
|
|
28
37
|
export interface MdzToSvelteOptions {
|
|
29
38
|
/**
|
|
30
|
-
* Component name to import
|
|
39
|
+
* Component name to import mapping, mirroring the runtime `MdzComponents`
|
|
40
|
+
* registry: a bare import path receives no attributes
|
|
41
|
+
* (`{Note: '#lib/Note.svelte'}`), and the config form names the attributes
|
|
42
|
+
* passed as props (`{Alert: {path: '#lib/Alert.svelte', props: ['status']}}`).
|
|
31
43
|
* If content references a component not in this map, `has_unconfigured_tags` is set.
|
|
32
44
|
*/
|
|
33
|
-
components: Record<string,
|
|
45
|
+
components: Record<string, MdzComponentImport>;
|
|
34
46
|
/**
|
|
35
47
|
* Allowed HTML elements (e.g., `{aside: true, details: true}`).
|
|
36
48
|
* Values are boolean placeholders for future per-element configuration,
|
|
@@ -40,8 +52,9 @@ export interface MdzToSvelteOptions {
|
|
|
40
52
|
elements: Record<string, boolean>;
|
|
41
53
|
/**
|
|
42
54
|
* Base path for resolving relative links (e.g., `'/docs/usage/'`).
|
|
43
|
-
* When provided, relative references (`./`, `../`) are resolved
|
|
44
|
-
*
|
|
55
|
+
* When provided, relative references (`./`, `../`) are resolved against it and,
|
|
56
|
+
* like absolute references, passed through `resolve()` in its pathname form.
|
|
57
|
+
* Trailing slash recommended.
|
|
45
58
|
*/
|
|
46
59
|
base?: string;
|
|
47
60
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_to_svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_to_svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mdz_to_svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_to_svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAe3D;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAUtF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IAEf,yDAAyD;IACzD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAElE,yEAAyE;IACzE,qBAAqB,EAAE,OAAO,CAAC;CAC/B;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GACzB,OAAO,KAAK,CAAC,OAAO,CAAC,EACrB,SAAS,kBAAkB,KACzB,iBAmKF,CAAC"}
|
package/dist/mdz_to_svelte.js
CHANGED
|
@@ -10,7 +10,14 @@
|
|
|
10
10
|
import { UnreachableError } from '@fuzdev/fuz_util/error.ts';
|
|
11
11
|
import { escape_svelte_text } from '@fuzdev/fuz_util/svelte_preprocess_helpers.ts';
|
|
12
12
|
import { escape_js_string } from '@fuzdev/fuz_util/string.ts';
|
|
13
|
-
import { mdz_is_void_element, mdz_classify_link } from './mdz_helpers.js';
|
|
13
|
+
import { mdz_is_void_element, mdz_classify_link, mdz_filter_element_attributes, mdz_filter_component_attributes, ALLOWED_ELEMENT_ATTRIBUTES } from './mdz_helpers.js';
|
|
14
|
+
const format_attributes = (entries) => {
|
|
15
|
+
let out = '';
|
|
16
|
+
for (const [name, value] of entries) {
|
|
17
|
+
out += value === true ? ` ${name}={true}` : ` ${name}={'${escape_js_string(value)}'}`;
|
|
18
|
+
}
|
|
19
|
+
return out;
|
|
20
|
+
};
|
|
14
21
|
/** Derives an import's local identifier from a `.svelte` import path's basename. */
|
|
15
22
|
const component_local_name = (import_path) => import_path.slice(import_path.lastIndexOf('/') + 1).replace(/\.svelte$/, '');
|
|
16
23
|
/**
|
|
@@ -68,7 +75,7 @@ export const mdz_to_svelte = (nodes, options) => {
|
|
|
68
75
|
return children_markup;
|
|
69
76
|
if (link.kind === 'resolve') {
|
|
70
77
|
imports.set('resolve', { path: '$app/paths', kind: 'named' });
|
|
71
|
-
return `<a href={resolve('${escape_js_string(link.
|
|
78
|
+
return `<a href={resolve('${escape_js_string(link.path)}')}>${children_markup}</a>`;
|
|
72
79
|
}
|
|
73
80
|
if (link.kind === 'external') {
|
|
74
81
|
return `<a href={'${escape_js_string(link.href)}'} target="_blank" rel="noopener">${children_markup}</a>`;
|
|
@@ -130,24 +137,30 @@ export const mdz_to_svelte = (nodes, options) => {
|
|
|
130
137
|
return `<h${node.level}${id_attr}>${render_nodes(node.children)}</h${node.level}>`;
|
|
131
138
|
}
|
|
132
139
|
case 'Element': {
|
|
133
|
-
if (elements[node.name]
|
|
140
|
+
if (elements[node.name] !== true) {
|
|
134
141
|
has_unconfigured_tags = true;
|
|
135
142
|
return '';
|
|
136
143
|
}
|
|
144
|
+
// filter via the SAME helper the node views use, so precompiled and
|
|
145
|
+
// runtime output stay identical (its DEV-warn fires at build time too)
|
|
146
|
+
const attrs_str = format_attributes(Object.entries(mdz_filter_element_attributes(node.name, node.attributes, ALLOWED_ELEMENT_ATTRIBUTES)));
|
|
137
147
|
if (mdz_is_void_element(node.name)) {
|
|
138
148
|
// void elements cannot have content — any parsed children are dropped
|
|
139
|
-
return `<${node.name} />`;
|
|
149
|
+
return `<${node.name}${attrs_str} />`;
|
|
140
150
|
}
|
|
141
|
-
return `<${node.name}>${render_nodes(node.children)}</${node.name}>`;
|
|
151
|
+
return `<${node.name}${attrs_str}>${render_nodes(node.children)}</${node.name}>`;
|
|
142
152
|
}
|
|
143
153
|
case 'Component': {
|
|
144
|
-
const
|
|
145
|
-
if (!
|
|
154
|
+
const entry = components[node.name];
|
|
155
|
+
if (!entry) {
|
|
146
156
|
has_unconfigured_tags = true;
|
|
147
157
|
return '';
|
|
148
158
|
}
|
|
149
|
-
|
|
150
|
-
|
|
159
|
+
const { path, props } = typeof entry === 'string' ? { path: entry, props: undefined } : entry;
|
|
160
|
+
imports.set(node.name, { path, kind: 'default' });
|
|
161
|
+
// filter via the SAME helper the node views use
|
|
162
|
+
const attrs_str = format_attributes(Object.entries(mdz_filter_component_attributes(node.name, node.attributes, props)));
|
|
163
|
+
return `<${node.name}${attrs_str}>${render_nodes(node.children)}</${node.name}>`;
|
|
151
164
|
}
|
|
152
165
|
default:
|
|
153
166
|
throw new UnreachableError(node);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdz_token_parser.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_token_parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACX,OAAO,EAeP,MAAM,UAAU,CAAC;AAQlB,OAAO,EACN,KAAK,QAAQ,EAYb,MAAM,gBAAgB,CAAC;AAiBxB;;;GAGG;AACH,qBAAa,cAAc;;gBAId,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAInC;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;IAKpC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;IAIvB;;;;;;OAMG;IACH,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"mdz_token_parser.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/mdz_token_parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACX,OAAO,EAeP,MAAM,UAAU,CAAC;AAQlB,OAAO,EACN,KAAK,QAAQ,EAYb,MAAM,gBAAgB,CAAC;AAiBxB;;;GAGG;AACH,qBAAa,cAAc;;gBAId,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAInC;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;IAKpC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;IAIvB;;;;;;OAMG;IACH,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;CA6jBlC"}
|