[PATCH v4 11/16] md2html: add asset mapping
Andy Green
andy at warmcat.com
Wed Jun 20 12:12:54 CEST 2018
From: John Keeping <john at keeping.me.uk>
This remaps the "src" attribute on <img> elements according to a second
command line argument, you can try it out with:
md2html <README.md README.md /path/to/plain/directory/
The trailing "/" is important.
This is useful when serving relative URLs from the repo in a readme.
Signed-off-by: John Keeping <john at keeping.me.uk>
---
filters/html-converters/md2html | 50 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 49 insertions(+), 1 deletion(-)
diff --git a/filters/html-converters/md2html b/filters/html-converters/md2html
index ebf3856..eb5d977 100755
--- a/filters/html-converters/md2html
+++ b/filters/html-converters/md2html
@@ -2,7 +2,41 @@
import markdown
import sys
import io
+from markdown.util import etree
from pygments.formatters import HtmlFormatter
+from urllib.parse import urljoin
+
+
+class AssetMappingProcessor(markdown.treeprocessors.Treeprocessor):
+
+ def __init__(self, asset_prefix):
+ self.asset_prefix = asset_prefix
+
+ def run(self, root):
+ asset_prefix = self.asset_prefix
+ for img in root.iter('img'):
+ src = img.get('src')
+ if src is None:
+ continue
+ img.set('src', urljoin(asset_prefix, src))
+
+
+class AssetMappingExtension(markdown.extensions.Extension):
+
+ def __init__(self, **kwargs):
+ self.config = {'asset_prefix': ['', 'prefix for relative asset URLs']}
+ super(AssetMappingExtension, self).__init__(**kwargs)
+
+ def extendMarkdown(self, md, md_globals):
+ asset_prefix = self.getConfig('asset_prefix')
+ if not asset_prefix:
+ return
+
+ md.treeprocessors.add('asset_mapping',
+ AssetMappingProcessor(asset_prefix),
+ '_end')
+
+
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stdout.write('''
@@ -289,6 +323,20 @@ sys.stdout.write('''
''')
sys.stdout.write("<div class='markdown-body'>")
sys.stdout.flush()
+
+extensions = [
+ "markdown.extensions.fenced_code",
+ "markdown.extensions.codehilite",
+ "markdown.extensions.tables"
+]
+extension_configs = {
+ "markdown.extensions.codehilite":{"css_class":"highlight"}
+}
+
+if len(sys.argv) > 2:
+ extensions.append(AssetMappingExtension(asset_prefix=sys.argv[2]))
+
# Note: you may want to run this through bleach for sanitization
-markdown.markdownFromFile(output_format="html5", extensions=["markdown.extensions.fenced_code", "markdown.extensions.codehilite", "markdown.extensions.tables"], extension_configs={"markdown.extensions.codehilite":{"css_class":"highlight"}})
+markdown.markdownFromFile(output_format="html5", extensions=extensions, extension_configs=extension_configs)
sys.stdout.write("</div>")
+
More information about the CGit
mailing list