mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-09-06 02:44:18 +00:00
Version 0.1
Added sidebar, Dashboard, Line Graph
This commit is contained in:
4
.venv/Lib/site-packages/openpyxl/drawing/__init__.py
Normal file
4
.venv/Lib/site-packages/openpyxl/drawing/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
|
||||
from .drawing import Drawing
|
435
.venv/Lib/site-packages/openpyxl/drawing/colors.py
Normal file
435
.venv/Lib/site-packages/openpyxl/drawing/colors.py
Normal file
@@ -0,0 +1,435 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Alias,
|
||||
Typed,
|
||||
Integer,
|
||||
Set,
|
||||
MinMax,
|
||||
)
|
||||
from openpyxl.descriptors.excel import Percentage
|
||||
from openpyxl.descriptors.nested import (
|
||||
NestedNoneSet,
|
||||
NestedValue,
|
||||
NestedInteger,
|
||||
EmptyTag,
|
||||
)
|
||||
|
||||
from openpyxl.styles.colors import RGB
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
|
||||
PRESET_COLORS = [
|
||||
'aliceBlue', 'antiqueWhite', 'aqua', 'aquamarine',
|
||||
'azure', 'beige', 'bisque', 'black', 'blanchedAlmond', 'blue',
|
||||
'blueViolet', 'brown', 'burlyWood', 'cadetBlue', 'chartreuse',
|
||||
'chocolate', 'coral', 'cornflowerBlue', 'cornsilk', 'crimson', 'cyan',
|
||||
'darkBlue', 'darkCyan', 'darkGoldenrod', 'darkGray', 'darkGrey',
|
||||
'darkGreen', 'darkKhaki', 'darkMagenta', 'darkOliveGreen', 'darkOrange',
|
||||
'darkOrchid', 'darkRed', 'darkSalmon', 'darkSeaGreen', 'darkSlateBlue',
|
||||
'darkSlateGray', 'darkSlateGrey', 'darkTurquoise', 'darkViolet',
|
||||
'dkBlue', 'dkCyan', 'dkGoldenrod', 'dkGray', 'dkGrey', 'dkGreen',
|
||||
'dkKhaki', 'dkMagenta', 'dkOliveGreen', 'dkOrange', 'dkOrchid', 'dkRed',
|
||||
'dkSalmon', 'dkSeaGreen', 'dkSlateBlue', 'dkSlateGray', 'dkSlateGrey',
|
||||
'dkTurquoise', 'dkViolet', 'deepPink', 'deepSkyBlue', 'dimGray',
|
||||
'dimGrey', 'dodgerBlue', 'firebrick', 'floralWhite', 'forestGreen',
|
||||
'fuchsia', 'gainsboro', 'ghostWhite', 'gold', 'goldenrod', 'gray',
|
||||
'grey', 'green', 'greenYellow', 'honeydew', 'hotPink', 'indianRed',
|
||||
'indigo', 'ivory', 'khaki', 'lavender', 'lavenderBlush', 'lawnGreen',
|
||||
'lemonChiffon', 'lightBlue', 'lightCoral', 'lightCyan',
|
||||
'lightGoldenrodYellow', 'lightGray', 'lightGrey', 'lightGreen',
|
||||
'lightPink', 'lightSalmon', 'lightSeaGreen', 'lightSkyBlue',
|
||||
'lightSlateGray', 'lightSlateGrey', 'lightSteelBlue', 'lightYellow',
|
||||
'ltBlue', 'ltCoral', 'ltCyan', 'ltGoldenrodYellow', 'ltGray', 'ltGrey',
|
||||
'ltGreen', 'ltPink', 'ltSalmon', 'ltSeaGreen', 'ltSkyBlue',
|
||||
'ltSlateGray', 'ltSlateGrey', 'ltSteelBlue', 'ltYellow', 'lime',
|
||||
'limeGreen', 'linen', 'magenta', 'maroon', 'medAquamarine', 'medBlue',
|
||||
'medOrchid', 'medPurple', 'medSeaGreen', 'medSlateBlue',
|
||||
'medSpringGreen', 'medTurquoise', 'medVioletRed', 'mediumAquamarine',
|
||||
'mediumBlue', 'mediumOrchid', 'mediumPurple', 'mediumSeaGreen',
|
||||
'mediumSlateBlue', 'mediumSpringGreen', 'mediumTurquoise',
|
||||
'mediumVioletRed', 'midnightBlue', 'mintCream', 'mistyRose', 'moccasin',
|
||||
'navajoWhite', 'navy', 'oldLace', 'olive', 'oliveDrab', 'orange',
|
||||
'orangeRed', 'orchid', 'paleGoldenrod', 'paleGreen', 'paleTurquoise',
|
||||
'paleVioletRed', 'papayaWhip', 'peachPuff', 'peru', 'pink', 'plum',
|
||||
'powderBlue', 'purple', 'red', 'rosyBrown', 'royalBlue', 'saddleBrown',
|
||||
'salmon', 'sandyBrown', 'seaGreen', 'seaShell', 'sienna', 'silver',
|
||||
'skyBlue', 'slateBlue', 'slateGray', 'slateGrey', 'snow', 'springGreen',
|
||||
'steelBlue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet',
|
||||
'wheat', 'white', 'whiteSmoke', 'yellow', 'yellowGreen'
|
||||
]
|
||||
|
||||
|
||||
SCHEME_COLORS= ['bg1', 'tx1', 'bg2', 'tx2', 'accent1', 'accent2', 'accent3',
|
||||
'accent4', 'accent5', 'accent6', 'hlink', 'folHlink', 'phClr', 'dk1', 'lt1',
|
||||
'dk2', 'lt2'
|
||||
]
|
||||
|
||||
|
||||
class Transform(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class SystemColor(Serialisable):
|
||||
|
||||
tagname = "sysClr"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
# color transform options
|
||||
tint = NestedInteger(allow_none=True)
|
||||
shade = NestedInteger(allow_none=True)
|
||||
comp = Typed(expected_type=Transform, allow_none=True)
|
||||
inv = Typed(expected_type=Transform, allow_none=True)
|
||||
gray = Typed(expected_type=Transform, allow_none=True)
|
||||
alpha = NestedInteger(allow_none=True)
|
||||
alphaOff = NestedInteger(allow_none=True)
|
||||
alphaMod = NestedInteger(allow_none=True)
|
||||
hue = NestedInteger(allow_none=True)
|
||||
hueOff = NestedInteger(allow_none=True)
|
||||
hueMod = NestedInteger(allow_none=True)
|
||||
sat = NestedInteger(allow_none=True)
|
||||
satOff = NestedInteger(allow_none=True)
|
||||
satMod = NestedInteger(allow_none=True)
|
||||
lum = NestedInteger(allow_none=True)
|
||||
lumOff = NestedInteger(allow_none=True)
|
||||
lumMod = NestedInteger(allow_none=True)
|
||||
red = NestedInteger(allow_none=True)
|
||||
redOff = NestedInteger(allow_none=True)
|
||||
redMod = NestedInteger(allow_none=True)
|
||||
green = NestedInteger(allow_none=True)
|
||||
greenOff = NestedInteger(allow_none=True)
|
||||
greenMod = NestedInteger(allow_none=True)
|
||||
blue = NestedInteger(allow_none=True)
|
||||
blueOff = NestedInteger(allow_none=True)
|
||||
blueMod = NestedInteger(allow_none=True)
|
||||
gamma = Typed(expected_type=Transform, allow_none=True)
|
||||
invGamma = Typed(expected_type=Transform, allow_none=True)
|
||||
|
||||
val = Set(values=( ['scrollBar', 'background', 'activeCaption',
|
||||
'inactiveCaption', 'menu', 'window', 'windowFrame', 'menuText',
|
||||
'windowText', 'captionText', 'activeBorder', 'inactiveBorder',
|
||||
'appWorkspace', 'highlight', 'highlightText', 'btnFace', 'btnShadow',
|
||||
'grayText', 'btnText', 'inactiveCaptionText', 'btnHighlight',
|
||||
'3dDkShadow', '3dLight', 'infoText', 'infoBk', 'hotLight',
|
||||
'gradientActiveCaption', 'gradientInactiveCaption', 'menuHighlight',
|
||||
'menuBar'] )
|
||||
)
|
||||
lastClr = RGB(allow_none=True)
|
||||
|
||||
__elements__ = ('tint', 'shade', 'comp', 'inv', 'gray', "alpha",
|
||||
"alphaOff", "alphaMod", "hue", "hueOff", "hueMod", "hueOff", "sat",
|
||||
"satOff", "satMod", "lum", "lumOff", "lumMod", "red", "redOff", "redMod",
|
||||
"green", "greenOff", "greenMod", "blue", "blueOff", "blueMod", "gamma",
|
||||
"invGamma")
|
||||
|
||||
def __init__(self,
|
||||
val="windowText",
|
||||
lastClr=None,
|
||||
tint=None,
|
||||
shade=None,
|
||||
comp=None,
|
||||
inv=None,
|
||||
gray=None,
|
||||
alpha=None,
|
||||
alphaOff=None,
|
||||
alphaMod=None,
|
||||
hue=None,
|
||||
hueOff=None,
|
||||
hueMod=None,
|
||||
sat=None,
|
||||
satOff=None,
|
||||
satMod=None,
|
||||
lum=None,
|
||||
lumOff=None,
|
||||
lumMod=None,
|
||||
red=None,
|
||||
redOff=None,
|
||||
redMod=None,
|
||||
green=None,
|
||||
greenOff=None,
|
||||
greenMod=None,
|
||||
blue=None,
|
||||
blueOff=None,
|
||||
blueMod=None,
|
||||
gamma=None,
|
||||
invGamma=None
|
||||
):
|
||||
self.val = val
|
||||
self.lastClr = lastClr
|
||||
self.tint = tint
|
||||
self.shade = shade
|
||||
self.comp = comp
|
||||
self.inv = inv
|
||||
self.gray = gray
|
||||
self.alpha = alpha
|
||||
self.alphaOff = alphaOff
|
||||
self.alphaMod = alphaMod
|
||||
self.hue = hue
|
||||
self.hueOff = hueOff
|
||||
self.hueMod = hueMod
|
||||
self.sat = sat
|
||||
self.satOff = satOff
|
||||
self.satMod = satMod
|
||||
self.lum = lum
|
||||
self.lumOff = lumOff
|
||||
self.lumMod = lumMod
|
||||
self.red = red
|
||||
self.redOff = redOff
|
||||
self.redMod = redMod
|
||||
self.green = green
|
||||
self.greenOff = greenOff
|
||||
self.greenMod = greenMod
|
||||
self.blue = blue
|
||||
self.blueOff = blueOff
|
||||
self.blueMod = blueMod
|
||||
self.gamma = gamma
|
||||
self.invGamma = invGamma
|
||||
|
||||
|
||||
class HSLColor(Serialisable):
|
||||
|
||||
tagname = "hslClr"
|
||||
|
||||
hue = Integer()
|
||||
sat = MinMax(min=0, max=100)
|
||||
lum = MinMax(min=0, max=100)
|
||||
|
||||
#TODO add color transform options
|
||||
|
||||
def __init__(self,
|
||||
hue=None,
|
||||
sat=None,
|
||||
lum=None,
|
||||
):
|
||||
self.hue = hue
|
||||
self.sat = sat
|
||||
self.lum = lum
|
||||
|
||||
|
||||
|
||||
class RGBPercent(Serialisable):
|
||||
|
||||
tagname = "rgbClr"
|
||||
|
||||
r = MinMax(min=0, max=100)
|
||||
g = MinMax(min=0, max=100)
|
||||
b = MinMax(min=0, max=100)
|
||||
|
||||
#TODO add color transform options
|
||||
|
||||
def __init__(self,
|
||||
r=None,
|
||||
g=None,
|
||||
b=None,
|
||||
):
|
||||
self.r = r
|
||||
self.g = g
|
||||
self.b = b
|
||||
|
||||
|
||||
class SchemeColor(Serialisable):
|
||||
|
||||
tagname = "schemeClr"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
tint = NestedInteger(allow_none=True)
|
||||
shade = NestedInteger(allow_none=True)
|
||||
comp = EmptyTag(allow_none=True)
|
||||
inv = NestedInteger(allow_none=True)
|
||||
gray = NestedInteger(allow_none=True)
|
||||
alpha = NestedInteger(allow_none=True)
|
||||
alphaOff = NestedInteger(allow_none=True)
|
||||
alphaMod = NestedInteger(allow_none=True)
|
||||
hue = NestedInteger(allow_none=True)
|
||||
hueOff = NestedInteger(allow_none=True)
|
||||
hueMod = NestedInteger(allow_none=True)
|
||||
sat = NestedInteger(allow_none=True)
|
||||
satOff = NestedInteger(allow_none=True)
|
||||
satMod = NestedInteger(allow_none=True)
|
||||
lum = NestedInteger(allow_none=True)
|
||||
lumOff = NestedInteger(allow_none=True)
|
||||
lumMod = NestedInteger(allow_none=True)
|
||||
red = NestedInteger(allow_none=True)
|
||||
redOff = NestedInteger(allow_none=True)
|
||||
redMod = NestedInteger(allow_none=True)
|
||||
green = NestedInteger(allow_none=True)
|
||||
greenOff = NestedInteger(allow_none=True)
|
||||
greenMod = NestedInteger(allow_none=True)
|
||||
blue = NestedInteger(allow_none=True)
|
||||
blueOff = NestedInteger(allow_none=True)
|
||||
blueMod = NestedInteger(allow_none=True)
|
||||
gamma = EmptyTag(allow_none=True)
|
||||
invGamma = EmptyTag(allow_none=True)
|
||||
val = Set(values=(['bg1', 'tx1', 'bg2', 'tx2', 'accent1', 'accent2',
|
||||
'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink', 'phClr',
|
||||
'dk1', 'lt1', 'dk2', 'lt2']))
|
||||
|
||||
__elements__ = ('tint', 'shade', 'comp', 'inv', 'gray', 'alpha',
|
||||
'alphaOff', 'alphaMod', 'hue', 'hueOff', 'hueMod', 'sat', 'satOff',
|
||||
'satMod', 'lum', 'lumMod', 'lumOff', 'red', 'redOff', 'redMod', 'green',
|
||||
'greenOff', 'greenMod', 'blue', 'blueOff', 'blueMod', 'gamma',
|
||||
'invGamma')
|
||||
|
||||
def __init__(self,
|
||||
tint=None,
|
||||
shade=None,
|
||||
comp=None,
|
||||
inv=None,
|
||||
gray=None,
|
||||
alpha=None,
|
||||
alphaOff=None,
|
||||
alphaMod=None,
|
||||
hue=None,
|
||||
hueOff=None,
|
||||
hueMod=None,
|
||||
sat=None,
|
||||
satOff=None,
|
||||
satMod=None,
|
||||
lum=None,
|
||||
lumOff=None,
|
||||
lumMod=None,
|
||||
red=None,
|
||||
redOff=None,
|
||||
redMod=None,
|
||||
green=None,
|
||||
greenOff=None,
|
||||
greenMod=None,
|
||||
blue=None,
|
||||
blueOff=None,
|
||||
blueMod=None,
|
||||
gamma=None,
|
||||
invGamma=None,
|
||||
val=None,
|
||||
):
|
||||
self.tint = tint
|
||||
self.shade = shade
|
||||
self.comp = comp
|
||||
self.inv = inv
|
||||
self.gray = gray
|
||||
self.alpha = alpha
|
||||
self.alphaOff = alphaOff
|
||||
self.alphaMod = alphaMod
|
||||
self.hue = hue
|
||||
self.hueOff = hueOff
|
||||
self.hueMod = hueMod
|
||||
self.sat = sat
|
||||
self.satOff = satOff
|
||||
self.satMod = satMod
|
||||
self.lum = lum
|
||||
self.lumOff = lumOff
|
||||
self.lumMod = lumMod
|
||||
self.red = red
|
||||
self.redOff = redOff
|
||||
self.redMod = redMod
|
||||
self.green = green
|
||||
self.greenOff = greenOff
|
||||
self.greenMod = greenMod
|
||||
self.blue = blue
|
||||
self.blueOff = blueOff
|
||||
self.blueMod = blueMod
|
||||
self.gamma = gamma
|
||||
self.invGamma = invGamma
|
||||
self.val = val
|
||||
|
||||
class ColorChoice(Serialisable):
|
||||
|
||||
tagname = "colorChoice"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
scrgbClr = Typed(expected_type=RGBPercent, allow_none=True)
|
||||
RGBPercent = Alias('scrgbClr')
|
||||
srgbClr = NestedValue(expected_type=str, allow_none=True) # needs pattern and can have transform
|
||||
RGB = Alias('srgbClr')
|
||||
hslClr = Typed(expected_type=HSLColor, allow_none=True)
|
||||
sysClr = Typed(expected_type=SystemColor, allow_none=True)
|
||||
schemeClr = Typed(expected_type=SchemeColor, allow_none=True)
|
||||
prstClr = NestedNoneSet(values=PRESET_COLORS)
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
scrgbClr=None,
|
||||
srgbClr=None,
|
||||
hslClr=None,
|
||||
sysClr=None,
|
||||
schemeClr=None,
|
||||
prstClr=None,
|
||||
):
|
||||
self.scrgbClr = scrgbClr
|
||||
self.srgbClr = srgbClr
|
||||
self.hslClr = hslClr
|
||||
self.sysClr = sysClr
|
||||
self.schemeClr = schemeClr
|
||||
self.prstClr = prstClr
|
||||
|
||||
_COLOR_SET = ('dk1', 'lt1', 'dk2', 'lt2', 'accent1', 'accent2', 'accent3',
|
||||
'accent4', 'accent5', 'accent6', 'hlink', 'folHlink')
|
||||
|
||||
|
||||
class ColorMapping(Serialisable):
|
||||
|
||||
tagname = "clrMapOvr"
|
||||
|
||||
bg1 = Set(values=_COLOR_SET)
|
||||
tx1 = Set(values=_COLOR_SET)
|
||||
bg2 = Set(values=_COLOR_SET)
|
||||
tx2 = Set(values=_COLOR_SET)
|
||||
accent1 = Set(values=_COLOR_SET)
|
||||
accent2 = Set(values=_COLOR_SET)
|
||||
accent3 = Set(values=_COLOR_SET)
|
||||
accent4 = Set(values=_COLOR_SET)
|
||||
accent5 = Set(values=_COLOR_SET)
|
||||
accent6 = Set(values=_COLOR_SET)
|
||||
hlink = Set(values=_COLOR_SET)
|
||||
folHlink = Set(values=_COLOR_SET)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
bg1="lt1",
|
||||
tx1="dk1",
|
||||
bg2="lt2",
|
||||
tx2="dk2",
|
||||
accent1="accent1",
|
||||
accent2="accent2",
|
||||
accent3="accent3",
|
||||
accent4="accent4",
|
||||
accent5="accent5",
|
||||
accent6="accent6",
|
||||
hlink="hlink",
|
||||
folHlink="folHlink",
|
||||
extLst=None,
|
||||
):
|
||||
self.bg1 = bg1
|
||||
self.tx1 = tx1
|
||||
self.bg2 = bg2
|
||||
self.tx2 = tx2
|
||||
self.accent1 = accent1
|
||||
self.accent2 = accent2
|
||||
self.accent3 = accent3
|
||||
self.accent4 = accent4
|
||||
self.accent5 = accent5
|
||||
self.accent6 = accent6
|
||||
self.hlink = hlink
|
||||
self.folHlink = folHlink
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class ColorChoiceDescriptor(Typed):
|
||||
"""
|
||||
Objects can choose from 7 different kinds of color system.
|
||||
Assume RGBHex if a string is passed in.
|
||||
"""
|
||||
|
||||
expected_type = ColorChoice
|
||||
allow_none = True
|
||||
|
||||
def __set__(self, instance, value):
|
||||
if isinstance(value, str):
|
||||
value = ColorChoice(srgbClr=value)
|
||||
else:
|
||||
if hasattr(self, "namespace") and value is not None:
|
||||
value.namespace = self.namespace
|
||||
super(ColorChoiceDescriptor, self).__set__(instance, value)
|
144
.venv/Lib/site-packages/openpyxl/drawing/connector.py
Normal file
144
.venv/Lib/site-packages/openpyxl/drawing/connector.py
Normal file
@@ -0,0 +1,144 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Bool,
|
||||
Integer,
|
||||
String,
|
||||
Alias,
|
||||
)
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
from openpyxl.chart.shapes import GraphicalProperties
|
||||
from openpyxl.chart.text import RichText
|
||||
|
||||
from .properties import (
|
||||
NonVisualDrawingProps,
|
||||
NonVisualDrawingShapeProps,
|
||||
)
|
||||
from .geometry import ShapeStyle
|
||||
|
||||
class Connection(Serialisable):
|
||||
|
||||
id = Integer()
|
||||
idx = Integer()
|
||||
|
||||
def __init__(self,
|
||||
id=None,
|
||||
idx=None,
|
||||
):
|
||||
self.id = id
|
||||
self.idx = idx
|
||||
|
||||
|
||||
class ConnectorLocking(Serialisable):
|
||||
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
extLst=None,
|
||||
):
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class NonVisualConnectorProperties(Serialisable):
|
||||
|
||||
cxnSpLocks = Typed(expected_type=ConnectorLocking, allow_none=True)
|
||||
stCxn = Typed(expected_type=Connection, allow_none=True)
|
||||
endCxn = Typed(expected_type=Connection, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
cxnSpLocks=None,
|
||||
stCxn=None,
|
||||
endCxn=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.cxnSpLocks = cxnSpLocks
|
||||
self.stCxn = stCxn
|
||||
self.endCxn = endCxn
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class ConnectorNonVisual(Serialisable):
|
||||
|
||||
cNvPr = Typed(expected_type=NonVisualDrawingProps, )
|
||||
cNvCxnSpPr = Typed(expected_type=NonVisualConnectorProperties, )
|
||||
|
||||
__elements__ = ("cNvPr", "cNvCxnSpPr",)
|
||||
|
||||
def __init__(self,
|
||||
cNvPr=None,
|
||||
cNvCxnSpPr=None,
|
||||
):
|
||||
self.cNvPr = cNvPr
|
||||
self.cNvCxnSpPr = cNvCxnSpPr
|
||||
|
||||
|
||||
class ConnectorShape(Serialisable):
|
||||
|
||||
tagname = "cxnSp"
|
||||
|
||||
nvCxnSpPr = Typed(expected_type=ConnectorNonVisual)
|
||||
spPr = Typed(expected_type=GraphicalProperties)
|
||||
style = Typed(expected_type=ShapeStyle, allow_none=True)
|
||||
macro = String(allow_none=True)
|
||||
fPublished = Bool(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
nvCxnSpPr=None,
|
||||
spPr=None,
|
||||
style=None,
|
||||
macro=None,
|
||||
fPublished=None,
|
||||
):
|
||||
self.nvCxnSpPr = nvCxnSpPr
|
||||
self.spPr = spPr
|
||||
self.style = style
|
||||
self.macro = macro
|
||||
self.fPublished = fPublished
|
||||
|
||||
|
||||
class ShapeMeta(Serialisable):
|
||||
|
||||
tagname = "nvSpPr"
|
||||
|
||||
cNvPr = Typed(expected_type=NonVisualDrawingProps)
|
||||
cNvSpPr = Typed(expected_type=NonVisualDrawingShapeProps)
|
||||
|
||||
def __init__(self, cNvPr=None, cNvSpPr=None):
|
||||
self.cNvPr = cNvPr
|
||||
self.cNvSpPr = cNvSpPr
|
||||
|
||||
|
||||
class Shape(Serialisable):
|
||||
|
||||
macro = String(allow_none=True)
|
||||
textlink = String(allow_none=True)
|
||||
fPublished = Bool(allow_none=True)
|
||||
fLocksText = Bool(allow_none=True)
|
||||
nvSpPr = Typed(expected_type=ShapeMeta, allow_none=True)
|
||||
meta = Alias("nvSpPr")
|
||||
spPr = Typed(expected_type=GraphicalProperties)
|
||||
graphicalProperties = Alias("spPr")
|
||||
style = Typed(expected_type=ShapeStyle, allow_none=True)
|
||||
txBody = Typed(expected_type=RichText, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
macro=None,
|
||||
textlink=None,
|
||||
fPublished=None,
|
||||
fLocksText=None,
|
||||
nvSpPr=None,
|
||||
spPr=None,
|
||||
style=None,
|
||||
txBody=None,
|
||||
):
|
||||
self.macro = macro
|
||||
self.textlink = textlink
|
||||
self.fPublished = fPublished
|
||||
self.fLocksText = fLocksText
|
||||
self.nvSpPr = nvSpPr
|
||||
self.spPr = spPr
|
||||
self.style = style
|
||||
self.txBody = txBody
|
102
.venv/Lib/site-packages/openpyxl/drawing/drawing.py
Normal file
102
.venv/Lib/site-packages/openpyxl/drawing/drawing.py
Normal file
@@ -0,0 +1,102 @@
|
||||
from __future__ import division
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
import math
|
||||
|
||||
from openpyxl.compat import deprecated
|
||||
|
||||
from openpyxl.styles.colors import Color, BLACK, WHITE
|
||||
from openpyxl.utils.units import (
|
||||
pixels_to_EMU,
|
||||
EMU_to_pixels,
|
||||
short_color,
|
||||
)
|
||||
|
||||
|
||||
class Drawing(object):
|
||||
""" a drawing object - eg container for shapes or charts
|
||||
we assume user specifies dimensions in pixels; units are
|
||||
converted to EMU in the drawing part
|
||||
"""
|
||||
|
||||
count = 0
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.name = ''
|
||||
self.description = ''
|
||||
self.coordinates = ((1, 2), (16, 8))
|
||||
self.left = 0
|
||||
self.top = 0
|
||||
self._width = 21 # default in px
|
||||
self._height = 192 #default in px
|
||||
self.resize_proportional = False
|
||||
self.rotation = 0
|
||||
self.anchortype = "absolute"
|
||||
self.anchorcol = 0 # left cell
|
||||
self.anchorrow = 0 # top row
|
||||
|
||||
|
||||
@property
|
||||
def width(self):
|
||||
return self._width
|
||||
|
||||
@width.setter
|
||||
def width(self, w):
|
||||
if self.resize_proportional and w:
|
||||
ratio = self._height / self._width
|
||||
self._height = round(ratio * w)
|
||||
self._width = w
|
||||
|
||||
@property
|
||||
def height(self):
|
||||
return self._height
|
||||
|
||||
@height.setter
|
||||
def height(self, h):
|
||||
if self.resize_proportional and h:
|
||||
ratio = self._width / self._height
|
||||
self._width = round(ratio * h)
|
||||
self._height = h
|
||||
|
||||
def set_dimension(self, w=0, h=0):
|
||||
|
||||
xratio = w / self._width
|
||||
yratio = h / self._height
|
||||
|
||||
if self.resize_proportional and w and h:
|
||||
if (xratio * self._height) < h:
|
||||
self._height = math.ceil(xratio * self._height)
|
||||
self._width = w
|
||||
else:
|
||||
self._width = math.ceil(yratio * self._width)
|
||||
self._height = h
|
||||
|
||||
@deprecated("Private method used when serialising")
|
||||
def get_emu_dimensions(self):
|
||||
""" return (x, y, w, h) in EMU """
|
||||
|
||||
return (pixels_to_EMU(self.left), pixels_to_EMU(self.top),
|
||||
pixels_to_EMU(self._width), pixels_to_EMU(self._height))
|
||||
|
||||
|
||||
@property
|
||||
def anchor(self):
|
||||
from .spreadsheet_drawing import (
|
||||
OneCellAnchor,
|
||||
TwoCellAnchor,
|
||||
AbsoluteAnchor)
|
||||
if self.anchortype == "absolute":
|
||||
anchor = AbsoluteAnchor()
|
||||
anchor.pos.x = pixels_to_EMU(self.left)
|
||||
anchor.pos.y = pixels_to_EMU(self.top)
|
||||
|
||||
elif self.anchortype == "oneCell":
|
||||
anchor = OneCellAnchor()
|
||||
anchor._from.col = self.anchorcol
|
||||
anchor._from.row = self.anchorrow
|
||||
|
||||
anchor.ext.width = pixels_to_EMU(self._width)
|
||||
anchor.ext.height = pixels_to_EMU(self._height)
|
||||
|
||||
return anchor
|
409
.venv/Lib/site-packages/openpyxl/drawing/effect.py
Normal file
409
.venv/Lib/site-packages/openpyxl/drawing/effect.py
Normal file
@@ -0,0 +1,409 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
String,
|
||||
Set,
|
||||
Bool,
|
||||
Integer,
|
||||
NoneSet,
|
||||
Float,
|
||||
)
|
||||
|
||||
|
||||
from .colors import ColorChoice
|
||||
|
||||
|
||||
class TintEffect(Serialisable):
|
||||
|
||||
tagname = "tint"
|
||||
|
||||
hue = Integer()
|
||||
amt = Integer()
|
||||
|
||||
def __init__(self,
|
||||
hue=0,
|
||||
amt=0,
|
||||
):
|
||||
self.hue = hue
|
||||
self.amt = amt
|
||||
|
||||
|
||||
class LuminanceEffect(Serialisable):
|
||||
|
||||
tagname = "lum"
|
||||
|
||||
bright = Integer() #Pct ?
|
||||
contrast = Integer() #Pct#
|
||||
|
||||
def __init__(self,
|
||||
bright=0,
|
||||
contrast=0,
|
||||
):
|
||||
self.bright = bright
|
||||
self.contrast = contrast
|
||||
|
||||
|
||||
class HSLEffect(Serialisable):
|
||||
|
||||
hue = Integer()
|
||||
sat = Integer()
|
||||
lum = Integer()
|
||||
|
||||
def __init__(self,
|
||||
hue=None,
|
||||
sat=None,
|
||||
lum=None,
|
||||
):
|
||||
self.hue = hue
|
||||
self.sat = sat
|
||||
self.lum = lum
|
||||
|
||||
|
||||
class GrayscaleEffect(Serialisable):
|
||||
|
||||
tagname = "grayscl"
|
||||
|
||||
|
||||
class FillOverlayEffect(Serialisable):
|
||||
|
||||
blend = Set(values=(['over', 'mult', 'screen', 'darken', 'lighten']))
|
||||
|
||||
def __init__(self,
|
||||
blend=None,
|
||||
):
|
||||
self.blend = blend
|
||||
|
||||
|
||||
class DuotoneEffect(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class ColorReplaceEffect(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class Color(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class ColorChangeEffect(Serialisable):
|
||||
|
||||
useA = Bool(allow_none=True)
|
||||
clrFrom = Typed(expected_type=Color, )
|
||||
clrTo = Typed(expected_type=Color, )
|
||||
|
||||
def __init__(self,
|
||||
useA=None,
|
||||
clrFrom=None,
|
||||
clrTo=None,
|
||||
):
|
||||
self.useA = useA
|
||||
self.clrFrom = clrFrom
|
||||
self.clrTo = clrTo
|
||||
|
||||
|
||||
class BlurEffect(Serialisable):
|
||||
|
||||
rad = Float()
|
||||
grow = Bool(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
rad=None,
|
||||
grow=None,
|
||||
):
|
||||
self.rad = rad
|
||||
self.grow = grow
|
||||
|
||||
|
||||
class BiLevelEffect(Serialisable):
|
||||
|
||||
thresh = Integer()
|
||||
|
||||
def __init__(self,
|
||||
thresh=None,
|
||||
):
|
||||
self.thresh = thresh
|
||||
|
||||
|
||||
class AlphaReplaceEffect(Serialisable):
|
||||
|
||||
a = Integer()
|
||||
|
||||
def __init__(self,
|
||||
a=None,
|
||||
):
|
||||
self.a = a
|
||||
|
||||
|
||||
class AlphaModulateFixedEffect(Serialisable):
|
||||
|
||||
amt = Integer()
|
||||
|
||||
def __init__(self,
|
||||
amt=None,
|
||||
):
|
||||
self.amt = amt
|
||||
|
||||
|
||||
class EffectContainer(Serialisable):
|
||||
|
||||
type = Set(values=(['sib', 'tree']))
|
||||
name = String(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
type=None,
|
||||
name=None,
|
||||
):
|
||||
self.type = type
|
||||
self.name = name
|
||||
|
||||
|
||||
class AlphaModulateEffect(Serialisable):
|
||||
|
||||
cont = Typed(expected_type=EffectContainer, )
|
||||
|
||||
def __init__(self,
|
||||
cont=None,
|
||||
):
|
||||
self.cont = cont
|
||||
|
||||
|
||||
class AlphaInverseEffect(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class AlphaFloorEffect(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class AlphaCeilingEffect(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class AlphaBiLevelEffect(Serialisable):
|
||||
|
||||
thresh = Integer()
|
||||
|
||||
def __init__(self,
|
||||
thresh=None,
|
||||
):
|
||||
self.thresh = thresh
|
||||
|
||||
|
||||
class GlowEffect(ColorChoice):
|
||||
|
||||
rad = Float()
|
||||
# uses element group EG_ColorChoice
|
||||
scrgbClr = ColorChoice.scrgbClr
|
||||
srgbClr = ColorChoice.srgbClr
|
||||
hslClr = ColorChoice.hslClr
|
||||
sysClr = ColorChoice.sysClr
|
||||
schemeClr = ColorChoice.schemeClr
|
||||
prstClr = ColorChoice.prstClr
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
rad=None,
|
||||
**kw
|
||||
):
|
||||
self.rad = rad
|
||||
super(GlowEffect, self).__init__(**kw)
|
||||
|
||||
|
||||
class InnerShadowEffect(ColorChoice):
|
||||
|
||||
blurRad = Float()
|
||||
dist = Float()
|
||||
dir = Integer()
|
||||
# uses element group EG_ColorChoice
|
||||
scrgbClr = ColorChoice.scrgbClr
|
||||
srgbClr = ColorChoice.srgbClr
|
||||
hslClr = ColorChoice.hslClr
|
||||
sysClr = ColorChoice.sysClr
|
||||
schemeClr = ColorChoice.schemeClr
|
||||
prstClr = ColorChoice.prstClr
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
blurRad=None,
|
||||
dist=None,
|
||||
dir=None,
|
||||
**kw
|
||||
):
|
||||
self.blurRad = blurRad
|
||||
self.dist = dist
|
||||
self.dir = dir
|
||||
super(InnerShadowEffect, self).__init__(**kw)
|
||||
|
||||
|
||||
class OuterShadow(ColorChoice):
|
||||
|
||||
tagname = "outerShdw"
|
||||
|
||||
blurRad = Float(allow_none=True)
|
||||
dist = Float(allow_none=True)
|
||||
dir = Integer(allow_none=True)
|
||||
sx = Integer(allow_none=True)
|
||||
sy = Integer(allow_none=True)
|
||||
kx = Integer(allow_none=True)
|
||||
ky = Integer(allow_none=True)
|
||||
algn = Set(values=['tl', 't', 'tr', 'l', 'ctr', 'r', 'bl', 'b', 'br'])
|
||||
rotWithShape = Bool(allow_none=True)
|
||||
# uses element group EG_ColorChoice
|
||||
scrgbClr = ColorChoice.scrgbClr
|
||||
srgbClr = ColorChoice.srgbClr
|
||||
hslClr = ColorChoice.hslClr
|
||||
sysClr = ColorChoice.sysClr
|
||||
schemeClr = ColorChoice.schemeClr
|
||||
prstClr = ColorChoice.prstClr
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
blurRad=None,
|
||||
dist=None,
|
||||
dir=None,
|
||||
sx=None,
|
||||
sy=None,
|
||||
kx=None,
|
||||
ky=None,
|
||||
algn=None,
|
||||
rotWithShape=None,
|
||||
**kw
|
||||
):
|
||||
self.blurRad = blurRad
|
||||
self.dist = dist
|
||||
self.dir = dir
|
||||
self.sx = sx
|
||||
self.sy = sy
|
||||
self.kx = kx
|
||||
self.ky = ky
|
||||
self.algn = algn
|
||||
self.rotWithShape = rotWithShape
|
||||
super(OuterShadow, self).__init__(**kw)
|
||||
|
||||
|
||||
class PresetShadowEffect(ColorChoice):
|
||||
|
||||
prst = Set(values=(['shdw1', 'shdw2', 'shdw3', 'shdw4', 'shdw5', 'shdw6',
|
||||
'shdw7', 'shdw8', 'shdw9', 'shdw10', 'shdw11', 'shdw12', 'shdw13',
|
||||
'shdw14', 'shdw15', 'shdw16', 'shdw17', 'shdw18', 'shdw19', 'shdw20']))
|
||||
dist = Float()
|
||||
dir = Integer()
|
||||
# uses element group EG_ColorChoice
|
||||
scrgbClr = ColorChoice.scrgbClr
|
||||
srgbClr = ColorChoice.srgbClr
|
||||
hslClr = ColorChoice.hslClr
|
||||
sysClr = ColorChoice.sysClr
|
||||
schemeClr = ColorChoice.schemeClr
|
||||
prstClr = ColorChoice.prstClr
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
prst=None,
|
||||
dist=None,
|
||||
dir=None,
|
||||
**kw
|
||||
):
|
||||
self.prst = prst
|
||||
self.dist = dist
|
||||
self.dir = dir
|
||||
super(PresetShadowEffect, self).__init__(**kw)
|
||||
|
||||
|
||||
class ReflectionEffect(Serialisable):
|
||||
|
||||
blurRad = Float()
|
||||
stA = Integer()
|
||||
stPos = Integer()
|
||||
endA = Integer()
|
||||
endPos = Integer()
|
||||
dist = Float()
|
||||
dir = Integer()
|
||||
fadeDir = Integer()
|
||||
sx = Integer()
|
||||
sy = Integer()
|
||||
kx = Integer()
|
||||
ky = Integer()
|
||||
algn = Set(values=(['tl', 't', 'tr', 'l', 'ctr', 'r', 'bl', 'b', 'br']))
|
||||
rotWithShape = Bool(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
blurRad=None,
|
||||
stA=None,
|
||||
stPos=None,
|
||||
endA=None,
|
||||
endPos=None,
|
||||
dist=None,
|
||||
dir=None,
|
||||
fadeDir=None,
|
||||
sx=None,
|
||||
sy=None,
|
||||
kx=None,
|
||||
ky=None,
|
||||
algn=None,
|
||||
rotWithShape=None,
|
||||
):
|
||||
self.blurRad = blurRad
|
||||
self.stA = stA
|
||||
self.stPos = stPos
|
||||
self.endA = endA
|
||||
self.endPos = endPos
|
||||
self.dist = dist
|
||||
self.dir = dir
|
||||
self.fadeDir = fadeDir
|
||||
self.sx = sx
|
||||
self.sy = sy
|
||||
self.kx = kx
|
||||
self.ky = ky
|
||||
self.algn = algn
|
||||
self.rotWithShape = rotWithShape
|
||||
|
||||
|
||||
class SoftEdgesEffect(Serialisable):
|
||||
|
||||
rad = Float()
|
||||
|
||||
def __init__(self,
|
||||
rad=None,
|
||||
):
|
||||
self.rad = rad
|
||||
|
||||
|
||||
class EffectList(Serialisable):
|
||||
|
||||
blur = Typed(expected_type=BlurEffect, allow_none=True)
|
||||
fillOverlay = Typed(expected_type=FillOverlayEffect, allow_none=True)
|
||||
glow = Typed(expected_type=GlowEffect, allow_none=True)
|
||||
innerShdw = Typed(expected_type=InnerShadowEffect, allow_none=True)
|
||||
outerShdw = Typed(expected_type=OuterShadow, allow_none=True)
|
||||
prstShdw = Typed(expected_type=PresetShadowEffect, allow_none=True)
|
||||
reflection = Typed(expected_type=ReflectionEffect, allow_none=True)
|
||||
softEdge = Typed(expected_type=SoftEdgesEffect, allow_none=True)
|
||||
|
||||
__elements__ = ('blur', 'fillOverlay', 'glow', 'innerShdw', 'outerShdw',
|
||||
'prstShdw', 'reflection', 'softEdge')
|
||||
|
||||
def __init__(self,
|
||||
blur=None,
|
||||
fillOverlay=None,
|
||||
glow=None,
|
||||
innerShdw=None,
|
||||
outerShdw=None,
|
||||
prstShdw=None,
|
||||
reflection=None,
|
||||
softEdge=None,
|
||||
):
|
||||
self.blur = blur
|
||||
self.fillOverlay = fillOverlay
|
||||
self.glow = glow
|
||||
self.innerShdw = innerShdw
|
||||
self.outerShdw = outerShdw
|
||||
self.prstShdw = prstShdw
|
||||
self.reflection = reflection
|
||||
self.softEdge = softEdge
|
410
.venv/Lib/site-packages/openpyxl/drawing/fill.py
Normal file
410
.venv/Lib/site-packages/openpyxl/drawing/fill.py
Normal file
@@ -0,0 +1,410 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Alias,
|
||||
Bool,
|
||||
Integer,
|
||||
Set,
|
||||
NoneSet,
|
||||
Typed,
|
||||
MinMax,
|
||||
Sequence,
|
||||
)
|
||||
from openpyxl.descriptors.excel import (
|
||||
Relation,
|
||||
Percentage,
|
||||
)
|
||||
from openpyxl.descriptors.nested import NestedNoneSet, NestedValue
|
||||
from openpyxl.descriptors.sequence import NestedSequence
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
|
||||
from .colors import (
|
||||
ColorChoice,
|
||||
HSLColor,
|
||||
SystemColor,
|
||||
SchemeColor,
|
||||
RGBPercent,
|
||||
PRESET_COLORS,
|
||||
)
|
||||
|
||||
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
from .effect import *
|
||||
|
||||
"""
|
||||
Fill elements from drawing main schema
|
||||
"""
|
||||
|
||||
class PatternFillProperties(Serialisable):
|
||||
|
||||
tagname = "pattFill"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
prst = NoneSet(values=(['pct5', 'pct10', 'pct20', 'pct25', 'pct30', 'pct40',
|
||||
'pct50', 'pct60', 'pct70', 'pct75', 'pct80', 'pct90', 'horz', 'vert',
|
||||
'ltHorz', 'ltVert', 'dkHorz', 'dkVert', 'narHorz', 'narVert', 'dashHorz',
|
||||
'dashVert', 'cross', 'dnDiag', 'upDiag', 'ltDnDiag', 'ltUpDiag',
|
||||
'dkDnDiag', 'dkUpDiag', 'wdDnDiag', 'wdUpDiag', 'dashDnDiag',
|
||||
'dashUpDiag', 'diagCross', 'smCheck', 'lgCheck', 'smGrid', 'lgGrid',
|
||||
'dotGrid', 'smConfetti', 'lgConfetti', 'horzBrick', 'diagBrick',
|
||||
'solidDmnd', 'openDmnd', 'dotDmnd', 'plaid', 'sphere', 'weave', 'divot',
|
||||
'shingle', 'wave', 'trellis', 'zigZag']))
|
||||
preset = Alias("prst")
|
||||
fgClr = Typed(expected_type=ColorChoice, allow_none=True)
|
||||
foreground = Alias("fgClr")
|
||||
bgClr = Typed(expected_type=ColorChoice, allow_none=True)
|
||||
background = Alias("bgClr")
|
||||
|
||||
__elements__ = ("fgClr", "bgClr")
|
||||
|
||||
def __init__(self,
|
||||
prst=None,
|
||||
fgClr=None,
|
||||
bgClr=None,
|
||||
):
|
||||
self.prst = prst
|
||||
self.fgClr = fgClr
|
||||
self.bgClr = bgClr
|
||||
|
||||
|
||||
class RelativeRect(Serialisable):
|
||||
|
||||
tagname = "rect"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
l = Percentage(allow_none=True)
|
||||
left = Alias('l')
|
||||
t = Percentage(allow_none=True)
|
||||
top = Alias('t')
|
||||
r = Percentage(allow_none=True)
|
||||
right = Alias('r')
|
||||
b = Percentage(allow_none=True)
|
||||
bottom = Alias('b')
|
||||
|
||||
def __init__(self,
|
||||
l=None,
|
||||
t=None,
|
||||
r=None,
|
||||
b=None,
|
||||
):
|
||||
self.l = l
|
||||
self.t = t
|
||||
self.r = r
|
||||
self.b = b
|
||||
|
||||
|
||||
class StretchInfoProperties(Serialisable):
|
||||
|
||||
tagname = "stretch"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
fillRect = Typed(expected_type=RelativeRect, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
fillRect=RelativeRect(),
|
||||
):
|
||||
self.fillRect = fillRect
|
||||
|
||||
|
||||
class GradientStop(Serialisable):
|
||||
|
||||
tagname = "gs"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
pos = MinMax(min=0, max=100000, allow_none=True)
|
||||
# Color Choice Group
|
||||
scrgbClr = Typed(expected_type=RGBPercent, allow_none=True)
|
||||
RGBPercent = Alias('scrgbClr')
|
||||
srgbClr = NestedValue(expected_type=str, allow_none=True) # needs pattern and can have transform
|
||||
RGB = Alias('srgbClr')
|
||||
hslClr = Typed(expected_type=HSLColor, allow_none=True)
|
||||
sysClr = Typed(expected_type=SystemColor, allow_none=True)
|
||||
schemeClr = Typed(expected_type=SchemeColor, allow_none=True)
|
||||
prstClr = NestedNoneSet(values=PRESET_COLORS)
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
pos=None,
|
||||
scrgbClr=None,
|
||||
srgbClr=None,
|
||||
hslClr=None,
|
||||
sysClr=None,
|
||||
schemeClr=None,
|
||||
prstClr=None,
|
||||
):
|
||||
if pos is None:
|
||||
pos = 0
|
||||
self.pos = pos
|
||||
|
||||
self.scrgbClr = scrgbClr
|
||||
self.srgbClr = srgbClr
|
||||
self.hslClr = hslClr
|
||||
self.sysClr = sysClr
|
||||
self.schemeClr = schemeClr
|
||||
self.prstClr = prstClr
|
||||
|
||||
|
||||
class LinearShadeProperties(Serialisable):
|
||||
|
||||
tagname = "lin"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
ang = Integer()
|
||||
scaled = Bool(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
ang=None,
|
||||
scaled=None,
|
||||
):
|
||||
self.ang = ang
|
||||
self.scaled = scaled
|
||||
|
||||
|
||||
class PathShadeProperties(Serialisable):
|
||||
|
||||
tagname = "path"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
path = Set(values=(['shape', 'circle', 'rect']))
|
||||
fillToRect = Typed(expected_type=RelativeRect, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
path=None,
|
||||
fillToRect=None,
|
||||
):
|
||||
self.path = path
|
||||
self.fillToRect = fillToRect
|
||||
|
||||
|
||||
class GradientFillProperties(Serialisable):
|
||||
|
||||
tagname = "gradFill"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
flip = NoneSet(values=(['x', 'y', 'xy']))
|
||||
rotWithShape = Bool(allow_none=True)
|
||||
|
||||
gsLst = NestedSequence(expected_type=GradientStop, count=False)
|
||||
stop_list = Alias("gsLst")
|
||||
|
||||
lin = Typed(expected_type=LinearShadeProperties, allow_none=True)
|
||||
linear = Alias("lin")
|
||||
path = Typed(expected_type=PathShadeProperties, allow_none=True)
|
||||
|
||||
tileRect = Typed(expected_type=RelativeRect, allow_none=True)
|
||||
|
||||
__elements__ = ('gsLst', 'lin', 'path', 'tileRect')
|
||||
|
||||
def __init__(self,
|
||||
flip=None,
|
||||
rotWithShape=None,
|
||||
gsLst=(),
|
||||
lin=None,
|
||||
path=None,
|
||||
tileRect=None,
|
||||
):
|
||||
self.flip = flip
|
||||
self.rotWithShape = rotWithShape
|
||||
self.gsLst = gsLst
|
||||
self.lin = lin
|
||||
self.path = path
|
||||
self.tileRect = tileRect
|
||||
|
||||
|
||||
class SolidColorFillProperties(Serialisable):
|
||||
|
||||
tagname = "solidFill"
|
||||
|
||||
# uses element group EG_ColorChoice
|
||||
scrgbClr = Typed(expected_type=RGBPercent, allow_none=True)
|
||||
RGBPercent = Alias('scrgbClr')
|
||||
srgbClr = NestedValue(expected_type=str, allow_none=True) # needs pattern and can have transform
|
||||
RGB = Alias('srgbClr')
|
||||
hslClr = Typed(expected_type=HSLColor, allow_none=True)
|
||||
sysClr = Typed(expected_type=SystemColor, allow_none=True)
|
||||
schemeClr = Typed(expected_type=SchemeColor, allow_none=True)
|
||||
prstClr = NestedNoneSet(values=PRESET_COLORS)
|
||||
|
||||
__elements__ = ('scrgbClr', 'srgbClr', 'hslClr', 'sysClr', 'schemeClr', 'prstClr')
|
||||
|
||||
def __init__(self,
|
||||
scrgbClr=None,
|
||||
srgbClr=None,
|
||||
hslClr=None,
|
||||
sysClr=None,
|
||||
schemeClr=None,
|
||||
prstClr=None,
|
||||
):
|
||||
self.scrgbClr = scrgbClr
|
||||
self.srgbClr = srgbClr
|
||||
self.hslClr = hslClr
|
||||
self.sysClr = sysClr
|
||||
self.schemeClr = schemeClr
|
||||
self.prstClr = prstClr
|
||||
|
||||
|
||||
class Blip(Serialisable):
|
||||
|
||||
tagname = "blip"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
#Using attribute groupAG_Blob
|
||||
cstate = NoneSet(values=(['email', 'screen', 'print', 'hqprint']))
|
||||
embed = Relation() #rId
|
||||
link = Relation() #hyperlink
|
||||
noGrp = Bool(allow_none=True)
|
||||
noSelect = Bool(allow_none=True)
|
||||
noRot = Bool(allow_none=True)
|
||||
noChangeAspect = Bool(allow_none=True)
|
||||
noMove = Bool(allow_none=True)
|
||||
noResize = Bool(allow_none=True)
|
||||
noEditPoints = Bool(allow_none=True)
|
||||
noAdjustHandles = Bool(allow_none=True)
|
||||
noChangeArrowheads = Bool(allow_none=True)
|
||||
noChangeShapeType = Bool(allow_none=True)
|
||||
# some elements are choice
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
alphaBiLevel = Typed(expected_type=AlphaBiLevelEffect, allow_none=True)
|
||||
alphaCeiling = Typed(expected_type=AlphaCeilingEffect, allow_none=True)
|
||||
alphaFloor = Typed(expected_type=AlphaFloorEffect, allow_none=True)
|
||||
alphaInv = Typed(expected_type=AlphaInverseEffect, allow_none=True)
|
||||
alphaMod = Typed(expected_type=AlphaModulateEffect, allow_none=True)
|
||||
alphaModFix = Typed(expected_type=AlphaModulateFixedEffect, allow_none=True)
|
||||
alphaRepl = Typed(expected_type=AlphaReplaceEffect, allow_none=True)
|
||||
biLevel = Typed(expected_type=BiLevelEffect, allow_none=True)
|
||||
blur = Typed(expected_type=BlurEffect, allow_none=True)
|
||||
clrChange = Typed(expected_type=ColorChangeEffect, allow_none=True)
|
||||
clrRepl = Typed(expected_type=ColorReplaceEffect, allow_none=True)
|
||||
duotone = Typed(expected_type=DuotoneEffect, allow_none=True)
|
||||
fillOverlay = Typed(expected_type=FillOverlayEffect, allow_none=True)
|
||||
grayscl = Typed(expected_type=GrayscaleEffect, allow_none=True)
|
||||
hsl = Typed(expected_type=HSLEffect, allow_none=True)
|
||||
lum = Typed(expected_type=LuminanceEffect, allow_none=True)
|
||||
tint = Typed(expected_type=TintEffect, allow_none=True)
|
||||
|
||||
__elements__ = ('alphaBiLevel', 'alphaCeiling', 'alphaFloor', 'alphaInv',
|
||||
'alphaMod', 'alphaModFix', 'alphaRepl', 'biLevel', 'blur', 'clrChange',
|
||||
'clrRepl', 'duotone', 'fillOverlay', 'grayscl', 'hsl', 'lum', 'tint')
|
||||
|
||||
def __init__(self,
|
||||
cstate=None,
|
||||
embed=None,
|
||||
link=None,
|
||||
noGrp=None,
|
||||
noSelect=None,
|
||||
noRot=None,
|
||||
noChangeAspect=None,
|
||||
noMove=None,
|
||||
noResize=None,
|
||||
noEditPoints=None,
|
||||
noAdjustHandles=None,
|
||||
noChangeArrowheads=None,
|
||||
noChangeShapeType=None,
|
||||
extLst=None,
|
||||
alphaBiLevel=None,
|
||||
alphaCeiling=None,
|
||||
alphaFloor=None,
|
||||
alphaInv=None,
|
||||
alphaMod=None,
|
||||
alphaModFix=None,
|
||||
alphaRepl=None,
|
||||
biLevel=None,
|
||||
blur=None,
|
||||
clrChange=None,
|
||||
clrRepl=None,
|
||||
duotone=None,
|
||||
fillOverlay=None,
|
||||
grayscl=None,
|
||||
hsl=None,
|
||||
lum=None,
|
||||
tint=None,
|
||||
):
|
||||
self.cstate = cstate
|
||||
self.embed = embed
|
||||
self.link = link
|
||||
self.noGrp = noGrp
|
||||
self.noSelect = noSelect
|
||||
self.noRot = noRot
|
||||
self.noChangeAspect = noChangeAspect
|
||||
self.noMove = noMove
|
||||
self.noResize = noResize
|
||||
self.noEditPoints = noEditPoints
|
||||
self.noAdjustHandles = noAdjustHandles
|
||||
self.noChangeArrowheads = noChangeArrowheads
|
||||
self.noChangeShapeType = noChangeShapeType
|
||||
self.extLst = extLst
|
||||
self.alphaBiLevel = alphaBiLevel
|
||||
self.alphaCeiling = alphaCeiling
|
||||
self.alphaFloor = alphaFloor
|
||||
self.alphaInv = alphaInv
|
||||
self.alphaMod = alphaMod
|
||||
self.alphaModFix = alphaModFix
|
||||
self.alphaRepl = alphaRepl
|
||||
self.biLevel = biLevel
|
||||
self.blur = blur
|
||||
self.clrChange = clrChange
|
||||
self.clrRepl = clrRepl
|
||||
self.duotone = duotone
|
||||
self.fillOverlay = fillOverlay
|
||||
self.grayscl = grayscl
|
||||
self.hsl = hsl
|
||||
self.lum = lum
|
||||
self.tint = tint
|
||||
|
||||
|
||||
class TileInfoProperties(Serialisable):
|
||||
|
||||
tx = Integer(allow_none=True)
|
||||
ty = Integer(allow_none=True)
|
||||
sx = Integer(allow_none=True)
|
||||
sy = Integer(allow_none=True)
|
||||
flip = NoneSet(values=(['x', 'y', 'xy']))
|
||||
algn = Set(values=(['tl', 't', 'tr', 'l', 'ctr', 'r', 'bl', 'b', 'br']))
|
||||
|
||||
def __init__(self,
|
||||
tx=None,
|
||||
ty=None,
|
||||
sx=None,
|
||||
sy=None,
|
||||
flip=None,
|
||||
algn=None,
|
||||
):
|
||||
self.tx = tx
|
||||
self.ty = ty
|
||||
self.sx = sx
|
||||
self.sy = sy
|
||||
self.flip = flip
|
||||
self.algn = algn
|
||||
|
||||
|
||||
class BlipFillProperties(Serialisable):
|
||||
|
||||
tagname = "blipFill"
|
||||
|
||||
dpi = Integer(allow_none=True)
|
||||
rotWithShape = Bool(allow_none=True)
|
||||
|
||||
blip = Typed(expected_type=Blip, allow_none=True)
|
||||
srcRect = Typed(expected_type=RelativeRect, allow_none=True)
|
||||
tile = Typed(expected_type=TileInfoProperties, allow_none=True)
|
||||
stretch = Typed(expected_type=StretchInfoProperties, allow_none=True)
|
||||
|
||||
__elements__ = ("blip", "srcRect", "tile", "stretch")
|
||||
|
||||
def __init__(self,
|
||||
dpi=None,
|
||||
rotWithShape=None,
|
||||
blip=None,
|
||||
tile=None,
|
||||
stretch=StretchInfoProperties(),
|
||||
srcRect=None,
|
||||
):
|
||||
self.dpi = dpi
|
||||
self.rotWithShape = rotWithShape
|
||||
self.blip = blip
|
||||
self.tile = tile
|
||||
self.stretch = stretch
|
||||
self.srcRect = srcRect
|
595
.venv/Lib/site-packages/openpyxl/drawing/geometry.py
Normal file
595
.venv/Lib/site-packages/openpyxl/drawing/geometry.py
Normal file
@@ -0,0 +1,595 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Float,
|
||||
Integer,
|
||||
Bool,
|
||||
MinMax,
|
||||
Set,
|
||||
NoneSet,
|
||||
String,
|
||||
Alias,
|
||||
)
|
||||
from openpyxl.descriptors.excel import Coordinate, Percentage
|
||||
|
||||
from openpyxl.descriptors.nested import (
|
||||
EmptyTag
|
||||
)
|
||||
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
from .colors import ColorChoiceDescriptor
|
||||
from .fill import (
|
||||
GradientFillProperties,
|
||||
BlipFillProperties,
|
||||
PatternFillProperties,
|
||||
)
|
||||
from .line import LineProperties
|
||||
|
||||
from openpyxl.styles.colors import Color
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
|
||||
|
||||
class Point2D(Serialisable):
|
||||
|
||||
tagname = "off"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
x = Coordinate()
|
||||
y = Coordinate()
|
||||
|
||||
def __init__(self,
|
||||
x=None,
|
||||
y=None,
|
||||
):
|
||||
self.x = x
|
||||
self.y = y
|
||||
|
||||
|
||||
class PositiveSize2D(Serialisable):
|
||||
|
||||
tagname = "ext"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
"""
|
||||
Dimensions in EMUs
|
||||
"""
|
||||
|
||||
cx = Integer()
|
||||
width = Alias('cx')
|
||||
cy = Integer()
|
||||
height = Alias('cy')
|
||||
|
||||
def __init__(self,
|
||||
cx=None,
|
||||
cy=None,
|
||||
):
|
||||
self.cx = cx
|
||||
self.cy = cy
|
||||
|
||||
|
||||
class Transform2D(Serialisable):
|
||||
|
||||
tagname = "xfrm"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
rot = Integer(allow_none=True)
|
||||
flipH = Bool(allow_none=True)
|
||||
flipV = Bool(allow_none=True)
|
||||
off = Typed(expected_type=Point2D, allow_none=True)
|
||||
ext = Typed(expected_type=PositiveSize2D, allow_none=True)
|
||||
chOff = Typed(expected_type=Point2D, allow_none=True)
|
||||
chExt = Typed(expected_type=PositiveSize2D, allow_none=True)
|
||||
|
||||
__elements__ = ('off', 'ext', 'chOff', 'chExt')
|
||||
|
||||
def __init__(self,
|
||||
rot=None,
|
||||
flipH=None,
|
||||
flipV=None,
|
||||
off=None,
|
||||
ext=None,
|
||||
chOff=None,
|
||||
chExt=None,
|
||||
):
|
||||
self.rot = rot
|
||||
self.flipH = flipH
|
||||
self.flipV = flipV
|
||||
self.off = off
|
||||
self.ext = ext
|
||||
self.chOff = chOff
|
||||
self.chExt = chExt
|
||||
|
||||
|
||||
class GroupTransform2D(Serialisable):
|
||||
|
||||
tagname = "xfrm"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
rot = Integer(allow_none=True)
|
||||
flipH = Bool(allow_none=True)
|
||||
flipV = Bool(allow_none=True)
|
||||
off = Typed(expected_type=Point2D, allow_none=True)
|
||||
ext = Typed(expected_type=PositiveSize2D, allow_none=True)
|
||||
chOff = Typed(expected_type=Point2D, allow_none=True)
|
||||
chExt = Typed(expected_type=PositiveSize2D, allow_none=True)
|
||||
|
||||
__elements__ = ("off", "ext", "chOff", "chExt")
|
||||
|
||||
def __init__(self,
|
||||
rot=0,
|
||||
flipH=None,
|
||||
flipV=None,
|
||||
off=None,
|
||||
ext=None,
|
||||
chOff=None,
|
||||
chExt=None,
|
||||
):
|
||||
self.rot = rot
|
||||
self.flipH = flipH
|
||||
self.flipV = flipV
|
||||
self.off = off
|
||||
self.ext = ext
|
||||
self.chOff = chOff
|
||||
self.chExt = chExt
|
||||
|
||||
|
||||
class SphereCoords(Serialisable):
|
||||
|
||||
tagname = "sphereCoords" # usually
|
||||
|
||||
lat = Integer()
|
||||
lon = Integer()
|
||||
rev = Integer()
|
||||
|
||||
def __init__(self,
|
||||
lat=None,
|
||||
lon=None,
|
||||
rev=None,
|
||||
):
|
||||
self.lat = lat
|
||||
self.lon = lon
|
||||
self.rev = rev
|
||||
|
||||
|
||||
class Camera(Serialisable):
|
||||
|
||||
tagname = "camera"
|
||||
|
||||
prst = Set(values=[
|
||||
'legacyObliqueTopLeft', 'legacyObliqueTop', 'legacyObliqueTopRight', 'legacyObliqueLeft',
|
||||
'legacyObliqueFront', 'legacyObliqueRight', 'legacyObliqueBottomLeft',
|
||||
'legacyObliqueBottom', 'legacyObliqueBottomRight', 'legacyPerspectiveTopLeft',
|
||||
'legacyPerspectiveTop', 'legacyPerspectiveTopRight', 'legacyPerspectiveLeft',
|
||||
'legacyPerspectiveFront', 'legacyPerspectiveRight', 'legacyPerspectiveBottomLeft',
|
||||
'legacyPerspectiveBottom', 'legacyPerspectiveBottomRight', 'orthographicFront',
|
||||
'isometricTopUp', 'isometricTopDown', 'isometricBottomUp', 'isometricBottomDown',
|
||||
'isometricLeftUp', 'isometricLeftDown', 'isometricRightUp', 'isometricRightDown',
|
||||
'isometricOffAxis1Left', 'isometricOffAxis1Right', 'isometricOffAxis1Top',
|
||||
'isometricOffAxis2Left', 'isometricOffAxis2Right', 'isometricOffAxis2Top',
|
||||
'isometricOffAxis3Left', 'isometricOffAxis3Right', 'isometricOffAxis3Bottom',
|
||||
'isometricOffAxis4Left', 'isometricOffAxis4Right', 'isometricOffAxis4Bottom',
|
||||
'obliqueTopLeft', 'obliqueTop', 'obliqueTopRight', 'obliqueLeft', 'obliqueRight',
|
||||
'obliqueBottomLeft', 'obliqueBottom', 'obliqueBottomRight', 'perspectiveFront',
|
||||
'perspectiveLeft', 'perspectiveRight', 'perspectiveAbove', 'perspectiveBelow',
|
||||
'perspectiveAboveLeftFacing', 'perspectiveAboveRightFacing',
|
||||
'perspectiveContrastingLeftFacing', 'perspectiveContrastingRightFacing',
|
||||
'perspectiveHeroicLeftFacing', 'perspectiveHeroicRightFacing',
|
||||
'perspectiveHeroicExtremeLeftFacing', 'perspectiveHeroicExtremeRightFacing',
|
||||
'perspectiveRelaxed', 'perspectiveRelaxedModerately'])
|
||||
fov = Integer(allow_none=True)
|
||||
zoom = Typed(expected_type=Percentage, allow_none=True)
|
||||
rot = Typed(expected_type=SphereCoords, allow_none=True)
|
||||
|
||||
|
||||
def __init__(self,
|
||||
prst=None,
|
||||
fov=None,
|
||||
zoom=None,
|
||||
rot=None,
|
||||
):
|
||||
self.prst = prst
|
||||
self.fov = fov
|
||||
self.zoom = zoom
|
||||
self.rot = rot
|
||||
|
||||
|
||||
class LightRig(Serialisable):
|
||||
|
||||
tagname = "lightRig"
|
||||
|
||||
rig = Set(values=['legacyFlat1', 'legacyFlat2', 'legacyFlat3', 'legacyFlat4', 'legacyNormal1',
|
||||
'legacyNormal2', 'legacyNormal3', 'legacyNormal4', 'legacyHarsh1',
|
||||
'legacyHarsh2', 'legacyHarsh3', 'legacyHarsh4', 'threePt', 'balanced',
|
||||
'soft', 'harsh', 'flood', 'contrasting', 'morning', 'sunrise', 'sunset',
|
||||
'chilly', 'freezing', 'flat', 'twoPt', 'glow', 'brightRoom']
|
||||
)
|
||||
dir = Set(values=(['tl', 't', 'tr', 'l', 'r', 'bl', 'b', 'br']))
|
||||
rot = Typed(expected_type=SphereCoords, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
rig=None,
|
||||
dir=None,
|
||||
rot=None,
|
||||
):
|
||||
self.rig = rig
|
||||
self.dir = dir
|
||||
self.rot = rot
|
||||
|
||||
|
||||
class Vector3D(Serialisable):
|
||||
|
||||
tagname = "vector"
|
||||
|
||||
dx = Integer() # can be in or universl measure :-/
|
||||
dy = Integer()
|
||||
dz = Integer()
|
||||
|
||||
def __init__(self,
|
||||
dx=None,
|
||||
dy=None,
|
||||
dz=None,
|
||||
):
|
||||
self.dx = dx
|
||||
self.dy = dy
|
||||
self.dz = dz
|
||||
|
||||
|
||||
class Point3D(Serialisable):
|
||||
|
||||
tagname = "anchor"
|
||||
|
||||
x = Integer()
|
||||
y = Integer()
|
||||
z = Integer()
|
||||
|
||||
def __init__(self,
|
||||
x=None,
|
||||
y=None,
|
||||
z=None,
|
||||
):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.z = z
|
||||
|
||||
|
||||
class Backdrop(Serialisable):
|
||||
|
||||
anchor = Typed(expected_type=Point3D, )
|
||||
norm = Typed(expected_type=Vector3D, )
|
||||
up = Typed(expected_type=Vector3D, )
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
anchor=None,
|
||||
norm=None,
|
||||
up=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.anchor = anchor
|
||||
self.norm = norm
|
||||
self.up = up
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class Scene3D(Serialisable):
|
||||
|
||||
camera = Typed(expected_type=Camera, )
|
||||
lightRig = Typed(expected_type=LightRig, )
|
||||
backdrop = Typed(expected_type=Backdrop, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
camera=None,
|
||||
lightRig=None,
|
||||
backdrop=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.camera = camera
|
||||
self.lightRig = lightRig
|
||||
self.backdrop = backdrop
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class Bevel(Serialisable):
|
||||
|
||||
tagname = "bevel"
|
||||
|
||||
w = Integer()
|
||||
h = Integer()
|
||||
prst = NoneSet(values=
|
||||
['relaxedInset', 'circle', 'slope', 'cross', 'angle',
|
||||
'softRound', 'convex', 'coolSlant', 'divot', 'riblet',
|
||||
'hardEdge', 'artDeco']
|
||||
)
|
||||
|
||||
def __init__(self,
|
||||
w=None,
|
||||
h=None,
|
||||
prst=None,
|
||||
):
|
||||
self.w = w
|
||||
self.h = h
|
||||
self.prst = prst
|
||||
|
||||
|
||||
class Shape3D(Serialisable):
|
||||
|
||||
namespace = DRAWING_NS
|
||||
|
||||
z = Typed(expected_type=Coordinate, allow_none=True)
|
||||
extrusionH = Integer(allow_none=True)
|
||||
contourW = Integer(allow_none=True)
|
||||
prstMaterial = NoneSet(values=[
|
||||
'legacyMatte','legacyPlastic', 'legacyMetal', 'legacyWireframe', 'matte', 'plastic',
|
||||
'metal', 'warmMatte', 'translucentPowder', 'powder', 'dkEdge',
|
||||
'softEdge', 'clear', 'flat', 'softmetal']
|
||||
)
|
||||
bevelT = Typed(expected_type=Bevel, allow_none=True)
|
||||
bevelB = Typed(expected_type=Bevel, allow_none=True)
|
||||
extrusionClr = Typed(expected_type=Color, allow_none=True)
|
||||
contourClr = Typed(expected_type=Color, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
z=None,
|
||||
extrusionH=None,
|
||||
contourW=None,
|
||||
prstMaterial=None,
|
||||
bevelT=None,
|
||||
bevelB=None,
|
||||
extrusionClr=None,
|
||||
contourClr=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.z = z
|
||||
self.extrusionH = extrusionH
|
||||
self.contourW = contourW
|
||||
self.prstMaterial = prstMaterial
|
||||
self.bevelT = bevelT
|
||||
self.bevelB = bevelB
|
||||
self.extrusionClr = extrusionClr
|
||||
self.contourClr = contourClr
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class Path2D(Serialisable):
|
||||
|
||||
w = Float()
|
||||
h = Float()
|
||||
fill = NoneSet(values=(['norm', 'lighten', 'lightenLess', 'darken', 'darkenLess']))
|
||||
stroke = Bool(allow_none=True)
|
||||
extrusionOk = Bool(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
w=None,
|
||||
h=None,
|
||||
fill=None,
|
||||
stroke=None,
|
||||
extrusionOk=None,
|
||||
):
|
||||
self.w = w
|
||||
self.h = h
|
||||
self.fill = fill
|
||||
self.stroke = stroke
|
||||
self.extrusionOk = extrusionOk
|
||||
|
||||
|
||||
class Path2DList(Serialisable):
|
||||
|
||||
path = Typed(expected_type=Path2D, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
path=None,
|
||||
):
|
||||
self.path = path
|
||||
|
||||
|
||||
class GeomRect(Serialisable):
|
||||
|
||||
l = Coordinate()
|
||||
t = Coordinate()
|
||||
r = Coordinate()
|
||||
b = Coordinate()
|
||||
|
||||
def __init__(self,
|
||||
l=None,
|
||||
t=None,
|
||||
r=None,
|
||||
b=None,
|
||||
):
|
||||
self.l = l
|
||||
self.t = t
|
||||
self.r = r
|
||||
self.b = b
|
||||
|
||||
|
||||
class AdjPoint2D(Serialisable):
|
||||
|
||||
x = Coordinate()
|
||||
y = Coordinate()
|
||||
|
||||
def __init__(self,
|
||||
x=None,
|
||||
y=None,
|
||||
):
|
||||
self.x = x
|
||||
self.y = y
|
||||
|
||||
|
||||
class ConnectionSite(Serialisable):
|
||||
|
||||
ang = MinMax(min=0, max=360) # guess work, can also be a name
|
||||
pos = Typed(expected_type=AdjPoint2D, )
|
||||
|
||||
def __init__(self,
|
||||
ang=None,
|
||||
pos=None,
|
||||
):
|
||||
self.ang = ang
|
||||
self.pos = pos
|
||||
|
||||
|
||||
class ConnectionSiteList(Serialisable):
|
||||
|
||||
cxn = Typed(expected_type=ConnectionSite, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
cxn=None,
|
||||
):
|
||||
self.cxn = cxn
|
||||
|
||||
|
||||
class AdjustHandleList(Serialisable):
|
||||
|
||||
pass
|
||||
|
||||
class GeomGuide(Serialisable):
|
||||
|
||||
name = String()
|
||||
fmla = String()
|
||||
|
||||
def __init__(self,
|
||||
name=None,
|
||||
fmla=None,
|
||||
):
|
||||
self.name = name
|
||||
self.fmla = fmla
|
||||
|
||||
|
||||
class GeomGuideList(Serialisable):
|
||||
|
||||
gd = Typed(expected_type=GeomGuide, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
gd=None,
|
||||
):
|
||||
self.gd = gd
|
||||
|
||||
|
||||
class CustomGeometry2D(Serialisable):
|
||||
|
||||
avLst = Typed(expected_type=GeomGuideList, allow_none=True)
|
||||
gdLst = Typed(expected_type=GeomGuideList, allow_none=True)
|
||||
ahLst = Typed(expected_type=AdjustHandleList, allow_none=True)
|
||||
cxnLst = Typed(expected_type=ConnectionSiteList, allow_none=True)
|
||||
#rect = Typed(expected_type=GeomRect, allow_none=True)
|
||||
pathLst = Typed(expected_type=Path2DList, )
|
||||
|
||||
def __init__(self,
|
||||
avLst=None,
|
||||
gdLst=None,
|
||||
ahLst=None,
|
||||
cxnLst=None,
|
||||
rect=None,
|
||||
pathLst=None,
|
||||
):
|
||||
self.avLst = avLst
|
||||
self.gdLst = gdLst
|
||||
self.ahLst = ahLst
|
||||
self.cxnLst = cxnLst
|
||||
self.rect = None
|
||||
self.pathLst = pathLst
|
||||
|
||||
|
||||
class PresetGeometry2D(Serialisable):
|
||||
|
||||
namespace = DRAWING_NS
|
||||
|
||||
prst = Set(values=(
|
||||
['line', 'lineInv', 'triangle', 'rtTriangle', 'rect',
|
||||
'diamond', 'parallelogram', 'trapezoid', 'nonIsoscelesTrapezoid',
|
||||
'pentagon', 'hexagon', 'heptagon', 'octagon', 'decagon', 'dodecagon',
|
||||
'star4', 'star5', 'star6', 'star7', 'star8', 'star10', 'star12',
|
||||
'star16', 'star24', 'star32', 'roundRect', 'round1Rect',
|
||||
'round2SameRect', 'round2DiagRect', 'snipRoundRect', 'snip1Rect',
|
||||
'snip2SameRect', 'snip2DiagRect', 'plaque', 'ellipse', 'teardrop',
|
||||
'homePlate', 'chevron', 'pieWedge', 'pie', 'blockArc', 'donut',
|
||||
'noSmoking', 'rightArrow', 'leftArrow', 'upArrow', 'downArrow',
|
||||
'stripedRightArrow', 'notchedRightArrow', 'bentUpArrow',
|
||||
'leftRightArrow', 'upDownArrow', 'leftUpArrow', 'leftRightUpArrow',
|
||||
'quadArrow', 'leftArrowCallout', 'rightArrowCallout', 'upArrowCallout',
|
||||
'downArrowCallout', 'leftRightArrowCallout', 'upDownArrowCallout',
|
||||
'quadArrowCallout', 'bentArrow', 'uturnArrow', 'circularArrow',
|
||||
'leftCircularArrow', 'leftRightCircularArrow', 'curvedRightArrow',
|
||||
'curvedLeftArrow', 'curvedUpArrow', 'curvedDownArrow', 'swooshArrow',
|
||||
'cube', 'can', 'lightningBolt', 'heart', 'sun', 'moon', 'smileyFace',
|
||||
'irregularSeal1', 'irregularSeal2', 'foldedCorner', 'bevel', 'frame',
|
||||
'halfFrame', 'corner', 'diagStripe', 'chord', 'arc', 'leftBracket',
|
||||
'rightBracket', 'leftBrace', 'rightBrace', 'bracketPair', 'bracePair',
|
||||
'straightConnector1', 'bentConnector2', 'bentConnector3',
|
||||
'bentConnector4', 'bentConnector5', 'curvedConnector2',
|
||||
'curvedConnector3', 'curvedConnector4', 'curvedConnector5', 'callout1',
|
||||
'callout2', 'callout3', 'accentCallout1', 'accentCallout2',
|
||||
'accentCallout3', 'borderCallout1', 'borderCallout2', 'borderCallout3',
|
||||
'accentBorderCallout1', 'accentBorderCallout2', 'accentBorderCallout3',
|
||||
'wedgeRectCallout', 'wedgeRoundRectCallout', 'wedgeEllipseCallout',
|
||||
'cloudCallout', 'cloud', 'ribbon', 'ribbon2', 'ellipseRibbon',
|
||||
'ellipseRibbon2', 'leftRightRibbon', 'verticalScroll',
|
||||
'horizontalScroll', 'wave', 'doubleWave', 'plus', 'flowChartProcess',
|
||||
'flowChartDecision', 'flowChartInputOutput',
|
||||
'flowChartPredefinedProcess', 'flowChartInternalStorage',
|
||||
'flowChartDocument', 'flowChartMultidocument', 'flowChartTerminator',
|
||||
'flowChartPreparation', 'flowChartManualInput',
|
||||
'flowChartManualOperation', 'flowChartConnector', 'flowChartPunchedCard',
|
||||
'flowChartPunchedTape', 'flowChartSummingJunction', 'flowChartOr',
|
||||
'flowChartCollate', 'flowChartSort', 'flowChartExtract',
|
||||
'flowChartMerge', 'flowChartOfflineStorage', 'flowChartOnlineStorage',
|
||||
'flowChartMagneticTape', 'flowChartMagneticDisk',
|
||||
'flowChartMagneticDrum', 'flowChartDisplay', 'flowChartDelay',
|
||||
'flowChartAlternateProcess', 'flowChartOffpageConnector',
|
||||
'actionButtonBlank', 'actionButtonHome', 'actionButtonHelp',
|
||||
'actionButtonInformation', 'actionButtonForwardNext',
|
||||
'actionButtonBackPrevious', 'actionButtonEnd', 'actionButtonBeginning',
|
||||
'actionButtonReturn', 'actionButtonDocument', 'actionButtonSound',
|
||||
'actionButtonMovie', 'gear6', 'gear9', 'funnel', 'mathPlus', 'mathMinus',
|
||||
'mathMultiply', 'mathDivide', 'mathEqual', 'mathNotEqual', 'cornerTabs',
|
||||
'squareTabs', 'plaqueTabs', 'chartX', 'chartStar', 'chartPlus']))
|
||||
avLst = Typed(expected_type=GeomGuideList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
prst=None,
|
||||
avLst=None,
|
||||
):
|
||||
self.prst = prst
|
||||
self.avLst = avLst
|
||||
|
||||
|
||||
class FontReference(Serialisable):
|
||||
|
||||
idx = NoneSet(values=(['major', 'minor']))
|
||||
|
||||
def __init__(self,
|
||||
idx=None,
|
||||
):
|
||||
self.idx = idx
|
||||
|
||||
|
||||
class StyleMatrixReference(Serialisable):
|
||||
|
||||
idx = Integer()
|
||||
|
||||
def __init__(self,
|
||||
idx=None,
|
||||
):
|
||||
self.idx = idx
|
||||
|
||||
|
||||
class ShapeStyle(Serialisable):
|
||||
|
||||
lnRef = Typed(expected_type=StyleMatrixReference, )
|
||||
fillRef = Typed(expected_type=StyleMatrixReference, )
|
||||
effectRef = Typed(expected_type=StyleMatrixReference, )
|
||||
fontRef = Typed(expected_type=FontReference, )
|
||||
|
||||
def __init__(self,
|
||||
lnRef=None,
|
||||
fillRef=None,
|
||||
effectRef=None,
|
||||
fontRef=None,
|
||||
):
|
||||
self.lnRef = lnRef
|
||||
self.fillRef = fillRef
|
||||
self.effectRef = effectRef
|
||||
self.fontRef = fontRef
|
186
.venv/Lib/site-packages/openpyxl/drawing/graphic.py
Normal file
186
.venv/Lib/site-packages/openpyxl/drawing/graphic.py
Normal file
@@ -0,0 +1,186 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.xml.functions import NS_REGEX, Element
|
||||
from openpyxl.xml.constants import CHART_NS, REL_NS, DRAWING_NS
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Bool,
|
||||
NoneSet,
|
||||
Integer,
|
||||
Set,
|
||||
String,
|
||||
Alias,
|
||||
)
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
|
||||
from openpyxl.chart.shapes import GraphicalProperties
|
||||
from openpyxl.chart.text import RichText
|
||||
|
||||
from .effect import *
|
||||
from .fill import RelativeRect, BlipFillProperties
|
||||
from .text import Hyperlink, EmbeddedWAVAudioFile
|
||||
from .geometry import (
|
||||
Scene3D,
|
||||
ShapeStyle,
|
||||
GroupTransform2D
|
||||
)
|
||||
from .picture import PictureFrame
|
||||
from .properties import (
|
||||
NonVisualDrawingProps,
|
||||
NonVisualDrawingShapeProps,
|
||||
NonVisualGroupDrawingShapeProps,
|
||||
NonVisualGroupShape,
|
||||
GroupShapeProperties,
|
||||
)
|
||||
from .relation import ChartRelation
|
||||
from .xdr import XDRTransform2D
|
||||
|
||||
|
||||
class GraphicFrameLocking(Serialisable):
|
||||
|
||||
noGrp = Bool(allow_none=True)
|
||||
noDrilldown = Bool(allow_none=True)
|
||||
noSelect = Bool(allow_none=True)
|
||||
noChangeAspect = Bool(allow_none=True)
|
||||
noMove = Bool(allow_none=True)
|
||||
noResize = Bool(allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
noGrp=None,
|
||||
noDrilldown=None,
|
||||
noSelect=None,
|
||||
noChangeAspect=None,
|
||||
noMove=None,
|
||||
noResize=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.noGrp = noGrp
|
||||
self.noDrilldown = noDrilldown
|
||||
self.noSelect = noSelect
|
||||
self.noChangeAspect = noChangeAspect
|
||||
self.noMove = noMove
|
||||
self.noResize = noResize
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class NonVisualGraphicFrameProperties(Serialisable):
|
||||
|
||||
tagname = "cNvGraphicFramePr"
|
||||
|
||||
graphicFrameLocks = Typed(expected_type=GraphicFrameLocking, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
graphicFrameLocks=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.graphicFrameLocks = graphicFrameLocks
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class NonVisualGraphicFrame(Serialisable):
|
||||
|
||||
tagname = "nvGraphicFramePr"
|
||||
|
||||
cNvPr = Typed(expected_type=NonVisualDrawingProps)
|
||||
cNvGraphicFramePr = Typed(expected_type=NonVisualGraphicFrameProperties)
|
||||
|
||||
__elements__ = ('cNvPr', 'cNvGraphicFramePr')
|
||||
|
||||
def __init__(self,
|
||||
cNvPr=None,
|
||||
cNvGraphicFramePr=None,
|
||||
):
|
||||
if cNvPr is None:
|
||||
cNvPr = NonVisualDrawingProps(id=0, name="Chart 0")
|
||||
self.cNvPr = cNvPr
|
||||
if cNvGraphicFramePr is None:
|
||||
cNvGraphicFramePr = NonVisualGraphicFrameProperties()
|
||||
self.cNvGraphicFramePr = cNvGraphicFramePr
|
||||
|
||||
|
||||
class GraphicData(Serialisable):
|
||||
|
||||
tagname = "graphicData"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
uri = String()
|
||||
chart = Typed(expected_type=ChartRelation, allow_none=True)
|
||||
|
||||
|
||||
def __init__(self,
|
||||
uri=CHART_NS,
|
||||
chart=None,
|
||||
):
|
||||
self.uri = uri
|
||||
self.chart = chart
|
||||
|
||||
|
||||
class GraphicObject(Serialisable):
|
||||
|
||||
tagname = "graphic"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
graphicData = Typed(expected_type=GraphicData)
|
||||
|
||||
def __init__(self,
|
||||
graphicData=None,
|
||||
):
|
||||
if graphicData is None:
|
||||
graphicData = GraphicData()
|
||||
self.graphicData = graphicData
|
||||
|
||||
|
||||
class GraphicFrame(Serialisable):
|
||||
|
||||
tagname = "graphicFrame"
|
||||
|
||||
nvGraphicFramePr = Typed(expected_type=NonVisualGraphicFrame)
|
||||
xfrm = Typed(expected_type=XDRTransform2D)
|
||||
graphic = Typed(expected_type=GraphicObject)
|
||||
macro = String(allow_none=True)
|
||||
fPublished = Bool(allow_none=True)
|
||||
|
||||
__elements__ = ('nvGraphicFramePr', 'xfrm', 'graphic', 'macro', 'fPublished')
|
||||
|
||||
def __init__(self,
|
||||
nvGraphicFramePr=None,
|
||||
xfrm=None,
|
||||
graphic=None,
|
||||
macro=None,
|
||||
fPublished=None,
|
||||
):
|
||||
if nvGraphicFramePr is None:
|
||||
nvGraphicFramePr = NonVisualGraphicFrame()
|
||||
self.nvGraphicFramePr = nvGraphicFramePr
|
||||
if xfrm is None:
|
||||
xfrm = XDRTransform2D()
|
||||
self.xfrm = xfrm
|
||||
if graphic is None:
|
||||
graphic = GraphicObject()
|
||||
self.graphic = graphic
|
||||
self.macro = macro
|
||||
self.fPublished = fPublished
|
||||
|
||||
|
||||
class GroupShape(Serialisable):
|
||||
|
||||
nvGrpSpPr = Typed(expected_type=NonVisualGroupShape)
|
||||
nonVisualProperties = Alias("nvGrpSpPr")
|
||||
grpSpPr = Typed(expected_type=GroupShapeProperties)
|
||||
visualProperties = Alias("grpSpPr")
|
||||
pic = Typed(expected_type=PictureFrame, allow_none=True)
|
||||
|
||||
__elements__ = ["nvGrpSpPr", "grpSpPr", "pic"]
|
||||
|
||||
def __init__(self,
|
||||
nvGrpSpPr=None,
|
||||
grpSpPr=None,
|
||||
pic=None,
|
||||
):
|
||||
self.nvGrpSpPr = nvGrpSpPr
|
||||
self.grpSpPr = grpSpPr
|
||||
self.pic = pic
|
65
.venv/Lib/site-packages/openpyxl/drawing/image.py
Normal file
65
.venv/Lib/site-packages/openpyxl/drawing/image.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
try:
|
||||
from PIL import Image as PILImage
|
||||
except ImportError:
|
||||
PILImage = False
|
||||
|
||||
|
||||
def _import_image(img):
|
||||
if not PILImage:
|
||||
raise ImportError('You must install Pillow to fetch image objects')
|
||||
|
||||
if not isinstance(img, PILImage.Image):
|
||||
img = PILImage.open(img)
|
||||
|
||||
return img
|
||||
|
||||
|
||||
class Image(object):
|
||||
"""Image in a spreadsheet"""
|
||||
|
||||
_id = 1
|
||||
_path = "/xl/media/image{0}.{1}"
|
||||
anchor = "A1"
|
||||
|
||||
def __init__(self, img):
|
||||
|
||||
self.ref = img
|
||||
mark_to_close = isinstance(img, str)
|
||||
image = _import_image(img)
|
||||
self.width, self.height = image.size
|
||||
|
||||
try:
|
||||
self.format = image.format.lower()
|
||||
except AttributeError:
|
||||
self.format = "png"
|
||||
if mark_to_close:
|
||||
# PIL instances created for metadata should be closed.
|
||||
image.close()
|
||||
|
||||
|
||||
def _data(self):
|
||||
"""
|
||||
Return image data, convert to supported types if necessary
|
||||
"""
|
||||
img = _import_image(self.ref)
|
||||
# don't convert these file formats
|
||||
if self.format in ['gif', 'jpeg', 'png']:
|
||||
img.fp.seek(0)
|
||||
fp = img.fp
|
||||
else:
|
||||
fp = BytesIO()
|
||||
img.save(fp, format="png")
|
||||
fp.seek(0)
|
||||
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
return data
|
||||
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
return self._path.format(self._id, self.format)
|
151
.venv/Lib/site-packages/openpyxl/drawing/line.py
Normal file
151
.venv/Lib/site-packages/openpyxl/drawing/line.py
Normal file
@@ -0,0 +1,151 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Float,
|
||||
Integer,
|
||||
Bool,
|
||||
MinMax,
|
||||
Set,
|
||||
NoneSet,
|
||||
String,
|
||||
Alias,
|
||||
Sequence
|
||||
)
|
||||
from openpyxl.descriptors.excel import Coordinate, Percentage
|
||||
|
||||
from openpyxl.descriptors.nested import (
|
||||
NestedInteger,
|
||||
NestedSet,
|
||||
NestedNoneSet,
|
||||
EmptyTag,
|
||||
)
|
||||
from openpyxl.compat import safe_string
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
from openpyxl.xml.functions import Element
|
||||
|
||||
from .colors import ColorChoiceDescriptor
|
||||
from .fill import GradientFillProperties, PatternFillProperties
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
|
||||
"""
|
||||
Line elements from drawing main schema
|
||||
"""
|
||||
|
||||
class LineEndProperties(Serialisable):
|
||||
|
||||
tagname = "end"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
type = NoneSet(values=(['none', 'triangle', 'stealth', 'diamond', 'oval', 'arrow']))
|
||||
w = NoneSet(values=(['sm', 'med', 'lg']))
|
||||
len = NoneSet(values=(['sm', 'med', 'lg']))
|
||||
|
||||
def __init__(self,
|
||||
type=None,
|
||||
w=None,
|
||||
len=None,
|
||||
):
|
||||
self.type = type
|
||||
self.w = w
|
||||
self.len = len
|
||||
|
||||
|
||||
class DashStop(Serialisable):
|
||||
|
||||
tagname = "ds"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
d = Integer()
|
||||
length = Alias('d')
|
||||
sp = Integer()
|
||||
space = Alias('sp')
|
||||
|
||||
def __init__(self,
|
||||
d=0,
|
||||
sp=0,
|
||||
):
|
||||
self.d = d
|
||||
self.sp = sp
|
||||
|
||||
|
||||
class DashStopList(Serialisable):
|
||||
|
||||
ds = Sequence(expected_type=DashStop, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
ds=None,
|
||||
):
|
||||
self.ds = ds
|
||||
|
||||
|
||||
class LineProperties(Serialisable):
|
||||
|
||||
tagname = "ln"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
w = MinMax(min=0, max=20116800, allow_none=True) # EMU
|
||||
width = Alias('w')
|
||||
cap = NoneSet(values=(['rnd', 'sq', 'flat']))
|
||||
cmpd = NoneSet(values=(['sng', 'dbl', 'thickThin', 'thinThick', 'tri']))
|
||||
algn = NoneSet(values=(['ctr', 'in']))
|
||||
|
||||
noFill = EmptyTag()
|
||||
solidFill = ColorChoiceDescriptor()
|
||||
gradFill = Typed(expected_type=GradientFillProperties, allow_none=True)
|
||||
pattFill = Typed(expected_type=PatternFillProperties, allow_none=True)
|
||||
|
||||
prstDash = NestedNoneSet(values=(['solid', 'dot', 'dash', 'lgDash', 'dashDot',
|
||||
'lgDashDot', 'lgDashDotDot', 'sysDash', 'sysDot', 'sysDashDot',
|
||||
'sysDashDotDot']), namespace=namespace)
|
||||
dashStyle = Alias('prstDash')
|
||||
|
||||
custDash = Typed(expected_type=DashStop, allow_none=True)
|
||||
|
||||
round = EmptyTag()
|
||||
bevel = EmptyTag()
|
||||
miter = NestedInteger(allow_none=True, attribute="lim")
|
||||
|
||||
headEnd = Typed(expected_type=LineEndProperties, allow_none=True)
|
||||
tailEnd = Typed(expected_type=LineEndProperties, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ('noFill', 'solidFill', 'gradFill', 'pattFill',
|
||||
'prstDash', 'custDash', 'round', 'bevel', 'miter', 'headEnd', 'tailEnd')
|
||||
|
||||
def __init__(self,
|
||||
w=None,
|
||||
cap=None,
|
||||
cmpd=None,
|
||||
algn=None,
|
||||
noFill=None,
|
||||
solidFill=None,
|
||||
gradFill=None,
|
||||
pattFill=None,
|
||||
prstDash=None,
|
||||
custDash=None,
|
||||
round=None,
|
||||
bevel=None,
|
||||
miter=None,
|
||||
headEnd=None,
|
||||
tailEnd=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.w = w
|
||||
self.cap = cap
|
||||
self.cmpd = cmpd
|
||||
self.algn = algn
|
||||
self.noFill = noFill
|
||||
self.solidFill = solidFill
|
||||
self.gradFill = gradFill
|
||||
self.pattFill = pattFill
|
||||
if prstDash is None:
|
||||
prstDash = "solid"
|
||||
self.prstDash = prstDash
|
||||
self.custDash = custDash
|
||||
self.round = round
|
||||
self.bevel = bevel
|
||||
self.miter = miter
|
||||
self.headEnd = headEnd
|
||||
self.tailEnd = tailEnd
|
148
.venv/Lib/site-packages/openpyxl/drawing/picture.py
Normal file
148
.venv/Lib/site-packages/openpyxl/drawing/picture.py
Normal file
@@ -0,0 +1,148 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Bool,
|
||||
NoneSet,
|
||||
Integer,
|
||||
Set,
|
||||
String,
|
||||
Alias,
|
||||
)
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
|
||||
from openpyxl.chart.shapes import GraphicalProperties
|
||||
|
||||
from .fill import RelativeRect, BlipFillProperties
|
||||
from .properties import NonVisualDrawingProps, NonVisualGroupDrawingShapeProps
|
||||
from .geometry import ShapeStyle
|
||||
|
||||
|
||||
class PictureLocking(Serialisable):
|
||||
|
||||
tagname = "picLocks"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
#Using attribute group AG_Locking
|
||||
noCrop = Bool(allow_none=True)
|
||||
noGrp = Bool(allow_none=True)
|
||||
noSelect = Bool(allow_none=True)
|
||||
noRot = Bool(allow_none=True)
|
||||
noChangeAspect = Bool(allow_none=True)
|
||||
noMove = Bool(allow_none=True)
|
||||
noResize = Bool(allow_none=True)
|
||||
noEditPoints = Bool(allow_none=True)
|
||||
noAdjustHandles = Bool(allow_none=True)
|
||||
noChangeArrowheads = Bool(allow_none=True)
|
||||
noChangeShapeType = Bool(allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ()
|
||||
|
||||
def __init__(self,
|
||||
noCrop=None,
|
||||
noGrp=None,
|
||||
noSelect=None,
|
||||
noRot=None,
|
||||
noChangeAspect=None,
|
||||
noMove=None,
|
||||
noResize=None,
|
||||
noEditPoints=None,
|
||||
noAdjustHandles=None,
|
||||
noChangeArrowheads=None,
|
||||
noChangeShapeType=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.noCrop = noCrop
|
||||
self.noGrp = noGrp
|
||||
self.noSelect = noSelect
|
||||
self.noRot = noRot
|
||||
self.noChangeAspect = noChangeAspect
|
||||
self.noMove = noMove
|
||||
self.noResize = noResize
|
||||
self.noEditPoints = noEditPoints
|
||||
self.noAdjustHandles = noAdjustHandles
|
||||
self.noChangeArrowheads = noChangeArrowheads
|
||||
self.noChangeShapeType = noChangeShapeType
|
||||
|
||||
|
||||
class NonVisualPictureProperties(Serialisable):
|
||||
|
||||
tagname = "cNvPicPr"
|
||||
|
||||
preferRelativeResize = Bool(allow_none=True)
|
||||
picLocks = Typed(expected_type=PictureLocking, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ("picLocks",)
|
||||
|
||||
def __init__(self,
|
||||
preferRelativeResize=None,
|
||||
picLocks=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.preferRelativeResize = preferRelativeResize
|
||||
self.picLocks = picLocks
|
||||
|
||||
|
||||
class PictureNonVisual(Serialisable):
|
||||
|
||||
tagname = "nvPicPr"
|
||||
|
||||
cNvPr = Typed(expected_type=NonVisualDrawingProps, )
|
||||
cNvPicPr = Typed(expected_type=NonVisualPictureProperties, )
|
||||
|
||||
__elements__ = ("cNvPr", "cNvPicPr")
|
||||
|
||||
def __init__(self,
|
||||
cNvPr=None,
|
||||
cNvPicPr=None,
|
||||
):
|
||||
if cNvPr is None:
|
||||
cNvPr = NonVisualDrawingProps(id=0, name="Image 1", descr="Name of file")
|
||||
self.cNvPr = cNvPr
|
||||
if cNvPicPr is None:
|
||||
cNvPicPr = NonVisualPictureProperties()
|
||||
self.cNvPicPr = cNvPicPr
|
||||
|
||||
|
||||
|
||||
|
||||
class PictureFrame(Serialisable):
|
||||
|
||||
tagname = "pic"
|
||||
|
||||
macro = String(allow_none=True)
|
||||
fPublished = Bool(allow_none=True)
|
||||
nvPicPr = Typed(expected_type=PictureNonVisual, )
|
||||
blipFill = Typed(expected_type=BlipFillProperties, )
|
||||
spPr = Typed(expected_type=GraphicalProperties, )
|
||||
graphicalProperties = Alias('spPr')
|
||||
style = Typed(expected_type=ShapeStyle, allow_none=True)
|
||||
|
||||
__elements__ = ("nvPicPr", "blipFill", "spPr", "style")
|
||||
|
||||
def __init__(self,
|
||||
macro=None,
|
||||
fPublished=None,
|
||||
nvPicPr=None,
|
||||
blipFill=None,
|
||||
spPr=None,
|
||||
style=None,
|
||||
):
|
||||
self.macro = macro
|
||||
self.fPublished = fPublished
|
||||
if nvPicPr is None:
|
||||
nvPicPr = PictureNonVisual()
|
||||
self.nvPicPr = nvPicPr
|
||||
if blipFill is None:
|
||||
blipFill = BlipFillProperties()
|
||||
self.blipFill = blipFill
|
||||
if spPr is None:
|
||||
spPr = GraphicalProperties()
|
||||
self.spPr = spPr
|
||||
self.style = style
|
||||
|
174
.venv/Lib/site-packages/openpyxl/drawing/properties.py
Normal file
174
.venv/Lib/site-packages/openpyxl/drawing/properties.py
Normal file
@@ -0,0 +1,174 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Bool,
|
||||
Integer,
|
||||
Set,
|
||||
String,
|
||||
Alias,
|
||||
NoneSet,
|
||||
)
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
|
||||
from .geometry import GroupTransform2D, Scene3D
|
||||
from .text import Hyperlink
|
||||
|
||||
|
||||
class GroupShapeProperties(Serialisable):
|
||||
|
||||
tagname = "grpSpPr"
|
||||
|
||||
bwMode = NoneSet(values=(['clr', 'auto', 'gray', 'ltGray', 'invGray',
|
||||
'grayWhite', 'blackGray', 'blackWhite', 'black', 'white', 'hidden']))
|
||||
xfrm = Typed(expected_type=GroupTransform2D, allow_none=True)
|
||||
scene3d = Typed(expected_type=Scene3D, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
bwMode=None,
|
||||
xfrm=None,
|
||||
scene3d=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.bwMode = bwMode
|
||||
self.xfrm = xfrm
|
||||
self.scene3d = scene3d
|
||||
self.extLst = extLst
|
||||
|
||||
|
||||
class GroupLocking(Serialisable):
|
||||
|
||||
tagname = "grpSpLocks"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
noGrp = Bool(allow_none=True)
|
||||
noUngrp = Bool(allow_none=True)
|
||||
noSelect = Bool(allow_none=True)
|
||||
noRot = Bool(allow_none=True)
|
||||
noChangeAspect = Bool(allow_none=True)
|
||||
noMove = Bool(allow_none=True)
|
||||
noResize = Bool(allow_none=True)
|
||||
noChangeArrowheads = Bool(allow_none=True)
|
||||
noEditPoints = Bool(allow_none=True)
|
||||
noAdjustHandles = Bool(allow_none=True)
|
||||
noChangeArrowheads = Bool(allow_none=True)
|
||||
noChangeShapeType = Bool(allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ()
|
||||
|
||||
def __init__(self,
|
||||
noGrp=None,
|
||||
noUngrp=None,
|
||||
noSelect=None,
|
||||
noRot=None,
|
||||
noChangeAspect=None,
|
||||
noChangeArrowheads=None,
|
||||
noMove=None,
|
||||
noResize=None,
|
||||
noEditPoints=None,
|
||||
noAdjustHandles=None,
|
||||
noChangeShapeType=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.noGrp = noGrp
|
||||
self.noUngrp = noUngrp
|
||||
self.noSelect = noSelect
|
||||
self.noRot = noRot
|
||||
self.noChangeAspect = noChangeAspect
|
||||
self.noChangeArrowheads = noChangeArrowheads
|
||||
self.noMove = noMove
|
||||
self.noResize = noResize
|
||||
self.noEditPoints = noEditPoints
|
||||
self.noAdjustHandles = noAdjustHandles
|
||||
self.noChangeShapeType = noChangeShapeType
|
||||
|
||||
|
||||
class NonVisualGroupDrawingShapeProps(Serialisable):
|
||||
|
||||
tagname = "cNvGrpSpPr"
|
||||
|
||||
grpSpLocks = Typed(expected_type=GroupLocking, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ("grpSpLocks",)
|
||||
|
||||
def __init__(self,
|
||||
grpSpLocks=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.grpSpLocks = grpSpLocks
|
||||
|
||||
|
||||
class NonVisualDrawingShapeProps(Serialisable):
|
||||
|
||||
tagname = "cNvSpPr"
|
||||
|
||||
spLocks = Typed(expected_type=GroupLocking, allow_none=True)
|
||||
txBax = Bool(allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ("spLocks", "txBax")
|
||||
|
||||
def __init__(self,
|
||||
spLocks=None,
|
||||
txBox=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.spLocks = spLocks
|
||||
self.txBox = txBox
|
||||
|
||||
|
||||
class NonVisualDrawingProps(Serialisable):
|
||||
|
||||
tagname = "cNvPr"
|
||||
|
||||
id = Integer()
|
||||
name = String()
|
||||
descr = String(allow_none=True)
|
||||
hidden = Bool(allow_none=True)
|
||||
title = String(allow_none=True)
|
||||
hlinkClick = Typed(expected_type=Hyperlink, allow_none=True)
|
||||
hlinkHover = Typed(expected_type=Hyperlink, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ["hlinkClick", "hlinkHover"]
|
||||
|
||||
def __init__(self,
|
||||
id=None,
|
||||
name=None,
|
||||
descr=None,
|
||||
hidden=None,
|
||||
title=None,
|
||||
hlinkClick=None,
|
||||
hlinkHover=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.descr = descr
|
||||
self.hidden = hidden
|
||||
self.title = title
|
||||
self.hlinkClick = hlinkClick
|
||||
self.hlinkHover = hlinkHover
|
||||
self.extLst = extLst
|
||||
|
||||
class NonVisualGroupShape(Serialisable):
|
||||
|
||||
tagname = "nvGrpSpPr"
|
||||
|
||||
cNvPr = Typed(expected_type=NonVisualDrawingProps)
|
||||
cNvGrpSpPr = Typed(expected_type=NonVisualGroupDrawingShapeProps)
|
||||
|
||||
__elements__ = ("cNvPr", "cNvGrpSpPr")
|
||||
|
||||
def __init__(self,
|
||||
cNvPr=None,
|
||||
cNvGrpSpPr=None,
|
||||
):
|
||||
self.cNvPr = cNvPr
|
||||
self.cNvGrpSpPr = cNvGrpSpPr
|
||||
|
17
.venv/Lib/site-packages/openpyxl/drawing/relation.py
Normal file
17
.venv/Lib/site-packages/openpyxl/drawing/relation.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.xml.constants import CHART_NS
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors.excel import Relation
|
||||
|
||||
|
||||
class ChartRelation(Serialisable):
|
||||
|
||||
tagname = "chart"
|
||||
namespace = CHART_NS
|
||||
|
||||
id = Relation()
|
||||
|
||||
def __init__(self, id):
|
||||
self.id = id
|
381
.venv/Lib/site-packages/openpyxl/drawing/spreadsheet_drawing.py
Normal file
381
.venv/Lib/site-packages/openpyxl/drawing/spreadsheet_drawing.py
Normal file
@@ -0,0 +1,381 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Typed,
|
||||
Bool,
|
||||
NoneSet,
|
||||
Integer,
|
||||
Sequence,
|
||||
Alias,
|
||||
)
|
||||
from openpyxl.descriptors.nested import (
|
||||
NestedText,
|
||||
NestedNoneSet,
|
||||
)
|
||||
from openpyxl.descriptors.excel import Relation
|
||||
|
||||
from openpyxl.packaging.relationship import (
|
||||
Relationship,
|
||||
RelationshipList,
|
||||
)
|
||||
from openpyxl.utils import coordinate_to_tuple
|
||||
from openpyxl.utils.units import (
|
||||
cm_to_EMU,
|
||||
pixels_to_EMU,
|
||||
)
|
||||
from openpyxl.drawing.image import Image
|
||||
|
||||
from openpyxl.xml.constants import SHEET_DRAWING_NS
|
||||
|
||||
from openpyxl.chart._chart import ChartBase
|
||||
from .xdr import (
|
||||
XDRPoint2D,
|
||||
XDRPositiveSize2D,
|
||||
)
|
||||
from .fill import Blip
|
||||
from .connector import Shape
|
||||
from .graphic import (
|
||||
GroupShape,
|
||||
GraphicFrame,
|
||||
)
|
||||
from .geometry import PresetGeometry2D
|
||||
from .picture import PictureFrame
|
||||
from .relation import ChartRelation
|
||||
|
||||
|
||||
class AnchorClientData(Serialisable):
|
||||
|
||||
fLocksWithSheet = Bool(allow_none=True)
|
||||
fPrintsWithSheet = Bool(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
fLocksWithSheet=None,
|
||||
fPrintsWithSheet=None,
|
||||
):
|
||||
self.fLocksWithSheet = fLocksWithSheet
|
||||
self.fPrintsWithSheet = fPrintsWithSheet
|
||||
|
||||
|
||||
class AnchorMarker(Serialisable):
|
||||
|
||||
tagname = "marker"
|
||||
|
||||
col = NestedText(expected_type=int)
|
||||
colOff = NestedText(expected_type=int)
|
||||
row = NestedText(expected_type=int)
|
||||
rowOff = NestedText(expected_type=int)
|
||||
|
||||
def __init__(self,
|
||||
col=0,
|
||||
colOff=0,
|
||||
row=0,
|
||||
rowOff=0,
|
||||
):
|
||||
self.col = col
|
||||
self.colOff = colOff
|
||||
self.row = row
|
||||
self.rowOff = rowOff
|
||||
|
||||
|
||||
class _AnchorBase(Serialisable):
|
||||
|
||||
#one of
|
||||
sp = Typed(expected_type=Shape, allow_none=True)
|
||||
shape = Alias("sp")
|
||||
grpSp = Typed(expected_type=GroupShape, allow_none=True)
|
||||
groupShape = Alias("grpSp")
|
||||
graphicFrame = Typed(expected_type=GraphicFrame, allow_none=True)
|
||||
cxnSp = Typed(expected_type=Shape, allow_none=True)
|
||||
connectionShape = Alias("cxnSp")
|
||||
pic = Typed(expected_type=PictureFrame, allow_none=True)
|
||||
contentPart = Relation()
|
||||
|
||||
clientData = Typed(expected_type=AnchorClientData)
|
||||
|
||||
__elements__ = ('sp', 'grpSp', 'graphicFrame',
|
||||
'cxnSp', 'pic', 'contentPart', 'clientData')
|
||||
|
||||
def __init__(self,
|
||||
clientData=None,
|
||||
sp=None,
|
||||
grpSp=None,
|
||||
graphicFrame=None,
|
||||
cxnSp=None,
|
||||
pic=None,
|
||||
contentPart=None
|
||||
):
|
||||
if clientData is None:
|
||||
clientData = AnchorClientData()
|
||||
self.clientData = clientData
|
||||
self.sp = sp
|
||||
self.grpSp = grpSp
|
||||
self.graphicFrame = graphicFrame
|
||||
self.cxnSp = cxnSp
|
||||
self.pic = pic
|
||||
self.contentPart = contentPart
|
||||
|
||||
|
||||
class AbsoluteAnchor(_AnchorBase):
|
||||
|
||||
tagname = "absoluteAnchor"
|
||||
|
||||
pos = Typed(expected_type=XDRPoint2D)
|
||||
ext = Typed(expected_type=XDRPositiveSize2D)
|
||||
|
||||
sp = _AnchorBase.sp
|
||||
grpSp = _AnchorBase.grpSp
|
||||
graphicFrame = _AnchorBase.graphicFrame
|
||||
cxnSp = _AnchorBase.cxnSp
|
||||
pic = _AnchorBase.pic
|
||||
contentPart = _AnchorBase.contentPart
|
||||
clientData = _AnchorBase.clientData
|
||||
|
||||
__elements__ = ('pos', 'ext') + _AnchorBase.__elements__
|
||||
|
||||
def __init__(self,
|
||||
pos=None,
|
||||
ext=None,
|
||||
**kw
|
||||
):
|
||||
if pos is None:
|
||||
pos = XDRPoint2D(0, 0)
|
||||
self.pos = pos
|
||||
if ext is None:
|
||||
ext = XDRPositiveSize2D(0, 0)
|
||||
self.ext = ext
|
||||
super(AbsoluteAnchor, self).__init__(**kw)
|
||||
|
||||
|
||||
class OneCellAnchor(_AnchorBase):
|
||||
|
||||
tagname = "oneCellAnchor"
|
||||
|
||||
_from = Typed(expected_type=AnchorMarker)
|
||||
ext = Typed(expected_type=XDRPositiveSize2D)
|
||||
|
||||
sp = _AnchorBase.sp
|
||||
grpSp = _AnchorBase.grpSp
|
||||
graphicFrame = _AnchorBase.graphicFrame
|
||||
cxnSp = _AnchorBase.cxnSp
|
||||
pic = _AnchorBase.pic
|
||||
contentPart = _AnchorBase.contentPart
|
||||
clientData = _AnchorBase.clientData
|
||||
|
||||
__elements__ = ('_from', 'ext') + _AnchorBase.__elements__
|
||||
|
||||
|
||||
def __init__(self,
|
||||
_from=None,
|
||||
ext=None,
|
||||
**kw
|
||||
):
|
||||
if _from is None:
|
||||
_from = AnchorMarker()
|
||||
self._from = _from
|
||||
if ext is None:
|
||||
ext = XDRPositiveSize2D(0, 0)
|
||||
self.ext = ext
|
||||
super(OneCellAnchor, self).__init__(**kw)
|
||||
|
||||
|
||||
class TwoCellAnchor(_AnchorBase):
|
||||
|
||||
tagname = "twoCellAnchor"
|
||||
|
||||
editAs = NoneSet(values=(['twoCell', 'oneCell', 'absolute']))
|
||||
_from = Typed(expected_type=AnchorMarker)
|
||||
to = Typed(expected_type=AnchorMarker)
|
||||
|
||||
sp = _AnchorBase.sp
|
||||
grpSp = _AnchorBase.grpSp
|
||||
graphicFrame = _AnchorBase.graphicFrame
|
||||
cxnSp = _AnchorBase.cxnSp
|
||||
pic = _AnchorBase.pic
|
||||
contentPart = _AnchorBase.contentPart
|
||||
clientData = _AnchorBase.clientData
|
||||
|
||||
__elements__ = ('_from', 'to') + _AnchorBase.__elements__
|
||||
|
||||
def __init__(self,
|
||||
editAs=None,
|
||||
_from=None,
|
||||
to=None,
|
||||
**kw
|
||||
):
|
||||
self.editAs = editAs
|
||||
if _from is None:
|
||||
_from = AnchorMarker()
|
||||
self._from = _from
|
||||
if to is None:
|
||||
to = AnchorMarker()
|
||||
self.to = to
|
||||
super(TwoCellAnchor, self).__init__(**kw)
|
||||
|
||||
|
||||
def _check_anchor(obj):
|
||||
"""
|
||||
Check whether an object has an existing Anchor object
|
||||
If not create a OneCellAnchor using the provided coordinate
|
||||
"""
|
||||
anchor = obj.anchor
|
||||
if not isinstance(anchor, _AnchorBase):
|
||||
row, col = coordinate_to_tuple(anchor.upper())
|
||||
anchor = OneCellAnchor()
|
||||
anchor._from.row = row -1
|
||||
anchor._from.col = col -1
|
||||
if isinstance(obj, ChartBase):
|
||||
anchor.ext.width = cm_to_EMU(obj.width)
|
||||
anchor.ext.height = cm_to_EMU(obj.height)
|
||||
elif isinstance(obj, Image):
|
||||
anchor.ext.width = pixels_to_EMU(obj.width)
|
||||
anchor.ext.height = pixels_to_EMU(obj.height)
|
||||
return anchor
|
||||
|
||||
|
||||
class SpreadsheetDrawing(Serialisable):
|
||||
|
||||
tagname = "wsDr"
|
||||
mime_type = "application/vnd.openxmlformats-officedocument.drawing+xml"
|
||||
_rel_type = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"
|
||||
_path = PartName="/xl/drawings/drawing{0}.xml"
|
||||
_id = None
|
||||
|
||||
twoCellAnchor = Sequence(expected_type=TwoCellAnchor, allow_none=True)
|
||||
oneCellAnchor = Sequence(expected_type=OneCellAnchor, allow_none=True)
|
||||
absoluteAnchor = Sequence(expected_type=AbsoluteAnchor, allow_none=True)
|
||||
|
||||
__elements__ = ("twoCellAnchor", "oneCellAnchor", "absoluteAnchor")
|
||||
|
||||
def __init__(self,
|
||||
twoCellAnchor=(),
|
||||
oneCellAnchor=(),
|
||||
absoluteAnchor=(),
|
||||
):
|
||||
self.twoCellAnchor = twoCellAnchor
|
||||
self.oneCellAnchor = oneCellAnchor
|
||||
self.absoluteAnchor = absoluteAnchor
|
||||
self.charts = []
|
||||
self.images = []
|
||||
self._rels = []
|
||||
|
||||
|
||||
def __hash__(self):
|
||||
"""
|
||||
Just need to check for identity
|
||||
"""
|
||||
return id(self)
|
||||
|
||||
|
||||
def __bool__(self):
|
||||
return bool(self.charts) or bool(self.images)
|
||||
|
||||
|
||||
|
||||
def _write(self):
|
||||
"""
|
||||
create required structure and the serialise
|
||||
"""
|
||||
anchors = []
|
||||
for idx, obj in enumerate(self.charts + self.images, 1):
|
||||
anchor = _check_anchor(obj)
|
||||
if isinstance(obj, ChartBase):
|
||||
rel = Relationship(type="chart", Target=obj.path)
|
||||
anchor.graphicFrame = self._chart_frame(idx)
|
||||
elif isinstance(obj, Image):
|
||||
rel = Relationship(type="image", Target=obj.path)
|
||||
child = anchor.pic or anchor.groupShape and anchor.groupShape.pic
|
||||
if not child:
|
||||
anchor.pic = self._picture_frame(idx)
|
||||
else:
|
||||
child.blipFill.blip.embed = "rId{0}".format(idx)
|
||||
|
||||
anchors.append(anchor)
|
||||
self._rels.append(rel)
|
||||
|
||||
for a in anchors:
|
||||
if isinstance(a, OneCellAnchor):
|
||||
self.oneCellAnchor.append(a)
|
||||
elif isinstance(a, TwoCellAnchor):
|
||||
self.twoCellAnchor.append(a)
|
||||
else:
|
||||
self.absoluteAnchor.append(a)
|
||||
|
||||
tree = self.to_tree()
|
||||
tree.set('xmlns', SHEET_DRAWING_NS)
|
||||
return tree
|
||||
|
||||
|
||||
def _chart_frame(self, idx):
|
||||
chart_rel = ChartRelation(f"rId{idx}")
|
||||
frame = GraphicFrame()
|
||||
nv = frame.nvGraphicFramePr.cNvPr
|
||||
nv.id = idx
|
||||
nv.name = "Chart {0}".format(idx)
|
||||
frame.graphic.graphicData.chart = chart_rel
|
||||
return frame
|
||||
|
||||
|
||||
def _picture_frame(self, idx):
|
||||
pic = PictureFrame()
|
||||
pic.nvPicPr.cNvPr.descr = "Picture"
|
||||
pic.nvPicPr.cNvPr.id = idx
|
||||
pic.nvPicPr.cNvPr.name = "Image {0}".format(idx)
|
||||
|
||||
pic.blipFill.blip = Blip()
|
||||
pic.blipFill.blip.embed = "rId{0}".format(idx)
|
||||
pic.blipFill.blip.cstate = "print"
|
||||
|
||||
pic.spPr.prstGeom = PresetGeometry2D(prst="rect")
|
||||
pic.spPr.ln = None
|
||||
return pic
|
||||
|
||||
|
||||
def _write_rels(self):
|
||||
rels = RelationshipList()
|
||||
rels.Relationship = self._rels
|
||||
return rels.to_tree()
|
||||
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
return self._path.format(self._id)
|
||||
|
||||
|
||||
@property
|
||||
def _chart_rels(self):
|
||||
"""
|
||||
Get relationship information for each chart and bind anchor to it
|
||||
"""
|
||||
rels = []
|
||||
anchors = self.absoluteAnchor + self.oneCellAnchor + self.twoCellAnchor
|
||||
for anchor in anchors:
|
||||
if anchor.graphicFrame is not None:
|
||||
graphic = anchor.graphicFrame.graphic
|
||||
rel = graphic.graphicData.chart
|
||||
if rel is not None:
|
||||
rel.anchor = anchor
|
||||
rel.anchor.graphicFrame = None
|
||||
rels.append(rel)
|
||||
return rels
|
||||
|
||||
|
||||
@property
|
||||
def _blip_rels(self):
|
||||
"""
|
||||
Get relationship information for each blip and bind anchor to it
|
||||
|
||||
Images that are not part of the XLSX package will be ignored.
|
||||
"""
|
||||
rels = []
|
||||
anchors = self.absoluteAnchor + self.oneCellAnchor + self.twoCellAnchor
|
||||
|
||||
for anchor in anchors:
|
||||
child = anchor.pic or anchor.groupShape and anchor.groupShape.pic
|
||||
if child and child.blipFill:
|
||||
rel = child.blipFill.blip
|
||||
if rel is not None and rel.embed:
|
||||
rel.anchor = anchor
|
||||
rels.append(rel)
|
||||
|
||||
return rels
|
712
.venv/Lib/site-packages/openpyxl/drawing/text.py
Normal file
712
.venv/Lib/site-packages/openpyxl/drawing/text.py
Normal file
@@ -0,0 +1,712 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
|
||||
from openpyxl.descriptors.serialisable import Serialisable
|
||||
from openpyxl.descriptors import (
|
||||
Alias,
|
||||
Typed,
|
||||
Set,
|
||||
NoneSet,
|
||||
Sequence,
|
||||
String,
|
||||
Bool,
|
||||
MinMax,
|
||||
Integer
|
||||
)
|
||||
from openpyxl.descriptors.excel import (
|
||||
HexBinary,
|
||||
TextPoint,
|
||||
Coordinate,
|
||||
ExtensionList,
|
||||
Relation,
|
||||
)
|
||||
from openpyxl.descriptors.nested import (
|
||||
NestedInteger,
|
||||
NestedString,
|
||||
NestedText,
|
||||
NestedValue,
|
||||
EmptyTag
|
||||
)
|
||||
from openpyxl.xml.constants import DRAWING_NS
|
||||
|
||||
|
||||
from .colors import ColorChoiceDescriptor
|
||||
from .effect import *
|
||||
from .fill import *
|
||||
from .geometry import (
|
||||
LineProperties,
|
||||
Color,
|
||||
Scene3D
|
||||
)
|
||||
|
||||
from openpyxl.descriptors.excel import ExtensionList as OfficeArtExtensionList
|
||||
from openpyxl.descriptors.nested import NestedBool
|
||||
|
||||
|
||||
class EmbeddedWAVAudioFile(Serialisable):
|
||||
|
||||
name = String(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
name=None,
|
||||
):
|
||||
self.name = name
|
||||
|
||||
|
||||
class Hyperlink(Serialisable):
|
||||
|
||||
tagname = "hlinkClick"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
invalidUrl = String(allow_none=True)
|
||||
action = String(allow_none=True)
|
||||
tgtFrame = String(allow_none=True)
|
||||
tooltip = String(allow_none=True)
|
||||
history = Bool(allow_none=True)
|
||||
highlightClick = Bool(allow_none=True)
|
||||
endSnd = Bool(allow_none=True)
|
||||
snd = Typed(expected_type=EmbeddedWAVAudioFile, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
id = Relation(allow_none=True)
|
||||
|
||||
__elements__ = ('snd',)
|
||||
|
||||
def __init__(self,
|
||||
invalidUrl=None,
|
||||
action=None,
|
||||
tgtFrame=None,
|
||||
tooltip=None,
|
||||
history=None,
|
||||
highlightClick=None,
|
||||
endSnd=None,
|
||||
snd=None,
|
||||
extLst=None,
|
||||
id=None,
|
||||
):
|
||||
self.invalidUrl = invalidUrl
|
||||
self.action = action
|
||||
self.tgtFrame = tgtFrame
|
||||
self.tooltip = tooltip
|
||||
self.history = history
|
||||
self.highlightClick = highlightClick
|
||||
self.endSnd = endSnd
|
||||
self.snd = snd
|
||||
self.id = id
|
||||
|
||||
|
||||
class Font(Serialisable):
|
||||
|
||||
tagname = "latin"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
typeface = String()
|
||||
panose = HexBinary(allow_none=True)
|
||||
pitchFamily = MinMax(min=0, max=52, allow_none=True)
|
||||
charset = Integer(allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
typeface=None,
|
||||
panose=None,
|
||||
pitchFamily=None,
|
||||
charset=None,
|
||||
):
|
||||
self.typeface = typeface
|
||||
self.panose = panose
|
||||
self.pitchFamily = pitchFamily
|
||||
self.charset = charset
|
||||
|
||||
|
||||
class CharacterProperties(Serialisable):
|
||||
|
||||
tagname = "defRPr"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
kumimoji = Bool(allow_none=True)
|
||||
lang = String(allow_none=True)
|
||||
altLang = String(allow_none=True)
|
||||
sz = MinMax(allow_none=True, min=100, max=400000) # 100ths of a point
|
||||
b = Bool(allow_none=True)
|
||||
i = Bool(allow_none=True)
|
||||
u = NoneSet(values=(['words', 'sng', 'dbl', 'heavy', 'dotted',
|
||||
'dottedHeavy', 'dash', 'dashHeavy', 'dashLong', 'dashLongHeavy',
|
||||
'dotDash', 'dotDashHeavy', 'dotDotDash', 'dotDotDashHeavy', 'wavy',
|
||||
'wavyHeavy', 'wavyDbl']))
|
||||
strike = NoneSet(values=(['noStrike', 'sngStrike', 'dblStrike']))
|
||||
kern = Integer(allow_none=True)
|
||||
cap = NoneSet(values=(['small', 'all']))
|
||||
spc = Integer(allow_none=True)
|
||||
normalizeH = Bool(allow_none=True)
|
||||
baseline = Integer(allow_none=True)
|
||||
noProof = Bool(allow_none=True)
|
||||
dirty = Bool(allow_none=True)
|
||||
err = Bool(allow_none=True)
|
||||
smtClean = Bool(allow_none=True)
|
||||
smtId = Integer(allow_none=True)
|
||||
bmk = String(allow_none=True)
|
||||
ln = Typed(expected_type=LineProperties, allow_none=True)
|
||||
highlight = Typed(expected_type=Color, allow_none=True)
|
||||
latin = Typed(expected_type=Font, allow_none=True)
|
||||
ea = Typed(expected_type=Font, allow_none=True)
|
||||
cs = Typed(expected_type=Font, allow_none=True)
|
||||
sym = Typed(expected_type=Font, allow_none=True)
|
||||
hlinkClick = Typed(expected_type=Hyperlink, allow_none=True)
|
||||
hlinkMouseOver = Typed(expected_type=Hyperlink, allow_none=True)
|
||||
rtl = NestedBool(allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
# uses element group EG_FillProperties
|
||||
noFill = EmptyTag(namespace=DRAWING_NS)
|
||||
solidFill = ColorChoiceDescriptor()
|
||||
gradFill = Typed(expected_type=GradientFillProperties, allow_none=True)
|
||||
blipFill = Typed(expected_type=BlipFillProperties, allow_none=True)
|
||||
pattFill = Typed(expected_type=PatternFillProperties, allow_none=True)
|
||||
grpFill = EmptyTag(namespace=DRAWING_NS)
|
||||
# uses element group EG_EffectProperties
|
||||
effectLst = Typed(expected_type=EffectList, allow_none=True)
|
||||
effectDag = Typed(expected_type=EffectContainer, allow_none=True)
|
||||
# uses element group EG_TextUnderlineLine
|
||||
uLnTx = EmptyTag()
|
||||
uLn = Typed(expected_type=LineProperties, allow_none=True)
|
||||
# uses element group EG_TextUnderlineFill
|
||||
uFillTx = EmptyTag()
|
||||
uFill = EmptyTag()
|
||||
|
||||
__elements__ = ('ln', 'noFill', 'solidFill', 'gradFill', 'blipFill',
|
||||
'pattFill', 'grpFill', 'effectLst', 'effectDag', 'highlight','uLnTx',
|
||||
'uLn', 'uFillTx', 'uFill', 'latin', 'ea', 'cs', 'sym', 'hlinkClick',
|
||||
'hlinkMouseOver', 'rtl', )
|
||||
|
||||
def __init__(self,
|
||||
kumimoji=None,
|
||||
lang=None,
|
||||
altLang=None,
|
||||
sz=None,
|
||||
b=None,
|
||||
i=None,
|
||||
u=None,
|
||||
strike=None,
|
||||
kern=None,
|
||||
cap=None,
|
||||
spc=None,
|
||||
normalizeH=None,
|
||||
baseline=None,
|
||||
noProof=None,
|
||||
dirty=None,
|
||||
err=None,
|
||||
smtClean=None,
|
||||
smtId=None,
|
||||
bmk=None,
|
||||
ln=None,
|
||||
highlight=None,
|
||||
latin=None,
|
||||
ea=None,
|
||||
cs=None,
|
||||
sym=None,
|
||||
hlinkClick=None,
|
||||
hlinkMouseOver=None,
|
||||
rtl=None,
|
||||
extLst=None,
|
||||
noFill=None,
|
||||
solidFill=None,
|
||||
gradFill=None,
|
||||
blipFill=None,
|
||||
pattFill=None,
|
||||
grpFill=None,
|
||||
effectLst=None,
|
||||
effectDag=None,
|
||||
uLnTx=None,
|
||||
uLn=None,
|
||||
uFillTx=None,
|
||||
uFill=None,
|
||||
):
|
||||
self.kumimoji = kumimoji
|
||||
self.lang = lang
|
||||
self.altLang = altLang
|
||||
self.sz = sz
|
||||
self.b = b
|
||||
self.i = i
|
||||
self.u = u
|
||||
self.strike = strike
|
||||
self.kern = kern
|
||||
self.cap = cap
|
||||
self.spc = spc
|
||||
self.normalizeH = normalizeH
|
||||
self.baseline = baseline
|
||||
self.noProof = noProof
|
||||
self.dirty = dirty
|
||||
self.err = err
|
||||
self.smtClean = smtClean
|
||||
self.smtId = smtId
|
||||
self.bmk = bmk
|
||||
self.ln = ln
|
||||
self.highlight = highlight
|
||||
self.latin = latin
|
||||
self.ea = ea
|
||||
self.cs = cs
|
||||
self.sym = sym
|
||||
self.hlinkClick = hlinkClick
|
||||
self.hlinkMouseOver = hlinkMouseOver
|
||||
self.rtl = rtl
|
||||
self.noFill = noFill
|
||||
self.solidFill = solidFill
|
||||
self.gradFill = gradFill
|
||||
self.blipFill = blipFill
|
||||
self.pattFill = pattFill
|
||||
self.grpFill = grpFill
|
||||
self.effectLst = effectLst
|
||||
self.effectDag = effectDag
|
||||
self.uLnTx = uLnTx
|
||||
self.uLn = uLn
|
||||
self.uFillTx = uFillTx
|
||||
self.uFill = uFill
|
||||
|
||||
|
||||
class TabStop(Serialisable):
|
||||
|
||||
pos = Typed(expected_type=Coordinate, allow_none=True)
|
||||
algn = Typed(expected_type=Set(values=(['l', 'ctr', 'r', 'dec'])))
|
||||
|
||||
def __init__(self,
|
||||
pos=None,
|
||||
algn=None,
|
||||
):
|
||||
self.pos = pos
|
||||
self.algn = algn
|
||||
|
||||
|
||||
class TabStopList(Serialisable):
|
||||
|
||||
tab = Typed(expected_type=TabStop, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
tab=None,
|
||||
):
|
||||
self.tab = tab
|
||||
|
||||
|
||||
class Spacing(Serialisable):
|
||||
|
||||
spcPct = NestedInteger(allow_none=True)
|
||||
spcPts = NestedInteger(allow_none=True)
|
||||
|
||||
__elements__ = ('spcPct', 'spcPts')
|
||||
|
||||
def __init__(self,
|
||||
spcPct=None,
|
||||
spcPts=None,
|
||||
):
|
||||
self.spcPct = spcPct
|
||||
self.spcPts = spcPts
|
||||
|
||||
|
||||
class AutonumberBullet(Serialisable):
|
||||
|
||||
type = Set(values=(['alphaLcParenBoth', 'alphaUcParenBoth',
|
||||
'alphaLcParenR', 'alphaUcParenR', 'alphaLcPeriod', 'alphaUcPeriod',
|
||||
'arabicParenBoth', 'arabicParenR', 'arabicPeriod', 'arabicPlain',
|
||||
'romanLcParenBoth', 'romanUcParenBoth', 'romanLcParenR', 'romanUcParenR',
|
||||
'romanLcPeriod', 'romanUcPeriod', 'circleNumDbPlain',
|
||||
'circleNumWdBlackPlain', 'circleNumWdWhitePlain', 'arabicDbPeriod',
|
||||
'arabicDbPlain', 'ea1ChsPeriod', 'ea1ChsPlain', 'ea1ChtPeriod',
|
||||
'ea1ChtPlain', 'ea1JpnChsDbPeriod', 'ea1JpnKorPlain', 'ea1JpnKorPeriod',
|
||||
'arabic1Minus', 'arabic2Minus', 'hebrew2Minus', 'thaiAlphaPeriod',
|
||||
'thaiAlphaParenR', 'thaiAlphaParenBoth', 'thaiNumPeriod',
|
||||
'thaiNumParenR', 'thaiNumParenBoth', 'hindiAlphaPeriod',
|
||||
'hindiNumPeriod', 'hindiNumParenR', 'hindiAlpha1Period']))
|
||||
startAt = Integer()
|
||||
|
||||
def __init__(self,
|
||||
type=None,
|
||||
startAt=None,
|
||||
):
|
||||
self.type = type
|
||||
self.startAt = startAt
|
||||
|
||||
|
||||
class ParagraphProperties(Serialisable):
|
||||
|
||||
tagname = "pPr"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
marL = Integer(allow_none=True)
|
||||
marR = Integer(allow_none=True)
|
||||
lvl = Integer(allow_none=True)
|
||||
indent = Integer(allow_none=True)
|
||||
algn = NoneSet(values=(['l', 'ctr', 'r', 'just', 'justLow', 'dist', 'thaiDist']))
|
||||
defTabSz = Integer(allow_none=True)
|
||||
rtl = Bool(allow_none=True)
|
||||
eaLnBrk = Bool(allow_none=True)
|
||||
fontAlgn = NoneSet(values=(['auto', 't', 'ctr', 'base', 'b']))
|
||||
latinLnBrk = Bool(allow_none=True)
|
||||
hangingPunct = Bool(allow_none=True)
|
||||
|
||||
# uses element group EG_TextBulletColor
|
||||
# uses element group EG_TextBulletSize
|
||||
# uses element group EG_TextBulletTypeface
|
||||
# uses element group EG_TextBullet
|
||||
lnSpc = Typed(expected_type=Spacing, allow_none=True)
|
||||
spcBef = Typed(expected_type=Spacing, allow_none=True)
|
||||
spcAft = Typed(expected_type=Spacing, allow_none=True)
|
||||
tabLst = Typed(expected_type=TabStopList, allow_none=True)
|
||||
defRPr = Typed(expected_type=CharacterProperties, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
buClrTx = EmptyTag()
|
||||
buClr = Typed(expected_type=Color, allow_none=True)
|
||||
buSzTx = EmptyTag()
|
||||
buSzPct = NestedInteger(allow_none=True)
|
||||
buSzPts = NestedInteger(allow_none=True)
|
||||
buFontTx = EmptyTag()
|
||||
buFont = Typed(expected_type=Font, allow_none=True)
|
||||
buNone = EmptyTag()
|
||||
buAutoNum = EmptyTag()
|
||||
buChar = NestedValue(expected_type=str, attribute="char", allow_none=True)
|
||||
buBlip = NestedValue(expected_type=Blip, attribute="blip", allow_none=True)
|
||||
|
||||
__elements__ = ('lnSpc', 'spcBef', 'spcAft', 'tabLst', 'defRPr',
|
||||
'buClrTx', 'buClr', 'buSzTx', 'buSzPct', 'buSzPts', 'buFontTx', 'buFont',
|
||||
'buNone', 'buAutoNum', 'buChar', 'buBlip')
|
||||
|
||||
def __init__(self,
|
||||
marL=None,
|
||||
marR=None,
|
||||
lvl=None,
|
||||
indent=None,
|
||||
algn=None,
|
||||
defTabSz=None,
|
||||
rtl=None,
|
||||
eaLnBrk=None,
|
||||
fontAlgn=None,
|
||||
latinLnBrk=None,
|
||||
hangingPunct=None,
|
||||
lnSpc=None,
|
||||
spcBef=None,
|
||||
spcAft=None,
|
||||
tabLst=None,
|
||||
defRPr=None,
|
||||
extLst=None,
|
||||
buClrTx=None,
|
||||
buClr=None,
|
||||
buSzTx=None,
|
||||
buSzPct=None,
|
||||
buSzPts=None,
|
||||
buFontTx=None,
|
||||
buFont=None,
|
||||
buNone=None,
|
||||
buAutoNum=None,
|
||||
buChar=None,
|
||||
buBlip=None,
|
||||
):
|
||||
self.marL = marL
|
||||
self.marR = marR
|
||||
self.lvl = lvl
|
||||
self.indent = indent
|
||||
self.algn = algn
|
||||
self.defTabSz = defTabSz
|
||||
self.rtl = rtl
|
||||
self.eaLnBrk = eaLnBrk
|
||||
self.fontAlgn = fontAlgn
|
||||
self.latinLnBrk = latinLnBrk
|
||||
self.hangingPunct = hangingPunct
|
||||
self.lnSpc = lnSpc
|
||||
self.spcBef = spcBef
|
||||
self.spcAft = spcAft
|
||||
self.tabLst = tabLst
|
||||
self.defRPr = defRPr
|
||||
self.buClrTx = buClrTx
|
||||
self.buClr = buClr
|
||||
self.buSzTx = buSzTx
|
||||
self.buSzPct = buSzPct
|
||||
self.buSzPts = buSzPts
|
||||
self.buFontTx = buFontTx
|
||||
self.buFont = buFont
|
||||
self.buNone = buNone
|
||||
self.buAutoNum = buAutoNum
|
||||
self.buChar = buChar
|
||||
self.buBlip = buBlip
|
||||
self.defRPr = defRPr
|
||||
|
||||
|
||||
class ListStyle(Serialisable):
|
||||
|
||||
tagname = "lstStyle"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
defPPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl1pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl2pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl3pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl4pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl5pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl6pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl7pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl8pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
lvl9pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
|
||||
__elements__ = ("defPPr", "lvl1pPr", "lvl2pPr", "lvl3pPr", "lvl4pPr",
|
||||
"lvl5pPr", "lvl6pPr", "lvl7pPr", "lvl8pPr", "lvl9pPr")
|
||||
|
||||
def __init__(self,
|
||||
defPPr=None,
|
||||
lvl1pPr=None,
|
||||
lvl2pPr=None,
|
||||
lvl3pPr=None,
|
||||
lvl4pPr=None,
|
||||
lvl5pPr=None,
|
||||
lvl6pPr=None,
|
||||
lvl7pPr=None,
|
||||
lvl8pPr=None,
|
||||
lvl9pPr=None,
|
||||
extLst=None,
|
||||
):
|
||||
self.defPPr = defPPr
|
||||
self.lvl1pPr = lvl1pPr
|
||||
self.lvl2pPr = lvl2pPr
|
||||
self.lvl3pPr = lvl3pPr
|
||||
self.lvl4pPr = lvl4pPr
|
||||
self.lvl5pPr = lvl5pPr
|
||||
self.lvl6pPr = lvl6pPr
|
||||
self.lvl7pPr = lvl7pPr
|
||||
self.lvl8pPr = lvl8pPr
|
||||
self.lvl9pPr = lvl9pPr
|
||||
|
||||
|
||||
class RegularTextRun(Serialisable):
|
||||
|
||||
tagname = "r"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
rPr = Typed(expected_type=CharacterProperties, allow_none=True)
|
||||
properties = Alias("rPr")
|
||||
t = NestedText(expected_type=str)
|
||||
value = Alias("t")
|
||||
|
||||
__elements__ = ('rPr', 't')
|
||||
|
||||
def __init__(self,
|
||||
rPr=None,
|
||||
t="",
|
||||
):
|
||||
self.rPr = rPr
|
||||
self.t = t
|
||||
|
||||
|
||||
class LineBreak(Serialisable):
|
||||
|
||||
tagname = "br"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
rPr = Typed(expected_type=CharacterProperties, allow_none=True)
|
||||
|
||||
__elements__ = ('rPr',)
|
||||
|
||||
def __init__(self,
|
||||
rPr=None,
|
||||
):
|
||||
self.rPr = rPr
|
||||
|
||||
|
||||
class TextField(Serialisable):
|
||||
|
||||
id = String()
|
||||
type = String(allow_none=True)
|
||||
rPr = Typed(expected_type=CharacterProperties, allow_none=True)
|
||||
pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
t = String(allow_none=True)
|
||||
|
||||
__elements__ = ('rPr', 'pPr')
|
||||
|
||||
def __init__(self,
|
||||
id=None,
|
||||
type=None,
|
||||
rPr=None,
|
||||
pPr=None,
|
||||
t=None,
|
||||
):
|
||||
self.id = id
|
||||
self.type = type
|
||||
self.rPr = rPr
|
||||
self.pPr = pPr
|
||||
self.t = t
|
||||
|
||||
|
||||
class Paragraph(Serialisable):
|
||||
|
||||
tagname = "p"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
# uses element group EG_TextRun
|
||||
pPr = Typed(expected_type=ParagraphProperties, allow_none=True)
|
||||
properties = Alias("pPr")
|
||||
endParaRPr = Typed(expected_type=CharacterProperties, allow_none=True)
|
||||
r = Sequence(expected_type=RegularTextRun)
|
||||
text = Alias('r')
|
||||
br = Typed(expected_type=LineBreak, allow_none=True)
|
||||
fld = Typed(expected_type=TextField, allow_none=True)
|
||||
|
||||
__elements__ = ('pPr', 'r', 'br', 'fld', 'endParaRPr')
|
||||
|
||||
def __init__(self,
|
||||
pPr=None,
|
||||
endParaRPr=None,
|
||||
r=None,
|
||||
br=None,
|
||||
fld=None,
|
||||
):
|
||||
self.pPr = pPr
|
||||
self.endParaRPr = endParaRPr
|
||||
if r is None:
|
||||
r = [RegularTextRun()]
|
||||
self.r = r
|
||||
self.br = br
|
||||
self.fld = fld
|
||||
|
||||
|
||||
class GeomGuide(Serialisable):
|
||||
|
||||
name = String(())
|
||||
fmla = String(())
|
||||
|
||||
def __init__(self,
|
||||
name=None,
|
||||
fmla=None,
|
||||
):
|
||||
self.name = name
|
||||
self.fmla = fmla
|
||||
|
||||
|
||||
class GeomGuideList(Serialisable):
|
||||
|
||||
gd = Sequence(expected_type=GeomGuide, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
gd=None,
|
||||
):
|
||||
self.gd = gd
|
||||
|
||||
|
||||
class PresetTextShape(Serialisable):
|
||||
|
||||
prst = Typed(expected_type=Set(values=(
|
||||
['textNoShape', 'textPlain','textStop', 'textTriangle', 'textTriangleInverted', 'textChevron',
|
||||
'textChevronInverted', 'textRingInside', 'textRingOutside', 'textArchUp',
|
||||
'textArchDown', 'textCircle', 'textButton', 'textArchUpPour',
|
||||
'textArchDownPour', 'textCirclePour', 'textButtonPour', 'textCurveUp',
|
||||
'textCurveDown', 'textCanUp', 'textCanDown', 'textWave1', 'textWave2',
|
||||
'textDoubleWave1', 'textWave4', 'textInflate', 'textDeflate',
|
||||
'textInflateBottom', 'textDeflateBottom', 'textInflateTop',
|
||||
'textDeflateTop', 'textDeflateInflate', 'textDeflateInflateDeflate',
|
||||
'textFadeRight', 'textFadeLeft', 'textFadeUp', 'textFadeDown',
|
||||
'textSlantUp', 'textSlantDown', 'textCascadeUp', 'textCascadeDown'
|
||||
]
|
||||
)))
|
||||
avLst = Typed(expected_type=GeomGuideList, allow_none=True)
|
||||
|
||||
def __init__(self,
|
||||
prst=None,
|
||||
avLst=None,
|
||||
):
|
||||
self.prst = prst
|
||||
self.avLst = avLst
|
||||
|
||||
|
||||
class TextNormalAutofit(Serialisable):
|
||||
|
||||
fontScale = Integer()
|
||||
lnSpcReduction = Integer()
|
||||
|
||||
def __init__(self,
|
||||
fontScale=None,
|
||||
lnSpcReduction=None,
|
||||
):
|
||||
self.fontScale = fontScale
|
||||
self.lnSpcReduction = lnSpcReduction
|
||||
|
||||
|
||||
class RichTextProperties(Serialisable):
|
||||
|
||||
tagname = "bodyPr"
|
||||
namespace = DRAWING_NS
|
||||
|
||||
rot = Integer(allow_none=True)
|
||||
spcFirstLastPara = Bool(allow_none=True)
|
||||
vertOverflow = NoneSet(values=(['overflow', 'ellipsis', 'clip']))
|
||||
horzOverflow = NoneSet(values=(['overflow', 'clip']))
|
||||
vert = NoneSet(values=(['horz', 'vert', 'vert270', 'wordArtVert',
|
||||
'eaVert', 'mongolianVert', 'wordArtVertRtl']))
|
||||
wrap = NoneSet(values=(['none', 'square']))
|
||||
lIns = Integer(allow_none=True)
|
||||
tIns = Integer(allow_none=True)
|
||||
rIns = Integer(allow_none=True)
|
||||
bIns = Integer(allow_none=True)
|
||||
numCol = Integer(allow_none=True)
|
||||
spcCol = Integer(allow_none=True)
|
||||
rtlCol = Bool(allow_none=True)
|
||||
fromWordArt = Bool(allow_none=True)
|
||||
anchor = NoneSet(values=(['t', 'ctr', 'b', 'just', 'dist']))
|
||||
anchorCtr = Bool(allow_none=True)
|
||||
forceAA = Bool(allow_none=True)
|
||||
upright = Bool(allow_none=True)
|
||||
compatLnSpc = Bool(allow_none=True)
|
||||
prstTxWarp = Typed(expected_type=PresetTextShape, allow_none=True)
|
||||
scene3d = Typed(expected_type=Scene3D, allow_none=True)
|
||||
extLst = Typed(expected_type=OfficeArtExtensionList, allow_none=True)
|
||||
noAutofit = EmptyTag()
|
||||
normAutofit = EmptyTag()
|
||||
spAutoFit = EmptyTag()
|
||||
flatTx = NestedInteger(attribute="z", allow_none=True)
|
||||
|
||||
__elements__ = ('prstTxWarp', 'scene3d', 'noAutofit', 'normAutofit', 'spAutoFit')
|
||||
|
||||
def __init__(self,
|
||||
rot=None,
|
||||
spcFirstLastPara=None,
|
||||
vertOverflow=None,
|
||||
horzOverflow=None,
|
||||
vert=None,
|
||||
wrap=None,
|
||||
lIns=None,
|
||||
tIns=None,
|
||||
rIns=None,
|
||||
bIns=None,
|
||||
numCol=None,
|
||||
spcCol=None,
|
||||
rtlCol=None,
|
||||
fromWordArt=None,
|
||||
anchor=None,
|
||||
anchorCtr=None,
|
||||
forceAA=None,
|
||||
upright=None,
|
||||
compatLnSpc=None,
|
||||
prstTxWarp=None,
|
||||
scene3d=None,
|
||||
extLst=None,
|
||||
noAutofit=None,
|
||||
normAutofit=None,
|
||||
spAutoFit=None,
|
||||
flatTx=None,
|
||||
):
|
||||
self.rot = rot
|
||||
self.spcFirstLastPara = spcFirstLastPara
|
||||
self.vertOverflow = vertOverflow
|
||||
self.horzOverflow = horzOverflow
|
||||
self.vert = vert
|
||||
self.wrap = wrap
|
||||
self.lIns = lIns
|
||||
self.tIns = tIns
|
||||
self.rIns = rIns
|
||||
self.bIns = bIns
|
||||
self.numCol = numCol
|
||||
self.spcCol = spcCol
|
||||
self.rtlCol = rtlCol
|
||||
self.fromWordArt = fromWordArt
|
||||
self.anchor = anchor
|
||||
self.anchorCtr = anchorCtr
|
||||
self.forceAA = forceAA
|
||||
self.upright = upright
|
||||
self.compatLnSpc = compatLnSpc
|
||||
self.prstTxWarp = prstTxWarp
|
||||
self.scene3d = scene3d
|
||||
self.noAutofit = noAutofit
|
||||
self.normAutofit = normAutofit
|
||||
self.spAutoFit = spAutoFit
|
||||
self.flatTx = flatTx
|
33
.venv/Lib/site-packages/openpyxl/drawing/xdr.py
Normal file
33
.venv/Lib/site-packages/openpyxl/drawing/xdr.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# Copyright (c) 2010-2022 openpyxl
|
||||
|
||||
"""
|
||||
Spreadsheet Drawing has some copies of Drawing ML elements
|
||||
"""
|
||||
|
||||
from .geometry import Point2D, PositiveSize2D, Transform2D
|
||||
|
||||
|
||||
class XDRPoint2D(Point2D):
|
||||
|
||||
namespace = None
|
||||
x = Point2D.x
|
||||
y = Point2D.y
|
||||
|
||||
|
||||
class XDRPositiveSize2D(PositiveSize2D):
|
||||
|
||||
namespace = None
|
||||
cx = PositiveSize2D.cx
|
||||
cy = PositiveSize2D.cy
|
||||
|
||||
|
||||
class XDRTransform2D(Transform2D):
|
||||
|
||||
namespace = None
|
||||
rot = Transform2D.rot
|
||||
flipH = Transform2D.flipH
|
||||
flipV = Transform2D.flipV
|
||||
off = Transform2D.off
|
||||
ext = Transform2D.ext
|
||||
chOff = Transform2D.chOff
|
||||
chExt = Transform2D.chExt
|
Reference in New Issue
Block a user