1+ """NOTE: this will eventually be moved out of core"""
12from contextlib import contextmanager
23import json
3- from typing import List , Optional , Union
4+ from typing import List
45
5- import attr
66import yaml
77
88from docutils import nodes
1717# from docutils.statemachine import StringList
1818from docutils .utils import new_document , Reporter # noqa
1919
20- from markdown_it .token import Token
21-
22-
23- @attr .s (slots = True )
24- class NestedTokens :
25- opening : Token = attr .ib ()
26- closing : Optional [Token ] = attr .ib ()
27- children : List [Union [Token , "NestedTokens" ]] = attr .ib (factory = list )
28-
29- def __getattr__ (self , name ):
30- return getattr (self .opening , name )
31-
32- def attrGet (self , name : str ) -> str :
33- """ Get the value of attribute `name`, or null if it does not exist."""
34- return self .opening .attrGet (name )
35-
36-
37- def get_nested (tokens : List [Token ]) -> List [Union [Token , NestedTokens ]]:
38- """
39- """
40- output = []
41-
42- tokens = list (reversed (tokens ))
43- while tokens :
44- token = tokens .pop ()
45-
46- if token .nesting == 0 :
47- output .append (token )
48- if token .children :
49- token .children = get_nested (token .children )
50- continue
51-
52- assert token .nesting == 1 , token .nesting
53-
54- nested_tokens = [token ]
55- nesting = 1
56- while tokens and nesting != 0 :
57- token = tokens .pop ()
58- nested_tokens .append (token )
59- nesting += token .nesting
60- if nesting != 0 :
61- raise ValueError (f"unclosed tokens starting { nested_tokens [0 ]} " )
62-
63- child = NestedTokens (nested_tokens [0 ], nested_tokens [- 1 ])
64- output .append (child )
65- child .children = get_nested (nested_tokens [1 :- 1 ])
66-
67- return output
20+ from markdown_it .token import Token , nest_tokens
6821
6922
7023def make_document (source_path = "notset" ) -> nodes .document :
@@ -90,7 +43,7 @@ def __init__(self, options=None, env=None):
9043 self ._level_to_elem = {0 : self .document }
9144
9245 def run_render (self , tokens : List [Token ]):
93- tokens = get_nested (tokens )
46+ tokens = nest_tokens (tokens )
9447 for i , token in enumerate (tokens ):
9548 if f"render_{ token .type } " in self .rules :
9649 self .rules [f"render_{ token .type } " ](self , token )
@@ -265,7 +218,7 @@ def render_heading_open(self, token):
265218 self .current_node = section
266219
267220 def render_link_open (self , token ):
268- # TODO I think this may be already handled?
221+ # TODO I think this is maybe already handled at this point ?
269222 # refuri = escape_url(token.target)
270223 refuri = target = token .attrGet ("href" )
271224 ref_node = nodes .reference (target , target , refuri = refuri )
@@ -338,6 +291,25 @@ def render_myst_role(self, token):
338291 self .add_line_and_source_path (node , token )
339292 self .current_node .append (node )
340293
294+ # def render_table_open(self, token):
295+ # # print(token)
296+ # # raise
297+
298+ # table = nodes.table()
299+ # table["classes"] += ["colwidths-auto"]
300+ # self.add_line_and_source_path(table, token)
301+
302+ # thead = nodes.thead()
303+ # # TODO there can never be more than one header row (at least in mardown-it)
304+ # header = token.children[0].children[0]
305+ # for hrow in header.children:
306+ # nodes.t
307+ # style = hrow.attrGet("style")
308+
309+ # tgroup = nodes.tgroup(cols)
310+ # table += tgroup
311+ # tgroup += thead
312+
341313
342314def dict_to_docinfo (data ):
343315 """Render a key/val pair as a docutils field node."""
0 commit comments