#!/usr/bin/env python3
import io
import re
from argparse import ArgumentParser


def parse_args():
   parser = ArgumentParser()
   parser.add_argument("--options-file", type=str, required=True)
   parser.add_argument("--asy-1-begin-file", type=str, required=True)
   parser.add_argument("--asy-1-end-file", type=str, required=True)
   parser.add_argument("--out-file", type=str, required=True)
   return parser.parse_args()


def main():
   args = parse_args()
   with open(args.options_file, "r", encoding="utf-8") as optfile:
       options = [
           line.strip() for line in optfile.readlines() if line.strip().startswith("-")
       ]

   args_description_extract_regex = re.compile(r"-(.*?) {2}\s*([a-zA-Z0-9].*)")
   arg_matches = [args_description_extract_regex.match(line) for line in options]
   escaped_args_with_descs = [
       (match.group(1).replace("-", r"\-"), match.group(2))
       for match in arg_matches
       if match is not None
   ]
   transformed_args = [
       rf""".TP
B \-{arg}
{desc}."""
       for arg, desc in escaped_args_with_descs
   ]

   output = None
   try:
       output = io.StringIO()
       with open(args.asy_1_begin_file, "r", encoding="utf-8") as f:
           output.write(f.read())

       output.write("\n".join(transformed_args))

       with open(args.asy_1_end_file, "r", encoding="utf-8") as f:
           output.write(f.read())

       with open(args.out_file, "w", encoding="utf-8") as out_file:
           out_file.write(output.getvalue())
   finally:
       if output is not None:
           output.close()


if __name__ == "__main__":
   main()