From d731c861cc103cec58d1ece42bc900b565a91378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 20 May 2022 17:54:10 +0200 Subject: work --- do.py | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 106 insertions(+), 16 deletions(-) diff --git a/do.py b/do.py index 8f6f71a..b143818 100755 --- a/do.py +++ b/do.py @@ -13,9 +13,22 @@ from email.policy import default from datetime import datetime from dateutil import parser as dtparser import argparse +import sys path_base = '/' +global_bilaga = 0 + +self_prog = os.path.realpath(sys.argv[0]) + +def anglify(str): + table = { + 'å': 'a', + 'ä': 'a', + 'ö': 'o', + } + return ''.join(table.get(c, c) for c in str) + # ------------------------------------------------------------ def includepdf(mode, addr, full_file): @@ -214,7 +227,13 @@ def resolve_file(mode, source_file_name, addr, frag, comment): # return f'\\subfile{{{full_file}}}\n' else: with open(full_file, 'r') as f: - return f.read() + '\n' + s = f.read() + '\n' + if mode == 'tex': + st = f'\\section{{{comment}}}' + st += r'\begin{verbatim}' + s + r'\end{verbatim}' + '\n' + return st + else: + return s def generate_attachement(mode, data): @@ -241,6 +260,30 @@ def generate_attachement(mode, data): return outstr +def resolve_vimwiki(mode, source_file_name, addr, frag, comment): + here = os.getcwd() + print('Resolving vimwiki') + fname = anglify(f'/tmp/{addr}-{frag}.{mode}') + cmd = subprocess.run([self_prog, + '--mode', mode, + '--output', fname, + '--attach-prefix', f'{global_bilaga}', + f'{here}/{addr}.wiki', frag]) + if cmd.returncode != 0: + print(f'Recursive call failed with {cmd.returncode}') + if mode == 'tex': + try: + os.chdir(os.path.dirname(fname)); + cmd = subprocess.run(['latexmk', '-lualatex', fname]) + print(f'latexmk failed with {cmd.returncode}') + finally: + os.chdir(here) + ofile = anglify(f'/tmp/{addr}-{frag}.pdf') + else: + ofile = fname + + return resolve_file(mode, source_file_name, ofile, '', comment) + def resolve_default(mode, source_file_name, addr, frag, comment): outstr = '' if addr == '': @@ -265,16 +308,17 @@ resolvers = { 'file': resolve_file, 'local': resolve_file, 'help': resolve_help, + 'vimwiki': resolve_vimwiki, } # ------------------------------------------------------------ # TODO handle case where heading is missing def get_heading(name, data): - print(data) - print(name) + print('data =', data) + print('name =', name) start_match = re.search(f'(?m)^(=+) {name} =+$', data) - print(start_match) + print('start_match =', start_match) heading_level = len(start_match.group(1)) print(start_match.end()) tail = data[start_match.end():] @@ -295,16 +339,30 @@ if __name__ == '__main__': formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--mode', choices=["tex", "txt"], default='txt', help="Format of output") + parser.add_argument('--output') + parser.add_argument('--attach-prefix', dest='attach_prefix') parser.add_argument('infile', help="Wiki-file to use for input") parser.add_argument('heading', help="Which heading to output") args = parser.parse_args() + if pre := args.attach_prefix: + attach_prefix = f'{pre}.' + else: + attach_prefix = '' + + mode = args.mode infile = args.infile heading = args.heading + print(f'Running on {infile} # [{heading}]') + + outfile = os.path.realpath(args.output or f'doc.{mode}') + print(f'outfile = {outfile}') + + os.chdir(os.path.dirname(infile)) file = open(infile, 'r') data = file.read() @@ -312,13 +370,20 @@ if __name__ == '__main__': path_base = path.dirname(infile) - output = open(f'doc.{mode}', 'w') + try: + os.mkdir(os.path.dirname(outfile)) + except FileExistsError: + pass + output = open(outfile, 'w') name = pwd.getpwuid(os.getuid()).pw_gecos if mode == 'tex': output.write(f''' +\\PassOptionsToPackage{{unicode}}{{hyperref}} +\\PassOptionsToPackage{{hyphens}}{{url}} + \\documentclass[a4paper]{{article}} \\usepackage[T1]{{fontenc}} @@ -333,6 +398,13 @@ if __name__ == '__main__': \\usepackage{{hyperref}} \\usepackage{{soul}} \\usepackage{{graphics}} +\\usepackage{{amsmath,amssymb}} +\\usepackage{{lmodern}} +\\usepackage{{iftex}} +\\usepackage{{xcolor}} +\\providecommand{{\\tightlist}}{{% + \\setlength{{\\itemsep}}{{0pt}}\\setlength{{\\parskip}}{{0pt}}}} +% \\setcounter{{secnumdepth}}{{-\\maxdimen}} % remove section numbering ''') elif mode == 'txt': @@ -358,6 +430,7 @@ if __name__ == '__main__': # Resolve all links bilaga_nr = 1 + global_bilaga = bilaga_nr for match in tag_iter: url = match.group(1) or '' frag = match.group(2) or '' @@ -373,31 +446,33 @@ if __name__ == '__main__': try: proto, addr = url.split(":", 1) except ValueError: - proto = '' + proto = 'vimwiki' addr = url - print(proto, addr) + print('proto, addr =', proto, addr) if proto in ['http', 'https']: url = f'{proto}:{addr}' if frag: url += f'#{frag}' if mode == 'tex': - outstr += f" \\href{{{url}}}{{{title} \\nolinkurl{{{url}}}}}" + # outstr += f" \\href{{{url}}}{{{title} \\nolinkurl{{{url}}}}}" + outstr += f'[[{url}|{title}]] [[{url}|{url}]])' else: outstr += f' {title} <{url}>' continue # outstr += title + f"(bilaga~\\ref{{{uid}}})" # TODO - outstr += title + f' (bilaga {chr(bilaga_nr + 64)})' + outstr += title + f' (bilaga {attach_prefix}{chr(bilaga_nr + 64)})' # outstr += title + " (se bilaga)" bilaga_nr += 1 + global_bilaga = bilaga_nr # disabled for full PDF:s attach_str = '' if mode == 'tex': - if proto not in ['file', 'local']: + if proto not in ['file', 'local', 'vimwiki']: attach_str += f"\\section{{{title}}}\n\\label{{{uid}}}\n" else: attach_str += f"\\phantomsection\n\\label{{{uid}}}\n" @@ -405,7 +480,7 @@ if __name__ == '__main__': sectioncounter += 1 subsectioncounter = 0 if proto not in ['file', 'local']: - st = f"{chr(sectioncounter + 64)}. {title}" + st = f"{attach_prefix}{chr(sectioncounter + 64)}. {title}" attach_str += f'\n{st}\n{"="*len(st)}\n' resolver = resolvers.get(proto, resolve_default) @@ -451,21 +526,36 @@ if __name__ == '__main__': if options['mode'] == 'tex': pass else: - output.write('\\begin{verbatim}\n') + # output.write('\\begin{verbatim}\n') + pass elif mode == 'txt': d = options['date'] output.write(f'\n{heading.center(40)}\n{d.center(40)}\n') - for paragraph in paragraphs: - output.write('\n'.join(paragraph)) - output.write('\n\n') + if mode == 'txt': + for paragraph in paragraphs: + output.write('\n'.join(paragraph)) + output.write('\n\n') + else: + with open('/tmp/file.vimwiki', 'w') as f: + for paragraph in paragraphs: + f.write('\n'.join(paragraph)) + f.write('\n\n') + cmd = subprocess.run(['pandoc', '-f', 'vimwiki', '-t', 'latex', '-o', '/tmp/file.tex', '/tmp/file.vimwiki']) + cmd = subprocess.run(['sed', '-i', 's/subsection/section/g', '/tmp/file.tex']) + with open('/tmp/file.tex') as f: + for line in f: + print(f) + output.write(line) + # output.write(outstr + '\n') if mode == 'tex': if options['mode'] == 'tex': pass else: - output.write('\\end{verbatim}\n') + pass + # output.write('\\end{verbatim}\n') output.write('\\appendix\n') output.write('\n'.join(bilagor)) -- cgit v1.2.3