Fix Renderer - again

bzr-revno: 1735
This commit is contained in:
Andreas Preikschat 2011-08-30 19:10:52 +01:00 committed by Tim Bentley
commit d85128829e
1 changed files with 29 additions and 33 deletions

View File

@ -233,45 +233,41 @@ class Renderer(object):
len(pages) > 1 and u'[---]' in text: len(pages) > 1 and u'[---]' in text:
pages = [] pages = []
while True: while True:
# Check if the first two potential virtual slides will fit slides = text.split(u'\n[---]\n', 2)
# (as a whole) on one slide. # If there are (at least) two occurrences of [---] we use
html_text = expand_tags( # the first two slides (and neglect the last for now).
u'\n'.join(text.split(u'\n[---]\n', 2)[:-1])) if len(slides) == 3:
html_text = expand_tags(u'\n'.join(slides[:2]))
# We check both slides to determine if the virtual break is
# needed (there is only one virtual break).
else:
html_text = expand_tags(u'\n'.join(slides))
html_text = html_text.replace(u'\n', u'<br>') html_text = html_text.replace(u'\n', u'<br>')
if self._text_fits_on_slide(html_text): if self._text_fits_on_slide(html_text):
# The first two virtual slides fit (as a whole) on one # The first two virtual slides fit (as a whole) on one
# slide. Replace the occurrences of [---]. # slide. Replace the first occurrence of [---].
text = text.replace(u'\n[---]', u'', 2) text = text.replace(u'\n[---]', u'', 1)
else: else:
# The first two virtual slides did not fit as a whole. # The first virtual slide fits, which means we have to
# Check if the first virtual slide will fit. # render the first virtual slide.
html_text = expand_tags(text.split(u'\n[---]\n', 1)[1]) text_contains_break = u'[---]' in text
html_text = html_text.replace(u'\n', u'<br>') if text_contains_break:
if self._text_fits_on_slide(html_text): text_to_render, text = text.split(u'\n[---]\n', 1)
# The first virtual slide fits, so remove it.
text = text.replace(u'\n[---]', u'', 1)
else: else:
# The first virtual slide does not fit, which means text_to_render = text
# we have to render the first virtual slide. text = u''
text_contains_break = u'[---]' in text lines = text_to_render.strip(u'\n').split(u'\n')
if text_contains_break: slides = self._paginate_slide(lines, line_end)
text_to_render, text = text.split(u'\n[---]\n', 1) if len(slides) > 1 and text:
# Add all slides apart from the last one the list.
pages.extend(slides[:-1])
if text_contains_break:
text = slides[-1] + u'\n[---]\n' + text
else: else:
text_to_render = text text = slides[-1] + u'\n'+ text
text = u'' text = text.replace(u'<br>', u'\n')
lines = text_to_render.strip(u'\n').split(u'\n') else:
slides = self._paginate_slide(lines, line_end) pages.extend(slides)
if len(slides) > 1 and text:
# Add all slides apart from the last one the
# list.
pages.extend(slides[:-1])
if text_contains_break:
text = slides[-1] + u'\n[---]\n' + text
else:
text = slides[-1] + u'\n'+ text
text = text.replace(u'<br>', u'\n')
else:
pages.extend(slides)
if u'[---]' not in text: if u'[---]' not in text:
lines = text.strip(u'\n').split(u'\n') lines = text.strip(u'\n').split(u'\n')
pages.extend(self._paginate_slide(lines, line_end)) pages.extend(self._paginate_slide(lines, line_end))