الملفات
Building-API-and-Monitoring…/venv/lib/python3.12/site-packages/mistune/__main__.py
2025-09-27 23:34:33 +03:00

136 أسطر
3.1 KiB
Python

import argparse
import sys
from typing import TYPE_CHECKING, Optional
from . import __version__ as version
from . import create_markdown
from .renderers.markdown import MarkdownRenderer
from .renderers.rst import RSTRenderer
if TYPE_CHECKING:
from .core import BaseRenderer
from .markdown import Markdown
def _md(args: argparse.Namespace) -> "Markdown":
if args.plugin:
plugins = args.plugin
else:
# default plugins
plugins = ["strikethrough", "footnotes", "table", "speedup"]
if args.renderer == "rst":
renderer: "BaseRenderer" = RSTRenderer()
elif args.renderer == "markdown":
renderer = MarkdownRenderer()
else:
renderer = args.renderer
return create_markdown(
escape=args.escape,
hard_wrap=args.hardwrap,
renderer=renderer,
plugins=plugins,
)
def _output(text: str, args: argparse.Namespace) -> None:
if args.output:
with open(args.output, "w") as f:
f.write(text)
else:
print(text)
CMD_HELP = """Mistune, a sane and fast python markdown parser.
Here are some use cases of the command line tool:
$ python -m mistune -m "Hi **Markdown**"
<p>Hi <strong>Markdown</strong></p>
$ python -m mistune -f README.md
<p>...
$ cat README.md | python -m mistune
<p>...
"""
def cli() -> None:
parser = argparse.ArgumentParser(
prog="python -m mistune",
description=CMD_HELP,
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument(
"-m",
"--message",
help="the markdown message to convert",
)
parser.add_argument(
"-f",
"--file",
help="the markdown file to convert",
)
parser.add_argument(
"-p",
"--plugin",
metavar="NAME",
action="extend",
nargs="+",
help="specifiy a plugin to use",
)
parser.add_argument(
"--escape",
action="store_true",
help="turn on escape option",
)
parser.add_argument(
"--hardwrap",
action="store_true",
help="turn on hardwrap option",
)
parser.add_argument(
"-o",
"--output",
help="write the rendered result into file",
)
parser.add_argument(
"-r",
"--renderer",
default="html",
help="specify the output renderer",
)
parser.add_argument("--version", action="version", version="mistune " + version)
args = parser.parse_args()
message = args.message
if not message and not args.file:
message = read_stdin()
if message:
md = _md(args)
text = md(message)
assert isinstance(text, str)
_output(text, args)
elif args.file:
md = _md(args)
text = md.read(args.file)[0]
assert isinstance(text, str)
_output(text, args)
else:
print("You MUST specify a message or file")
sys.exit(1)
def read_stdin() -> Optional[str]:
is_stdin_pipe = not sys.stdin.isatty()
if is_stdin_pipe:
return sys.stdin.read()
else:
return None
if __name__ == "__main__":
cli()