All pastes #2036386 Raw Edit

picard-0.12.1-unsmartquote.diff

public text v1 · immutable
#2036386 ·published 2011-01-02 05:13 UTC
rendered paste body
diff -rU3 picard-0.12.1/picard/album.py picard-0.12.1-unsmartquote/picard/album.py
--- picard-0.12.1/picard/album.py	2009-11-01 10:10:27.000000000 -0800
+++ picard-0.12.1-unsmartquote/picard/album.py	2011-01-01 20:58:41.000000000 -0800
@@ -40,6 +40,33 @@
     "electronica": u"Electronic",
 }
 
+_TRANSLATE_TYPOGRAPHIC_PUNCTUATION = {
+    u"…": u"...",
+    u"‘": u"'",
+    u"’": u"'",
+    u"‚": u"'",
+    u"“": u"\"",
+    u"”": u"\"",
+    u"„": u"\"",
+    u"′": u"'",
+    u"″": u"\"",
+    u"‹": u"<",
+    u"›": u">",
+    }
+
+_TYPOGRAPHIC_PUNCTUATION_ALBUM_FIELDS = [
+    'album',
+    'artist', 'artistsort', 'albumartist', 'albumartistsort',
+    'label',
+    ]
+
+_TYPOGRAPHIC_PUNCTUATION_TRACK_FIELDS = [
+    'album',
+    'artist', 'artistsort', 'albumartist', 'albumartistsort',
+    'label',
+    'composer', 'conductor', 'arranger', 'lyricist',
+    'remixer', 'producer', 'engineer', 'mixer', 'djmixer'
+    ]
 
 class ReleaseEvent(object):
 
@@ -188,6 +215,13 @@
         if m['musicbrainz_artistid'] == VARIOUS_ARTISTS_ID:
             m['albumartistsort'] = m['artistsort'] = m['albumartist'] = m['artist'] = self.config.setting['va_name']
 
+        # Remove typographic punctuation
+        if self.config.setting['convert_typographic_punctuation']:
+            for field in _TYPOGRAPHIC_PUNCTUATION_ALBUM_FIELDS:
+                for i, j in _TRANSLATE_TYPOGRAPHIC_PUNCTUATION.iteritems():
+                    if hasattr(m, field):
+                        m[field] = m[field].replace(i, j)
+
         # Album metadata plugins
         try:
             run_album_metadata_processors(self, m, release_node)
@@ -230,6 +264,14 @@
             if self.config.setting['folksonomy_tags']:
                 self._convert_folksonomy_tags_to_genre(t, ignore_tags)
 
+            # Remove typographic punctuation
+            if self.config.setting['convert_typographic_punctuation']:
+                for field in _TYPOGRAPHIC_PUNCTUATION_TRACK_FIELDS:
+                    for i, j in _TRANSLATE_TYPOGRAPHIC_PUNCTUATION.iteritems():
+                        if hasattr(tm, field):
+
+                            tm[field] = tm[field].replace(i, j)
+
             # Track metadata plugins
             try:
                 run_track_metadata_processors(self, tm, release_node, node)
diff -rU3 picard-0.12.1/picard/ui/options/metadata.py picard-0.12.1-unsmartquote/picard/ui/options/metadata.py
--- picard-0.12.1/picard/ui/options/metadata.py	2009-11-01 10:10:27.000000000 -0800
+++ picard-0.12.1-unsmartquote/picard/ui/options/metadata.py	2011-01-01 21:06:14.000000000 -0800
@@ -38,6 +38,7 @@
         TextOption("setting", "va_name", u"Various Artists"),
         TextOption("setting", "nat_name", u"[non-album tracks]"),
         BoolOption("setting", "translate_artist_names", False),
+        BoolOption("setting", "convert_typographic_punctuation", False),
         BoolOption("setting", "release_ars", True),
         BoolOption("setting", "track_ars", False),
         BoolOption("setting", "folksonomy_tags", False),
@@ -58,6 +59,7 @@
 
     def load(self):
         self.ui.translate_artist_names.setChecked(self.config.setting["translate_artist_names"])
+        self.ui.convert_typographic_punctuation.setChecked(self.config.setting["convert_typographic_punctuation"])
         self.ui.release_ars.setChecked(self.config.setting["release_ars"])
         self.ui.track_ars.setChecked(self.config.setting["track_ars"])
         self.ui.folksonomy_tags.setChecked(self.config.setting["folksonomy_tags"])
@@ -68,6 +70,7 @@
 
     def save(self):
         self.config.setting["translate_artist_names"] = self.ui.translate_artist_names.isChecked()
+        self.config.setting["convert_typographic_punctuation"] = self.ui.convert_typographic_punctuation.isChecked()
         self.config.setting["release_ars"] = self.ui.release_ars.isChecked()
         self.config.setting["track_ars"] = self.ui.track_ars.isChecked()
         self.config.setting["folksonomy_tags"] = self.ui.folksonomy_tags.isChecked()
diff -rU3 picard-0.12.1/picard/ui/ui_options_metadata.py picard-0.12.1-unsmartquote/picard/ui/ui_options_metadata.py
--- picard-0.12.1/picard/ui/ui_options_metadata.py	2009-11-01 10:10:27.000000000 -0800
+++ picard-0.12.1-unsmartquote/picard/ui/ui_options_metadata.py	2011-01-01 21:04:03.000000000 -0800
@@ -2,110 +2,100 @@
 
 # Form implementation generated from reading ui file 'ui/options_metadata.ui'
 #
-# Created: Wed Apr  2 08:48:11 2008
-#      by: PyQt4 UI code generator 4.3
+# Created: Sat Jan  1 21:04:03 2011
+#      by: PyQt4 UI code generator 4.8.1
 #
 # WARNING! All changes made in this file will be lost!
 
 from PyQt4 import QtCore, QtGui
 
+try:
+    _fromUtf8 = QtCore.QString.fromUtf8
+except AttributeError:
+    _fromUtf8 = lambda s: s
+
 class Ui_MetadataOptionsPage(object):
     def setupUi(self, MetadataOptionsPage):
-        MetadataOptionsPage.setObjectName("MetadataOptionsPage")
-        MetadataOptionsPage.resize(QtCore.QSize(QtCore.QRect(0,0,387,355).size()).expandedTo(MetadataOptionsPage.minimumSizeHint()))
-
+        MetadataOptionsPage.setObjectName(_fromUtf8("MetadataOptionsPage"))
+        MetadataOptionsPage.resize(423, 360)
         self.vboxlayout = QtGui.QVBoxLayout(MetadataOptionsPage)
-        self.vboxlayout.setObjectName("vboxlayout")
-
+        self.vboxlayout.setObjectName(_fromUtf8("vboxlayout"))
         self.rename_files = QtGui.QGroupBox(MetadataOptionsPage)
-        self.rename_files.setObjectName("rename_files")
-
+        self.rename_files.setObjectName(_fromUtf8("rename_files"))
         self.gridlayout = QtGui.QGridLayout(self.rename_files)
-        self.gridlayout.setObjectName("gridlayout")
-
+        self.gridlayout.setObjectName(_fromUtf8("gridlayout"))
         self.translate_artist_names = QtGui.QCheckBox(self.rename_files)
-        self.translate_artist_names.setObjectName("translate_artist_names")
-        self.gridlayout.addWidget(self.translate_artist_names,0,0,1,2)
-
+        self.translate_artist_names.setObjectName(_fromUtf8("translate_artist_names"))
+        self.gridlayout.addWidget(self.translate_artist_names, 0, 0, 1, 2)
         self.release_ars = QtGui.QCheckBox(self.rename_files)
-        self.release_ars.setObjectName("release_ars")
-        self.gridlayout.addWidget(self.release_ars,1,0,1,2)
-
+        self.release_ars.setObjectName(_fromUtf8("release_ars"))
+        self.gridlayout.addWidget(self.release_ars, 2, 0, 1, 2)
         self.track_ars = QtGui.QCheckBox(self.rename_files)
-        self.track_ars.setObjectName("track_ars")
-        self.gridlayout.addWidget(self.track_ars,2,0,1,2)
-
+        self.track_ars.setObjectName(_fromUtf8("track_ars"))
+        self.gridlayout.addWidget(self.track_ars, 3, 0, 1, 2)
         self.folksonomy_tags = QtGui.QCheckBox(self.rename_files)
-        self.folksonomy_tags.setObjectName("folksonomy_tags")
-        self.gridlayout.addWidget(self.folksonomy_tags,3,0,1,2)
-
+        self.folksonomy_tags.setObjectName(_fromUtf8("folksonomy_tags"))
+        self.gridlayout.addWidget(self.folksonomy_tags, 4, 0, 1, 2)
         self.label = QtGui.QLabel(self.rename_files)
-        self.label.setObjectName("label")
-        self.gridlayout.addWidget(self.label,4,0,1,2)
-
+        self.label.setObjectName(_fromUtf8("label"))
+        self.gridlayout.addWidget(self.label, 5, 0, 1, 2)
         self.preferred_release_country = QtGui.QComboBox(self.rename_files)
-        self.preferred_release_country.setObjectName("preferred_release_country")
-        self.gridlayout.addWidget(self.preferred_release_country,5,0,1,1)
-
-        spacerItem = QtGui.QSpacerItem(161,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
-        self.gridlayout.addItem(spacerItem,5,1,1,1)
+        self.preferred_release_country.setObjectName(_fromUtf8("preferred_release_country"))
+        self.gridlayout.addWidget(self.preferred_release_country, 6, 0, 1, 1)
+        spacerItem = QtGui.QSpacerItem(161, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridlayout.addItem(spacerItem, 6, 1, 1, 1)
+        self.convert_typographic_punctuation = QtGui.QCheckBox(self.rename_files)
+        self.convert_typographic_punctuation.setObjectName(_fromUtf8("convert_typographic_punctuation"))
+        self.gridlayout.addWidget(self.convert_typographic_punctuation, 1, 0, 1, 1)
         self.vboxlayout.addWidget(self.rename_files)
-
         self.rename_files_2 = QtGui.QGroupBox(MetadataOptionsPage)
-        self.rename_files_2.setObjectName("rename_files_2")
-
+        self.rename_files_2.setObjectName(_fromUtf8("rename_files_2"))
         self.gridlayout1 = QtGui.QGridLayout(self.rename_files_2)
         self.gridlayout1.setMargin(9)
         self.gridlayout1.setSpacing(2)
-        self.gridlayout1.setObjectName("gridlayout1")
-
+        self.gridlayout1.setObjectName(_fromUtf8("gridlayout1"))
         self.label_3 = QtGui.QLabel(self.rename_files_2)
-        self.label_3.setObjectName("label_3")
-        self.gridlayout1.addWidget(self.label_3,0,0,1,2)
-
+        self.label_3.setObjectName(_fromUtf8("label_3"))
+        self.gridlayout1.addWidget(self.label_3, 0, 0, 1, 2)
         self.label_4 = QtGui.QLabel(self.rename_files_2)
-        self.label_4.setObjectName("label_4")
-        self.gridlayout1.addWidget(self.label_4,2,0,1,2)
-
+        self.label_4.setObjectName(_fromUtf8("label_4"))
+        self.gridlayout1.addWidget(self.label_4, 2, 0, 1, 2)
         self.nat_name = QtGui.QLineEdit(self.rename_files_2)
-        self.nat_name.setObjectName("nat_name")
-        self.gridlayout1.addWidget(self.nat_name,3,0,1,1)
-
+        self.nat_name.setObjectName(_fromUtf8("nat_name"))
+        self.gridlayout1.addWidget(self.nat_name, 3, 0, 1, 1)
         self.nat_name_default = QtGui.QPushButton(self.rename_files_2)
-        self.nat_name_default.setObjectName("nat_name_default")
-        self.gridlayout1.addWidget(self.nat_name_default,3,1,1,1)
-
+        self.nat_name_default.setObjectName(_fromUtf8("nat_name_default"))
+        self.gridlayout1.addWidget(self.nat_name_default, 3, 1, 1, 1)
         self.va_name_default = QtGui.QPushButton(self.rename_files_2)
-        self.va_name_default.setObjectName("va_name_default")
-        self.gridlayout1.addWidget(self.va_name_default,1,1,1,1)
-
+        self.va_name_default.setObjectName(_fromUtf8("va_name_default"))
+        self.gridlayout1.addWidget(self.va_name_default, 1, 1, 1, 1)
         self.va_name = QtGui.QLineEdit(self.rename_files_2)
-        self.va_name.setObjectName("va_name")
-        self.gridlayout1.addWidget(self.va_name,1,0,1,1)
+        self.va_name.setObjectName(_fromUtf8("va_name"))
+        self.gridlayout1.addWidget(self.va_name, 1, 0, 1, 1)
         self.vboxlayout.addWidget(self.rename_files_2)
-
-        spacerItem1 = QtGui.QSpacerItem(261,16,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
+        spacerItem1 = QtGui.QSpacerItem(261, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         self.vboxlayout.addItem(spacerItem1)
         self.label_3.setBuddy(self.va_name_default)
         self.label_4.setBuddy(self.nat_name_default)
 
         self.retranslateUi(MetadataOptionsPage)
         QtCore.QMetaObject.connectSlotsByName(MetadataOptionsPage)
-        MetadataOptionsPage.setTabOrder(self.translate_artist_names,self.va_name)
-        MetadataOptionsPage.setTabOrder(self.va_name,self.va_name_default)
-        MetadataOptionsPage.setTabOrder(self.va_name_default,self.nat_name)
-        MetadataOptionsPage.setTabOrder(self.nat_name,self.nat_name_default)
+        MetadataOptionsPage.setTabOrder(self.translate_artist_names, self.va_name)
+        MetadataOptionsPage.setTabOrder(self.va_name, self.va_name_default)
+        MetadataOptionsPage.setTabOrder(self.va_name_default, self.nat_name)
+        MetadataOptionsPage.setTabOrder(self.nat_name, self.nat_name_default)
 
     def retranslateUi(self, MetadataOptionsPage):
-        self.rename_files.setTitle(_("Metadata"))
-        self.translate_artist_names.setText(_("Translate foreign artist names to English where possible"))
-        self.release_ars.setText(_("Use release relationships"))
-        self.track_ars.setText(_("Use track relationships"))
-        self.folksonomy_tags.setText(_("Use folksonomy tags as genre"))
-        self.label.setText(_("Preferred release country:"))
-        self.rename_files_2.setTitle(_("Custom Fields"))
-        self.label_3.setText(_("Various artists:"))
-        self.label_4.setText(_("Non-album tracks:"))
-        self.nat_name_default.setText(_("Default"))
-        self.va_name_default.setText(_("Default"))
+        self.rename_files.setTitle(QtGui.QApplication.translate("MetadataOptionsPage", "Metadata", None, QtGui.QApplication.UnicodeUTF8))
+        self.translate_artist_names.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Translate foreign artist names to English where possible", None, QtGui.QApplication.UnicodeUTF8))
+        self.release_ars.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Use release relationships", None, QtGui.QApplication.UnicodeUTF8))
+        self.track_ars.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Use track relationships", None, QtGui.QApplication.UnicodeUTF8))
+        self.folksonomy_tags.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Use folksonomy tags as genre", None, QtGui.QApplication.UnicodeUTF8))
+        self.label.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Preferred release country:", None, QtGui.QApplication.UnicodeUTF8))
+        self.convert_typographic_punctuation.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Convert typographic punctuation into searchable ASCII", None, QtGui.QApplication.UnicodeUTF8))
+        self.rename_files_2.setTitle(QtGui.QApplication.translate("MetadataOptionsPage", "Custom Fields", None, QtGui.QApplication.UnicodeUTF8))
+        self.label_3.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Various artists:", None, QtGui.QApplication.UnicodeUTF8))
+        self.label_4.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Non-album tracks:", None, QtGui.QApplication.UnicodeUTF8))
+        self.nat_name_default.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Default", None, QtGui.QApplication.UnicodeUTF8))
+        self.va_name_default.setText(QtGui.QApplication.translate("MetadataOptionsPage", "Default", None, QtGui.QApplication.UnicodeUTF8))
 
diff -rU3 picard-0.12.1/ui/options_metadata.ui picard-0.12.1-unsmartquote/ui/options_metadata.ui
--- picard-0.12.1/ui/options_metadata.ui	2009-11-01 10:10:27.000000000 -0800
+++ picard-0.12.1-unsmartquote/ui/options_metadata.ui	2011-01-01 21:01:11.000000000 -0800
@@ -1,65 +1,66 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>MetadataOptionsPage</class>
- <widget class="QWidget" name="MetadataOptionsPage" >
-  <property name="geometry" >
+ <widget class="QWidget" name="MetadataOptionsPage">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>387</width>
-    <height>355</height>
+    <width>423</width>
+    <height>360</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout">
    <item>
-    <widget class="QGroupBox" name="rename_files" >
-     <property name="title" >
+    <widget class="QGroupBox" name="rename_files">
+     <property name="title">
       <string>Metadata</string>
      </property>
-     <layout class="QGridLayout" >
-      <item row="0" column="0" colspan="2" >
-       <widget class="QCheckBox" name="translate_artist_names" >
-        <property name="text" >
+     <layout class="QGridLayout">
+      <item row="0" column="0" colspan="2">
+       <widget class="QCheckBox" name="translate_artist_names">
+        <property name="text">
          <string>Translate foreign artist names to English where possible</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" colspan="2" >
-       <widget class="QCheckBox" name="release_ars" >
-        <property name="text" >
+      <item row="2" column="0" colspan="2">
+       <widget class="QCheckBox" name="release_ars">
+        <property name="text">
          <string>Use release relationships</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" colspan="2" >
-       <widget class="QCheckBox" name="track_ars" >
-        <property name="text" >
+      <item row="3" column="0" colspan="2">
+       <widget class="QCheckBox" name="track_ars">
+        <property name="text">
          <string>Use track relationships</string>
         </property>
        </widget>
       </item>
-      <item row="3" column="0" colspan="2" >
-       <widget class="QCheckBox" name="folksonomy_tags" >
-        <property name="text" >
+      <item row="4" column="0" colspan="2">
+       <widget class="QCheckBox" name="folksonomy_tags">
+        <property name="text">
          <string>Use folksonomy tags as genre</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0" colspan="2" >
-       <widget class="QLabel" name="label" >
-        <property name="text" >
+      <item row="5" column="0" colspan="2">
+       <widget class="QLabel" name="label">
+        <property name="text">
          <string>Preferred release country:</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0" >
-       <widget class="QComboBox" name="preferred_release_country" />
+      <item row="6" column="0">
+       <widget class="QComboBox" name="preferred_release_country"/>
       </item>
-      <item row="5" column="1" >
+      <item row="6" column="1">
        <spacer>
-        <property name="orientation" >
+        <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
-        <property name="sizeHint" >
+        <property name="sizeHint" stdset="0">
          <size>
           <width>161</width>
           <height>20</height>
@@ -67,82 +68,77 @@
         </property>
        </spacer>
       </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="convert_typographic_punctuation">
+        <property name="text">
+         <string>Convert typographic punctuation into searchable ASCII</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="rename_files_2" >
-     <property name="title" >
+    <widget class="QGroupBox" name="rename_files_2">
+     <property name="title">
       <string>Custom Fields</string>
      </property>
-     <layout class="QGridLayout" >
-      <property name="leftMargin" >
+     <layout class="QGridLayout">
+      <property name="margin">
        <number>9</number>
       </property>
-      <property name="topMargin" >
-       <number>9</number>
-      </property>
-      <property name="rightMargin" >
-       <number>9</number>
-      </property>
-      <property name="bottomMargin" >
-       <number>9</number>
-      </property>
-      <property name="horizontalSpacing" >
-       <number>2</number>
-      </property>
-      <property name="verticalSpacing" >
+      <property name="spacing">
        <number>2</number>
       </property>
-      <item row="0" column="0" colspan="2" >
-       <widget class="QLabel" name="label_3" >
-        <property name="text" >
+      <item row="0" column="0" colspan="2">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
          <string>Various artists:</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>va_name_default</cstring>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" colspan="2" >
-       <widget class="QLabel" name="label_4" >
-        <property name="text" >
+      <item row="2" column="0" colspan="2">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
          <string>Non-album tracks:</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>nat_name_default</cstring>
         </property>
        </widget>
       </item>
-      <item row="3" column="0" >
-       <widget class="QLineEdit" name="nat_name" />
+      <item row="3" column="0">
+       <widget class="QLineEdit" name="nat_name"/>
       </item>
-      <item row="3" column="1" >
-       <widget class="QPushButton" name="nat_name_default" >
-        <property name="text" >
+      <item row="3" column="1">
+       <widget class="QPushButton" name="nat_name_default">
+        <property name="text">
          <string>Default</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QPushButton" name="va_name_default" >
-        <property name="text" >
+      <item row="1" column="1">
+       <widget class="QPushButton" name="va_name_default">
+        <property name="text">
          <string>Default</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLineEdit" name="va_name" />
+      <item row="1" column="0">
+       <widget class="QLineEdit" name="va_name"/>
       </item>
      </layout>
     </widget>
    </item>
    <item>
     <spacer>
-     <property name="orientation" >
+     <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
-     <property name="sizeHint" >
+     <property name="sizeHint" stdset="0">
       <size>
        <width>261</width>
        <height>16</height>