11from pathlib import Path
2- from typing import List , Tuple
2+ from typing import Any , Dict , List , Tuple
33
44import nbformat as nbf
55from docutils import nodes
88from markdown_it import MarkdownIt
99from markdown_it .rules_core import StateCore
1010from markdown_it .token import Token
11- from markdown_it .utils import AttrDict
11+ from markdown_it .tree import SyntaxTreeNode
1212from myst_parser .main import MdParserConfig , default_parser
1313from myst_parser .sphinx_parser import MystParser
1414from myst_parser .sphinx_renderer import SphinxRenderer
@@ -33,7 +33,9 @@ class NotebookParser(MystParser):
3333 config_section = "myst-nb parser"
3434 config_section_dependencies = ("parsers" ,)
3535
36- def parse (self , inputstring : str , document : nodes .document ):
36+ def parse (
37+ self , inputstring : str , document : nodes .document , renderer : str = "sphinx"
38+ ) -> None :
3739
3840 self .reporter = document .reporter
3941 self .env = document .settings .env # type: BuildEnvironment
@@ -70,7 +72,11 @@ def parse(self, inputstring: str, document: nodes.document):
7072 # containing global data like reference definitions
7173 md_parser , env , tokens = nb_to_tokens (
7274 ntbk ,
73- self .env .myst_config if converter is None else converter .config ,
75+ (
76+ self .env .myst_config # type: ignore[attr-defined]
77+ if converter is None
78+ else converter .config
79+ ),
7480 self .env .config ["nb_render_plugin" ],
7581 )
7682
@@ -87,7 +93,7 @@ def parse(self, inputstring: str, document: nodes.document):
8793
8894def nb_to_tokens (
8995 ntbk : nbf .NotebookNode , config : MdParserConfig , renderer_plugin : str
90- ) -> Tuple [MarkdownIt , AttrDict , List [Token ]]:
96+ ) -> Tuple [MarkdownIt , Dict [ str , Any ] , List [Token ]]:
9197 """Parse the notebook content to a list of syntax tokens and an env,
9298 containing global data like reference definitions.
9399 """
@@ -99,7 +105,7 @@ def nb_to_tokens(
99105 md .renderer = SphinxNBRenderer (md )
100106 # make a sandbox where all the parsing global data,
101107 # like reference definitions will be stored
102- env = AttrDict ()
108+ env : Dict [ str , Any ] = {}
103109 rules = md .core .ruler .get_active_rules ()
104110
105111 # First only run pre-inline chains
@@ -185,7 +191,7 @@ def parse_block(src, start_line):
185191 "" ,
186192 0 ,
187193 map = [0 , 0 ],
188- content = ({k : v for k , v in ntbk .metadata .items ()}),
194+ content = ({k : v for k , v in ntbk .metadata .items ()}), # type: ignore[arg-type]
189195 )
190196 ] + state .tokens
191197
@@ -205,8 +211,8 @@ def parse_block(src, start_line):
205211
206212
207213def tokens_to_docutils (
208- md : MarkdownIt , env : AttrDict , tokens : List [Token ], document : nodes .document
209- ):
214+ md : MarkdownIt , env : Dict [ str , Any ] , tokens : List [Token ], document : nodes .document
215+ ) -> None :
210216 """Render the Markdown tokens to docutils AST."""
211217 md .options ["document" ] = document
212218 md .renderer .render (tokens , md .options , env )
@@ -217,14 +223,14 @@ class SphinxNBRenderer(SphinxRenderer):
217223 which includes special methods for notebook cells.
218224 """
219225
220- def render_jupyter_widget_state (self , token : Token ) :
226+ def render_jupyter_widget_state (self , token : SyntaxTreeNode ) -> None :
221227 if token .meta ["state" ]:
222228 self .document .settings .env .nb_contains_widgets = True
223229 node = JupyterWidgetStateNode (state = token .meta ["state" ])
224230 self .add_line_and_source_path (node , token )
225231 self .document .append (node )
226232
227- def render_nb_code_cell (self , token : Token ) :
233+ def render_nb_code_cell (self , token : SyntaxTreeNode ) -> None :
228234 """Render a Jupyter notebook cell."""
229235 cell = token .meta ["cell" ] # type: nbf.NotebookNode
230236
0 commit comments