From 52e3d1cde85578377cc2f725655688790238123a Mon Sep 17 00:00:00 2001 From: Jim Hague Date: Thu, 12 Oct 2017 13:32:24 +0100 Subject: [PATCH] Revise Markdown handling of character entities. Ideally I'd like the ABC character entities to survive Markdown and then get converted. But because they start with '\', they don't. So I have no alternative but to convert them to HTML entities, which Markdown then converts to UTF-8. --- abcfield.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/abcfield.py b/abcfield.py index a342a69..fb4c196 100755 --- a/abcfield.py +++ b/abcfield.py @@ -178,15 +178,17 @@ def convertMarkdown(t, latex): # Implement a custom Markdown shorthand for referencing ABC files. # will expand to ['title of foo'](foo.abc). -def expandCustomMarkdown(t, dir, latex): +def expandCustomMarkdown(t, dir): # Given a match to (foo.abc), return a markdown link to the tune with the # title (and subtitle, if present) of the tune as the text of the link. + # Because we're going through Markdown, character entities must be + # HTML. Pandoc will convert them to UTF-8. def getTitleLink(m): fname = m.group(1) + ".abc" path = pathlib.Path(dir, fname) with path.open() as f: lines = f.readlines() - return "[" + getFullTitle(lines, dir, latex=latex) + "](" + fname + ")" + return "[" + getFullTitle(lines, dir) + "](" + fname + ")" return re.sub(r'<(.*?).abc>', getTitleLink, t) # Return the raw text for a given field. Optionally the nth field is taken, @@ -223,13 +225,15 @@ def getFieldText(lines, field, n = 1, starts = None): def getFieldDisplayText(lines, dir, field, n = 1, starts = None, latex = False): res = getFieldText(lines, field, n, starts) if res: - res = convertAccents(res, latex) + # Fields that go through Markdown must have HTML entities. + mdfield = field.upper() in ['H', 'N']; + res = convertAccents(res, False if mdfield else latex) if field.upper() == "T": res = convertTitleToDisplay(res) elif field.upper() == "K": res = convertKeyToDisplay(res) - elif field.upper() in ["H", "N"]: - res = convertMarkdown(expandCustomMarkdown(res, dir, latex), latex) + elif mdfield: + res = convertMarkdown(expandCustomMarkdown(res, dir), latex) return res # Return full title (title + [" (" + subtitle + ")"] if subtitle exists).