- New display tag {br}
- Better regex usage in the SongBeamer import

bzr-revno: 1571
Fixes: https://launchpad.net/bugs/786896
This commit is contained in:
Andreas Preikschat 2011-05-25 23:11:15 +02:00
commit 6e235f6bff
3 changed files with 34 additions and 28 deletions

View File

@ -84,6 +84,9 @@ base_html_expands.append({u'desc': u'Italics', u'start tag': u'{it}',
base_html_expands.append({u'desc': u'Underline', u'start tag': u'{u}', base_html_expands.append({u'desc': u'Underline', u'start tag': u'{u}',
u'start html': u'<span style="text-decoration: underline;">', u'start html': u'<span style="text-decoration: underline;">',
u'end tag': u'{/u}', u'end html': u'</span>', u'protected': True}) u'end tag': u'{/u}', u'end html': u'</span>', u'protected': True})
base_html_expands.append({u'desc': u'Break', u'start tag': u'{br}',
u'start html': u'<br>', u'end tag': u'', u'end html': u'',
u'protected': True})
def translate(context, text, comment=None, def translate(context, text, comment=None,
encoding=QtCore.QCoreApplication.CodecForTr, n=-1, encoding=QtCore.QCoreApplication.CodecForTr, n=-1,
@ -245,6 +248,7 @@ def clean_tags(text):
Remove Tags from text for display Remove Tags from text for display
""" """
text = text.replace(u'<br>', u'\n') text = text.replace(u'<br>', u'\n')
text = text.replace(u'{br}', u'\n')
text = text.replace(u'&nbsp;', u' ') text = text.replace(u'&nbsp;', u' ')
for tag in DisplayTags.get_html_tags(): for tag in DisplayTags.get_html_tags():
text = text.replace(tag[u'start tag'], u'') text = text.replace(tag[u'start tag'], u'')

View File

@ -29,6 +29,7 @@ The :mod:`serviceitem` provides the service item functionality including the
type and capability of an item. type and capability of an item.
""" """
import cgi
import datetime import datetime
import logging import logging
import os import os
@ -175,17 +176,18 @@ class ServiceItem(object):
formatted = self.renderer \ formatted = self.renderer \
.format_slide(slide[u'raw_slide'], line_break, self) .format_slide(slide[u'raw_slide'], line_break, self)
for page in formatted: for page in formatted:
page = page.replace(u'<br>', u'{br}')
self._display_frames.append({ self._display_frames.append({
u'title': clean_tags(page), u'title': clean_tags(page),
u'text': clean_tags(page.rstrip()), u'text': clean_tags(page.rstrip()),
u'html': expand_tags(page.rstrip()), u'html': expand_tags(cgi.escape(page.rstrip())),
u'verseTag': slide[u'verseTag'] u'verseTag': slide[u'verseTag']
}) })
elif self.service_item_type == ServiceItemType.Image or \ elif self.service_item_type == ServiceItemType.Image or \
self.service_item_type == ServiceItemType.Command: self.service_item_type == ServiceItemType.Command:
pass pass
else: else:
log.error(u'Invalid value renderer :%s' % self.service_item_type) log.error(u'Invalid value renderer: %s' % self.service_item_type)
self.title = clean_tags(self.title) self.title = clean_tags(self.title)
# The footer should never be None, but to be compatible with a few # The footer should never be None, but to be compatible with a few
# nightly builds between 1.9.4 and 1.9.5, we have to correct this to # nightly builds between 1.9.4 and 1.9.5, we have to correct this to

View File

@ -69,6 +69,30 @@ class SongBeamerImport(SongImport):
Song Beamer file format is text based Song Beamer file format is text based
in the beginning are one or more control tags written in the beginning are one or more control tags written
""" """
HTML_TAG_PAIRS = [
(re.compile(u'<b>'), u'{st}'),
(re.compile(u'</b>'), u'{/st}'),
(re.compile(u'<i>'), u'{it}'),
(re.compile(u'</i>'), u'{/it}'),
(re.compile(u'<u>'), u'{u}'),
(re.compile(u'</u>'), u'{/u}'),
(re.compile(u'<p>'), u'{p}'),
(re.compile(u'</p>'), u'{/p}'),
(re.compile(u'<super>'), u'{su}'),
(re.compile(u'</super>'), u'{/su}'),
(re.compile(u'<sub>'), u'{sb}'),
(re.compile(u'</sub>'), u'{/sb}'),
(re.compile(u'<br.*?>'), u'{br}'),
(re.compile(u'<[/]?wordwrap>'), u''),
(re.compile(u'<[/]?strike>'), u''),
(re.compile(u'<[/]?h.*?>'), u''),
(re.compile(u'<[/]?s.*?>'), u''),
(re.compile(u'<[/]?linespacing.*?>'), u''),
(re.compile(u'<[/]?c.*?>'), u''),
(re.compile(u'<align.*?>'), u''),
(re.compile(u'<valign.*?>'), u'')
]
def __init__(self, manager, **kwargs): def __init__(self, manager, **kwargs):
""" """
Initialise the Song Beamer importer. Initialise the Song Beamer importer.
@ -134,32 +158,8 @@ class SongBeamerImport(SongImport):
This can be called to replace SongBeamer's specific (html) tags with This can be called to replace SongBeamer's specific (html) tags with
OpenLP's specific (html) tags. OpenLP's specific (html) tags.
""" """
tag_pairs = [ for pair in SongBeamerImport.HTML_TAG_PAIRS:
(u'<b>', u'{st}'), self.current_verse = pair[0].sub(pair[1], self.current_verse)
(u'</b>', u'{/st}'),
(u'<i>', u'{it}'),
(u'</i>', u'{/it}'),
(u'<u>', u'{u}'),
(u'</u>', u'{/u}'),
(u'<p>', u'{p}'),
(u'</p>', u'{/p}'),
(u'<super>', u'{su}'),
(u'</super>', u'{/su}'),
(u'<sub>', u'{sb}'),
(u'</sub>', u'{/sb}'),
(u'<[/]?br.*?>', u'{st}'),
(u'<[/]?wordwrap>', u''),
(u'<[/]?strike>', u''),
(u'<[/]?h.*?>', u''),
(u'<[/]?s.*?>', u''),
(u'<[/]?linespacing.*?>', u''),
(u'<[/]?c.*?>', u''),
(u'<align.*?>', u''),
(u'<valign.*?>', u'')
]
for pair in tag_pairs:
self.current_verse = re.compile(pair[0]).sub(pair[1],
self.current_verse)
def parse_tags(self, line): def parse_tags(self, line):
""" """