* feat: issue where inherited function from `markdownify.MarkdownConverter` doesn't have `current_tags` leading to error using `kwargs`, also set default value for `convert_as_inline`
112 lines
2.9 KiB
Python
112 lines
2.9 KiB
Python
# SPDX-FileCopyrightText: 2024-present Adam Fourney <adamfo@microsoft.com>
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
import argparse
|
|
import sys
|
|
import shutil
|
|
from textwrap import dedent
|
|
from .__about__ import __version__
|
|
from ._markitdown import MarkItDown, DocumentConverterResult
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Convert various file formats to markdown.",
|
|
prog="markitdown",
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
usage=dedent(
|
|
"""
|
|
SYNTAX:
|
|
|
|
markitdown <OPTIONAL: FILENAME>
|
|
If FILENAME is empty, markitdown reads from stdin.
|
|
|
|
EXAMPLE:
|
|
|
|
markitdown example.pdf
|
|
|
|
OR
|
|
|
|
cat example.pdf | markitdown
|
|
|
|
OR
|
|
|
|
markitdown < example.pdf
|
|
|
|
OR to save to a file use
|
|
|
|
markitdown example.pdf -o example.md
|
|
|
|
OR
|
|
|
|
markitdown example.pdf > example.md
|
|
"""
|
|
).strip(),
|
|
)
|
|
|
|
parser.add_argument(
|
|
"-v",
|
|
"--version",
|
|
action="version",
|
|
version=f"%(prog)s {__version__}",
|
|
help="show the version number and exit",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"-o",
|
|
"--output",
|
|
help="Output file name. If not provided, output is written to stdout.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"-d",
|
|
"--use-docintel",
|
|
action="store_true",
|
|
help="Use Document Intelligence to extract text instead of offline conversion. Requires a valid Document Intelligence Endpoint.",
|
|
)
|
|
|
|
parser.add_argument(
|
|
"-e",
|
|
"--endpoint",
|
|
type=str,
|
|
help="Document Intelligence Endpoint. Required if using Document Intelligence.",
|
|
)
|
|
|
|
parser.add_argument("filename", nargs="?")
|
|
args = parser.parse_args()
|
|
|
|
which_exiftool = shutil.which("exiftool")
|
|
|
|
if args.use_docintel:
|
|
if args.endpoint is None:
|
|
raise ValueError(
|
|
"Document Intelligence Endpoint is required when using Document Intelligence."
|
|
)
|
|
elif args.filename is None:
|
|
raise ValueError("Filename is required when using Document Intelligence.")
|
|
markitdown = MarkItDown(
|
|
exiftool_path=which_exiftool, docintel_endpoint=args.endpoint
|
|
)
|
|
else:
|
|
markitdown = MarkItDown(exiftool_path=which_exiftool)
|
|
|
|
if args.filename is None:
|
|
result = markitdown.convert_stream(sys.stdin.buffer)
|
|
else:
|
|
result = markitdown.convert(args.filename)
|
|
|
|
_handle_output(args, result)
|
|
|
|
|
|
def _handle_output(args, result: DocumentConverterResult):
|
|
"""Handle output to stdout or file"""
|
|
if args.output:
|
|
with open(args.output, "w", encoding="utf-8") as f:
|
|
f.write(result.text_content)
|
|
else:
|
|
print(result.text_content)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|