Add fulltitle to template fields.

fulltitle is title + [(" subtitle ")"] if subtitle is present.

To do: extend full title to next and prev. this means exposing it
in abcfield.py.
This commit is contained in:
Jim Hague 2017-10-11 17:09:31 +01:00
parent 0f2b90c40d
commit 9e27b13c6b
5 changed files with 26 additions and 22 deletions

View File

@ -181,23 +181,18 @@ def convertMarkdown(t, latex):
def expandCustomMarkdown(t, dir, 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 (and subtitle, if present) of the tune as the text of the link. # title (and subtitle, if present) of the tune as the text of the link.
def getTitle(m): def getTitleLink(m):
fname = m.group(1) + ".abc" fname = m.group(1) + ".abc"
path = pathlib.Path(dir, fname) path = pathlib.Path(dir, fname)
with path.open() as f: with path.open() as f:
title = getFieldDisplayText(f, dir, "T", latex=latex) return "[" + getFullTitle(f, dir, latex=latex) + "](" + fname + ")"
f.seek(0) return re.sub(r'<(.*?).abc>', getTitleLink, t)
subtitle = getFieldDisplayText(f, dir, "T", n=2, latex=latex)
if len(subtitle) > 0:
title = title + " (" + subtitle + ")"
return "[" + title + "](" + fname + ")"
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,
# or the field data must start with a designated string to be recognised. # or the field data must start with a designated string to be recognised.
def getFieldText(inf, field, n = 1, starts = None): def getFieldText(lines, field, n = 1, starts = None):
res = "" res = ""
for line in inf: for line in lines:
line = line.strip() line = line.strip()
if len(line) > 2 and line[1] == ':': if len(line) > 2 and line[1] == ':':
if line[0] == "+" or (line[0] == field and line[2] == "+"): if line[0] == "+" or (line[0] == field and line[2] == "+"):
@ -224,8 +219,8 @@ 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, dir, field, n = 1, starts = None, latex = False): def getFieldDisplayText(lines, dir, field, n = 1, starts = None, latex = False):
res = getFieldText(inf, field, n, starts) res = getFieldText(lines, field, n, starts)
if res: if res:
res = convertAccents(res, latex) res = convertAccents(res, latex)
if field.upper() == "T": if field.upper() == "T":
@ -236,12 +231,19 @@ def getFieldDisplayText(inf, dir, field, n = 1, starts = None, latex = False):
res = convertMarkdown(expandCustomMarkdown(res, dir, latex), latex) res = convertMarkdown(expandCustomMarkdown(res, dir, latex), latex)
return res return res
# Return full title (title + [" (" + subtitle + ")"] if subtitle exists).
def getFullTitle(lines, dir, starts = None, latex = False):
title = getFieldDisplayText(lines, dir, "T", starts=starts, latex=latex)
subtitle = getFieldDisplayText(lines, dir, "T", n=2, starts=starts, latex=latex)
return title if len(subtitle) == 0 else title + " (" + subtitle + ")"
if __name__ == "__main__": if __name__ == "__main__":
def process(inf, dir, options): def process(f, dir, options):
lines = f.readlines()
if options.display: if options.display:
line = getFieldDisplayText(inf, dir, options.field, options.index, options.starts, options.latex) line = getFieldDisplayText(lines, dir, options.field, options.index, options.starts, options.latex)
else: else:
line = getFieldText(inf, options.field, options.index, options.starts) line = getFieldText(lines, options.field, options.index, options.starts)
if line: if line:
print(line) print(line)
return True return True

View File

@ -21,6 +21,7 @@
# * name. The file base name. Base filename without extension. # * name. The file base name. Base filename without extension.
# * title. The tune title. # * title. The tune title.
# * subtitle. The tune subtitle (second Title field), if any. # * subtitle. The tune subtitle (second Title field), if any.
# * fulltitle. The tune title followed, if it exists, by " (" subtitle ")"
# * tradition. The Morris tradition the dance tune is from. # * tradition. The Morris tradition the dance tune is from.
# * composer. The tune composer. # * composer. The tune composer.
# * key. The tune key. # * key. The tune key.
@ -37,7 +38,7 @@ import argparse
import pathlib import pathlib
import string import string
from abcfield import getFieldDisplayText from abcfield import getFieldDisplayText, getFullTitle
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Substitute values from ABC file into template.') parser = argparse.ArgumentParser(description='Substitute values from ABC file into template.')
@ -68,6 +69,7 @@ if __name__ == "__main__":
vars["name"] = fname vars["name"] = fname
vars["title"] = getFieldDisplayText(lines, fdir, "T", latex=args.latex) vars["title"] = getFieldDisplayText(lines, fdir, "T", latex=args.latex)
vars["subtitle"] = getFieldDisplayText(lines, fdir, "T", n=2, latex=args.latex) vars["subtitle"] = getFieldDisplayText(lines, fdir, "T", n=2, latex=args.latex)
vars["fulltitle"] = getFullTitle(lines, fdir, latex=args.latex)
vars["tradition"] = getFieldDisplayText(lines, fdir, "A", latex=args.latex) vars["tradition"] = getFieldDisplayText(lines, fdir, "A", latex=args.latex)
vars["composer"] = getFieldDisplayText(lines, fdir, "C", latex=args.latex) vars["composer"] = getFieldDisplayText(lines, fdir, "C", latex=args.latex)
vars["key"] = getFieldDisplayText(lines, fdir, "K", latex=args.latex) vars["key"] = getFieldDisplayText(lines, fdir, "K", latex=args.latex)

View File

@ -48,7 +48,7 @@
</div> </div>
</div> </div>
</div> </div>
<p>${title} is in the key of ${key}. <p>${fulltitle} is in the key of ${key}.
<div class="dottes-tune-learner"> <div class="dottes-tune-learner">
<div class="dottes-tune-learner-speed-column"></div> <div class="dottes-tune-learner-speed-column"></div>
<div class="dottes-tune-learner-play-column"></div> <div class="dottes-tune-learner-play-column"></div>
@ -149,7 +149,7 @@
<div class="dottes-tune-footer-learner-booke"> <div class="dottes-tune-footer-learner-booke">
<a class="dottes-tune-icon-link" href="${name}.html"> <a class="dottes-tune-icon-link" href="${name}.html">
<img class="dottes-tune-header-image" src="../img/music.png" <img class="dottes-tune-header-image" src="../img/music.png"
alt="Tune dottes page" title="Go to dottes page for ${title}"> alt="Tune dottes page" title="Go to dottes page for ${fulltitle}">
</a> </a>
<a class="dottes-tune-icon-link" href="index.html"> <a class="dottes-tune-icon-link" href="index.html">
<img class="dottes-tune-header-image" src="../img/book.png" <img class="dottes-tune-header-image" src="../img/book.png"

View File

@ -84,7 +84,7 @@
<div class="dottes-tune-footer-booke"> <div class="dottes-tune-footer-booke">
<a class="dottes-tune-icon-link" href="learner-${name}.html"> <a class="dottes-tune-icon-link" href="learner-${name}.html">
<img class="dottes-tune-header-image" src="../img/learner.png" <img class="dottes-tune-header-image" src="../img/learner.png"
alt="Learner tune page" title="Go to learner page for ${title}"> alt="Learner tune page" title="Go to learner page for ${fulltitle}">
</a> </a>
<a class="dottes-tune-icon-link" href="index.html"> <a class="dottes-tune-icon-link" href="index.html">
<img class="dottes-tune-header-image" src="../img/book.png" <img class="dottes-tune-header-image" src="../img/book.png"

View File

@ -1,16 +1,16 @@
<div class="dottes-tune-list-item"> <div class="dottes-tune-list-item">
<div class="dottes-tune-list-item-link"> <div class="dottes-tune-list-item-link">
<a class="dottes-tune-link" href="${name}.html">${title}</a> <a class="dottes-tune-link" href="${name}.html">${fulltitle}</a>
</div> </div>
<div class="dottes-tune-list-item-learner-link"> <div class="dottes-tune-list-item-learner-link">
<a class="dottes-tune-link" href="learner-${name}.html"> <a class="dottes-tune-link" href="learner-${name}.html">
<img class="dottes-tune-table-image" src="../img/learner.png" alt="Learner"> <img class="dottes-tune-table-image" src="../img/learner.png" alt="Learner page" title="Learner page for ${fulltitle}">
</a> </a>
</div> </div>
<div class="dottes-tune-list-item-image"> <div class="dottes-tune-list-item-image">
<a href="${name}.html"> <a href="${name}.html">
<img class="dottes-tune-table-image" src="firstline-${name}.png" <img class="dottes-tune-table-image" src="firstline-${name}.png"
alt="${title} first line"> alt="${fulltitle} first line" title="${fulltitle} first line">
</a> </a>
</div> </div>
</div> </div>