Give ABC file directory when expanding markdown.

<foo.abc> specifies a file in the same directory as the file being
processed.
This commit is contained in:
Jim Hague 2016-11-02 14:59:31 +00:00
parent c1c7d23c0b
commit 945454da9d
1 changed files with 13 additions and 14 deletions

View File

@ -168,17 +168,18 @@ def convertMarkdown(t, latex):
res = re.sub(r'\\href{(.*?).abc}', r'\\hyperlink{\1}', res) res = re.sub(r'\\href{(.*?).abc}', r'\\hyperlink{\1}', res)
else: else:
res = re.sub(r'href="(.*?).abc"', r'href="\1.html"', res) res = re.sub(r'href="(.*?).abc"', r'href="\1.html"', res)
return res return res.strip()
# Implement a custom Markdown shorthand for referencing ABC files. # Implement a custom Markdown shorthand for referencing ABC files.
# <foo.abc> will expand to ['title of foo'](foo.abc). # <foo.abc> will expand to ['title of foo'](foo.abc).
def expandCustomMarkdown(t, latex): def expandCustomMarkdown(t, dir, latex):
# Given a match to (foo.abc), return a markdown link to the tune with the # Given a match to (foo.abc), return a markdown link to the tune with the
# title of the tune as the text of the link. # title of the tune as the text of the link.
def getTitle(m): def getTitle(m):
fname = m.group(1) + ".abc" fname = m.group(1) + ".abc"
with pathlib.Path(fname).open() as f: path = pathlib.Path(dir, fname)
return "[" + getFieldDisplayText(f, "T", latex) + "](" + fname + ")" with path.open() as f:
return "[" + getFieldDisplayText(f, dir, "T", latex) + "](" + fname + ")"
return re.sub(r'<(.*?).abc>', getTitle, t) return re.sub(r'<(.*?).abc>', getTitle, t)
# Return the raw text for a given field. Optionally the nth field is taken, # Return the raw text for a given field. Optionally the nth field is taken,
@ -212,7 +213,7 @@ def getFieldText(inf, field, n = 1, starts = None):
return res return res
# Return display text for a given field. # Return display text for a given field.
def getFieldDisplayText(inf, field, n = 1, starts = None, latex = False): def getFieldDisplayText(inf, dir, field, n = 1, starts = None, latex = False):
res = getFieldText(inf, field, n, starts) res = getFieldText(inf, field, n, starts)
if res: if res:
res = convertAccents(res, latex) res = convertAccents(res, latex)
@ -221,13 +222,13 @@ def getFieldDisplayText(inf, field, n = 1, starts = None, latex = False):
elif field.upper() == "K": elif field.upper() == "K":
res = convertKeyToDisplay(res) res = convertKeyToDisplay(res)
elif field.upper() in ["H", "N"]: elif field.upper() in ["H", "N"]:
res = convertMarkdown(expandCustomMarkdown(res, latex), latex) res = convertMarkdown(expandCustomMarkdown(res, dir, latex), latex)
return res return res
if __name__ == "__main__": if __name__ == "__main__":
def process(inf, options): def process(inf, dir, options):
if options.display: if options.display:
line = getFieldDisplayText(inf, options.field, options.index, options.starts, options.latex) line = getFieldDisplayText(inf, dir, options.field, options.index, options.starts, options.latex)
else: else:
line = getFieldText(inf, options.field, options.index, options.starts) line = getFieldText(inf, options.field, options.index, options.starts)
if line: if line:
@ -260,11 +261,9 @@ if __name__ == "__main__":
res = False res = False
if len(args) > 0: if len(args) > 0:
for arg in args: for arg in args:
try: path = pathlib.Path(arg)
inf = open(arg, "r") with path.open() as f:
res = res or process(inf, options) res = res or process(f, path.parent, options)
finally:
inf.close()
else: else:
res = process(sys.stdin, options) res = process(sys.stdin, ".", options)
sys.exit(int(not res)) sys.exit(int(not res))