Beispiel #1
0
    def vertical_card(card_data: JSONType) -> Element:
        assert "title" in card_data and "text" in card_data
        title = card_data["title"]
        text = convert_text(card_data["text"])

        content = []
        if "image" in card_data:
            content.append(
                Plain(
                    Image(url=card_data["image"],
                          title=title,
                          classes=["card-img-top"])))

        body = [
            Header(Str(title), level=3, classes=["card-title"]),
            Div(*text, classes=["card-text"])
        ]

        if "link" in card_data:
            body.append(
                Plain(
                    Link(Str(card_data["link"]["content"]),
                         url=card_data["link"]["href"],
                         classes=["btn", "btn-secondary", "mt-auto", "mx-4"])))

        content.append(
            Div(*body, classes=["card-body", "d-flex", "flex-column"]))

        content = Div(Div(*content, classes=["card", "h-100", "rounded-lg"]),
                      classes=["col"])
        return content
Beispiel #2
0
    def horizontal_card(card_data: JSONType) -> Element:
        assert "title" in card_data and "text" in card_data
        title = card_data["title"]
        text = convert_text(card_data["text"])

        content = []
        body = [
            Header(Str(title), level=3, classes=["card-title"]),
            Div(*text, classes=["card-text"])
        ]

        if "link" in card_data:
            body.append(
                Plain(
                    Link(Str(card_data["link"]["content"]),
                         url=card_data["link"]["href"],
                         classes=["btn", "btn-secondary", "mt-auto", "mx-4"])))

        card_img = Div(Plain(
            Image(url=card_data["image"],
                  title=title,
                  attributes={"width": "100%"})),
                       classes=["col-4"])
        card_body = Div(Div(*body, classes=["card-body"]), classes=["col-8"])
        if card_data["imageLocation"] == "Left":
            content = [card_img, card_body]
        else:
            content = [card_body, card_img]
        content = Div(Div(*content, classes=["row", "no-gutters"]),
                      classes=["card", "rounded-lg"])
        return content
Beispiel #3
0
def to_html(elem, code):
    div = Div(classes=mapping[code]['classes'])

    # prepare content
    # icon
    icon = Span(classes=mapping[code]['icon-classes'], attributes={'aria-hidden': 'true'})

    # title
    title = [icon, Space]
    if len(elem.content[0].content[1:]) == 0:
        title.append(Str(mapping[code]['title']))
    else:
        title.append(Str(elem.content[0].content[1:]))
    header = Header(*title, level=4, classes=['alert-heading'])

    # title = pf.Strong()
    # title.content = elem.content[0].content[1:]

    # if len(title.content) == 0:
        # title.content.append(pf.Str(' ' + mapping[code]['title']))

    # para = pf.Para(icon, title)

    # div.content.extend(icon)
    div.content.append(header)
    div.content.extend(elem.content[1:])

    return div
Beispiel #4
0
def get_header(attrib, suffix):
    if not suffix:
        header_attribute = 'header'
    else:
        header_attribute = SPLIT_DIAGRAM_NAME_FORMAT.format('header', suffix)

    if header_attribute in attrib:
        header_str = attrib[header_attribute]
        if header_str:
            msgs = header_str.split(',', 1)
            if len(msgs) != 2:
                level = 1
                title_str = msgs[0]
            else:
                try:
                    level = int(msgs[0].strip())
                    title_str = msgs[1]
                except:
                    level = 1
                    title_str = msgs[1]

            ident = make_new_ident(re.sub('[ \t\n]', '-', title_str))
            identities.add(ident)

            title = [Str(title_str)]
            header = Header(*title, level=level, identifier=ident)
            return header

    return None
Beispiel #5
0
    def insert_references(self, doc):
        def references():
            defns = []
            for elem in self.links.values():
                defns.append(
                        DefinitionItem(
                            [de_code(item, Strong) for item in elem.content],
                            [Definition(Para(Str(elem.url)))],
                            ),
                        )
            return DefinitionList(*defns)

        for (idx, elem) in enumerate(doc.content):
            if isinstance(elem, Header) and elem.level == 1 and \
                    stringify(elem) == 'COPYRIGHT':
                break
        doc.content.insert(idx, references())
        doc.content.insert(idx, Header(Str('REFERENCES'), level=1))
Beispiel #6
0
def prepare(doc):
    # Insert title
    title = doc.get_metadata('title')
    if title:
        title_elem = Header(Str(title), level=1, identifier='title')
        doc.content.insert(0, title_elem)
Beispiel #7
0
def finalize(doc):
    """
    Finalize document.

    Arguments
    ---------
        doc: pandoc document
    """
    # Loop on all listings definition

    if doc.format == "latex":
        # Add header-includes if necessary
        if "header-includes" not in doc.metadata:
            doc.metadata["header-includes"] = MetaList()
        # Convert header-includes to MetaList if necessary
        elif not isinstance(doc.metadata["header-includes"], MetaList):
            doc.metadata["header-includes"] = MetaList(
                doc.metadata["header-includes"])

        doc.metadata["header-includes"].append(
            MetaInlines(RawInline(r"\usepackage{tocloft}", "tex")))

    i = 0
    listof = []
    for category, definition in doc.defined.items():
        if definition["listing-title"] is not None:
            if doc.format == "latex":
                latex_category = re.sub("[^a-z]+", "", category)
                latex = (r"\newlistof{%s}{%s}{%s}"
                         r"\renewcommand{\cft%stitlefont}{\cfttoctitlefont}" %
                         (
                             latex_category,
                             latex_category,
                             convert_text(
                                 Plain(*definition["listing-title"]),
                                 input_format="panflute",
                                 output_format="latex",
                             ),
                             latex_category,
                         ))
                doc.metadata["header-includes"].append(
                    MetaInlines(RawInline(latex, "tex")))
                listof.append(r"\listof%s" % latex_category)
            else:
                classes = ["pandoc-numbering-listing"] + definition["classes"]

                if definition["listing-unnumbered"]:
                    classes.append("unnumbered")

                if definition["listing-unlisted"]:
                    classes.append("unlisted")

                if definition["listing-identifier"] is False:
                    header = Header(*definition["listing-title"],
                                    level=1,
                                    classes=classes)
                elif definition["listing-identifier"] is True:
                    header = Header(*definition["listing-title"],
                                    level=1,
                                    classes=classes)
                    header = convert_text(
                        convert_text(header,
                                     input_format="panflute",
                                     output_format="markdown"),
                        output_format="panflute",
                    )[0]
                else:
                    header = Header(
                        *definition["listing-title"],
                        level=1,
                        classes=classes,
                        identifier=definition["listing-identifier"])

                doc.content.insert(i, header)
                i = i + 1

                table = table_other(doc, category, definition)

                if table:
                    doc.content.insert(i, table)
                    i = i + 1

    if doc.format == "latex":
        header = (
            r"\ifdef{\mainmatter}"
            r"{\let\oldmainmatter\mainmatter\renewcommand{\mainmatter}[0]{%s\oldmainmatter}}"
            r"{}")
        doc.metadata["header-includes"].append(
            MetaInlines(RawInline(header % "\n".join(listof), "tex")))

        latex = r"\ifdef{\mainmatter}{}{%s}"
        doc.content.insert(0, RawBlock(latex % "\n".join(listof), "tex"))