#! /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)