forked from openlp/openlp
import tags from xml (part 1)
This commit is contained in:
parent
65630c6853
commit
f3691516fd
@ -27,6 +27,9 @@
|
||||
"""
|
||||
Provide HTML Tag management and Formatting Tag access class
|
||||
"""
|
||||
import cPickle
|
||||
|
||||
from PyQt4 import QtCore
|
||||
|
||||
from openlp.core.lib import translate
|
||||
|
||||
@ -136,13 +139,30 @@ class FormattingTags(object):
|
||||
FormattingTags.add_html_tags(temporary_tags)
|
||||
|
||||
@staticmethod
|
||||
def add_html_tags(tags):
|
||||
def save_html_tags():
|
||||
"""
|
||||
Saves all formatting tags except protected ones.
|
||||
"""
|
||||
tags = []
|
||||
for tag in FormattingTags.get_html_tags():
|
||||
if not tag[u'protected'] and not tag[u'temporary']:
|
||||
tags.append(tag)
|
||||
# Formatting Tags were also known as display tags.
|
||||
QtCore.QSettings().setValue(u'displayTags/html_tags',
|
||||
QtCore.QVariant(cPickle.dumps(tags) if tags else u''))
|
||||
|
||||
@staticmethod
|
||||
def add_html_tags(tags, save=False):
|
||||
"""
|
||||
Add a list of tags to the list.
|
||||
|
||||
``tags``
|
||||
The list with tags to add.
|
||||
|
||||
``save``
|
||||
Defaults to ``False``. If set to ``True`` the given ``tags`` are
|
||||
saved to the config.
|
||||
|
||||
Each **tag** has to be a ``dict`` and should have the following keys:
|
||||
|
||||
* desc
|
||||
@ -170,6 +190,8 @@ class FormattingTags(object):
|
||||
displaying text containing the tag. It has to be a ``boolean``.
|
||||
"""
|
||||
FormattingTags.html_expands.extend(tags)
|
||||
if save:
|
||||
FormattingTags.save_html_tags()
|
||||
|
||||
@staticmethod
|
||||
def remove_html_tag(tag_id):
|
||||
|
@ -150,7 +150,7 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog):
|
||||
FormattingTags.remove_html_tag(self.selected)
|
||||
self.selected = -1
|
||||
self._resetTable()
|
||||
self._saveTable()
|
||||
FormattingTags.save_html_tags()
|
||||
|
||||
def onSavedPushed(self):
|
||||
"""
|
||||
@ -177,19 +177,7 @@ class FormattingTagForm(QtGui.QDialog, Ui_FormattingTagDialog):
|
||||
html[u'temporary'] = False
|
||||
self.selected = -1
|
||||
self._resetTable()
|
||||
self._saveTable()
|
||||
|
||||
def _saveTable(self):
|
||||
"""
|
||||
Saves all formatting tags except protected ones.
|
||||
"""
|
||||
tags = []
|
||||
for tag in FormattingTags.get_html_tags():
|
||||
if not tag[u'protected'] and not tag[u'temporary']:
|
||||
tags.append(tag)
|
||||
# Formatting Tags were also known as display tags.
|
||||
QtCore.QSettings().setValue(u'displayTags/html_tags',
|
||||
QtCore.QVariant(cPickle.dumps(tags) if tags else u''))
|
||||
FormattingTags.save_html_tags()
|
||||
|
||||
def _resetTable(self):
|
||||
"""
|
||||
|
@ -67,6 +67,7 @@ import re
|
||||
|
||||
from lxml import etree, objectify
|
||||
|
||||
from openlp.core.lib import FormattingTags
|
||||
from openlp.plugins.songs.lib import clean_song, VerseType
|
||||
from openlp.plugins.songs.lib.db import Author, Book, Song, Topic
|
||||
from openlp.core.utils import get_application_version
|
||||
@ -265,7 +266,9 @@ class OpenLyrics(object):
|
||||
application_name = u'OpenLP ' + get_application_version()[u'version']
|
||||
song_xml.set(u'createdIn', application_name)
|
||||
song_xml.set(u'modifiedIn', application_name)
|
||||
song_xml.set(u'modifiedDate', datetime.datetime.now().isoformat())
|
||||
# "Convert" 2011-08-27 11:49:15 to 2011-08-27T11:49:15.
|
||||
song_xml.set(u'modifiedDate',
|
||||
unicode(song.last_modified).replace(u' ', u'T'))
|
||||
properties = etree.SubElement(song_xml, u'properties')
|
||||
titles = etree.SubElement(properties, u'titles')
|
||||
self._add_text_to_element(u'title', titles, song.title)
|
||||
@ -299,6 +302,10 @@ class OpenLyrics(object):
|
||||
themes = etree.SubElement(properties, u'themes')
|
||||
for topic in song.topics:
|
||||
self._add_text_to_element(u'theme', themes, topic.name)
|
||||
# Process the formatting tags.
|
||||
format = etree.SubElement(song_xml, u'format')
|
||||
tags = etree.SubElement(format, u'tags')
|
||||
tags.set(u'application', u'OpenLP')
|
||||
# Process the song's lyrics.
|
||||
lyrics = etree.SubElement(song_xml, u'lyrics')
|
||||
verse_list = sxml.get_verses(song.lyrics)
|
||||
@ -345,25 +352,27 @@ class OpenLyrics(object):
|
||||
properties = song_xml.properties
|
||||
else:
|
||||
return None
|
||||
if float(song_xml.get(u'version')) > 0.6:
|
||||
self._process_formatting_tags(song_xml, only_process_format_tags)
|
||||
if only_process_format_tags:
|
||||
return
|
||||
song = Song()
|
||||
if not only_process_format_tags:
|
||||
# Values will be set when cleaning the song.
|
||||
song.search_lyrics = u''
|
||||
song.verse_order = u''
|
||||
song.search_title = u''
|
||||
self._process_copyright(properties, song)
|
||||
self._process_cclinumber(properties, song)
|
||||
self._process_titles(properties, song)
|
||||
# Values will be set when cleaning the song.
|
||||
song.search_lyrics = u''
|
||||
song.verse_order = u''
|
||||
song.search_title = u''
|
||||
self._process_copyright(properties, song)
|
||||
self._process_cclinumber(properties, song)
|
||||
self._process_titles(properties, song)
|
||||
# The verse order is processed with the lyrics!
|
||||
self._process_lyrics(properties, song_xml, song)
|
||||
if not only_process_format_tags:
|
||||
self._process_comments(properties, song)
|
||||
self._process_authors(properties, song)
|
||||
self._process_songbooks(properties, song)
|
||||
self._process_topics(properties, song)
|
||||
clean_song(self.manager, song)
|
||||
self.manager.save_object(song)
|
||||
return song.id
|
||||
self._process_comments(properties, song)
|
||||
self._process_authors(properties, song)
|
||||
self._process_songbooks(properties, song)
|
||||
self._process_topics(properties, song)
|
||||
clean_song(self.manager, song)
|
||||
self.manager.save_object(song)
|
||||
return song.id
|
||||
|
||||
def _add_text_to_element(self, tag, parent, text=None, label=None):
|
||||
if label:
|
||||
@ -463,6 +472,33 @@ class OpenLyrics(object):
|
||||
if hasattr(properties, u'copyright'):
|
||||
song.copyright = self._text(properties.copyright)
|
||||
|
||||
def _process_formatting_tags(self, song_xml, temporary):
|
||||
"""
|
||||
Process the formatting tags from the song and either add missing tags
|
||||
temporary or permanently to the formatting tag list.
|
||||
"""
|
||||
if not hasattr(song_xml, u'format'):
|
||||
return
|
||||
found_tags = []
|
||||
for tag in song_xml.format.tags.getchildren():
|
||||
name = tag.get(u'name')
|
||||
if name is None:
|
||||
continue
|
||||
openlp_tag = {
|
||||
u'desc': name,
|
||||
u'start tag': u'{%s}' % name[:5],
|
||||
u'end tag': u'{/%s}' % name[:5],
|
||||
u'start html': tag.open.text,
|
||||
u'end html': tag.close.text,
|
||||
u'protected': False,
|
||||
u'temporary': temporary
|
||||
}
|
||||
found_tags.append(openlp_tag)
|
||||
existing_tag_ids = [tag[u'start tag']
|
||||
for tag in FormattingTags.get_html_tags()]
|
||||
FormattingTags.add_html_tags([tag for tag in found_tags
|
||||
if tag[u'start tag'] not in existing_tag_ids], True)
|
||||
|
||||
def _process_lyrics(self, properties, song_xml, song_obj):
|
||||
"""
|
||||
Processes the verses and search_lyrics for the song.
|
||||
|
Loading…
Reference in New Issue
Block a user