66from ..rst import CustomRst
77
88T = t .TypeVar ("T" , default = t .Any )
9+ T2 = t .TypeVar ("T2" , default = t .Any )
910logger = logging .getLogger ("BetterMD" )
1011
1112class List (list , t .Generic [T ]):
@@ -17,10 +18,22 @@ def on_ammend(self, object: 'T'): ...
1718 def append (self , object : 'T' ) -> 'None' :
1819 self .on_ammend (object )
1920 return super ().append (object )
21+
22+ def get (self , index , default :'T2' = None ) -> 't.Union[T, T2]' :
23+ try :
24+ return self [index ]
25+ except IndexError :
26+ return default
2027
2128 def __setitem__ (self , key , value ):
2229 self .on_set (key , value )
2330 return super ().__setitem__ (key , value )
31+
32+ def __getitem__ (self , item ) -> 'T' :
33+ return super ().__getitem__ (item )
34+
35+ def __iter__ (self ) -> 't.Iterator[T]' :
36+ return super ().__iter__ ()
2437
2538class Symbol :
2639 styles : 'dict[str, str]' = {}
@@ -74,11 +87,11 @@ def has_child(self, child:'type[Symbol]'):
7487
7588 return False
7689
77- def prepare (self , parent :'t.Union[Symbol, None]' = None ):
90+ def prepare (self , parent :'t.Union[Symbol, None]' = None , * args , ** kwargs ):
7891 self .prepared = True
7992 self .parent = parent
80- for symbol in self . children :
81- symbol .prepare (self )
93+
94+ [ symbol .prepare (self , * args , ** kwargs ) for symbol in self . children ]
8295
8396 return self
8497
@@ -90,6 +103,9 @@ def replace_child(self, old:'Symbol', new:'Symbol'):
90103
91104
92105 def to_html (self ) -> 'str' :
106+ if not self .prepared :
107+ self .prepare ()
108+
93109 if isinstance (self .html , CustomHTML ):
94110 return self .html .to_html (self .children , self , self .parent )
95111
@@ -106,17 +122,23 @@ def to_html(self) -> 'str':
106122 logger .debug (f"{ inner_HTML = } { self .html = } { self .classes = } { self .styles = } { props = } " )
107123 return f"<{ self .html } class={ '"' } { ' ' .join (self .classes ) or '' } { '"' } style={ '"' } { ' ' .join ([f'{ k } :{ v } ' for k ,v in self .styles .items ()]) or '' } { '"' } { ' ' .join (props )} >{ inner_HTML } </{ self .html } >"
108124
109- def to_md (self ) -> 'str' :
125+ def to_md (self , ** kwargs ) -> 'str' :
126+ if not self .prepared :
127+ self .prepare (** kwargs )
128+
110129 if isinstance (self .md , CustomMarkdown ):
111- return self .md .to_md (self .children , self , self .parent )
130+ return self .md .to_md (self .children , self , self .parent , ** kwargs )
112131
113132 if self .md == None :
114- return self .to_html ()
133+ return self .to_html (** kwargs )
115134
116135 inner_md = " " .join ([e .to_md () for e in self .children ])
117136 return f"{ self .md } { inner_md } " + ("\n " if self .nl else "" )
118137
119- def to_rst (self ) -> 'str' :
138+ def to_rst (self , ** kwargs ) -> 'str' :
139+ if not self .prepared :
140+ self .prepare (** kwargs )
141+
120142 if isinstance (self .rst , CustomRst ):
121143 return self .rst .to_rst (self .children , self , self .parent )
122144
0 commit comments