commit 95c97d8c522ce8dadec4c1ddef21835b218f7ede Author: Guy Godfroy Date: Wed Dec 2 17:16:29 2020 +0100 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3570422 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +config.py +__pycache__ diff --git a/config.py.example b/config.py.example new file mode 100644 index 0000000..9f5b8e4 --- /dev/null +++ b/config.py.example @@ -0,0 +1,48 @@ +# This is the configuration file for geminer. +# Is is not intended to be executed. + +# path to directory containing markdonw files to convert +md_dir = "~/repo/htg-content/content/posts" + +# path to directory where gemini files will be exported +gmi_dir = "/tmp/gemini" + +# path to directory containing templates +tpl_dir = "~/repo/htg-content/gemini/templates" + +# list of markdown files extensions +# Any file with a different extension will be ignored. +md_extensions = [ + "markdown", + "mdown", + "mkdn", + "md", + "mkd", + "mdwn", + "mdtxt", + "mdtext", + "text", + "Rmd" + ] + +# Set following value to True if you want ".gmi" extensions on new files. +gmi_extension = False + +# replacement map +# Some CMS make you use some placeholders (for instance for assets URL). +# You have to inform geminer of them here. +replace = [ + ("%assets_url%", "https://hashtagueule.fr/assets") + ] + +# md2gemini settings +# Check the documentation at https://pypi.org/project/md2gemini/ +code_tag="" +img_tag="[IMG]" +indent=" " +ascii_table=False +links="copy" +plain=True +strip_html=False +base_url="" +table_tag="table" diff --git a/geminer.py b/geminer.py new file mode 100755 index 0000000..a12df16 --- /dev/null +++ b/geminer.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 + +from md2gemini import md2gemini +import frontmatter +from jinja2 import Template +import os + +import config + +md_path = os.path.expanduser(config.md_dir) +gmi_path = os.path.expanduser(config.gmi_dir) +tpl_path = os.path.expanduser(config.tpl_dir) + +os.chdir(md_path) + +for dirname, subdirlist, mdlist in os.walk('.'): + gmi_subpath = os.path.abspath(gmi_path+"/"+dirname) + os.makedirs(gmi_subpath, exist_ok=True) + for mdfile in mdlist: + basename, extension = os.path.splitext(mdfile) + extension = extension[1:] + if extension not in config.md_extensions: + print("Ignoring file {}: \"{}\" not in markdown extensions list".format(mdfile, extension)) + pass + with open(dirname+"/"+mdfile, 'r') as md: + mdtext = md.read() + meta = frontmatter.parse(mdtext)[0] + template = meta.get("template", None) + author = meta.get("author", None) + date = meta.get("date", None) + title = meta.get("title", None) + tags = meta.get("tags", None) + for item in config.replace: + mdtext = mdtext.replace(item[0],item[1]) + gmitext = md2gemini(mdtext, + code_tag=config.code_tag, + img_tag=config.img_tag, + indent=config.indent, + ascii_table=config.ascii_table, + frontmatter=True, + links=config.links, + plain=config.plain, + strip_html=config.strip_html, + base_url=config.base_url, + md_links=True, + table_tag=config.table_tag + ) + with open(tpl_path+"/"+template+".tpl", 'r') as tpl: + template = Template(tpl.read()) + simpledirname = dirname[2:] + if simpledirname == "": + path = basename + else: + path = simpledirname + "/" + basename + gmitext = template.render( + content=gmitext, + tags=tags, + template=template, + author=author, + date=date, + title=title, + path=path + ) + gmitext = gmitext.replace('\r\n','\n') + gmifile = basename + if config.gmi_extension: + gmifile += ".gmi" + print(gmi_subpath+"/"+gmifile) + with open(gmi_subpath+"/"+gmifile, 'w') as gmi: + gmi.write(gmitext)