# Source code for openpyxl.packaging.extended

    # Copyright (c) 2010-2024 openpyxl

    from openpyxl.descriptors.serialisable import Serialisable
    from openpyxl.descriptors import (
        Typed,
    )
    from openpyxl.descriptors.nested import (
        NestedText,
    )

    from openpyxl.xml.constants import XPROPS_NS
    from openpyxl import __version__

    class DigSigBlob(Serialisable):

        __elements__ = __attrs__ = ()

    class VectorLpstr(Serialisable):

        __elements__ = __attrs__ = ()

    class VectorVariant(Serialisable):

        __elements__ = __attrs__ = ()

    class ExtendedProperties(Serialisable):

        """
        See 22.2

        Most of this is irrelevant but Excel is very picky about the version number

        It uses XX.YYYY (Version.Build) and expects everyone else to

        We provide Major.Minor and the full version in the application name
        """

        tagname = "Properties"

        Template = NestedText(expected_type=str, allow_none=True)
        Manager = NestedText(expected_type=str, allow_none=True)
        Company = NestedText(expected_type=str, allow_none=True)
        Pages = NestedText(expected_type=int, allow_none=True)
        Words = NestedText(expected_type=int,allow_none=True)
        Characters = NestedText(expected_type=int, allow_none=True)
        PresentationFormat = NestedText(expected_type=str, allow_none=True)
        Lines = NestedText(expected_type=int, allow_none=True)
        Paragraphs = NestedText(expected_type=int, allow_none=True)
        Slides = NestedText(expected_type=int, allow_none=True)
        Notes = NestedText(expected_type=int, allow_none=True)
        TotalTime = NestedText(expected_type=int, allow_none=True)
        HiddenSlides = NestedText(expected_type=int, allow_none=True)
        MMClips = NestedText(expected_type=int, allow_none=True)
        ScaleCrop = NestedText(expected_type=bool, allow_none=True)
        HeadingPairs = Typed(expected_type=VectorVariant, allow_none=True)
        TitlesOfParts = Typed(expected_type=VectorLpstr, allow_none=True)
        LinksUpToDate = NestedText(expected_type=bool, allow_none=True)
        CharactersWithSpaces = NestedText(expected_type=int, allow_none=True)
        SharedDoc = NestedText(expected_type=bool, allow_none=True)
        HyperlinkBase = NestedText(expected_type=str, allow_none=True)
        HLinks = Typed(expected_type=VectorVariant, allow_none=True)
        HyperlinksChanged = NestedText(expected_type=bool, allow_none=True)
        DigSig = Typed(expected_type=DigSigBlob, allow_none=True)
        Application = NestedText(expected_type=str, allow_none=True)
        AppVersion = NestedText(expected_type=str, allow_none=True)
        DocSecurity = NestedText(expected_type=int, allow_none=True)

        __elements__ = ('Application', 'AppVersion', 'DocSecurity', 'ScaleCrop',
                        'LinksUpToDate', 'SharedDoc', 'HyperlinksChanged')

        def __init__(self,
                     Template=None,
                     Manager=None,
                     Company=None,
                     Pages=None,
                     Words=None,
                     Characters=None,
                     PresentationFormat=None,
                     Lines=None,
                     Paragraphs=None,
                     Slides=None,
                     Notes=None,
                     TotalTime=None,
                     HiddenSlides=None,
                     MMClips=None,
                     ScaleCrop=None,
                     HeadingPairs=None,
                     TitlesOfParts=None,
                     LinksUpToDate=None,
                     CharactersWithSpaces=None,
                     SharedDoc=None,
                     HyperlinkBase=None,
                     HLinks=None,
                     HyperlinksChanged=None,
                     DigSig=None,
                     Application=None,
                     AppVersion=None,
                     DocSecurity=None,
                    ):
            self.Template = Template
            self.Manager = Manager
            self.Company = Company
            self.Pages = Pages
            self.Words = Words
            self.Characters = Characters
            self.PresentationFormat = PresentationFormat
            self.Lines = Lines
            self.Paragraphs = Paragraphs
            self.Slides = Slides
            self.Notes = Notes
            self.TotalTime = TotalTime
            self.HiddenSlides = HiddenSlides
            self.MMClips = MMClips
            self.ScaleCrop = ScaleCrop
            self.HeadingPairs = None
            self.TitlesOfParts = None
            self.LinksUpToDate = LinksUpToDate
            self.CharactersWithSpaces = CharactersWithSpaces
            self.SharedDoc = SharedDoc
            self.HyperlinkBase = HyperlinkBase
            self.HLinks = None
            self.HyperlinksChanged = HyperlinksChanged
            self.DigSig = None
            self.Application = f"Microsoft Excel Compatible / Openpyxl {__version__}"
            self.AppVersion = ".".join(__version__.split(".")[:-1])
            self.DocSecurity = DocSecurity

        def to_tree(self):
            tree = super().to_tree()
            tree.set("xmlns", XPROPS_NS)
            return tree