Mercurial > dottes
diff abcfield.py @ 593:82e818c41e81
Give ABC file directory when expanding markdown.
<foo.abc> specifies a file in the same directory as the file being
processed.
author | Jim Hague <jim.hague@acm.org> |
---|---|
date | Wed, 02 Nov 2016 14:59:31 +0000 |
parents | 9986c67edf91 |
children | 972d3dab1142 |
line wrap: on
line diff
--- a/abcfield.py Wed Nov 02 14:06:25 2016 +0000 +++ b/abcfield.py Wed Nov 02 14:59:31 2016 +0000 @@ -168,17 +168,18 @@ res = re.sub(r'\\href{(.*?).abc}', r'\\hyperlink{\1}', res) else: 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. # <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 # title of the tune as the text of the link. def getTitle(m): fname = m.group(1) + ".abc" - with pathlib.Path(fname).open() as f: - return "[" + getFieldDisplayText(f, "T", latex) + "](" + fname + ")" + path = pathlib.Path(dir, fname) + with path.open() as f: + return "[" + getFieldDisplayText(f, dir, "T", latex) + "](" + fname + ")" return re.sub(r'<(.*?).abc>', getTitle, t) # Return the raw text for a given field. Optionally the nth field is taken, @@ -212,7 +213,7 @@ return res # 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) if res: res = convertAccents(res, latex) @@ -221,13 +222,13 @@ elif field.upper() == "K": res = convertKeyToDisplay(res) elif field.upper() in ["H", "N"]: - res = convertMarkdown(expandCustomMarkdown(res, latex), latex) + res = convertMarkdown(expandCustomMarkdown(res, dir, latex), latex) return res if __name__ == "__main__": - def process(inf, options): + def process(inf, dir, options): 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: line = getFieldText(inf, options.field, options.index, options.starts) if line: @@ -260,11 +261,9 @@ res = False if len(args) > 0: for arg in args: - try: - inf = open(arg, "r") - res = res or process(inf, options) - finally: - inf.close() + path = pathlib.Path(arg) + with path.open() as f: + res = res or process(f, path.parent, options) else: - res = process(sys.stdin, options) + res = process(sys.stdin, ".", options) sys.exit(int(not res))