diff --git a/src/formatitko/formatitko.py b/src/formatitko/formatitko.py index 240295b..e192c86 100755 --- a/src/formatitko/formatitko.py +++ b/src/formatitko/formatitko.py @@ -14,8 +14,9 @@ from .images import ImageProcessor from .output_generator import OutputGenerator from .html_generator import HTMLGenerator from .transform_processor import TransformProcessor +from .pandoc_processor import PandocProcessor -from .mj_show import show +from panflute import convert_text def main(): # Initialize command line arguments @@ -24,8 +25,10 @@ def main(): parser.add_argument("-p", "--img-public-dir", help="Directory to put processed images into. The program will overwrite images, whose dependencies are newer.", default="public") parser.add_argument("-c", "--img-cache-dir", help="Directory to cache processed images and intermediate products. The program will overwrite files, whose dependencies are newer.", default="cache") parser.add_argument("-i", "--img-web-path", help="Path where the processed images are available on the website.", default="/") - parser.add_argument("-w", "--output-html", help="The HTML file (for Web) to write into.", default="output.html") - parser.add_argument("-t", "--output-tex", help="The TEX file to write into.", default="output.tex") + parser.add_argument("-w", "--output-html", help="The HTML file (for Web) to write into.") + parser.add_argument("-t", "--output-tex", help="The TEX file to write into.") + parser.add_argument("-m", "--output-md", help="The Markdown file to write into. (Uses pandoc to generate markdown)") + parser.add_argument("-j", "--output-json", help="The JSON file to dump the pandoc-compatible AST into.") parser.add_argument("input_filename", help="The markdown file to process.") parser.add_argument("--debug", action='store_true') args = parser.parse_args() @@ -33,44 +36,30 @@ def main(): # just connect to an existing one. For formátíking many files in a row. # Use panflute to parse the input MD file - #doc1 = import_md(open(args.input_filename, "r").read()) - doc2 = import_md(open(args.input_filename, "r").read()) + doc = import_md(open(args.input_filename, "r").read()) if args.debug: - print(show(doc1)) + OutputGenerator(sys.stdout).generate(doc) - # The language metadatum is important, so it's read before transformation and - # then attached to a group inside the Doc - #language = doc1.get_metadata("lang", None, True) - #context = Context(doc1, args.input_filename) - - # Transform the document. This includes all the fancy formatting this software does. - #doc1 = doc1.walk(transform, context) - - # Now wrap the document contents in a group, which is able to pop its language - # setting out to TeX - #doc1.content = [BlockGroup(*doc1.content, context=context, metadata={"lang":language})] - - doc2 = TransformProcessor(args.input_filename).transform(doc2) + doc = TransformProcessor(args.input_filename).transform(doc) # Initialize the image processor (this just keeps some basic state) imageProcessor = ImageProcessor(args.img_public_dir, args.img_web_path, args.img_cache_dir, *args.img_lookup_dirs) - # Initialize KaTeX client (this runs the node app and connects to a unix socket) - with KatexClient() as katexClient: - # Generate HTML and TeX out of the transformed document - #open(args.output_html, "w").write(html(doc, katexClient, imageProcessor)) - #open(args.output_tex, "w").write(tex(doc, imageProcessor)) - HTMLGenerator(sys.stdout, katexClient, imageProcessor).generate(doc2) - #OutputGenerator(open("/tmp/doc1", "w")).generate(doc1) - #OutputGenerator(open("/tmp/doc2", "w")).generate(doc2) + if args.output_html is not None: + # Initialize KaTeX client (this runs the node app and connects to a unix socket) + with KatexClient() as katexClient: + HTMLGenerator(open(args.output_html, "w"), katexClient, imageProcessor).generate(doc) + + if args.output_md is not None: + open(args.output_md, "w").write(convert_text(PandocProcessor().transform(doc), input_format="panflute", output_format="markdown")) - from panflute import convert_text - from .pandoc_processor import PandocProcessor - open("/tmp/bruhecek.md", "w").write(convert_text(PandocProcessor().transform(doc2), input_format="panflute", output_format="markdown")) + if args.output_json is not None: + open(args.output_json, "w").write(convert_text(PandocProcessor().transform(doc), input_format="panflute", output_format="json")) if args.debug: - print(show(doc)) + print("-----------------------------------") + OutputGenerator(sys.stdout).generate(doc) if __name__ == "__main__":