forked from openlp/openlp
Unicode support for theme XML
This commit is contained in:
parent
b13f9eb74f
commit
b7ec09cf87
@ -52,9 +52,10 @@ def translate(context, text, comment=None):
|
|||||||
|
|
||||||
def get_text_file_string(text_file):
|
def get_text_file_string(text_file):
|
||||||
"""
|
"""
|
||||||
Open a file and return the contents of the file. If the supplied file name
|
Open a file and return its content as unicode string. If the supplied file
|
||||||
is not a file then the function returns False. If there is an error
|
name is not a file then the function returns False. If there is an error
|
||||||
loading the file then the function will return None.
|
loading the file or the content can't be decoded then the function will
|
||||||
|
return None.
|
||||||
|
|
||||||
``textfile``
|
``textfile``
|
||||||
The name of the file.
|
The name of the file.
|
||||||
@ -65,8 +66,9 @@ def get_text_file_string(text_file):
|
|||||||
content_string = None
|
content_string = None
|
||||||
try:
|
try:
|
||||||
file_handle = open(text_file, u'r')
|
file_handle = open(text_file, u'r')
|
||||||
content_string = file_handle.read()
|
content = file_handle.read()
|
||||||
except IOError:
|
content_string = content.decode(u'utf-8')
|
||||||
|
except (IOError, UnicodeError):
|
||||||
log.exception(u'Failed to open text file %s' % text_file)
|
log.exception(u'Failed to open text file %s' % text_file)
|
||||||
finally:
|
finally:
|
||||||
if file_handle:
|
if file_handle:
|
||||||
|
@ -334,13 +334,13 @@ class ThemeXML(object):
|
|||||||
Pull out the XML string.
|
Pull out the XML string.
|
||||||
"""
|
"""
|
||||||
# Print our newly created XML
|
# Print our newly created XML
|
||||||
return self.theme_xml.toxml()
|
return self.theme_xml.toxml(u'utf-8').decode(u'utf-8')
|
||||||
|
|
||||||
def extract_formatted_xml(self):
|
def extract_formatted_xml(self):
|
||||||
"""
|
"""
|
||||||
Pull out the XML string formatted for human consumption
|
Pull out the XML string formatted for human consumption
|
||||||
"""
|
"""
|
||||||
return self.theme_xml.toprettyxml(indent=u' ', newl=u'\n')
|
return self.theme_xml.toprettyxml(indent=u' ', newl=u'\n', encoding=u'utf-8')
|
||||||
|
|
||||||
def parse(self, xml):
|
def parse(self, xml):
|
||||||
"""
|
"""
|
||||||
@ -365,11 +365,12 @@ class ThemeXML(object):
|
|||||||
``xml``
|
``xml``
|
||||||
The XML string to parse.
|
The XML string to parse.
|
||||||
"""
|
"""
|
||||||
theme_xml = ElementTree(element=XML(xml))
|
theme_xml = ElementTree(element=XML(xml.encode(u'ascii', u'xmlcharrefreplace')))
|
||||||
xml_iter = theme_xml.getiterator()
|
xml_iter = theme_xml.getiterator()
|
||||||
master = u''
|
master = u''
|
||||||
for element in xml_iter:
|
for element in xml_iter:
|
||||||
element.text = unicode(element.text).decode('unicode-escape')
|
if not isinstance(element.text, unicode):
|
||||||
|
element.text = unicode(str(element.text), u'utf-8')
|
||||||
if element.getchildren():
|
if element.getchildren():
|
||||||
master = element.tag + u'_'
|
master = element.tag + u'_'
|
||||||
else:
|
else:
|
||||||
|
@ -175,7 +175,7 @@ class Theme(object):
|
|||||||
``xml``
|
``xml``
|
||||||
The data to apply to the theme
|
The data to apply to the theme
|
||||||
"""
|
"""
|
||||||
root = ElementTree(element=XML(xml))
|
root = ElementTree(element=XML(xml.encode(u'ascii', u'xmlcharrefreplace')))
|
||||||
xml_iter = root.getiterator()
|
xml_iter = root.getiterator()
|
||||||
for element in xml_iter:
|
for element in xml_iter:
|
||||||
delphi_color_change = False
|
delphi_color_change = False
|
||||||
|
@ -356,8 +356,6 @@ class Ui_MainWindow(object):
|
|||||||
"""
|
"""
|
||||||
MainWindow.mainTitle = translate(u'MainWindow', u'OpenLP 2.0')
|
MainWindow.mainTitle = translate(u'MainWindow', u'OpenLP 2.0')
|
||||||
MainWindow.language = translate(u'MainWindow', u'English')
|
MainWindow.language = translate(u'MainWindow', u'English')
|
||||||
MainWindow.defaultThemeText = translate(u'MainWindow',
|
|
||||||
u'Default Theme: ')
|
|
||||||
MainWindow.setWindowTitle(MainWindow.mainTitle)
|
MainWindow.setWindowTitle(MainWindow.mainTitle)
|
||||||
self.FileMenu.setTitle(translate(u'MainWindow', u'&File'))
|
self.FileMenu.setTitle(translate(u'MainWindow', u'&File'))
|
||||||
self.FileImportMenu.setTitle(translate(u'MainWindow', u'&Import'))
|
self.FileImportMenu.setTitle(translate(u'MainWindow', u'&Import'))
|
||||||
@ -774,7 +772,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def defaultThemeChanged(self, theme):
|
def defaultThemeChanged(self, theme):
|
||||||
self.DefaultThemeLabel.setText(
|
self.DefaultThemeLabel.setText(
|
||||||
u'%s %s' % (self.defaultThemeText, theme))
|
unicode(translate('MainWindow', 'Default Theme: %s')) % theme)
|
||||||
|
|
||||||
def toggleMediaManager(self, visible):
|
def toggleMediaManager(self, visible):
|
||||||
if self.MediaManagerDock.isVisible() != visible:
|
if self.MediaManagerDock.isVisible() != visible:
|
||||||
|
@ -418,15 +418,21 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
theme_dir = os.path.join(dir, names[0])
|
theme_dir = os.path.join(dir, names[0])
|
||||||
if not os.path.exists(theme_dir):
|
if not os.path.exists(theme_dir):
|
||||||
os.mkdir(os.path.join(dir, names[0]))
|
os.mkdir(os.path.join(dir, names[0]))
|
||||||
xml_data = zip.read(file)
|
|
||||||
if os.path.splitext(ucsfile)[1].lower() in [u'.xml']:
|
if os.path.splitext(ucsfile)[1].lower() in [u'.xml']:
|
||||||
|
xml_data = zip.read(file)
|
||||||
|
try:
|
||||||
|
xml_data = xml_data.decode(u'utf-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
log.exception(u'Theme XML is not UTF-8 '
|
||||||
|
'encoded.')
|
||||||
|
break;
|
||||||
if self.checkVersion1(xml_data):
|
if self.checkVersion1(xml_data):
|
||||||
# upgrade theme xml
|
# upgrade theme xml
|
||||||
filexml = self.migrateVersion122(xml_data)
|
filexml = self.migrateVersion122(xml_data)
|
||||||
else:
|
else:
|
||||||
filexml = xml_data
|
filexml = xml_data
|
||||||
outfile = open(fullpath, u'w')
|
outfile = open(fullpath, u'w')
|
||||||
outfile.write(filexml)
|
outfile.write(filexml.encode(u'utf-8'))
|
||||||
else:
|
else:
|
||||||
outfile = open(fullpath, u'wb')
|
outfile = open(fullpath, u'wb')
|
||||||
outfile.write(zip.read(file))
|
outfile.write(zip.read(file))
|
||||||
@ -457,7 +463,7 @@ class ThemeManager(QtGui.QWidget):
|
|||||||
Theme XML to check the version of
|
Theme XML to check the version of
|
||||||
"""
|
"""
|
||||||
log.debug(u'checkVersion1 ')
|
log.debug(u'checkVersion1 ')
|
||||||
theme = xmlfile
|
theme = xmlfile.encode(u'ascii', u'xmlcharrefreplace')
|
||||||
tree = ElementTree(element=XML(theme)).getroot()
|
tree = ElementTree(element=XML(theme)).getroot()
|
||||||
if tree.find(u'BackgroundType') is None:
|
if tree.find(u'BackgroundType') is None:
|
||||||
return False
|
return False
|
||||||
|
Loading…
Reference in New Issue
Block a user