mirror of
https://github.com/fergalmoran/picard.git
synced 2025-12-23 09:48:03 +00:00
Parse CamelCase instrument names.
This commit is contained in:
@@ -17,12 +17,26 @@
|
|||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
import re
|
||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
from copy import copy
|
from copy import copy
|
||||||
from picard.similarity import similarity
|
from picard.similarity import similarity
|
||||||
from picard.util import LockableObject, needs_read_lock, needs_write_lock
|
from picard.util import LockableObject, needs_read_lock, needs_write_lock
|
||||||
from musicbrainz2.utils import extractUuid, extractFragment
|
from musicbrainz2.utils import extractUuid, extractFragment
|
||||||
|
|
||||||
|
def _decamelcase(text):
|
||||||
|
return re.sub(r'([A-Z])', r' \1', text).strip()
|
||||||
|
|
||||||
|
_EXTRA_ATTRS = ['Guest', 'Additional', 'Minor']
|
||||||
|
def _parse_attributes(attrs):
|
||||||
|
attrs = map(_decamelcase, map(extractFragment, attrs))
|
||||||
|
prefix = ' '.join([a for a in attrs if a in _EXTRA_ATTRS])
|
||||||
|
attrs = [a for a in attrs if a not in _EXTRA_ATTRS]
|
||||||
|
if len(attrs) > 1:
|
||||||
|
attrs = _('%s and %s') % (', '.join(attrs[:-1]), attrs[-1:][0])
|
||||||
|
else:
|
||||||
|
attrs = attrs[0]
|
||||||
|
return ' '.join([prefix, attrs]).strip().lower()
|
||||||
|
|
||||||
class Metadata(LockableObject):
|
class Metadata(LockableObject):
|
||||||
"""List of metadata items with dict-like access."""
|
"""List of metadata items with dict-like access."""
|
||||||
@@ -253,9 +267,9 @@ class Metadata(LockableObject):
|
|||||||
if name is None:
|
if name is None:
|
||||||
reltype = extractFragment(rel.type)
|
reltype = extractFragment(rel.type)
|
||||||
if reltype == 'Vocal':
|
if reltype == 'Vocal':
|
||||||
name = 'performer:' + ' '.join(map(extractFragment, rel.attributes) + ['Vocal'])
|
name = 'performer:' + ' '.join([_parse_attributes(rel.attributes), 'vocal'])
|
||||||
elif reltype == 'Instrument':
|
elif reltype == 'Instrument':
|
||||||
name = 'performer:' + ' '.join(map(extractFragment, rel.attributes))
|
name = 'performer:' + _parse_attributes(rel.attributes)
|
||||||
else:
|
else:
|
||||||
try: name = ar_types[reltype]
|
try: name = ar_types[reltype]
|
||||||
except KeyError: continue
|
except KeyError: continue
|
||||||
|
|||||||
Reference in New Issue
Block a user