1- import { mystParse } from 'myst-parser' ;
1+ import { mystParse , type AllOptions } from 'myst-parser' ;
22import { buttonRole } from 'myst-ext-button' ;
33import { cardDirective } from 'myst-ext-card' ;
44import { gridDirectives } from 'myst-ext-grid' ;
@@ -20,6 +20,24 @@ type Options = {
2020 ignoreFrontmatter ?: boolean ;
2121} ;
2222
23+ export function getMystParserOptions ( session : ISession , opts ?: Options ) : Partial < AllOptions > {
24+ return {
25+ markdownit : { linkify : true } ,
26+ directives : [
27+ cardDirective ,
28+ ...gridDirectives ,
29+ proofDirective ,
30+ ...exerciseDirectives ,
31+ ...tabDirectives ,
32+ ...( session . plugins ?. directives ?? [ ] ) ,
33+ ] ,
34+ extensions : {
35+ frontmatter : ! opts ?. ignoreFrontmatter ,
36+ } ,
37+ roles : [ buttonRole , ...( session . plugins ?. roles ?? [ ] ) ] ,
38+ } ;
39+ }
40+
2341/**
2442 * Parse MyST content using the full suite of built-in directives, roles, and plugins
2543 *
@@ -35,22 +53,8 @@ export function parseMyst(
3553) : GenericParent {
3654 const vfile = new VFile ( ) ;
3755 vfile . path = file ;
38- const parsed = mystParse ( content , {
39- markdownit : { linkify : true } ,
40- directives : [
41- cardDirective ,
42- ...gridDirectives ,
43- proofDirective ,
44- ...exerciseDirectives ,
45- ...tabDirectives ,
46- ...( session . plugins ?. directives ?? [ ] ) ,
47- ] ,
48- extensions : {
49- frontmatter : ! opts ?. ignoreFrontmatter ,
50- } ,
51- roles : [ buttonRole , ...( session . plugins ?. roles ?? [ ] ) ] ,
52- vfile,
53- } ) ;
56+ const parserOptions = getMystParserOptions ( session , opts ) ;
57+ const parsed = mystParse ( content , { ...parserOptions , vfile } ) ;
5458 logMessagesFromVFile ( session , vfile ) ;
5559 return parsed ;
5660}
0 commit comments