
Master Placeholders
===================


Candidate protocol
------------------

::

    >>> slide_master = prs.slide_master
    >>> slide_master.shapes
    <pptx.shapes.slidemaster.MasterShapes object at 0x10a4df150>

    >>> slide_master.shapes[0]
    <pptx.shapes.placeholder.MasterPlaceholder object at 0x104e60290>
    >>> master_placeholders = slide_master.placeholders
    >>> master_placeholders
    <pptx.shapes.shapetree.MasterPlaceholders object at 0x104371290>
    >>> len(master_placeholders)
    5
    >>> master_placeholders[0].type
    'title'
    >>> master_placeholders[0].idx
    0
    >>> master_placeholders.get(type='body')
    <pptx.shapes.placeholder.MasterPlaceholder object at 0x104e60290>
    >>> master_placeholders.get(idx=666)
    None


Example XML
-----------

Slide master placeholder::

    <p:sp>
      <p:nvSpPr>
        <p:cNvPr id="3" name="Text Placeholder 2"/>
        <p:cNvSpPr>
          <a:spLocks noGrp="1"/>
        </p:cNvSpPr>
        <p:nvPr>
          <p:ph type="body" idx="1"/>
        </p:nvPr>
      </p:nvSpPr>
      <p:spPr>
        <a:xfrm>
          <a:off x="457200" y="1600200"/>
          <a:ext cx="8229600" cy="4525963"/>
        </a:xfrm>
        <a:prstGeom prst="rect">
          <a:avLst/>
        </a:prstGeom>
      </p:spPr>
      <p:txBody>
        <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440"
                  bIns="45720" rtlCol="0">
          <a:normAutofit/>
        </a:bodyPr>
        <a:lstStyle/>
        <a:p>
          <a:pPr lvl="0"/>
          <a:r>
            <a:rPr lang="en-US" smtClean="0"/>
            <a:t>Click to edit Master text styles</a:t>
          </a:r>
        </a:p>
        <a:p>
          ... and others through lvl="4", five total
        </a:p>
      </p:txBody>
    </p:sp>


Behaviors
---------

* Master placeholder specifies size, position, geometry, and text body
  properties, such as margins (inset) and autofit

* It appears a slide master permits at most five placeholders, at most one
  each of title, body, date, footer, and slide number

* A master placeholder is always a `<p:sp>` (autoshape) element. It does not
  allow the insertion of content, although text entered in the shape somehow
  becomes the prompt text for inheriting placeholders.

* Hypothesis:

  + Layout inherits properties from master based only on type (e.g. body,
    dt), with no bearing on idx value.
  + Slide inherits from layout strictly on idx value.

  + Need to experiment to see if position and size are inherited on body
    placeholder by type or if idx has any effect

    - expanded/repackaged, change body ph idx on layout and see if still
      inherits position.
    - result: slide layout still appears with the proper position and size,
      however the slide placeholder appears at (0, 0) and apparently with
      size of (0, 0).

  + What behavior is exhibited when a slide layout contains two body
    placeholders, neither of which has a matching idx value and neither of
    which has a specified size or position?

    - result: both placeholders are present, directly superimposed upon each
      other. They both inherit position and fill.

* GUI doesn't seem to provide a way to add additional "footer" placeholders

* Does the MS API include populated object placeholders in the Placeholders
  collection?
