diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 0ae9149fa..7a9e89f7b 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -214,9 +214,10 @@ class Renderer(object): ``line_break`` Add line endings after each line of text used for bibles. """ + print [text] log.debug(u'format slide') # clean up line endings - lines = self._lines(text) + lines = self._lines_split(text) pages = self._paginate_slide(lines, line_break, self.force_page) if len(pages) > 1: # Songs and Custom @@ -377,66 +378,99 @@ class Renderer(object): line_count = 0 force_current = False lines = self._lines(text, u'[---]') + previous_line = u'' # Loop through the lines for line in lines: - line_count += 1 - styled_line = expand_tags(line) - styled_line = line_end + styled_line - styled_text += styled_line - 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: - # we have more than 1 verse on the slide - print "A", line_count - if line_count > 1: - if html_text.endswith(u'
'): - html_text = html_text[:len(html_text)-4] - formatted.append(html_text) - force_current = True - print "##### > 1" - print [html_text] - html_text = u'' + line_added = False + while not line_added: + line_added = True + line_count += 1 + styled_line = expand_tags(line) + styled_line = line_end + styled_line + previous_line = line + previous_styled = styled_line + styled_text += styled_line + 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: + # we have more than 1 verse on the slide + print "A", line_count + print "AA", [previous_line] + print "AAA", [styled_text] + if line_count > 1: + if html_text.endswith(u'
'): + html_text = html_text[:len(html_text)-4] + formatted.append(html_text) + line_added = False + line = previous_line + line_count = 0 + html_text = u'' + print "c", [html_text] + if line_count == 1: + words = self._words_split(line) + for word in words: + styled_word = expand_tags(word) + styled_line = styled_word + #previous_line = line + #previous_styled = styled_line + 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'
'): + html_text = html_text[:len(html_text)-4] + formatted.append(html_text) + html_text = u'' + html_text += word + pass + print "##### > 1" + print [html_text] # only one block on page so lets make it words. - if line_count == 1 or force_current: - print "##### = 1" - print [line] - force_current = False - styled_text = u'' - words = self._words(line) - styled_text = u'' - for word in words: - styled_line = expand_tags(word) - styled_text += styled_line - html = self.page_shell + styled_text + HTML_END - self.web.setHtml(html) - # Text too long so go to next page - print "B", self.web_frame.contentsSize().height() , self.page_height - if self.web_frame.contentsSize().height() > self.page_height: - if html_text.endswith(u'
'): - html_text = html_text[:len(html_text)-4] - print "c", [html_text] - formatted.append(html_text) - html_text = u'' - - styled_text = styled_line - html_text += word - line_count = 0 +# if line_count == 1 or force_current: +# print "##### = 1" +# print [line] +# print [styled_text] +# print [previous_line] +# force_current = False +# #styled_text = u'' +# words = self._words(previous_line) +# styled_text = u'' +# for word in words: +# styled_line = expand_tags(word) +# styled_text += styled_line +# html = self.page_shell + styled_text + HTML_END +# self.web.setHtml(html) +# # Text too long so go to next page +# print "B", self.web_frame.contentsSize().height() , self.page_height +# if self.web_frame.contentsSize().height() > self.page_height: +# if html_text.endswith(u'
'): +# html_text = html_text[:len(html_text)-4] +# print "c", [html_text] +# formatted.append(html_text) +# html_text = u'' +# +# styled_text = styled_line +# html_text += word + #line_count = 0 styled_text = styled_line html_text += line + line_end + previous_line = line if html_text.endswith(u'
'): html_text = html_text[:len(html_text)-4] formatted.append(html_text) log.debug(u'format_slide - End') return formatted - def _lines(self, words, split=u'\n[---]\n'): + def _lines(self, words, split=u'n[---]n'): """ Split the slide up by physical line """ # this parse we do not want to use this so remove it - words = words.replace(split, u'') + #words = words.replace(split, u'') verses_text = words.split(u'\n') text = [] for verse in verses_text: @@ -445,11 +479,11 @@ class Renderer(object): text.append(line) return text - def _words(self, words): + def _words_split(self, words): """ Split the slide up by word so can wrap better """ - # this parse we are wordy + # this parse we are to be wordy words = words.replace(u'\n', u' ') verses_text = words.split(u' ') text = [] @@ -458,3 +492,17 @@ class Renderer(object): for line in lines: text.append(line + u' ') return text + + def _lines_split(self, text): + """ + Split the slide up by physical line + """ + # this parse we do not want to use this so remove it + lines = text.split(u'\n') + real_lines = [] + for line in lines: + line = line.replace(u' [---]', u'[---]') + sub_lines = line.split(u'\n') + for sub_line in sub_lines: + real_lines.append(sub_line) + return real_lines