Builds a powerpoint presentation using data read from a yaml file

    :param filename: path to the yaml file 
    :param pptx_template: path to powerpoint template
    :param master_slide_idx: slide master index
    :param slide_layout_idx: slide layout index
    :param font_size: size of the font
    :param dst_dir: directory where the generated pptx should get dumped
    :param font_name: name of the font
    :param slide_txt_alignment: alignment of text in slides
    :return path to the generated pptx

def build_slide(filename: Path, pptx_template: Path, master_slide_idx: int, slide_layout_idx: int, font_size: int,
                dst_dir: Path, font_name: str, slide_txt_alignment: str = "left") -> Path:
    """Builds a powerpoint presentation using data read from a yaml file

    :param filename: path to the yaml file 
    :param pptx_template: path to powerpoint template
    :param master_slide_idx: slide master index
    :param slide_layout_idx: slide layout index
    :param font_size: size of the font
    :param dst_dir: directory where the generated pptx should get dumped
    :param font_name: name of the font
    :param slide_txt_alignment: alignment of text in slides
    :return path to the generated pptx
    """

    prs = pptx.Presentation(pptx_template)

    # setting text box size and position
    slide_height = pptx.util.Length(prs.slide_height)
    slide_width = pptx.util.Length(prs.slide_width)

    # Emu is English metric unit
    tb_pos = {
        "left": pptx.util.Emu(400000),
        "top": pptx.util.Emu(400000),
        "width": pptx.util.Emu(slide_width - (400000 * 2)),
        "height": pptx.util.Emu(slide_height - (400000 * 2))
    }

    slide_layout = prs.slide_masters[master_slide_idx].slide_layouts[slide_layout_idx]

    with filename.open() as f:

        yml_data = yaml.load(f)

        lyrics = yml_data.get('lyrics')

        hard_font_size = yml_data.get("font_size")
        if hard_font_size:
            msg = f"NOTE: Setting the font size to {hard_font_size} for {filename}"
            click.echo(click.style(msg, fg="blue"))
            font_size = hard_font_size

        for content in lyrics:
            slide = prs.slides.add_slide(slide_layout)

            txbox = slide.shapes.add_textbox(**tb_pos)

            tf = txbox.text_frame

            # this is to keep text frame in the middle of the screen from top to bottom of the screen
            tf.vertical_anchor = pptx.enum.text.MSO_ANCHOR.MIDDLE

            # this is supposed to work as per the documentation but it's not working
            # 09/12/2018
            # tf.fit_text(font_family=font_name, max_size=font_size)

            p = tf.add_paragraph()

            if slide_txt_alignment == "left":
                p.alignment = pptx.enum.text.PP_ALIGN.LEFT
            elif slide_txt_alignment == "middle":
                p.alignment = pptx.enum.text.PP_ALIGN.CENTER
            else:
                p.alignment = pptx.enum.text.PP_ALIGN.RIGHT

            p.font.name = font_name
            p.font.size = pptx.util.Pt(font_size)

            p.text = content.get("english")

    dst_dir.mkdir(parents=True, exist_ok=True)
    dst_file = filename.with_suffix(".pptx")
    dst_path = Path(dst_dir, dst_file.name)

    if dst_path.exists():
        dst_path.unlink()

    prs.save(str(dst_path))

    return dst_path