Removed opensong code from songxml

This commit is contained in:
Martin Thompson 2010-07-07 21:17:16 +01:00
parent b3559a993d
commit 860d3e2923
1 changed files with 0 additions and 203 deletions

View File

@ -60,175 +60,6 @@ class SongFeatureError(SongException):
# TODO: Song: Import ChangingSong
# TODO: Song: Export ChangingSong
_BLANK_OPENSONG_XML = \
'''<?xml version="1.0" encoding="UTF-8"?>
<song>
<title></title>
<author></author>
<copyright></copyright>
<presentation></presentation>
<ccli></ccli>
<lyrics></lyrics>
<theme></theme>
<alttheme></alttheme>
</song>
'''
class _OpenSong(object):
"""
Class for import of OpenSong
"""
def __init__(self, xmlContent = None):
"""
Initialize from given xml content
"""
self._set_from_xml(_BLANK_OPENSONG_XML, 'song')
if xmlContent:
self._set_from_xml(xmlContent, 'song')
def _set_from_xml(self, xml, root_tag):
"""
Set song properties from given xml content.
``xml``
Formatted xml tags and values.
``root_tag``
The root tag of the xml.
"""
root = ElementTree(element=XML(xml))
xml_iter = root.getiterator()
for element in xml_iter:
if element.tag != root_tag:
text = element.text
if text is None:
val = text
elif isinstance(text, basestring):
# Strings need special handling to sort the colours out
if text[0] == u'$':
# This might be a hex number, let's try to convert it.
try:
val = int(text[1:], 16)
except ValueError:
pass
else:
# Let's just see if it's a integer.
try:
val = int(text)
except ValueError:
# Ok, it seems to be a string.
val = text
if hasattr(self, u'post_tag_hook'):
(element.tag, val) = \
self.post_tag_hook(element.tag, val)
setattr(self, element.tag, val)
def __str__(self):
"""
Return string with all public attributes
The string is formatted with one attribute per line
If the string is split on newline then the length of the
list is equal to the number of attributes
"""
attributes = []
for attrib in dir(self):
if not attrib.startswith(u'_'):
attributes.append(
u'%30s : %s' % (attrib, getattr(self, attrib)))
return u'\n'.join(attributes)
def _get_as_string(self):
"""
Return one string with all public attributes
"""
result = u''
for attrib in dir(self):
if not attrib.startswith(u'_'):
result += u'_%s_' % getattr(self, attrib)
return result
def get_author_list(self):
"""Convert author field to an authorlist
in OpenSong an author list may be separated by '/'
return as a string
"""
if self.author:
list = self.author.split(u' and ')
res = [item.strip() for item in list]
return u', '.join(res)
def get_category_array(self):
"""Convert theme and alttheme into category_array
return as a string
"""
res = []
if self.theme:
res.append(self.theme)
if self.alttheme:
res.append(self.alttheme)
return u', u'.join(res)
def _reorder_verse(self, tag, tmpVerse):
"""
Reorder the verse in case of first char is a number
tag -- the tag of this verse / verse group
tmpVerse -- list of strings
"""
res = []
for digit in '1234567890 ':
tagPending = True
for line in tmpVerse:
if line.startswith(digit):
if tagPending:
tagPending = False
tagChar = tag.strip(u'[]').lower()
if 'v' == tagChar:
newtag = "Verse"
elif 'c' == tagChar:
newtag = "Chorus"
elif 'b' == tagChar:
newtag = "Bridge"
elif 'p' == tagChar:
newtag = "Pre-chorus"
else:
newtag = tagChar
tagString = (u'# %s %s' % (newtag, digit)).rstrip()
res.append(tagString)
res.append(line[1:])
if (len(line) == 0) and (not tagPending):
res.append(line)
return res
def get_lyrics(self):
"""
Convert the lyrics to openlp lyrics format
return as list of strings
"""
lyrics = self.lyrics.split(u'\n')
tmpVerse = []
finalLyrics = []
tag = ""
for lyric in lyrics:
line = lyric.rstrip()
if not line.startswith(u'.'):
# drop all chords
tmpVerse.append(line)
if line:
if line.startswith(u'['):
tag = line
else:
reorderedVerse = self._reorder_verse(tag, tmpVerse)
finalLyrics.extend(reorderedVerse)
tag = ""
tmpVerse = []
# catch up final verse
reorderedVerse = self._reorder_verse(tag, tmpVerse)
finalLyrics.extend(reorderedVerse)
return finalLyrics
class Song(object):
"""Handling song properties and methods
@ -307,40 +138,6 @@ class Song(object):
self.set_lyrics(u'')
return
def from_opensong_buffer(self, xmlcontent):
"""Initialize from buffer(string) of xml lines in opensong format"""
self._reset()
opensong = _OpenSong(xmlcontent)
if opensong.title:
self.set_title(opensong.title)
if opensong.copyright:
self.set_copyright(opensong.copyright)
if opensong.presentation:
self.set_verse_order(opensong.presentation)
if opensong.ccli:
self.set_song_cclino(opensong.ccli)
self.set_author_list(opensong.get_author_list())
self.set_category_array(opensong.get_category_array())
self.set_lyrics(opensong.get_lyrics())
def from_opensong_file(self, xmlfilename):
"""
Initialize from file containing xml
xmlfilename -- path to xml file
"""
osfile = None
try:
osfile = open(xmlfilename, 'r')
list = [line for line in osfile]
osfile.close()
xml = "".join(list)
self.from_opensong_buffer(xml)
except IOError:
log.exception(u'Failed to load opensong xml file')
finally:
if osfile:
osfile.close()
def _remove_punctuation(self, title):
"""Remove the puntuation chars from title