comparison abcfield.py @ 591:2face6618bf3

Convert Markdown in N and H fields. Fix up .abc links.
author Jim Hague <jim.hague@acm.org>
date Wed, 02 Nov 2016 08:36:21 +0000
parents afc031477784
children 9986c67edf91
comparison
equal deleted inserted replaced
590:a6fc091a8c5e 591:2face6618bf3
16 # continuation is a distinct line in the field value; the value has a line 16 # continuation is a distinct line in the field value; the value has a line
17 # break between it and the previous line. 17 # break between it and the previous line.
18 # 18 #
19 19
20 import optparse 20 import optparse
21 import re
22 import subprocess
21 import sys 23 import sys
22 24
23 accentedletters = { 25 accentedletters = {
24 # Acute accents 26 # Acute accents
25 "'A" : ("&Aacute;", "\\'{A}"), 27 "'A" : ("&Aacute;", "\\'{A}"),
150 mode = t[1:] 152 mode = t[1:]
151 except IndexError: 153 except IndexError:
152 pass 154 pass
153 mode = mode.strip().lower() 155 mode = mode.strip().lower()
154 return letter + accidental + ' ' + abckeys.get(mode, "Major") 156 return letter + accidental + ' ' + abckeys.get(mode, "Major")
157
158 # Convert input string from Markdown to HTML or LaTeX. Fix up link
159 # targets so any 'foo.abc' target links to the tune with that name.
160 def convertMarkdown(t, latex):
161 if latex:
162 target = "--to=latex"
163 else:
164 target = "--to=html"
165 res = subprocess.check_output(['pandoc', '--from=markdown', target], input=t, universal_newlines=True)
166 if latex:
167 res = re.sub(r'\\href{(.*).abc}', r'\\hyperlink{\1}', res)
168 else:
169 res = re.sub(r'href="(.*).abc"', r'href="\1.html"', res)
170 return res
155 171
156 # Return the raw text for a given field. Optionally the nth field is taken, 172 # Return the raw text for a given field. Optionally the nth field is taken,
157 # or the field data must start with a designated string to be recognised. 173 # or the field data must start with a designated string to be recognised.
158 def getFieldText(inf, field, n = 1, starts = None): 174 def getFieldText(inf, field, n = 1, starts = None):
159 res = "" 175 res = ""
185 201
186 # Return display text for a given field. 202 # Return display text for a given field.
187 def getFieldDisplayText(inf, field, n = 1, starts = None, latex = False): 203 def getFieldDisplayText(inf, field, n = 1, starts = None, latex = False):
188 res = getFieldText(inf, field, n, starts) 204 res = getFieldText(inf, field, n, starts)
189 if res: 205 if res:
206 res = convertAccents(res, latex)
190 if field.upper() == "T": 207 if field.upper() == "T":
191 res = convertTitleToDisplay(res) 208 res = convertTitleToDisplay(res)
192 elif field.upper() == "K": 209 elif field.upper() == "K":
193 res = convertKeyToDisplay(res) 210 res = convertKeyToDisplay(res)
194 res = convertAccents(res, latex) 211 elif field.upper() in ["H", "N"]:
212 res = convertMarkdown(res, latex)
195 return res 213 return res
196 214
197 if __name__ == "__main__": 215 if __name__ == "__main__":
198 def process(inf, options): 216 def process(inf, options):
199 if options.display: 217 if options.display: