fixed virtue breaks, fixed word break

This commit is contained in:
Andreas Preikschat 2011-04-26 19:03:19 +02:00
parent 9c6a400634
commit 68fdc7dee9
3 changed files with 71 additions and 99 deletions

View File

@ -159,14 +159,14 @@ class Plugin(QtCore.QObject):
self.status = PluginStatus.Inactive self.status = PluginStatus.Inactive
# Set up logging # Set up logging
self.log = logging.getLogger(self.name) self.log = logging.getLogger(self.name)
self.previewController = pluginHelpers[u'preview'] self.previewController = plugin_helpers[u'preview']
self.liveController = pluginHelpers[u'live'] self.liveController = plugin_helpers[u'live']
self.renderer = pluginHelpers[u'renderer'] self.renderer = plugin_helpers[u'renderer']
self.serviceManager = pluginHelpers[u'service'] self.serviceManager = plugin_helpers[u'service']
self.settingsForm = pluginHelpers[u'settings form'] self.settingsForm = plugin_helpers[u'settings form']
self.mediadock = pluginHelpers[u'toolbox'] self.mediadock = plugin_helpers[u'toolbox']
self.pluginManager = pluginHelpers[u'pluginmanager'] self.pluginManager = plugin_helpers[u'pluginmanager']
self.formparent = pluginHelpers[u'formparent'] self.formparent = plugin_helpers[u'formparent']
QtCore.QObject.connect(Receiver.get_receiver(), QtCore.QObject.connect(Receiver.get_receiver(),
QtCore.SIGNAL(u'%s_add_service_item' % self.name), QtCore.SIGNAL(u'%s_add_service_item' % self.name),
self.processAddServiceEvent) self.processAddServiceEvent)

View File

@ -214,26 +214,26 @@ class Renderer(object):
``line_break`` ``line_break``
Add line endings after each line of text used for bibles. Add line endings after each line of text used for bibles.
""" """
print [text]
log.debug(u'format slide') log.debug(u'format slide')
# clean up line endings # clean up line endings
lines = self._lines_split(text) lines = self._lines_split(text)
pages = self._paginate_slide(lines, line_break, self.force_page) # Songs and Custom
if len(pages) > 1: if item.is_capable(ItemCapabilities.AllowsVirtualSplit):
# Songs and Custom # Do not forget the line breaks !
if item.is_capable(ItemCapabilities.AllowsVirtualSplit): slides = text.split(u'\n[---]\n')
# do not forget the line breaks ! pages = []
slides = text.split(u'\n[---]\n') for slide in slides:
pages = [] lines = self._lines(slide)
for slide in slides: new_pages = self._paginate_slide(lines, line_break,
lines = self._lines(slide) self.force_page)
new_pages = self._paginate_slide(lines, line_break, pages.extend([page for page in new_pages])
self.force_page) # Bibles
for page in new_pages: elif item.is_capable(ItemCapabilities.AllowsWordSplit):
pages.append(page) pages = self._paginate_slide_words(text, line_break)
# # Bibles # Theme preview "service items".
elif item.is_capable(ItemCapabilities.AllowsWordSplit): else:
pages = self._paginate_slide_words(text, line_break) pages = self._paginate_slide(lines, line_break, self.force_page)
return pages return pages
def _calculate_default(self, screen): def _calculate_default(self, screen):
@ -316,13 +316,13 @@ class Renderer(object):
The words to be fitted on the slide split into lines. The words to be fitted on the slide split into lines.
``line_break`` ``line_break``
Add line endings after each line of text used for bibles. Add line endings after each line of text (used for bibles).
``force_page`` ``force_page``
Flag to tell message lines in page. Flag to tell message lines in page.
""" """
log.debug(u'format_slide - Start') log.debug(u'_paginate_slide - Start')
line_end = u'' line_end = u''
if line_break: if line_break:
line_end = u'<br>' line_end = u'<br>'
@ -342,16 +342,14 @@ class Renderer(object):
if force_page and line_count > 0: if force_page and line_count > 0:
Receiver.send_message(u'theme_line_count', line_count) Receiver.send_message(u'theme_line_count', line_count)
line_count = -1 line_count = -1
if html_text.endswith(u'<br>'): html_text = html_text.rstrip(u'<br>')
html_text = html_text[:len(html_text)-4]
formatted.append(html_text) formatted.append(html_text)
html_text = u'' html_text = u''
styled_text = styled_line styled_text = styled_line
html_text += line + line_end html_text += line + line_end
if html_text.endswith(u'<br>'): html_text = html_text.rstrip(u'<br>')
html_text = html_text[:len(html_text)-4]
formatted.append(html_text) formatted.append(html_text)
log.debug(u'format_slide - End') log.debug(u'_paginate_slide - End')
return formatted return formatted
def _paginate_slide_words(self, text, line_break): def _paginate_slide_words(self, text, line_break):
@ -367,71 +365,48 @@ class Renderer(object):
Add line endings after each line of text used for bibles. Add line endings after each line of text used for bibles.
""" """
print [text] # TODO: Make sure spaces are striped so that they will not confuse
log.debug(u'format_slide - Start') # rendering. for instance when the style is set to Verse per Line:
# In the beginning ...
# <space> <!-- here we could have added the second verse -->
# <new slide>
# Verse 2
log.debug(u'_paginate_slide_words - Start')
line_end = u'' line_end = u''
if line_break: if line_break:
line_end = u'<br>' line_end = u'<br>'
formatted = [] formatted = []
html_text = u'' previous_html = u''
styled_text = u'' previous_raw = u''
line_count = 0
force_current = False
lines = self._lines(text, u'[---]') lines = self._lines(text, u'[---]')
previous_line = u''
# Loop through the lines
for line in lines: for line in lines:
line_count += 1
styled_line = expand_tags(line) styled_line = expand_tags(line)
styled_line = line_end + styled_line html = self.page_shell + previous_html + styled_line + HTML_END
previous_line = line
previous_styled = styled_line
styled_text += styled_line
html = self.page_shell + styled_text + HTML_END
self.web.setHtml(html) self.web.setHtml(html)
# Text too long so go to next page # Text too long so go to next page
print self.web_frame.contentsSize().height() , self.page_height, [line]
if self.web_frame.contentsSize().height() > self.page_height: if self.web_frame.contentsSize().height() > self.page_height:
# we have more than 1 verse on the slide words = self._words_split(line)
print "A", line_count for word in words:
print "AA", [previous_line] styled_word = expand_tags(word)
print "AAA", [styled_text] html = self.page_shell + previous_html + styled_word + \
if line_count > 1: HTML_END
if html_text.endswith(u'<br>'): self.web.setHtml(html)
html_text = html_text[:len(html_text)-4] # Text too long so go to next page
formatted.append(html_text + line_end) if self.web_frame.contentsSize().height() > self.page_height:
line = previous_line previous_raw = previous_raw.rstrip(u'<br>')
line_count = 1 formatted.append(previous_raw)
html_text = u'' previous_html = u''
print "c", [html_text] previous_raw = u''
if line_count == 1: previous_html += styled_word
line_count = 0 previous_raw += word
words = self._words_split(line) previous_html += line_end
styled_text = u'' previous_raw += line_end
styled_line = u''
for word in words:
styled_word = expand_tags(word)
styled_text += styled_word
html = self.page_shell + styled_text + HTML_END
self.web.setHtml(html)
# Text too long so go to next page
print self.web_frame.contentsSize().height() , self.page_height, [line]
if self.web_frame.contentsSize().height() > self.page_height:
if html_text.endswith(u'<br>'):
html_text = html_text[:len(html_text)-4]
formatted.append(html_text + line_break)
html_text = u''
styled_text = u''
html_text += word
a=1
else: else:
styled_text = styled_line previous_html += styled_line + line_end
html_text += line + line_end previous_raw += line + line_end
previous_line = line previous_raw = previous_raw.rstrip(u'<br>')
if html_text.endswith(u'<br>'): formatted.append(previous_raw)
html_text = html_text[:len(html_text)-4] log.debug(u'_paginate_slide_words - End')
formatted.append(html_text)
log.debug(u'format_slide - End')
return formatted return formatted
def _lines(self, words, split=u'n[---]n'): def _lines(self, words, split=u'n[---]n'):
@ -444,8 +419,7 @@ class Renderer(object):
text = [] text = []
for verse in verses_text: for verse in verses_text:
lines = verse.split(u'\n') lines = verse.split(u'\n')
for line in lines: text.extend([line for line in lines])
text.append(line)
return text return text
def _words_split(self, words): def _words_split(self, words):
@ -458,8 +432,7 @@ class Renderer(object):
text = [] text = []
for verse in verses_text: for verse in verses_text:
lines = verse.split(u' ') lines = verse.split(u' ')
for line in lines: text.extend([line + u' ' for line in lines])
text.append(line + u' ')
return text return text
def _lines_split(self, text): def _lines_split(self, text):
@ -472,6 +445,5 @@ class Renderer(object):
for line in lines: for line in lines:
line = line.replace(u' [---]', u'[---]') line = line.replace(u' [---]', u'[---]')
sub_lines = line.split(u'\n') sub_lines = line.split(u'\n')
for sub_line in sub_lines: real_lines.extend([sub_line for sub_line in sub_lines])
real_lines.append(sub_line)
return real_lines return real_lines

View File

@ -163,9 +163,7 @@ class ServiceItem(object):
log.debug(u'Render called') log.debug(u'Render called')
self._display_frames = [] self._display_frames = []
self.bg_image_bytes = None self.bg_image_bytes = None
line_break = True line_break = not self.is_capable(ItemCapabilities.NoLineBreaks)
if self.is_capable(ItemCapabilities.NoLineBreaks):
line_break = False
theme = self.theme if self.theme else None theme = self.theme if self.theme else None
self.main, self.footer = \ self.main, self.footer = \
self.renderer.set_override_theme(theme, use_override) self.renderer.set_override_theme(theme, use_override)
@ -176,11 +174,12 @@ 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:
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(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
@ -455,4 +454,5 @@ class ServiceItem(object):
elif not start and end: elif not start and end:
return end return end
else: else:
return u'%s : %s' % (start, end) return u'%s : %s' % (start, end)