From 4d36f4f1e363cfc9005b7d0ff1eb544b72559bba Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Sun, 17 Sep 2023 20:13:45 +0100 Subject: [PATCH] Allow escaping markdown from external data --- content/nested/sibling.md | 4 ++-- hooks/unsplash.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/content/nested/sibling.md b/content/nested/sibling.md index bd80784..b4ca089 100644 --- a/content/nested/sibling.md +++ b/content/nested/sibling.md @@ -5,6 +5,6 @@ redirects: # Sibling -{% set this_image = unsplash("MU8w72PzRow") %} +{% set this_image = unsplash("yCdPU73kGSc") %} -![{{ this_image.description|default("", true) }}]({{ this_image.urls.regular }}) +![{{ this_image.description|default("", true)|escape_markdown }}]({{ this_image.urls.regular }}) diff --git a/hooks/unsplash.py b/hooks/unsplash.py index ff6dfa7..edd27cc 100644 --- a/hooks/unsplash.py +++ b/hooks/unsplash.py @@ -3,14 +3,26 @@ from datetime import timedelta import os import json import jinja2 +import re UNSPLASH_CACHE_TIME = timedelta(days=14) +MD_ESCAPE_CHARS = r"\_*[]()~`>#+-=|{}.!" +MD_ESCAPE_RE = re.compile(f"([{re.escape(MD_ESCAPE_CHARS)}])") + def get_unsplash_image(image_id): client_id = os.environ["UNSPLASH_CLIENT_ID"] url = f"https://api.unsplash.com/photos/{image_id}?client_id={client_id}" return json.loads(download_and_cache_url(url, UNSPLASH_CACHE_TIME)) + +def escape_markdown(value): + return MD_ESCAPE_RE.sub(r"\\\1", value) + + def on_env(env: jinja2.Environment, config, files): env.globals["unsplash"] = get_unsplash_image + + env.filters["escape_markdown"] = escape_markdown + return env