summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2022-05-20 17:54:10 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2022-05-20 17:54:10 +0200
commitd731c861cc103cec58d1ece42bc900b565a91378 (patch)
tree5453bfc55fbd757b602933ac12b28ef0a61b6c71
parentAdd support for HTTP links. (diff)
downloadvimwiki-scripts-d731c861cc103cec58d1ece42bc900b565a91378.tar.gz
vimwiki-scripts-d731c861cc103cec58d1ece42bc900b565a91378.tar.xz
work
-rwxr-xr-xdo.py122
1 files 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))