forked from openlp/openlp
RAW code for OpenLyrics import with formatting tags
This commit is contained in:
parent
8a11e790e5
commit
14e94f8758
@ -127,6 +127,9 @@ class AppLocation(object):
|
|||||||
CacheDir = 6
|
CacheDir = 6
|
||||||
LanguageDir = 7
|
LanguageDir = 7
|
||||||
|
|
||||||
|
# Base path where data/config/cache dir is located
|
||||||
|
BaseDir = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_directory(dir_type=1):
|
def get_directory(dir_type=1):
|
||||||
"""
|
"""
|
||||||
@ -152,6 +155,8 @@ class AppLocation(object):
|
|||||||
os.path.abspath(os.path.split(sys.argv[0])[0]),
|
os.path.abspath(os.path.split(sys.argv[0])[0]),
|
||||||
_get_os_dir_path(dir_type))
|
_get_os_dir_path(dir_type))
|
||||||
return os.path.join(app_path, u'i18n')
|
return os.path.join(app_path, u'i18n')
|
||||||
|
elif dir_type == AppLocation.DataDir and AppLocation.BaseDir:
|
||||||
|
return os.path.join(AppLocation.BaseDir, 'data')
|
||||||
else:
|
else:
|
||||||
return _get_os_dir_path(dir_type)
|
return _get_os_dir_path(dir_type)
|
||||||
|
|
||||||
|
@ -73,6 +73,9 @@ from openlp.core.utils import get_application_version
|
|||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
NAMESPACE = u'http://openlyrics.info/namespace/2009/song'
|
||||||
|
NSMAP = '{' + NAMESPACE + '}' + '%s'
|
||||||
|
|
||||||
|
|
||||||
class SongXML(object):
|
class SongXML(object):
|
||||||
"""
|
"""
|
||||||
@ -267,7 +270,7 @@ class OpenLyrics(object):
|
|||||||
sxml = SongXML()
|
sxml = SongXML()
|
||||||
song_xml = objectify.fromstring(u'<song/>')
|
song_xml = objectify.fromstring(u'<song/>')
|
||||||
# Append the necessary meta data to the song.
|
# Append the necessary meta data to the song.
|
||||||
song_xml.set(u'xmlns', u'http://openlyrics.info/namespace/2009/song')
|
song_xml.set(u'xmlns', NAMESPACE)
|
||||||
song_xml.set(u'version', OpenLyrics.IMPLEMENTED_VERSION)
|
song_xml.set(u'version', OpenLyrics.IMPLEMENTED_VERSION)
|
||||||
application_name = u'OpenLP ' + get_application_version()[u'version']
|
application_name = u'OpenLP ' + get_application_version()[u'version']
|
||||||
song_xml.set(u'createdIn', application_name)
|
song_xml.set(u'createdIn', application_name)
|
||||||
@ -371,7 +374,8 @@ class OpenLyrics(object):
|
|||||||
properties = song_xml.properties
|
properties = song_xml.properties
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
if float(song_xml.get(u'version')) > 0.6:
|
# Formatting tags are new in OpenLyrics 0.8
|
||||||
|
if float(song_xml.get(u'version')) > 0.7:
|
||||||
self._process_formatting_tags(song_xml, parse_and_not_save)
|
self._process_formatting_tags(song_xml, parse_and_not_save)
|
||||||
if parse_and_not_save:
|
if parse_and_not_save:
|
||||||
return
|
return
|
||||||
@ -558,6 +562,52 @@ class OpenLyrics(object):
|
|||||||
FormattingTags.add_html_tags([tag for tag in found_tags
|
FormattingTags.add_html_tags([tag for tag in found_tags
|
||||||
if tag[u'start tag'] not in existing_tag_ids], True)
|
if tag[u'start tag'] not in existing_tag_ids], True)
|
||||||
|
|
||||||
|
def _process_lyrics_mixed_content(self, element):
|
||||||
|
text = u''
|
||||||
|
|
||||||
|
#print '1:', repr(text)
|
||||||
|
# Skip <chord> element.
|
||||||
|
#if element.tag == u'chord' and element.tail:
|
||||||
|
## Append tail text at chord element.
|
||||||
|
#text += element.tail
|
||||||
|
|
||||||
|
# Start formatting tag.
|
||||||
|
#print NSMAP % 'tag'
|
||||||
|
#print repr(element.tag)
|
||||||
|
if element.tag == NSMAP % 'tag':
|
||||||
|
text += u'{%s}' % element.get(u'name')
|
||||||
|
print '1:', repr(text)
|
||||||
|
|
||||||
|
# Append text from element
|
||||||
|
if element.text:
|
||||||
|
text += element.text
|
||||||
|
print '2:', repr(text)
|
||||||
|
|
||||||
|
#print '3:', repr(text)
|
||||||
|
# Process nested formatting tags
|
||||||
|
for child in element:
|
||||||
|
# Use recursion since nested formatting tags are allowed.
|
||||||
|
text += self._process_lyrics_mixed_content(child)
|
||||||
|
|
||||||
|
# Append text from tail and add formatting end tag.
|
||||||
|
if element.tag == NSMAP % 'tag':
|
||||||
|
text += u'{/%s}' % element.get(u'name')
|
||||||
|
print '3:', repr(text)
|
||||||
|
|
||||||
|
# Append text from tail
|
||||||
|
if element.tail:
|
||||||
|
text += element.tail
|
||||||
|
print '4:', repr(text)
|
||||||
|
|
||||||
|
return text
|
||||||
|
|
||||||
|
def _process_lyrics_line(self, line):
|
||||||
|
# Convert lxml.objectify to lxml.etree representation
|
||||||
|
line = etree.tostring(line)
|
||||||
|
element = etree.XML(line)
|
||||||
|
print element.nsmap
|
||||||
|
return self._process_lyrics_mixed_content(element)
|
||||||
|
|
||||||
def _process_lyrics(self, properties, song_xml, song_obj):
|
def _process_lyrics(self, properties, song_xml, song_obj):
|
||||||
"""
|
"""
|
||||||
Processes the verses and search_lyrics for the song.
|
Processes the verses and search_lyrics for the song.
|
||||||
@ -586,7 +636,11 @@ class OpenLyrics(object):
|
|||||||
for line in lines.line:
|
for line in lines.line:
|
||||||
if text:
|
if text:
|
||||||
text += u'\n'
|
text += u'\n'
|
||||||
text += u''.join(map(unicode, line.itertext()))
|
text += self._process_lyrics_line(line)
|
||||||
|
#AAA = u''.join(map(unicode, line.itertext()))
|
||||||
|
#print 'AAA:', repr(AAA)
|
||||||
|
#text += AAA
|
||||||
|
#print repr(text)
|
||||||
# Add a virtual split to the verse text.
|
# Add a virtual split to the verse text.
|
||||||
if lines.get(u'break') is not None:
|
if lines.get(u'break') is not None:
|
||||||
text += u'\n[---]'
|
text += u'\n[---]'
|
||||||
|
Loading…
Reference in New Issue
Block a user