Merge lp:~raoul-snyman/openlp/fix-display-chords into lp:openlp

Proposed by Raoul Snyman
Status: Merged
Merged at revision: 2897
Proposed branch: lp:~raoul-snyman/openlp/fix-display-chords
Merge into: lp:openlp
Diff against target: 115 lines (+44/-4)
3 files modified
openlp/core/display/render.py (+12/-1)
openlp/core/lib/serviceitem.py (+31/-2)
openlp/core/ui/printserviceform.py (+1/-1)
To merge this branch: bzr merge lp:~raoul-snyman/openlp/fix-display-chords
Reviewer Review Type Date Requested Status
Tim Bentley Approve
Review via email: mp+372072@code.launchpad.net

This proposal supersedes a proposal from 2019-08-29.

Commit message

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

Description of the change

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

To post a comment you must log in.
Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

JavaScript tests passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

Linux tests passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

macOS tests passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote : Posted in a previous version of this proposal

Linting passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

JavaScript tests passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Linux tests passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

macOS tests passed!

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Linting passed!

Revision history for this message
Tim Bentley (trb143) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/display/render.py'
2--- openlp/core/display/render.py 2019-08-06 20:46:41 +0000
3+++ openlp/core/display/render.py 2019-08-30 14:46:34 +0000
4@@ -67,6 +67,15 @@
5 CCLI_NO = '123456'
6
7
8+def remove_chords(text):
9+ """
10+ Remove chords from the text
11+
12+ :param text: Text to be cleaned
13+ """
14+ return re.sub(r'\[.+?\]', r'', text)
15+
16+
17 def remove_tags(text, can_remove_chords=False):
18 """
19 Remove Tags from text for display
20@@ -82,7 +91,7 @@
21 text = text.replace(tag['end tag'], '')
22 # Remove ChordPro tags
23 if can_remove_chords:
24- text = re.sub(r'\[.+?\]', r'', text)
25+ text = remove_chords(text)
26 return text
27
28
29@@ -377,6 +386,8 @@
30 text = render_chords_for_printing(text, '{br}')
31 else:
32 text = render_chords(text)
33+ else:
34+ text = remove_chords(text)
35 for tag in FormattingTags.get_html_tags():
36 text = text.replace(tag['start tag'], tag['start html'])
37 text = text.replace(tag['end tag'], tag['end html'])
38
39=== modified file 'openlp/core/lib/serviceitem.py'
40--- openlp/core/lib/serviceitem.py 2019-05-24 22:11:11 +0000
41+++ openlp/core/lib/serviceitem.py 2019-08-30 14:46:34 +0000
42@@ -39,7 +39,7 @@
43 from openlp.core.common.i18n import translate
44 from openlp.core.common.mixins import RegistryProperties
45 from openlp.core.common.settings import Settings
46-from openlp.core.display.render import remove_tags, render_tags
47+from openlp.core.display.render import remove_tags, render_tags, render_chords_for_printing
48 from openlp.core.lib import ItemCapabilities
49 from openlp.core.ui.icons import UiIcons
50
51@@ -74,6 +74,7 @@
52 self.name = plugin.name
53 self._rendered_slides = None
54 self._display_slides = None
55+ self._print_slides = None
56 self.title = ''
57 self.slides = []
58 self.processor = None
59@@ -185,7 +186,7 @@
60 self._rendered_slides.append(rendered_slide)
61 display_slide = {
62 'title': raw_slide['title'],
63- 'text': remove_tags(page),
64+ 'text': remove_tags(page, can_remove_chords=True),
65 'verse': verse_tag,
66 }
67 self._display_slides.append(display_slide)
68@@ -209,6 +210,34 @@
69 self._create_slides()
70 return self._display_slides
71
72+ @property
73+ def print_slides(self):
74+ """
75+ Render the frames for printing and return them
76+
77+ :param can_render_chords: bool Whether or not to render the chords
78+ """
79+ if not self._print_slides:
80+ self._print_slides = []
81+ previous_pages = {}
82+ index = 0
83+ for raw_slide in self.slides:
84+ verse_tag = raw_slide['verse']
85+ if verse_tag in previous_pages and previous_pages[verse_tag][0] == raw_slide:
86+ pages = previous_pages[verse_tag][1]
87+ else:
88+ pages = self.renderer.format_slide(raw_slide['text'], self)
89+ previous_pages[verse_tag] = (raw_slide, pages)
90+ for page in pages:
91+ slide = {
92+ 'title': raw_slide['title'],
93+ 'text': render_chords_for_printing(remove_tags(page), '\n'),
94+ 'verse': index,
95+ 'footer': self.raw_footer,
96+ }
97+ self._print_slides.append(slide)
98+ return self._print_slides
99+
100 def add_from_image(self, path, title, background=None, thumbnail=None):
101 """
102 Add an image slide to the service item.
103
104=== modified file 'openlp/core/ui/printserviceform.py'
105--- openlp/core/ui/printserviceform.py 2019-07-31 16:26:25 +0000
106+++ openlp/core/ui/printserviceform.py 2019-08-30 14:46:34 +0000
107@@ -218,7 +218,7 @@
108 if item.is_text():
109 verse_def = None
110 verse_html = None
111- for slide in item.get_frames():
112+ for slide in item.print_slides:
113 if not verse_def or verse_def != slide['verse'] or verse_html == slide['text']:
114 text_div = self._add_element('div', parent=div, class_id='itemText')
115 elif 'chordspacing' not in slide['text']: