gergelypolonkai-web-jekyll/_posts/_md-to-org.py

59 lines
1.4 KiB
Python
Executable File

#! /usr/bin/env python3
import re
import sys
import yaml
RENAME_REGEX = re.compile(r'\.(markdown|md)')
FRONT_MATTER_REGEX = re.compile(r'^---\n([\s\S]+?)\n---', re.MULTILINE)
def convert(filename):
org_filename = re.sub(RENAME_REGEX, '.org', filename)
with open(filename) as md_file:
markdown = md_file.read()
filename = re.sub(RENAME_REGEX, '', filename)
# Get the front matter
m = re.match(FRONT_MATTER_REGEX, markdown)
if not m:
print(f'No front matter found in {filename}')
return
front_matter = m.groups()[0]
markdown = markdown[len(front_matter) + 10:]
front_matter = yaml.load(front_matter)
markdown = '\n'.join(' ' + line if line else '' for line in markdown.split('\n'))
tags = ''
permalink = ''
date = front_matter['date'].isoformat().replace('T', ' ')
if 'tags' in front_matter:
tags = ' :' + ':'.join(front_matter['tags']) + ':'
if 'permalink' in front_matter:
permalink = f' :PERMALINK: {front_matter["permalink"]}\n'
markdown = markdown.replace('`', '~')
org_content = f'''* {front_matter['title']}{tags}
CLOSED: [{date}]
:PROPERTIES:
:EXPORT_FILENAME: {filename}
{permalink} :END:
{markdown}'''
with open(org_filename, 'w') as org_file:
org_file.write(org_content)
if __name__ == '__main__':
for filename in sys.argv[1:]:
convert(filename)