Mercurial > dottes
comparison abcfield.py @ 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 | 6bd946700312 |
comparison
equal
deleted
inserted
replaced
734:e896cf93fe98 | 735:68f926e61d16 |
---|---|
176 res = re.sub(r'href="(.*?).abc"', r'href="\1.html"', res) | 176 res = re.sub(r'href="(.*?).abc"', r'href="\1.html"', res) |
177 return res.strip() | 177 return res.strip() |
178 | 178 |
179 # Implement a custom Markdown shorthand for referencing ABC files. | 179 # Implement a custom Markdown shorthand for referencing ABC files. |
180 # <foo.abc> will expand to ['title of foo'](foo.abc). | 180 # <foo.abc> will expand to ['title of foo'](foo.abc). |
181 def expandCustomMarkdown(t, dir, latex): | 181 def expandCustomMarkdown(t, dir): |
182 # Given a match to (foo.abc), return a markdown link to the tune with the | 182 # Given a match to (foo.abc), return a markdown link to the tune with the |
183 # title (and subtitle, if present) of the tune as the text of the link. | 183 # title (and subtitle, if present) of the tune as the text of the link. |
184 # Because we're going through Markdown, character entities must be | |
185 # HTML. Pandoc will convert them to UTF-8. | |
184 def getTitleLink(m): | 186 def getTitleLink(m): |
185 fname = m.group(1) + ".abc" | 187 fname = m.group(1) + ".abc" |
186 path = pathlib.Path(dir, fname) | 188 path = pathlib.Path(dir, fname) |
187 with path.open() as f: | 189 with path.open() as f: |
188 lines = f.readlines() | 190 lines = f.readlines() |
189 return "[" + getFullTitle(lines, dir, latex=latex) + "](" + fname + ")" | 191 return "[" + getFullTitle(lines, dir) + "](" + fname + ")" |
190 return re.sub(r'<(.*?).abc>', getTitleLink, t) | 192 return re.sub(r'<(.*?).abc>', getTitleLink, t) |
191 | 193 |
192 # Return the raw text for a given field. Optionally the nth field is taken, | 194 # Return the raw text for a given field. Optionally the nth field is taken, |
193 # or the field data must start with a designated string to be recognised. | 195 # or the field data must start with a designated string to be recognised. |
194 def getFieldText(lines, field, n = 1, starts = None): | 196 def getFieldText(lines, field, n = 1, starts = None): |
221 | 223 |
222 # Return display text for a given field. | 224 # Return display text for a given field. |
223 def getFieldDisplayText(lines, dir, field, n = 1, starts = None, latex = False): | 225 def getFieldDisplayText(lines, dir, field, n = 1, starts = None, latex = False): |
224 res = getFieldText(lines, field, n, starts) | 226 res = getFieldText(lines, field, n, starts) |
225 if res: | 227 if res: |
226 res = convertAccents(res, latex) | 228 # Fields that go through Markdown must have HTML entities. |
229 mdfield = field.upper() in ['H', 'N']; | |
230 res = convertAccents(res, False if mdfield else latex) | |
227 if field.upper() == "T": | 231 if field.upper() == "T": |
228 res = convertTitleToDisplay(res) | 232 res = convertTitleToDisplay(res) |
229 elif field.upper() == "K": | 233 elif field.upper() == "K": |
230 res = convertKeyToDisplay(res) | 234 res = convertKeyToDisplay(res) |
231 elif field.upper() in ["H", "N"]: | 235 elif mdfield: |
232 res = convertMarkdown(expandCustomMarkdown(res, dir, latex), latex) | 236 res = convertMarkdown(expandCustomMarkdown(res, dir), latex) |
233 return res | 237 return res |
234 | 238 |
235 # Return full title (title + [" (" + subtitle + ")"] if subtitle exists). | 239 # Return full title (title + [" (" + subtitle + ")"] if subtitle exists). |
236 def getFullTitle(lines, dir, starts = None, latex = False): | 240 def getFullTitle(lines, dir, starts = None, latex = False): |
237 title = getFieldDisplayText(lines, dir, "T", starts=starts, latex=latex) | 241 title = getFieldDisplayText(lines, dir, "T", starts=starts, latex=latex) |