#!/usr/bin/env python3
import argparse
import sys
# Import local files
from . transform import transform
from . util import import_md
from . context import Context , BlockGroup
from . katex import KatexClient
from . html import html
from . tex import tex
from . images import ImageProcessor
from . output_generator import OutputGenerator
from . html_generator import HTMLGenerator
from . transform_processor import TransformProcessor
from . mj_show import show
def main ( ) :
# Initialize command line arguments
parser = argparse . ArgumentParser ( formatter_class = argparse . ArgumentDefaultsHelpFormatter )
parser . add_argument ( " -l " , " --img-lookup-dirs " , help = " Image lookup directories. When processing images, the program will try to find the image in them first. Always looks for images in the same folder as the markdown file. " , nargs = " + " , default = [ ] )
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 ( " input_filename " , help = " The markdown file to process. " )
parser . add_argument ( " --debug " , action = ' store_true ' )
args = parser . parse_args ( )
# TODO: Accept path to unix socket for katexClient, then don't init our own,
# 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 ( ) )
if args . debug :
print ( show ( doc1 ) )
# 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 )
# 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)
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 . debug :
print ( show ( doc ) )
if __name__ == " __main__ " :
main ( )