convert.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env python3
  2. import sys
  3. import re
  4. from subprocess import run
  5. from os.path import splitext
  6. from glob import glob
  7. title_re = re.compile(r'^# (.*)$', re.MULTILINE)
  8. tex_re = re.compile(r'\\begin{document}(.*)\\end{document}', re.MULTILINE | re.DOTALL)
  9. def parse_title(infilename):
  10. # Find chapter title
  11. with open(infilename) as f:
  12. matches = title_re.findall(f.read())
  13. if matches:
  14. return matches[0]
  15. else:
  16. return splitext(infilename.split('/')[-1])[0]
  17. def make_tex(infilename):
  18. title = parse_title(infilename)
  19. outfilename = splitext(infilename)[0]+'.tex'
  20. run(('pandoc', '-F', 'pandoc-crossref', '-F', 'pandoc-citeproc', '-s', infilename, '-o', outfilename,))
  21. with open(outfilename, 'r') as f:
  22. full = f.read()
  23. body = tex_re.findall(full)[0]
  24. body = body.replace('section{'+title+'}', 'chapter{'+title+'}')
  25. with open(outfilename, 'w') as f:
  26. f.write(body)
  27. def make_html(infilename):
  28. title = parse_title(infilename)
  29. outfilename = splitext(infilename)[0]+'.html'
  30. run(('pandoc', '-F', 'pandoc-crossref', '-F', 'pandoc-citeproc', '-s', infilename, '-o', outfilename,
  31. '--metadata=linkReferences:true', f'--metadata=pagetitle:{title}'))
  32. def main():
  33. if len(sys.argv) != 2 or sys.argv[1] not in ('html', 'tex'):
  34. print('usage: ./convert.py [html|tex]')
  35. sys.exit(1)
  36. for infilename in glob('content/*_*.md'):
  37. if sys.argv[1] == 'html':
  38. make_html(infilename)
  39. else:
  40. make_tex(infilename)
  41. if __name__ == '__main__':
  42. main()