forked from openlp/openlp
Start opensong importer
This commit is contained in:
parent
58f3dc1acb
commit
f709c90f0a
116
openlp/plugins/songs/lib/opensongimport.py
Normal file
116
openlp/plugins/songs/lib/opensongimport.py
Normal file
@ -0,0 +1,116 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# vim: autoindent shiftwidth=4 expandtab textwidth=80 tabstop=4 softtabstop=4
|
||||
|
||||
###############################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2010 Raoul Snyman #
|
||||
# Portions copyright (c) 2008-2010 Tim Bentley, Jonathan Corwin, Michael #
|
||||
# Gorven, Scott Guerrieri, Christian Richter, Maikel Stuivenberg, Martin #
|
||||
# Thompson, Jon Tibble, Carsten Tinggaard #
|
||||
# --------------------------------------------------------------------------- #
|
||||
# This program is free software; you can redistribute it and/or modify it #
|
||||
# under the terms of the GNU General Public License as published by the Free #
|
||||
# Software Foundation; version 2 of the License. #
|
||||
# #
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT #
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or #
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for #
|
||||
# more details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU General Public License along #
|
||||
# with this program; if not, write to the Free Software Foundation, Inc., 59 #
|
||||
# Temple Place, Suite 330, Boston, MA 02111-1307 USA #
|
||||
###############################################################################
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
# from songimport import SongImport
|
||||
|
||||
class opensongimport:
|
||||
"""
|
||||
Import songs exported from OpenSong - the format is described loosly here:
|
||||
http://www.opensong.org/d/manual/song_file_format_specification
|
||||
|
||||
However, it doesn't describe the <lyrics> section, so here's an attempt:
|
||||
|
||||
Verses can be expressed in one of 2 ways:
|
||||
<lyrics>
|
||||
[v1]List of words
|
||||
Another Line
|
||||
|
||||
[v2]Some words for the 2nd verse
|
||||
etc...
|
||||
</lyrics>
|
||||
|
||||
or:
|
||||
<lyrics>
|
||||
1List of words
|
||||
2Some words for the 2nd Verse
|
||||
|
||||
1Another Line
|
||||
2etc...
|
||||
</lyrics>
|
||||
|
||||
Either or both forms can be used in one song.
|
||||
|
||||
The [v1] labels can have either upper or loewr case Vs
|
||||
Other labels can be used also:
|
||||
C - Chorus
|
||||
B - Bridge
|
||||
|
||||
Guitar chords can be provided 'above' the lyrics (the line is preceeded by a'.') and _s can be used to signify long-drawn-out words:
|
||||
|
||||
. A7 Bm
|
||||
1 Some____ Words
|
||||
|
||||
Chords and _s are removed by this importer.
|
||||
|
||||
The verses etc. are imported and tagged appropriately.
|
||||
|
||||
The <presentation> tag is used to populate the OpenLP verse
|
||||
display order field. The Author and Copyright tags are also
|
||||
imported to the appropriate places.
|
||||
|
||||
"""
|
||||
def __init__(self, songmanager):
|
||||
"""
|
||||
Initialise the class. Requires a songmanager class which is passed
|
||||
to SongImport for writing song to disk
|
||||
"""
|
||||
self.songmanager=songmanager
|
||||
self.song = None
|
||||
|
||||
def osimport(self, filename):
|
||||
"""
|
||||
Process the OpenSong file
|
||||
"""
|
||||
self.new_song()
|
||||
f=open(filename)
|
||||
tree=objectify.parse(f)
|
||||
root=tree.getroot()
|
||||
print "Title", zroot.title
|
||||
# data storage while importing
|
||||
self.verses=[]
|
||||
|
||||
|
||||
# xxx this is common with SOF
|
||||
def new_song(self):
|
||||
"""
|
||||
A change of song. Store the old, create a new
|
||||
... but only if the last song was complete. If not, stick with it
|
||||
"""
|
||||
if self.song:
|
||||
self.finish_verse()
|
||||
if not self.song.check_complete():
|
||||
return
|
||||
self.song.finish()
|
||||
|
||||
self.song = SongImport(self.manager)
|
||||
self.skip_to_close_bracket = False
|
||||
self.is_chorus = False
|
||||
self.italics = False
|
||||
self.currentverse = u''
|
||||
|
||||
|
45
openlp/plugins/songs/lib/test.opensong
Normal file
45
openlp/plugins/songs/lib/test.opensong
Normal file
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<song>
|
||||
<title>Martins Test</title>
|
||||
<author>Martin Thompson</author>
|
||||
<copyright>2010 Martin Thompson</copyright>
|
||||
<hymn_number>1</hymn_number>
|
||||
<presentation>V1 C1 V2 C2 B1 V1</presentation>
|
||||
<ccli>Blah</ccli>
|
||||
<capo print="false"></capo>
|
||||
<key></key>
|
||||
<aka></aka>
|
||||
<key_line></key_line>
|
||||
<user1></user1>
|
||||
<user2></user2>
|
||||
<user3></user3>
|
||||
<theme></theme>
|
||||
<tempo></tempo>
|
||||
<time_sig></time_sig>
|
||||
<lyrics>;Comment
|
||||
[V]
|
||||
. A B C
|
||||
1 v1 Line 1___
|
||||
2 v2 Line 1___
|
||||
. A B C7
|
||||
1 V1 Line 2
|
||||
2 V1 Line 2
|
||||
|
||||
[b1]
|
||||
Bridge 1
|
||||
|
||||
[C1]
|
||||
Chorus 1
|
||||
|
||||
[C2]
|
||||
Chorus 2
|
||||
</lyrics>
|
||||
<style index="default_style">
|
||||
<title enabled="true" valign="bottom" align="center" include_verse="false" margin-left="0" margin-right="0" margin-top="0" margin-bottom="0" font="Helvetica" size="26" bold="true" italic="true" underline="false" color="#FFFFFF" border="true" border_color="#000000" shadow="true" shadow_color="#000000" fill="false" fill_color="#000000"/>
|
||||
<subtitle enabled="true" valign="bottom" align="center" descriptive="false" margin-left="0" margin-right="0" margin-top="0" margin-bottom="0" font="Helvetica" size="18" bold="true" italic="true" underline="false" color="#FFFFFF" border="true" border_color="#000000" shadow="true" shadow_color="#000000" fill="false" fill_color="#000000"/>
|
||||
<song_subtitle>author</song_subtitle>
|
||||
<body enabled="true" auto_scale="false" valign="middle" align="center" highlight_chorus="true" margin-left="0" margin-right="0" margin-top="0" margin-bottom="0" font="Helvetica" size="34" bold="true" italic="false" underline="false" color="#FFFFFF" border="true" border_color="#000000" shadow="true" shadow_color="#000000" fill="false" fill_color="#FF0000">
|
||||
<tabs/>
|
||||
</body>
|
||||
<background strip_footer="0" color="#408080" position="1"/>
|
||||
</style></song>
|
9
openlp/plugins/songs/lib/test_opensongimport.py
Normal file
9
openlp/plugins/songs/lib/test_opensongimport.py
Normal file
@ -0,0 +1,9 @@
|
||||
import openlp.plugins.songs.lib.opensongimport
|
||||
|
||||
def test():
|
||||
o=opensongimport.opensongimport(0)# xxx needs a song manager here
|
||||
o.osimport(u'test.opensong')
|
||||
pass
|
||||
|
||||
if __name__=="__main__":
|
||||
test()
|
Loading…
Reference in New Issue
Block a user