@jupyterlab/markedparser-extension 4.5.4 → 4.5.5
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/lib/index.d.ts +2 -0
- package/lib/index.js +41 -0
- package/lib/index.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +54 -0
package/lib/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { JupyterFrontEndPlugin } from '@jupyterlab/application';
|
|
6
6
|
import { IEditorLanguageRegistry } from '@jupyterlab/codemirror';
|
|
7
7
|
import { IMarkdownParser } from '@jupyterlab/rendermime';
|
|
8
|
+
import type { IMarkdownHeadingToken } from '@jupyterlab/rendermime';
|
|
8
9
|
/**
|
|
9
10
|
* An interface for fenced code block renderers.
|
|
10
11
|
*/
|
|
@@ -29,6 +30,7 @@ export interface IRenderOptions {
|
|
|
29
30
|
*/
|
|
30
31
|
export declare function createMarkdownParser(languages: IEditorLanguageRegistry, options?: IRenderOptions): {
|
|
31
32
|
render: (content: string) => Promise<string>;
|
|
33
|
+
getHeadingTokens: (content: string) => Promise<IMarkdownHeadingToken[]>;
|
|
32
34
|
};
|
|
33
35
|
/**
|
|
34
36
|
* The markdown parser plugin.
|
package/lib/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { IMarkdownParser } from '@jupyterlab/rendermime';
|
|
|
13
13
|
import { IMermaidMarkdown } from '@jupyterlab/mermaid';
|
|
14
14
|
// highlight cache key separator
|
|
15
15
|
const FENCE = '```~~~';
|
|
16
|
+
const HEADING_TAG_REGEX = /^<h[1-6]\b[^>]*>/i;
|
|
16
17
|
/**
|
|
17
18
|
* Create a markdown parser
|
|
18
19
|
*
|
|
@@ -23,6 +24,9 @@ export function createMarkdownParser(languages, options) {
|
|
|
23
24
|
return {
|
|
24
25
|
render: (content) => {
|
|
25
26
|
return Private.render(content, languages, options);
|
|
27
|
+
},
|
|
28
|
+
getHeadingTokens: (content) => {
|
|
29
|
+
return Private.getHeadingTokens(content, options);
|
|
26
30
|
}
|
|
27
31
|
};
|
|
28
32
|
}
|
|
@@ -189,5 +193,42 @@ var Private;
|
|
|
189
193
|
await highlight(token);
|
|
190
194
|
}
|
|
191
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Extract heading metadata from markdown source.
|
|
198
|
+
*/
|
|
199
|
+
async function getHeadingTokens(content, options) {
|
|
200
|
+
if (!_marked) {
|
|
201
|
+
_marked = await initializeMarked(options);
|
|
202
|
+
}
|
|
203
|
+
const headings = new Array();
|
|
204
|
+
const tokens = _marked.lexer(content);
|
|
205
|
+
// Extract heading tokens and compute line numbers
|
|
206
|
+
// Include three token types that may contain headings:
|
|
207
|
+
// - heading: Standard markdown headings (# Title)
|
|
208
|
+
// - html: Standalone HTML heading blocks (<h1>Title</h1>)
|
|
209
|
+
// - paragraph: Only paragraphs with nested HTML tokens (inline html tags) that might contain embedded headings (<span><h1>Title</h1></span>)
|
|
210
|
+
let currentLine = 0;
|
|
211
|
+
for (const token of tokens) {
|
|
212
|
+
if (token.type === 'heading' ||
|
|
213
|
+
(token.type === 'html' && containsHeadingTag(token.raw)) ||
|
|
214
|
+
(token.type === 'paragraph' && containsInlineHeading(token))) {
|
|
215
|
+
headings.push({
|
|
216
|
+
raw: token.raw,
|
|
217
|
+
line: currentLine
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
currentLine += token.raw.split('\n').length - 1;
|
|
221
|
+
}
|
|
222
|
+
return headings;
|
|
223
|
+
}
|
|
224
|
+
Private.getHeadingTokens = getHeadingTokens;
|
|
225
|
+
function containsHeadingTag(raw) {
|
|
226
|
+
return HEADING_TAG_REGEX.test(raw);
|
|
227
|
+
}
|
|
228
|
+
function containsInlineHeading(token) {
|
|
229
|
+
if (!token.tokens)
|
|
230
|
+
return false;
|
|
231
|
+
return token.tokens.some((t) => t.type === 'html' && containsHeadingTag(t.raw));
|
|
232
|
+
}
|
|
192
233
|
})(Private || (Private = {}));
|
|
193
234
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;+EAG+E;AAC/E;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlab/markedparser-extension",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.5",
|
|
4
4
|
"description": "JupyterLab - Markdown parser provider",
|
|
5
5
|
"homepage": "https://github.com/jupyterlab/jupyterlab",
|
|
6
6
|
"bugs": {
|
|
@@ -35,15 +35,15 @@
|
|
|
35
35
|
"watch": "tsc -b --watch"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@jupyterlab/application": "^4.5.
|
|
39
|
-
"@jupyterlab/codemirror": "^4.5.
|
|
40
|
-
"@jupyterlab/coreutils": "^6.5.
|
|
41
|
-
"@jupyterlab/mermaid": "^4.5.
|
|
42
|
-
"@jupyterlab/rendermime": "^4.5.
|
|
38
|
+
"@jupyterlab/application": "^4.5.5",
|
|
39
|
+
"@jupyterlab/codemirror": "^4.5.5",
|
|
40
|
+
"@jupyterlab/coreutils": "^6.5.5",
|
|
41
|
+
"@jupyterlab/mermaid": "^4.5.5",
|
|
42
|
+
"@jupyterlab/rendermime": "^4.5.5",
|
|
43
43
|
"@lumino/coreutils": "^2.2.2",
|
|
44
|
-
"marked": "^
|
|
45
|
-
"marked-gfm-heading-id": "^4.1.
|
|
46
|
-
"marked-mangle": "^1.1.
|
|
44
|
+
"marked": "^17.0.2",
|
|
45
|
+
"marked-gfm-heading-id": "^4.1.3",
|
|
46
|
+
"marked-mangle": "^1.1.12"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/d3": "^7.4.0",
|
package/src/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
import { LruCache } from '@jupyterlab/coreutils';
|
|
17
17
|
import { IEditorLanguageRegistry } from '@jupyterlab/codemirror';
|
|
18
18
|
import { IMarkdownParser } from '@jupyterlab/rendermime';
|
|
19
|
+
import type { IMarkdownHeadingToken } from '@jupyterlab/rendermime';
|
|
19
20
|
import { IMermaidMarkdown } from '@jupyterlab/mermaid';
|
|
20
21
|
|
|
21
22
|
import type {
|
|
@@ -30,6 +31,8 @@ import type {
|
|
|
30
31
|
// highlight cache key separator
|
|
31
32
|
const FENCE = '```~~~';
|
|
32
33
|
|
|
34
|
+
const HEADING_TAG_REGEX = /^<h[1-6]\b[^>]*>/i;
|
|
35
|
+
|
|
33
36
|
/**
|
|
34
37
|
* An interface for fenced code block renderers.
|
|
35
38
|
*/
|
|
@@ -61,6 +64,9 @@ export function createMarkdownParser(
|
|
|
61
64
|
return {
|
|
62
65
|
render: (content: string): Promise<string> => {
|
|
63
66
|
return Private.render(content, languages, options);
|
|
67
|
+
},
|
|
68
|
+
getHeadingTokens: (content: string): Promise<IMarkdownHeadingToken[]> => {
|
|
69
|
+
return Private.getHeadingTokens(content, options);
|
|
64
70
|
}
|
|
65
71
|
};
|
|
66
72
|
}
|
|
@@ -254,4 +260,52 @@ namespace Private {
|
|
|
254
260
|
await highlight(token as Tokens.Code);
|
|
255
261
|
}
|
|
256
262
|
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Extract heading metadata from markdown source.
|
|
266
|
+
*/
|
|
267
|
+
export async function getHeadingTokens(
|
|
268
|
+
content: string,
|
|
269
|
+
options?: IRenderOptions
|
|
270
|
+
): Promise<IMarkdownHeadingToken[]> {
|
|
271
|
+
if (!_marked) {
|
|
272
|
+
_marked = await initializeMarked(options);
|
|
273
|
+
}
|
|
274
|
+
const headings = new Array<IMarkdownHeadingToken>();
|
|
275
|
+
const tokens = _marked.lexer(content);
|
|
276
|
+
|
|
277
|
+
// Extract heading tokens and compute line numbers
|
|
278
|
+
// Include three token types that may contain headings:
|
|
279
|
+
// - heading: Standard markdown headings (# Title)
|
|
280
|
+
// - html: Standalone HTML heading blocks (<h1>Title</h1>)
|
|
281
|
+
// - paragraph: Only paragraphs with nested HTML tokens (inline html tags) that might contain embedded headings (<span><h1>Title</h1></span>)
|
|
282
|
+
let currentLine = 0;
|
|
283
|
+
for (const token of tokens) {
|
|
284
|
+
if (
|
|
285
|
+
token.type === 'heading' ||
|
|
286
|
+
(token.type === 'html' && containsHeadingTag(token.raw)) ||
|
|
287
|
+
(token.type === 'paragraph' && containsInlineHeading(token))
|
|
288
|
+
) {
|
|
289
|
+
headings.push({
|
|
290
|
+
raw: token.raw,
|
|
291
|
+
line: currentLine
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
currentLine += token.raw.split('\n').length - 1;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return headings;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
function containsHeadingTag(raw: any) {
|
|
301
|
+
return HEADING_TAG_REGEX.test(raw);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function containsInlineHeading(token: Tokens.Generic): boolean {
|
|
305
|
+
if (!token.tokens) return false;
|
|
306
|
+
|
|
307
|
+
return token.tokens.some(
|
|
308
|
+
(t: Tokens.Generic) => t.type === 'html' && containsHeadingTag(t.raw)
|
|
309
|
+
);
|
|
310
|
+
}
|
|
257
311
|
}
|