Raoul Snyman has proposed merging lp:~raoul-snyman/openlp/fix-display-chords 
into lp:openlp.

Commit message:
Fix chords in songs being displayed on the display screen and in the slide 
controller.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~raoul-snyman/openlp/fix-display-chords/+merge/372072

Fix chords in songs being displayed on the display screen and in the slide 
controller.
-- 
Your team OpenLP Core is requested to review the proposed merge of 
lp:~raoul-snyman/openlp/fix-display-chords into lp:openlp.
=== modified file 'openlp/core/display/render.py'
--- openlp/core/display/render.py	2019-08-06 20:46:41 +0000
+++ openlp/core/display/render.py	2019-08-30 14:46:34 +0000
@@ -67,6 +67,15 @@
 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 @@
         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 @@
             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'])

=== modified file 'openlp/core/lib/serviceitem.py'
--- openlp/core/lib/serviceitem.py	2019-05-24 22:11:11 +0000
+++ openlp/core/lib/serviceitem.py	2019-08-30 14:46:34 +0000
@@ -39,7 +39,7 @@
 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
 
@@ -74,6 +74,7 @@
             self.name = plugin.name
         self._rendered_slides = None
         self._display_slides = None
+        self._print_slides = None
         self.title = ''
         self.slides = []
         self.processor = None
@@ -185,7 +186,7 @@
                 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)
@@ -209,6 +210,34 @@
             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
+            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_chords_for_printing(remove_tags(page), '\n'),
+                        'verse': index,
+                        'footer': self.raw_footer,
+                    }
+                    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.

=== modified file 'openlp/core/ui/printserviceform.py'
--- openlp/core/ui/printserviceform.py	2019-07-31 16:26:25 +0000
+++ openlp/core/ui/printserviceform.py	2019-08-30 14:46:34 +0000
@@ -218,7 +218,7 @@
             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']:

_______________________________________________
Mailing list: https://launchpad.net/~openlp-core
Post to     : openlp-core@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openlp-core
More help   : https://help.launchpad.net/ListHelp

Reply via email to