summaryrefslogtreecommitdiffstats
path: root/myst_parser/cli.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--myst_parser/cli.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/myst_parser/cli.py b/myst_parser/cli.py
new file mode 100644
index 0000000..b9bb1ba
--- /dev/null
+++ b/myst_parser/cli.py
@@ -0,0 +1,42 @@
+import argparse
+import sys
+
+from markdown_it.renderer import RendererHTML
+
+from myst_parser.config.main import MdParserConfig
+from myst_parser.parsers.mdit import create_md_parser
+
+
+def print_anchors(args=None):
+ """ """
+ arg_parser = argparse.ArgumentParser()
+ arg_parser.add_argument(
+ "input",
+ nargs="?",
+ type=argparse.FileType("r", encoding="utf8"),
+ default=sys.stdin,
+ help="Input file (default stdin)",
+ )
+ arg_parser.add_argument(
+ "-o",
+ "--output",
+ type=argparse.FileType("w", encoding="utf8"),
+ default=sys.stdout,
+ help="Output file (default stdout)",
+ )
+ arg_parser.add_argument(
+ "-l", "--level", type=int, default=2, help="Maximum heading level."
+ )
+ args = arg_parser.parse_args(args)
+ parser = create_md_parser(MdParserConfig(heading_anchors=args.level), RendererHTML)
+
+ def _filter_plugin(state):
+ state.tokens = [
+ t
+ for t in state.tokens
+ if t.type.startswith("heading_") and int(t.tag[1]) <= args.level
+ ]
+
+ parser.use(lambda p: p.core.ruler.push("filter", _filter_plugin))
+ text = parser.render(args.input.read())
+ args.output.write(text)