[picard] Restore two files that are not yet in contrib

alexlan alexlan at fedoraproject.org
Mon Jun 4 18:49:26 UTC 2012


commit d746224172b3ca3dc136ef30ccaf0b8b1d415e2f
Author: Alex Lancaster <alexlan[AT]fedoraproject org>
Date:   Mon Jun 4 14:48:56 2012 -0400

    Restore two files that are not yet in contrib

 titlesort.py    |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 titleversion.py |   27 +++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 0 deletions(-)
---
diff --git a/titlesort.py b/titlesort.py
new file mode 100644
index 0000000..d65e0da
--- /dev/null
+++ b/titlesort.py
@@ -0,0 +1,59 @@
+PLUGIN_NAME = 'Title sort names'
+PLUGIN_AUTHOR = 'Jacob Rask'
+PLUGIN_DESCRIPTION = 'Guesses title and album sortnames (language specific) and adds as titlesort and albumsort tags.'
+PLUGIN_VERSION = "0.1.4"
+PLUGIN_API_VERSIONS = ["0.12", "0.15"]
+
+from picard.metadata import register_track_metadata_processor
+from picard.metadata import register_album_metadata_processor
+import re
+
+# define articles
+_articles = {}
+_articles['deu'] = ['Der ', 'Das ', 'Die ', 'Eine? '] # German
+_articles['eng'] = ['Th[ae] ', 'Da ', 'An? '] # English
+_articles['esp'] = ['El ', 'La ', 'L[ao]s ', 'Una? ', 'Un[ao]s '] # Spanish
+_articles['fra'] = ["Les? ", "La ", "L'", "Une? ", "Des "] # French
+_articles['ita'] = ["Il ", "L[aeo] ", "L'", "I ", "Gli ", "Un[ao]? ", "Un'"] # Italian
+_articles['swe'] = ['De[nt]? ', 'Dom ', 'E(n|tt) '] # Swedish
+
+# compile sort language regular expressions
+_re_articles = {}
+_regmul = ''
+for lang, a in _articles.iteritems():
+    reg = ''
+    for i in range(len(a)):
+        reg = '|^' + _articles[lang][i] + reg
+        _re_articles[lang] = re.compile(reg[1:])
+    _regmul = _regmul + reg
+# all articles are collected and used for "multiple languages"
+_re_articles['mul'] = re.compile(_regmul[1:])
+
+def make_sorttitle(title, lang):
+    if lang not in _re_articles:
+        lang = "mul"
+    sort_re = _re_articles[lang]
+    match = sort_re.match(title)
+    titlesort = title
+    if match:
+        sort_prefix = match.group().strip()
+        titlesort = sort_re.sub("", title).strip() + ", " + sort_prefix
+        titlesort = titlesort[0].upper() + titlesort[1:] # capitalize first letter
+    return titlesort
+
+def add_titlesort(tagger, metadata, release, track):
+    if metadata["titlesort"]:
+        titlesort = metadata["titlesort"]
+    else:
+        titlesort = metadata["title"]
+    metadata["titlesort"] = make_sorttitle(titlesort, metadata["language"])
+
+def add_albumsort(tagger, metadata, release):
+    if metadata["albumsort"]:
+        titlesort = metadata["albumsort"]
+    else:
+        titlesort = metadata["album"]
+    metadata["albumsort"] = make_sorttitle(titlesort, metadata["language"])
+
+register_track_metadata_processor(add_titlesort)
+register_album_metadata_processor(add_albumsort)
diff --git a/titleversion.py b/titleversion.py
new file mode 100644
index 0000000..ffaa5dc
--- /dev/null
+++ b/titleversion.py
@@ -0,0 +1,27 @@
+PLUGIN_NAME = 'Move metadata to version tag'
+PLUGIN_AUTHOR = 'Jacob Rask'
+PLUGIN_DESCRIPTION = 'Moves song metadata such as "demo", "live" from title and titlesort to version tag.'
+PLUGIN_VERSION = "0.1.4"
+PLUGIN_API_VERSIONS = ["0.12", "0.15"]
+
+from picard.metadata import register_track_metadata_processor
+import re
+
+_p_re = re.compile(r"\(.*?\)")
+_v_re = re.compile(r"((\s|-)?(acoustic|akustisk|album|bonus|clean|club|cut|C=64|dance|dirty|disco|encore|extended|inch|maxi|live|original|radio|redux|rehearsal|reprise|reworked|ringtone|[Ss]essions?|short|studio|take|variant|version|vocal)(\s|-)?|.*?(capp?ella)\s?|(\s|-)?(alternat|demo|dub|edit|ext|fail|instr|long|orchestr|record|remaster|remix|strument|[Tt]ape|varv).*?|.*?(complete|mix|inspel).*?)")
+
+def add_title_version(tagger, metadata, release, track):
+    if metadata["titlesort"]:
+        title = metadata["titlesort"]
+    else:
+        title = metadata["title"]
+    pmatch = _p_re.findall(title)
+    if pmatch: # if there's a parenthesis, investigate
+        pstr = pmatch[-1][1:-1] # get last match and strip paranthesis
+        vmatch = _v_re.search(pstr)
+        if vmatch:
+            metadata["titlesort"] = re.sub("\(" + pstr + "\)", "", title).strip()
+            metadata["title"] = re.sub("\(" + pstr + "\)", "", title).strip()
+            metadata["version"] = pstr
+
+register_track_metadata_processor(add_title_version)


More information about the scm-commits mailing list