From eed89c402415e1e6aeda5f67daa91a7b9f041833 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 29 Aug 2019 14:08:37 -0700 Subject: [PATCH 1/3] Remove chords from the slide controller and the display --- openlp/core/display/render.py | 13 ++++++++++++- openlp/core/lib/serviceitem.py | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/openlp/core/display/render.py b/openlp/core/display/render.py index 5e41c8174..e74a66e73 100644 --- a/openlp/core/display/render.py +++ b/openlp/core/display/render.py @@ -67,6 +67,15 @@ FOOTER_COPYRIGHT = 'Public Domain' CCLI_NO = '123456' +def remove_chords(text): + """ + Remove chords from the text + + :param text: Text to be cleaned + """ + return re.sub(r'\[.+?\]', r'', text) + + def remove_tags(text, can_remove_chords=False): """ Remove Tags from text for display @@ -82,7 +91,7 @@ def remove_tags(text, can_remove_chords=False): text = text.replace(tag['end tag'], '') # Remove ChordPro tags if can_remove_chords: - text = re.sub(r'\[.+?\]', r'', text) + text = remove_chords(text) return text @@ -377,6 +386,8 @@ def render_tags(text, can_render_chords=False, is_printing=False): text = render_chords_for_printing(text, '{br}') else: text = render_chords(text) + else: + text = remove_chords(text) for tag in FormattingTags.get_html_tags(): text = text.replace(tag['start tag'], tag['start html']) text = text.replace(tag['end tag'], tag['end html']) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 3366cd858..fc261fc94 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -185,7 +185,7 @@ class ServiceItem(RegistryProperties): self._rendered_slides.append(rendered_slide) display_slide = { 'title': raw_slide['title'], - 'text': remove_tags(page), + 'text': remove_tags(page, can_remove_chords=True), 'verse': verse_tag, } self._display_slides.append(display_slide) From ad813bdbeed38ae86022a30c78382de26cc0e3d9 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Thu, 29 Aug 2019 22:56:48 -0700 Subject: [PATCH 2/3] Chords are now being rendered when printing, but the output needs some work --- openlp/core/lib/serviceitem.py | 31 ++++++++++++++++++++++++++++++ openlp/core/ui/printserviceform.py | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index fc261fc94..e408d0c23 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -74,6 +74,7 @@ class ServiceItem(RegistryProperties): self.name = plugin.name self._rendered_slides = None self._display_slides = None + self._print_slides = None self.title = '' self.slides = [] self.processor = None @@ -209,6 +210,36 @@ class ServiceItem(RegistryProperties): self._create_slides() return self._display_slides + @property + def print_slides(self): + """ + Render the frames for printing and return them + + :param can_render_chords: bool Whether or not to render the chords + """ + if not self._print_slides: + self._print_slides = [] + previous_pages = {} + index = 0 + if not self.footer_html: + self.footer_html = '
'.join([_f for _f in self.raw_footer if _f]) + for raw_slide in self.slides: + verse_tag = raw_slide['verse'] + if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide: + pages = previous_pages[verse_tag][1] + else: + pages = self.renderer.format_slide(raw_slide['text'], self) + previous_pages[verse_tag] = (raw_slide, pages) + for page in pages: + slide = { + 'title': raw_slide['title'], + 'text': render_tags(page, can_render_chords=True, is_printing=True), + 'verse': index, + 'footer': self.footer_html, + } + self._print_slides.append(slide) + return self._print_slides + def add_from_image(self, path, title, background=None, thumbnail=None): """ Add an image slide to the service item. diff --git a/openlp/core/ui/printserviceform.py b/openlp/core/ui/printserviceform.py index e81f82f9a..578936627 100644 --- a/openlp/core/ui/printserviceform.py +++ b/openlp/core/ui/printserviceform.py @@ -218,7 +218,7 @@ class PrintServiceForm(QtWidgets.QDialog, Ui_PrintServiceDialog, RegistryPropert if item.is_text(): verse_def = None verse_html = None - for slide in item.get_frames(): + for slide in item.print_slides: if not verse_def or verse_def != slide['verse'] or verse_html == slide['text']: text_div = self._add_element('div', parent=div, class_id='itemText') elif 'chordspacing' not in slide['text']: From 7eb41ae49bbba54b3ac5b5075918cac06e08a794 Mon Sep 17 00:00:00 2001 From: Raoul Snyman Date: Fri, 30 Aug 2019 07:43:22 -0700 Subject: [PATCH 3/3] Fix chord printing properly --- openlp/core/lib/serviceitem.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index e408d0c23..60e80acba 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -39,7 +39,7 @@ from openlp.core.common.applocation import AppLocation from openlp.core.common.i18n import translate from openlp.core.common.mixins import RegistryProperties from openlp.core.common.settings import Settings -from openlp.core.display.render import remove_tags, render_tags +from openlp.core.display.render import remove_tags, render_tags, render_chords_for_printing from openlp.core.lib import ItemCapabilities from openlp.core.ui.icons import UiIcons @@ -221,8 +221,6 @@ class ServiceItem(RegistryProperties): self._print_slides = [] previous_pages = {} index = 0 - if not self.footer_html: - self.footer_html = '
'.join([_f for _f in self.raw_footer if _f]) for raw_slide in self.slides: verse_tag = raw_slide['verse'] if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide: @@ -233,9 +231,9 @@ class ServiceItem(RegistryProperties): for page in pages: slide = { 'title': raw_slide['title'], - 'text': render_tags(page, can_render_chords=True, is_printing=True), + 'text': render_chords_for_printing(remove_tags(page), '\n'), 'verse': index, - 'footer': self.footer_html, + 'footer': self.raw_footer, } self._print_slides.append(slide) return self._print_slides