Source code for lookatme.slide

"""
Slide info holder
"""


from typing import Optional, Tuple


import urwid


from lookatme.render.context import Context
import lookatme.render.markdown_block as markdown_block
import lookatme.utils as utils


[docs]class Slide(object): """This class defines a single slide. It operates on mistune's lexed tokens from the input markdown """ def __init__(self, tokens, number=0): """Create a new Slide instance with the provided tokens :param list tokens: A list of mistune tokens :param int number: The slide number """ self.tokens = tokens self.number = number
[docs] def get_title(self, ctx: Context) -> Tuple[str, Optional[urwid.Canvas]]: default_result = ("Slide {}".format(self.number), None) if not self.tokens: return default_result if len(self.tokens) < 3: return default_result first, second, third = self.tokens[:3] if first["type"] != "heading_open": return default_result if second["type"] != "inline": return default_result if third["type"] != "heading_close": return default_result tmp = urwid.Pile([]) heading_tokens = [first, second, third] with ctx.use_tokens(heading_tokens): with ctx.use_container(tmp, is_new_block=True): markdown_block.render_all(ctx) min_width = utils.packed_widget_width(tmp) canvas = tmp.render((min_width,), False) return canvas.text[0].decode(), canvas