Source code for fastpyxl.chart.title

# Copyright (c) 2010-2024 fastpyxl

from __future__ import annotations

from fastpyxl.typed_serialisable.base import Serialisable
from fastpyxl.typed_serialisable.fields import AliasField, Field

from fastpyxl.descriptors.excel import ExtensionList

from .text import Text, RichText
from .layout import Layout
from .shapes import GraphicalProperties

from fastpyxl.drawing.text import (
    Paragraph,
    RegularTextRun,
    ParagraphProperties,
    CharacterProperties,
)


[docs] class Title(Serialisable): tagname = "title" tx: Text | None = Field.element(expected_type=Text, allow_none=True, default=None) text = AliasField("tx", default=None) layout: Layout | None = Field.element(expected_type=Layout, allow_none=True, default=None) overlay: bool | None = Field.nested_bool(allow_none=True, default=None) spPr: GraphicalProperties | None = Field.element( expected_type=GraphicalProperties, allow_none=True, default=None ) graphicalProperties = AliasField("spPr", default=None) txPr: RichText | None = Field.element(expected_type=RichText, allow_none=True, default=None) body = AliasField("txPr", default=None) extLst: ExtensionList | None = Field.element( expected_type=ExtensionList, allow_none=True, serialize=False, default=None ) xml_order = ("tx", "layout", "overlay", "spPr", "txPr") def __init__( self, tx=None, layout=None, overlay=None, spPr=None, txPr=None, extLst=None, ): if tx is None: tx = Text() self.tx = tx self.layout = layout self.overlay = overlay self.spPr = spPr self.txPr = txPr self.extLst = extLst
[docs] def title_maker(text): title = Title() paraprops = ParagraphProperties() paraprops.defRPr = CharacterProperties() paras = [Paragraph(r=[RegularTextRun(t=s)], pPr=paraprops) for s in text.split("\n")] tx = title.tx assert tx is not None body = tx.rich assert body is not None body.paragraphs = paras return title
[docs] def title_from_value(value): if value is None: return None if isinstance(value, str): return title_maker(value) return value