|
|
@ -50,7 +50,16 @@ def makeCoverCache(library): |
|
|
|
def matchRegexp(reg, iterable): |
|
|
|
return [ m.group(1) for m in (reg.match(l) for l in iterable) if m ] |
|
|
|
|
|
|
|
def songslist(library, songs): |
|
|
|
def unprefixed(title, prefixes): |
|
|
|
"""Remove the first prefix of the list in the beginning of title (if any). |
|
|
|
""" |
|
|
|
for prefix in prefixes: |
|
|
|
match = re.compile(r"^(%s)\b\s*(.*)$" % prefix).match(title) |
|
|
|
if match: |
|
|
|
return match.group(2) |
|
|
|
return title |
|
|
|
|
|
|
|
def songslist(library, songs, prefixes): |
|
|
|
song_objects = [] |
|
|
|
for s in songs: |
|
|
|
path = library + 'songs/' + s |
|
|
@ -65,7 +74,7 @@ def songslist(library, songs): |
|
|
|
album = '' |
|
|
|
song_objects.append(Song(title, artist, album, path)) |
|
|
|
|
|
|
|
song_objects = sorted(song_objects, key=lambda x: locale.strxfrm(x.title)) |
|
|
|
song_objects = sorted(song_objects, key=lambda x: locale.strxfrm(unprefixed(x.title, prefixes))) |
|
|
|
song_objects = sorted(song_objects, key=lambda x: locale.strxfrm(x.album)) |
|
|
|
song_objects = sorted(song_objects, key=lambda x: locale.strxfrm(x.artist)) |
|
|
|
|
|
|
@ -122,6 +131,8 @@ def makeTexFile(sb, library, output): |
|
|
|
# default value |
|
|
|
template = "patacrep.tmpl" |
|
|
|
songs = [] |
|
|
|
titleprefixwords = "" |
|
|
|
prefixes = [] |
|
|
|
|
|
|
|
# parse the songbook data |
|
|
|
if "template" in sb: |
|
|
@ -130,6 +141,11 @@ def makeTexFile(sb, library, output): |
|
|
|
if "songs" in sb: |
|
|
|
songs = sb["songs"] |
|
|
|
del sb["songs"] |
|
|
|
if "titleprefixwords" in sb: |
|
|
|
prefixes = sb["titleprefixwords"] |
|
|
|
for prefix in sb["titleprefixwords"]: |
|
|
|
titleprefixwords += "\\titleprefixword{%s}\n" % prefix |
|
|
|
sb["titleprefixwords"] = titleprefixwords |
|
|
|
|
|
|
|
parameters = parseTemplate("templates/"+template) |
|
|
|
|
|
|
@ -152,7 +168,7 @@ def makeTexFile(sb, library, output): |
|
|
|
songs = map(lambda x: x[len(library) + 6:], recursiveFind(os.path.join(library, 'songs'), '*.sg')) |
|
|
|
|
|
|
|
if len(songs) > 0: |
|
|
|
out.write(formatDefinition('songslist', songslist(library, songs))) |
|
|
|
out.write(formatDefinition('songslist', songslist(library, songs, prefixes))) |
|
|
|
out.write('\\makeatother\n') |
|
|
|
|
|
|
|
# output template |
|
|
|