Line format¶
Intial scope¶
- Shape.line, Connector.line to follow, then Cell.border(s).line, possibly text underline and font.line (character outline)
Protocol¶
>>> shape.line
<pptx.dml.line.LineFormat instance at x123456789>
>>> shape.fore_color
<pptx.dml.line.LineFormat instance at x123456789>
Notes¶
definitely spike on this one.
start with line.color, first an object to hang members off of
Issue: How to accommodate these competing requirements:
- Polymorphism in parent shape. More than one type of shape can have a line and possibly several (table cell border, Run/text, and text underline use the same CT_LineProperties element, and perhaps others).
- The line object cannot hold onto a <a:ln> element, even if that was a good idea, because it is an optional child; not having an <a:ln> element is a legitimate and common situation, indicating line formatting should be inherited from the theme or perhaps a layout placeholder.
- Needing to accommodate XML changing might not be important, could make that operation immutable, such that changing the shape XML returns a new shape, not changing the existing one in-place.
- maybe having the following ‘line_format_owner_interface’, delegating
create, read, and delete of the <a:ln> element to the parent, and
allowing LineFormat to take responsibility for update.
- line.parent has the shape having the line format
- parent.ln has the <a:ln> element or None, delegating access to the parent
- ln = parent.add_ln()
- parent.remove_ln()
MS API¶
- MsoLineDashStyle Enumeration
Name Value Description msoLineDash 4 Line consists of dashes only. msoLineDashDot 5 Line is a dash-dot pattern. msoLineDashDotDot 6 Line is a dash-dot-dot pattern. msoLineDashStyleMixed -2 Not supported. msoLineLongDash 7 Line consists of long dashes. msoLineLongDashDot 8 Line is a long dash-dot pattern. msoLineRoundDot 3 Line is made up of round dots. msoLineSolid 1 Line is solid. msoLineSquareDot 2 Line is made up of square dots.
Specimen XML¶
solid line color:
<p:spPr>
<a:xfrm>
<a:off x="950964" y="2925277"/>
<a:ext cx="1257921" cy="619967"/>
</a:xfrm>
<a:prstGeom prst="curvedConnector3">
<a:avLst/>
</a:prstGeom>
<a:ln>
<a:solidFill>
<a:schemeClr val="accent2"/>
</a:solidFill>
</a:ln>
</p:spPr>
little bit of everything:
<p:spPr>
<a:xfrm>
<a:off x="950964" y="1101493"/>
<a:ext cx="1257921" cy="0"/>
</a:xfrm>
<a:prstGeom prst="line">
<a:avLst/>
</a:prstGeom>
<a:ln w="57150" cap="rnd" cmpd="thickThin">
<a:gradFill flip="none" rotWithShape="1">
<a:gsLst>
<a:gs pos="0">
<a:schemeClr val="accent1"/>
</a:gs>
<a:gs pos="100000">
<a:srgbClr val="FFFFFF"/>
</a:gs>
</a:gsLst>
<a:lin ang="0" scaled="1"/>
<a:tileRect/>
</a:gradFill>
<a:prstDash val="sysDash"/>
<a:bevel/>
<a:headEnd type="oval"/>
<a:tailEnd type="diamond"/>
</a:ln>
</p:spPr>