Skip to content

Commit 88e3ecd

Browse files
committed
add MarkdownIt.reset_rules
1 parent 876edb9 commit 88e3ecd

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

markdown_it/main.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from contextlib import contextmanager
12
from typing import Any, Callable, Dict, List, Optional, Union
23

34
from . import helpers, presets # noqa F401
@@ -107,10 +108,12 @@ def configure(self, presets: Union[str, AttrDict]):
107108

108109
def get_active_rules(self) -> Dict[str, List[str]]:
109110
"""Return the names of all active rules."""
110-
return {
111+
rules = {
111112
chain: self[chain].ruler.get_active_rules()
112113
for chain in ["core", "block", "inline"]
113114
}
115+
rules["inline2"] = self.inline.ruler2.get_active_rules()
116+
return rules
114117

115118
def enable(
116119
self, names: Union[str, List[str]], ignoreInvalid: bool = False
@@ -168,6 +171,16 @@ def disable(
168171
raise ValueError(f"MarkdownIt. Failed to disable unknown rule(s): {missed}")
169172
return self
170173

174+
@contextmanager
175+
def reset_rules(self):
176+
"""A context manager, that will reset the current enabled rules on exit."""
177+
chain_rules = self.get_active_rules()
178+
yield
179+
for chain, rules in chain_rules.items():
180+
if chain != "inline2":
181+
self[chain].ruler.enableOnly(rules)
182+
self.inline.ruler2.enableOnly(chain_rules["inline2"])
183+
171184
def add_render_rule(self, name: str, function: Callable, fmt="html"):
172185
"""Add a rule for rendering a particular Token type.
173186
@@ -243,7 +256,7 @@ def parseInline(self, src: str, env: Optional[AttrDict] = None) -> List[Token]:
243256
raise TypeError(f"Input data should be an AttrDict, not {type(env)}")
244257
if not isinstance(src, str):
245258
raise TypeError(f"Input data should be a string, not {type(src)}")
246-
state = self.core.State(src, self, env)
259+
state = StateCore(src, self, env)
247260
state.inlineMode = True
248261
self.core.process(state)
249262
return state.tokens

markdown_it/rules_core/block.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ def block(state: StateCore):
99
token.content = state.src
1010
token.map = [0, 1]
1111
token.children = []
12-
state.tokens.push(token)
12+
state.tokens.append(token)
1313
else:
1414
state.md.block.parse(state.src, state.md, state.env, state.tokens)

tests/test_api/test_main.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ def test_load_presets():
77
"block": ["paragraph"],
88
"core": ["normalize", "block", "inline"],
99
"inline": ["text"],
10+
"inline2": ["balance_pairs", "text_collapse"],
1011
}
1112
md = MarkdownIt("commonmark")
1213
assert md.get_active_rules() == {
@@ -35,6 +36,7 @@ def test_load_presets():
3536
"html_inline",
3637
"entity",
3738
],
39+
"inline2": ["balance_pairs", "emphasis", "text_collapse"],
3840
}
3941

4042

@@ -44,12 +46,14 @@ def test_enable():
4446
"block": ["heading", "paragraph"],
4547
"core": ["normalize", "block", "inline"],
4648
"inline": ["text"],
49+
"inline2": ["balance_pairs", "text_collapse"],
4750
}
4851
md.enable(["backticks", "autolink"])
4952
assert md.get_active_rules() == {
5053
"block": ["heading", "paragraph"],
5154
"core": ["normalize", "block", "inline"],
5255
"inline": ["text", "backticks", "autolink"],
56+
"inline2": ["balance_pairs", "text_collapse"],
5357
}
5458

5559

@@ -59,10 +63,30 @@ def test_disable():
5963
"block": ["paragraph"],
6064
"core": ["normalize", "block"],
6165
"inline": ["text"],
66+
"inline2": ["balance_pairs", "text_collapse"],
6267
}
6368
md.disable(["text"])
6469
assert md.get_active_rules() == {
6570
"block": ["paragraph"],
6671
"core": ["normalize", "block"],
6772
"inline": [],
73+
"inline2": ["balance_pairs", "text_collapse"],
74+
}
75+
76+
77+
def test_reset():
78+
md = MarkdownIt("zero")
79+
with md.reset_rules():
80+
md.disable("inline")
81+
assert md.get_active_rules() == {
82+
"block": ["paragraph"],
83+
"core": ["normalize", "block"],
84+
"inline": ["text"],
85+
"inline2": ["balance_pairs", "text_collapse"],
86+
}
87+
assert md.get_active_rules() == {
88+
"block": ["paragraph"],
89+
"core": ["normalize", "block", "inline"],
90+
"inline": ["text"],
91+
"inline2": ["balance_pairs", "text_collapse"],
6892
}

0 commit comments

Comments
 (0)