diff --git a/_posts/_md-to-org.py b/_posts/_md-to-org.py new file mode 100755 index 0000000..38a8d56 --- /dev/null +++ b/_posts/_md-to-org.py @@ -0,0 +1,58 @@ +#! /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)