changeset 735:68f926e61d16

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.
author Jim Hague <jim.hague@acm.org>
date Thu, 12 Oct 2017 13:32:24 +0100
parents e896cf93fe98
children 4a4d39bcc145
files abcfield.py
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/abcfield.py	Thu Oct 12 13:29:50 2017 +0100
+++ b/abcfield.py	Thu Oct 12 13:32:24 2017 +0100
@@ -178,15 +178,17 @@
 
 # Implement a custom Markdown shorthand for referencing ABC files.
 # <foo.abc> 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 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).