1+ from __future__ import annotations
2+
13from contextlib import contextmanager
2- from typing import (
3- Any ,
4- Callable ,
5- Dict ,
6- Generator ,
7- Iterable ,
8- List ,
9- Mapping ,
10- MutableMapping ,
11- Optional ,
12- Union ,
13- )
4+ from collections .abc import Callable , Generator , Iterable , Mapping , MutableMapping
5+ from typing import Any
146
157from . import helpers , presets # noqa F401
168from .common import normalize_url , utils # noqa F401
4032class MarkdownIt :
4133 def __init__ (
4234 self ,
43- config : Union [ str , Mapping ] = "commonmark" ,
44- options_update : Optional [ Mapping ] = None ,
35+ config : str | Mapping = "commonmark" ,
36+ options_update : Mapping | None = None ,
4537 * ,
46- renderer_cls : Callable [[" MarkdownIt" ], RendererProtocol ] = RendererHTML ,
38+ renderer_cls : Callable [[MarkdownIt ], RendererProtocol ] = RendererHTML ,
4739 ):
4840 """Main parser class
4941
@@ -94,8 +86,8 @@ def set(self, options: MutableMapping) -> None:
9486 self .options = OptionsDict (options )
9587
9688 def configure (
97- self , presets : Union [ str , Mapping ] , options_update : Optional [ Mapping ] = None
98- ) -> " MarkdownIt" :
89+ self , presets : str | Mapping , options_update : Mapping | None = None
90+ ) -> MarkdownIt :
9991 """Batch load of all options and component settings.
10092 This is an internal method, and you probably will not need it.
10193 But if you will - see available presets and data structure
@@ -131,7 +123,7 @@ def configure(
131123
132124 return self
133125
134- def get_all_rules (self ) -> Dict [str , List [str ]]:
126+ def get_all_rules (self ) -> dict [str , list [str ]]:
135127 """Return the names of all active rules."""
136128 rules = {
137129 chain : self [chain ].ruler .get_all_rules ()
@@ -140,7 +132,7 @@ def get_all_rules(self) -> Dict[str, List[str]]:
140132 rules ["inline2" ] = self .inline .ruler2 .get_all_rules ()
141133 return rules
142134
143- def get_active_rules (self ) -> Dict [str , List [str ]]:
135+ def get_active_rules (self ) -> dict [str , list [str ]]:
144136 """Return the names of all active rules."""
145137 rules = {
146138 chain : self [chain ].ruler .get_active_rules ()
@@ -150,8 +142,8 @@ def get_active_rules(self) -> Dict[str, List[str]]:
150142 return rules
151143
152144 def enable (
153- self , names : Union [ str , Iterable [str ] ], ignoreInvalid : bool = False
154- ) -> " MarkdownIt" :
145+ self , names : str | Iterable [str ], ignoreInvalid : bool = False
146+ ) -> MarkdownIt :
155147 """Enable list or rules. (chainable)
156148
157149 :param names: rule name or list of rule names to enable.
@@ -182,8 +174,8 @@ def enable(
182174 return self
183175
184176 def disable (
185- self , names : Union [ str , Iterable [str ] ], ignoreInvalid : bool = False
186- ) -> " MarkdownIt" :
177+ self , names : str | Iterable [str ], ignoreInvalid : bool = False
178+ ) -> MarkdownIt :
187179 """The same as [[MarkdownIt.enable]], but turn specified rules off. (chainable)
188180
189181 :param names: rule name or list of rule names to disable.
@@ -222,7 +214,7 @@ def add_render_rule(self, name: str, function: Callable, fmt: str = "html") -> N
222214 if self .renderer .__output__ == fmt :
223215 self .renderer .rules [name ] = function .__get__ (self .renderer ) # type: ignore
224216
225- def use (self , plugin : Callable , * params , ** options ) -> " MarkdownIt" :
217+ def use (self , plugin : Callable , * params , ** options ) -> MarkdownIt :
226218 """Load specified plugin with given params into current parser instance. (chainable)
227219
228220 It's just a sugar to call `plugin(md, params)` with curring.
@@ -237,7 +229,7 @@ def func(tokens, idx):
237229 plugin (self , * params , ** options )
238230 return self
239231
240- def parse (self , src : str , env : Optional [ MutableMapping ] = None ) -> List [Token ]:
232+ def parse (self , src : str , env : MutableMapping | None = None ) -> list [Token ]:
241233 """Parse the source string to a token stream
242234
243235 :param src: source string
@@ -260,7 +252,7 @@ def parse(self, src: str, env: Optional[MutableMapping] = None) -> List[Token]:
260252 self .core .process (state )
261253 return state .tokens
262254
263- def render (self , src : str , env : Optional [ MutableMapping ] = None ) -> Any :
255+ def render (self , src : str , env : MutableMapping | None = None ) -> Any :
264256 """Render markdown string into html. It does all magic for you :).
265257
266258 :param src: source string
@@ -274,9 +266,7 @@ def render(self, src: str, env: Optional[MutableMapping] = None) -> Any:
274266 env = {} if env is None else env
275267 return self .renderer .render (self .parse (src , env ), self .options , env )
276268
277- def parseInline (
278- self , src : str , env : Optional [MutableMapping ] = None
279- ) -> List [Token ]:
269+ def parseInline (self , src : str , env : MutableMapping | None = None ) -> list [Token ]:
280270 """The same as [[MarkdownIt.parse]] but skip all block rules.
281271
282272 :param src: source string
@@ -296,7 +286,7 @@ def parseInline(
296286 self .core .process (state )
297287 return state .tokens
298288
299- def renderInline (self , src : str , env : Optional [ MutableMapping ] = None ) -> Any :
289+ def renderInline (self , src : str , env : MutableMapping | None = None ) -> Any :
300290 """Similar to [[MarkdownIt.render]] but for single paragraph content.
301291
302292 :param src: source string
0 commit comments