python-pptx2 2.18.0__py3-none-any.whl → 2.19.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pptx2/__init__.py +1 -1
- pptx2/_agent_friendly.py +88 -14
- pptx2/diagrams.py +51 -0
- pptx2/shapes/shapetree.py +11 -0
- pptx2/skill/references/basics.md +10 -6
- {python_pptx2-2.18.0.dist-info → python_pptx2-2.19.0.dist-info}/METADATA +1 -1
- {python_pptx2-2.18.0.dist-info → python_pptx2-2.19.0.dist-info}/RECORD +11 -11
- {python_pptx2-2.18.0.dist-info → python_pptx2-2.19.0.dist-info}/WHEEL +0 -0
- {python_pptx2-2.18.0.dist-info → python_pptx2-2.19.0.dist-info}/entry_points.txt +0 -0
- {python_pptx2-2.18.0.dist-info → python_pptx2-2.19.0.dist-info}/licenses/LICENSE +0 -0
- {python_pptx2-2.18.0.dist-info → python_pptx2-2.19.0.dist-info}/top_level.txt +0 -0
pptx2/__init__.py
CHANGED
pptx2/_agent_friendly.py
CHANGED
|
@@ -23,23 +23,21 @@ caller bug and still raises.
|
|
|
23
23
|
from __future__ import annotations
|
|
24
24
|
|
|
25
25
|
import difflib
|
|
26
|
+
import functools
|
|
27
|
+
import inspect
|
|
26
28
|
|
|
27
29
|
# Canonical kwarg -> spellings other ecosystems use for the same thing.
|
|
28
30
|
SYNONYMS: dict[str, tuple[str, ...]] = {
|
|
29
31
|
"text": ("txt", "string", "content", "label", "caption", "value"),
|
|
30
|
-
"font": (
|
|
32
|
+
"font": (
|
|
33
|
+
"font_family", "fontfamily", "font_name", "fontname", "typeface", "family", "face",
|
|
34
|
+
),
|
|
31
35
|
"size_pt": ("size", "font_size", "fontsize", "pt_size", "point_size"),
|
|
32
36
|
"align": ("halign", "ha", "horizontal_align", "horizontal_alignment", "text_align", "text_alignment"),
|
|
33
37
|
"anchor": ("valign", "va", "vertical_align", "vertical_alignment", "v_align"),
|
|
34
38
|
"color": (
|
|
35
|
-
"colour",
|
|
36
|
-
"
|
|
37
|
-
"font_colour",
|
|
38
|
-
"text_color",
|
|
39
|
-
"text_colour",
|
|
40
|
-
"fg_color",
|
|
41
|
-
"line_color",
|
|
42
|
-
"stroke_color",
|
|
39
|
+
"colour", "font_color", "font_colour", "text_color", "text_colour",
|
|
40
|
+
"fg_color", "line_color", "stroke_color",
|
|
43
41
|
),
|
|
44
42
|
"weight_pt": ("weight", "line_weight", "width_pt", "stroke_width"),
|
|
45
43
|
"bold": ("font_bold", "is_bold"),
|
|
@@ -53,6 +51,8 @@ SYNONYMS: dict[str, tuple[str, ...]] = {
|
|
|
53
51
|
"height": ("h",),
|
|
54
52
|
"start": ("begin", "start_point", "start_shape", "from", "source"),
|
|
55
53
|
"end": ("to", "end_point", "end_shape", "target"),
|
|
54
|
+
"image_file": ("image", "img", "path", "file", "filename", "image_path", "file_path"),
|
|
55
|
+
"steps": ("items", "stages", "nodes", "boxes"),
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
_ALIAS_TO_CANONICAL: dict[str, str] = {
|
|
@@ -89,17 +89,28 @@ def absorb_agent_kwargs(
|
|
|
89
89
|
method: str,
|
|
90
90
|
kwargs: dict,
|
|
91
91
|
canonical_names: "list[str] | tuple[str, ...]",
|
|
92
|
+
extra_synonyms: "dict[str, tuple[str, ...]] | None" = None,
|
|
93
|
+
pass_through_unknown: bool = False,
|
|
92
94
|
) -> dict:
|
|
93
95
|
"""Map alias / near-miss *kwargs* onto canonical names; raise else.
|
|
94
96
|
|
|
95
97
|
*canonical_names* lists the kwargs the method actually understands
|
|
96
|
-
(including any already-bound explicit parameters).
|
|
97
|
-
|
|
98
|
-
|
|
98
|
+
(including any already-bound explicit parameters). *extra_synonyms*
|
|
99
|
+
adds call-site-specific spellings (e.g. ``{"cx": ("width", "w")}``
|
|
100
|
+
for ``add_chart``). Returns a dict containing only canonical names
|
|
101
|
+
— unless *pass_through_unknown* is set (for functions that accept
|
|
102
|
+
``**kwargs`` themselves), in which case unabsorbable names are
|
|
103
|
+
passed through verbatim. A synonym that matches a canonical the
|
|
104
|
+
caller already supplied with a *different* value raises
|
|
99
105
|
``TypeError``; equal values are fine.
|
|
100
106
|
"""
|
|
101
107
|
known = list(canonical_names)
|
|
102
|
-
|
|
108
|
+
alias_map = dict(_ALIAS_TO_CANONICAL)
|
|
109
|
+
if extra_synonyms:
|
|
110
|
+
for canonical, aliases in extra_synonyms.items():
|
|
111
|
+
for alias in aliases:
|
|
112
|
+
alias_map[alias] = canonical
|
|
113
|
+
alias_space = [a for a in alias_map if a not in known]
|
|
103
114
|
candidates = known + alias_space
|
|
104
115
|
|
|
105
116
|
resolved: dict = {}
|
|
@@ -112,7 +123,7 @@ def absorb_agent_kwargs(
|
|
|
112
123
|
)
|
|
113
124
|
resolved[name] = value
|
|
114
125
|
continue
|
|
115
|
-
canonical =
|
|
126
|
+
canonical = alias_map.get(name)
|
|
116
127
|
if canonical is not None and canonical not in known:
|
|
117
128
|
# The alias resolves to an argument this method doesn't take
|
|
118
129
|
# (e.g. ``to=`` on add_text); fall through to the fuzzy/error
|
|
@@ -121,6 +132,9 @@ def absorb_agent_kwargs(
|
|
|
121
132
|
if canonical is None:
|
|
122
133
|
canonical = _did_you_mean(name, candidates, known)
|
|
123
134
|
if canonical is None:
|
|
135
|
+
if pass_through_unknown:
|
|
136
|
+
resolved[name] = value
|
|
137
|
+
continue
|
|
124
138
|
raise TypeError(
|
|
125
139
|
f"{method}(): got an unexpected keyword argument {name!r}. "
|
|
126
140
|
f"Accepted: {', '.join(sorted(known))} "
|
|
@@ -134,3 +148,63 @@ def absorb_agent_kwargs(
|
|
|
134
148
|
)
|
|
135
149
|
resolved[canonical] = value
|
|
136
150
|
return resolved
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def agent_friendly(extra_synonyms=None):
|
|
154
|
+
"""Decorator: make a method/function absorb alias and fuzzy kwargs.
|
|
155
|
+
|
|
156
|
+
Wrap any public helper so its keyword arguments get the full
|
|
157
|
+
treatment from :func:`absorb_agent_kwargs` — global synonyms,
|
|
158
|
+
per-call *extra_synonyms*, fuzzy near-misses, and didactic errors —
|
|
159
|
+
without touching its body. Usable bare (``@agent_friendly``) or
|
|
160
|
+
with per-method synonyms. A keyword that repeats a value already
|
|
161
|
+
bound positionally (through a synonym or exact name) is dropped when
|
|
162
|
+
equal and raises ``TypeError`` when it contradicts::
|
|
163
|
+
|
|
164
|
+
@agent_friendly({"cx": ("width", "w"), "cy": ("height", "h")})
|
|
165
|
+
def add_chart(self, x, y, cx, cy, chart_type, chart_data): ...
|
|
166
|
+
"""
|
|
167
|
+
if callable(extra_synonyms): # used bare: @agent_friendly above def
|
|
168
|
+
return _decorate_friendly(extra_synonyms, None)
|
|
169
|
+
|
|
170
|
+
def decorator(func):
|
|
171
|
+
return _decorate_friendly(func, extra_synonyms)
|
|
172
|
+
|
|
173
|
+
return decorator
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _decorate_friendly(func, extra_synonyms):
|
|
177
|
+
sig = inspect.signature(func)
|
|
178
|
+
has_self = bool(sig.parameters) and next(iter(sig.parameters)) in ("self", "cls")
|
|
179
|
+
param_list = [
|
|
180
|
+
p
|
|
181
|
+
for p in sig.parameters.values()
|
|
182
|
+
if p.kind not in (inspect.Parameter.VAR_POSITIONAL, inspect.Parameter.VAR_KEYWORD)
|
|
183
|
+
and p.name not in ("self", "cls")
|
|
184
|
+
]
|
|
185
|
+
known = tuple(p.name for p in param_list)
|
|
186
|
+
takes_var_kw = any(
|
|
187
|
+
p.kind == inspect.Parameter.VAR_KEYWORD for p in sig.parameters.values()
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
@functools.wraps(func)
|
|
191
|
+
def wrapper(*args, **kwargs):
|
|
192
|
+
if kwargs:
|
|
193
|
+
kwargs = absorb_agent_kwargs(
|
|
194
|
+
func.__name__, kwargs, known, extra_synonyms,
|
|
195
|
+
pass_through_unknown=takes_var_kw,
|
|
196
|
+
)
|
|
197
|
+
offset = 1 if has_self else 0
|
|
198
|
+
for i, p in enumerate(param_list[: len(args) - offset]):
|
|
199
|
+
if p.name in kwargs:
|
|
200
|
+
if kwargs[p.name] != args[offset + i]:
|
|
201
|
+
raise TypeError(
|
|
202
|
+
f"{func.__name__}(): {p.name} given positionally "
|
|
203
|
+
f"({args[offset + i]!r}) and by keyword "
|
|
204
|
+
f"({kwargs[p.name]!r}) with different values"
|
|
205
|
+
)
|
|
206
|
+
del kwargs[p.name]
|
|
207
|
+
return func(*args, **kwargs)
|
|
208
|
+
|
|
209
|
+
return wrapper
|
|
210
|
+
|
pptx2/diagrams.py
CHANGED
|
@@ -32,6 +32,7 @@ import math
|
|
|
32
32
|
from dataclasses import dataclass, field
|
|
33
33
|
from typing import TYPE_CHECKING, Any, Sequence
|
|
34
34
|
|
|
35
|
+
from pptx2._agent_friendly import agent_friendly
|
|
35
36
|
from pptx2.enum.shapes import MSO_SHAPE
|
|
36
37
|
from pptx2.geometry import BBox
|
|
37
38
|
from pptx2.util import Emu, Inches, Pt
|
|
@@ -245,6 +246,14 @@ def _card(
|
|
|
245
246
|
# ----------------------------------------------------------------------------- pipelines
|
|
246
247
|
|
|
247
248
|
|
|
249
|
+
@agent_friendly(
|
|
250
|
+
{
|
|
251
|
+
"text_color": ("color", "colour", "fg_color", "text_colour"),
|
|
252
|
+
"accent": ("accent_color", "primary", "primary_color"),
|
|
253
|
+
"fill": ("fill_color", "background", "bg"),
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
)
|
|
248
257
|
def horizontal_pipeline(
|
|
249
258
|
slide,
|
|
250
259
|
bbox: BBox,
|
|
@@ -312,6 +321,14 @@ def horizontal_pipeline(
|
|
|
312
321
|
return PipelineResult(cards=cards, arrows=arrows)
|
|
313
322
|
|
|
314
323
|
|
|
324
|
+
@agent_friendly(
|
|
325
|
+
{
|
|
326
|
+
"text_color": ("color", "colour", "fg_color", "text_colour"),
|
|
327
|
+
"accent": ("accent_color", "primary", "primary_color"),
|
|
328
|
+
"fill": ("fill_color", "background", "bg"),
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
)
|
|
315
332
|
def vertical_pipeline(
|
|
316
333
|
slide,
|
|
317
334
|
bbox: BBox,
|
|
@@ -371,6 +388,15 @@ def vertical_pipeline(
|
|
|
371
388
|
# ----------------------------------------------------------------------------- hub
|
|
372
389
|
|
|
373
390
|
|
|
391
|
+
@agent_friendly(
|
|
392
|
+
{
|
|
393
|
+
"text_color": ("color", "colour", "fg_color", "text_colour"),
|
|
394
|
+
"accent": ("accent_color", "primary", "primary_color"),
|
|
395
|
+
"fill": ("fill_color", "background", "bg"),
|
|
396
|
+
"spokes": ("items", "stages", "nodes"),
|
|
397
|
+
"centre": ("center", "hub", "hub_label", "title"),
|
|
398
|
+
}
|
|
399
|
+
)
|
|
374
400
|
def hub_and_spoke(
|
|
375
401
|
slide,
|
|
376
402
|
bbox: BBox,
|
|
@@ -479,6 +505,14 @@ def hub_and_spoke(
|
|
|
479
505
|
# ----------------------------------------------------------------------------- cycle
|
|
480
506
|
|
|
481
507
|
|
|
508
|
+
@agent_friendly(
|
|
509
|
+
{
|
|
510
|
+
"text_color": ("color", "colour", "fg_color", "text_colour"),
|
|
511
|
+
"accent": ("accent_color", "primary", "primary_color"),
|
|
512
|
+
"fill": ("fill_color", "background", "bg"),
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
)
|
|
482
516
|
def cycle(
|
|
483
517
|
slide,
|
|
484
518
|
bbox: BBox,
|
|
@@ -553,6 +587,15 @@ def cycle(
|
|
|
553
587
|
# ----------------------------------------------------------------------------- decision tree
|
|
554
588
|
|
|
555
589
|
|
|
590
|
+
@agent_friendly(
|
|
591
|
+
{
|
|
592
|
+
"text_color": ("color", "colour", "fg_color", "text_colour"),
|
|
593
|
+
"accent": ("accent_color", "primary", "primary_color"),
|
|
594
|
+
"fill": ("fill_color", "background", "bg"),
|
|
595
|
+
"branches": ("items", "nodes", "children", "steps"),
|
|
596
|
+
"root": ("root_label", "title", "center"),
|
|
597
|
+
}
|
|
598
|
+
)
|
|
556
599
|
def decision_tree(
|
|
557
600
|
slide,
|
|
558
601
|
bbox: BBox,
|
|
@@ -675,6 +718,14 @@ def decision_tree(
|
|
|
675
718
|
# ----------------------------------------------------------------------------- columns
|
|
676
719
|
|
|
677
720
|
|
|
721
|
+
@agent_friendly(
|
|
722
|
+
{
|
|
723
|
+
"text_color": ("color", "colour", "fg_color", "text_colour"),
|
|
724
|
+
"accent": ("accent_color", "primary", "primary_color"),
|
|
725
|
+
"fill": ("fill_color", "background", "bg"),
|
|
726
|
+
"columns": ("items", "cols", "sections"),
|
|
727
|
+
}
|
|
728
|
+
)
|
|
678
729
|
def comparison_columns(
|
|
679
730
|
slide,
|
|
680
731
|
bbox: BBox,
|
pptx2/shapes/shapetree.py
CHANGED
|
@@ -34,6 +34,7 @@ from pptx2.shapes.placeholder import (
|
|
|
34
34
|
TablePlaceholder,
|
|
35
35
|
)
|
|
36
36
|
from pptx2.shared import ParentedElementProxy
|
|
37
|
+
from pptx2._agent_friendly import agent_friendly
|
|
37
38
|
from pptx2.util import Emu, _coerce_emu, lazyproperty
|
|
38
39
|
|
|
39
40
|
if TYPE_CHECKING:
|
|
@@ -567,6 +568,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
567
568
|
super(_BaseGroupShapes, self).__init__(grpSp, parent)
|
|
568
569
|
self._grpSp = grpSp
|
|
569
570
|
|
|
571
|
+
@agent_friendly({"cx": ("width", "w"), "cy": ("height", "h"), "chart_data": ("data", "chartdata"), "chart_type": ("type", "charttype")})
|
|
570
572
|
def add_chart(
|
|
571
573
|
self,
|
|
572
574
|
chart_type: XL_CHART_TYPE,
|
|
@@ -601,6 +603,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
601
603
|
_apply_horizontal_bar_default(shape, chart_type)
|
|
602
604
|
return cast("Chart", shape)
|
|
603
605
|
|
|
606
|
+
@agent_friendly({"connector_type": ("type", "kind", "connector"), "begin_x": ("x1", "start_x"), "begin_y": ("y1", "start_y"), "end_x": ("x2", "to_x"), "end_y": ("y2", "to_y")})
|
|
604
607
|
def add_connector(
|
|
605
608
|
self,
|
|
606
609
|
connector_type: MSO_CONNECTOR_TYPE,
|
|
@@ -621,6 +624,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
621
624
|
self._recalculate_extents()
|
|
622
625
|
return cast(Connector, self._shape_factory(cxnSp))
|
|
623
626
|
|
|
627
|
+
@agent_friendly({"shapes": ("items", "members")})
|
|
624
628
|
def add_group_shape(self, shapes: Iterable[BaseShape] = ()) -> GroupShape:
|
|
625
629
|
"""Return a |GroupShape| object newly appended to this shape tree.
|
|
626
630
|
|
|
@@ -639,6 +643,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
639
643
|
grpSp.recalculate_extents()
|
|
640
644
|
return cast(GroupShape, self._shape_factory(grpSp))
|
|
641
645
|
|
|
646
|
+
@agent_friendly
|
|
642
647
|
def add_ole_object(
|
|
643
648
|
self,
|
|
644
649
|
object_file: str | IO[bytes],
|
|
@@ -700,6 +705,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
700
705
|
self._recalculate_extents()
|
|
701
706
|
return cast(GraphicFrame, self._shape_factory(graphicFrame))
|
|
702
707
|
|
|
708
|
+
@agent_friendly
|
|
703
709
|
def add_picture(
|
|
704
710
|
self,
|
|
705
711
|
image_file: str | os.PathLike[str] | IO[bytes],
|
|
@@ -762,6 +768,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
762
768
|
picture.top = Emu(ct + new_top)
|
|
763
769
|
return picture
|
|
764
770
|
|
|
771
|
+
@agent_friendly({"svg_file": ("svg", "svg_path", "svg_source")})
|
|
765
772
|
def add_svg_picture(
|
|
766
773
|
self,
|
|
767
774
|
svg_file,
|
|
@@ -825,6 +832,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
825
832
|
self._recalculate_extents()
|
|
826
833
|
return cast(Picture, self._shape_factory(pic))
|
|
827
834
|
|
|
835
|
+
@agent_friendly({"autoshape_type_id": ("shape_type", "autoshape_type", "shape", "preset_shape")})
|
|
828
836
|
def add_shape(
|
|
829
837
|
self,
|
|
830
838
|
autoshape_type_id: MSO_SHAPE,
|
|
@@ -863,6 +871,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
863
871
|
shape.top = Emu(ct + new_top)
|
|
864
872
|
return shape
|
|
865
873
|
|
|
874
|
+
@agent_friendly
|
|
866
875
|
def add_textbox(
|
|
867
876
|
self,
|
|
868
877
|
left: Length,
|
|
@@ -1498,6 +1507,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1498
1507
|
sp = self._spTree.add_textbox(id_, name, x, y, cx, cy)
|
|
1499
1508
|
return sp
|
|
1500
1509
|
|
|
1510
|
+
@agent_friendly({"cols": ("columns", "num_cols", "col_count"), "rows": ("num_rows", "row_count")})
|
|
1501
1511
|
def add_table(
|
|
1502
1512
|
self,
|
|
1503
1513
|
rows: int,
|
|
@@ -1549,6 +1559,7 @@ class _BaseGroupShapes(_BaseShapes):
|
|
|
1549
1559
|
tbl.vert_banding = False
|
|
1550
1560
|
return shape
|
|
1551
1561
|
|
|
1562
|
+
@agent_friendly({"movie_file": ("video", "video_file", "movie", "path", "file")})
|
|
1552
1563
|
def add_movie(
|
|
1553
1564
|
self,
|
|
1554
1565
|
movie_file: str | IO[bytes],
|
pptx2/skill/references/basics.md
CHANGED
|
@@ -452,9 +452,13 @@ end. `move` raises `IndexError` out of range; `reorder` raises
|
|
|
452
452
|
|
|
453
453
|
### Forgiving keyword arguments
|
|
454
454
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
`
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
455
|
+
Every shape helper (`add_text`, `add_shape`, `add_picture`,
|
|
456
|
+
`add_table`, `add_chart`, `add_textbox`, `add_connector`, `add_movie`,
|
|
457
|
+
`add_arrow`, `add_equation`, ...) and the diagram recipes
|
|
458
|
+
(`horizontal_pipeline`, `hub_and_spoke`, ...) absorb cross-library and
|
|
459
|
+
near-miss kwargs: `font_family=`, `halign=`/`valign=`, `fontsize=`,
|
|
460
|
+
`colour`, `x,y,w,h` geometry keywords, `shape_type=`, `image=`,
|
|
461
|
+
`columns=`, `data=`, `begin=`/`to=`, `items=`/`nodes=` ... Synonyms
|
|
462
|
+
substitute, never contradict (two different values for the same
|
|
463
|
+
logical argument still raise), and a truly unknown kwarg raises a
|
|
464
|
+
`TypeError` listing every accepted name.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-pptx2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.19.0
|
|
4
4
|
Summary: Create, read, and update PowerPoint 2007+ (.pptx) files. Fork of power-pptx / python-pptx, published as python-pptx2.
|
|
5
5
|
Author: Matěj Štágl
|
|
6
6
|
Author-email: stagl@wattlescript.org
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
pptx2/__init__.py,sha256=
|
|
2
|
-
pptx2/_agent_friendly.py,sha256=
|
|
1
|
+
pptx2/__init__.py,sha256=SyJ-yjsqXoYHIjHWLRvKdyYTilNWX5KpkyHWIepB8HA,4076
|
|
2
|
+
pptx2/_agent_friendly.py,sha256=wYh9LmVuZMVlwOxzyd1mw0NmtPKQ2cTC21Y1Ww8ehO8,8834
|
|
3
3
|
pptx2/_color.py,sha256=Ureg4dSEdHbwpVZ5eJIyt0kLx_W3mGftmznejth_oLQ,2889
|
|
4
4
|
pptx2/_slide_importer.py,sha256=Ot3lW20eS7fMKsaGaeqPyeS9zVzt5D1WkovwozWwbYY,27033
|
|
5
5
|
pptx2/_svg.py,sha256=pMURsUQaJ9-dqRl4nEZKt1VECNpA8Ghp4EwNRWcBG-c,5973
|
|
@@ -10,7 +10,7 @@ pptx2/action.py,sha256=BiDtM80P6oFsNOtLIT1nX82LXEvaGOg4Usaf5CA7kNY,9648
|
|
|
10
10
|
pptx2/animation.py,sha256=g0OxAkCoGu0QEx3QB9Yu4BOnGLjD3tcLpKoYBAtUW6s,83756
|
|
11
11
|
pptx2/api.py,sha256=n98a5qUhVxSwZ_yG_aXxtDCxtnEp37LPsSIsYsbwsfA,1841
|
|
12
12
|
pptx2/audit.py,sha256=xg1QAs-ByW3xwBEcJ-Y9ptYe2WHKmVuVWAgRKQZfcr8,11276
|
|
13
|
-
pptx2/diagrams.py,sha256=
|
|
13
|
+
pptx2/diagrams.py,sha256=4NmdFBg367hRjfFh7pQCVivScspmyvPnp94IyncJgCc,26277
|
|
14
14
|
pptx2/exc.py,sha256=k6p-e9h5cKal09-sAv3E1QTXmVDuF8FqewW1CKFQmfw,1276
|
|
15
15
|
pptx2/formats.py,sha256=w0b8YXBjBbPhDu1UV9-1iUJdL62d9_gcQSp9sHKVr_s,5081
|
|
16
16
|
pptx2/geometry.py,sha256=X1tzwqTxXCMPPRpZhHSax6PKGy_-64MAudMI9h3ILJk,15221
|
|
@@ -137,12 +137,12 @@ pptx2/shapes/graphfrm.py,sha256=mwA9Wb4WRKBy6sA7KzOZFl3aHlpN-TmWRcE-kiMoqRI,1189
|
|
|
137
137
|
pptx2/shapes/group.py,sha256=xlcGi3MAzBHX2IM16IATxRgw8NwsPFzTMVbRPYQ7OKg,11036
|
|
138
138
|
pptx2/shapes/picture.py,sha256=U7rwiy7OXn0RgFSEdh07bdhIplWsI82OjFk-mt975J0,14938
|
|
139
139
|
pptx2/shapes/placeholder.py,sha256=9tIeNscnV46hWyMr8ZSiZO3TZr-tt4kZgx6BRB0tCvc,17838
|
|
140
|
-
pptx2/shapes/shapetree.py,sha256=
|
|
140
|
+
pptx2/shapes/shapetree.py,sha256=ZXO1mE2-sMF8Era-EA4mT61Mcj2Hfsr8v-7xOZM_oBw,91287
|
|
141
141
|
pptx2/skill/SKILL.md,sha256=6w7sWflZvhYYIzBsXLjx2uVKqB0793ZTvoZ_SUfzQxg,23668
|
|
142
142
|
pptx2/skill/__init__.py,sha256=bUkfMETwf3K6J7GSE-tLQjdNziS_JceunComLiLIeGI,2665
|
|
143
143
|
pptx2/skill/__main__.py,sha256=ohMLGy1jbjKV5_FqY6aGj4tm_isJ6fznvqUKiE1H6s8,1777
|
|
144
144
|
pptx2/skill/references/animations.md,sha256=ca02l5XCtOQpD-uSCItQixGaW0yONIY0P55yy-T-J1Q,5875
|
|
145
|
-
pptx2/skill/references/basics.md,sha256=
|
|
145
|
+
pptx2/skill/references/basics.md,sha256=O2ODa85fIK6mkom4aK2ehb2laEsogmtQ31RF5ckh6B0,14806
|
|
146
146
|
pptx2/skill/references/charts.md,sha256=skCS4Kn1j49mlIQJYDAkcu2VHc3S1mzwqkGT3ZE94wg,8119
|
|
147
147
|
pptx2/skill/references/compose.md,sha256=AfFwqAyQ9ggR140laqRDIUE3OcmTtXpIZH1oPcTOunA,8088
|
|
148
148
|
pptx2/skill/references/design.md,sha256=ne3xVyIwqpkhEkd8XK74QEija040eHve5zBHBx9LeNo,11706
|
|
@@ -171,9 +171,9 @@ pptx2/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
171
171
|
pptx2/text/fonts.py,sha256=ECa9HuBfeTqOi-uJTz_bu7eurC7e1_64RTwDatxmkpk,16498
|
|
172
172
|
pptx2/text/layout.py,sha256=k8bqod6GyshHJtfoqFtH9W-eHTI43IB0e6SLT1ibSUU,12815
|
|
173
173
|
pptx2/text/text.py,sha256=LPqF1B4GSQNSnSlVMm1v7pgtHCymOJPTUG_Kdt5_ou4,55039
|
|
174
|
-
python_pptx2-2.
|
|
175
|
-
python_pptx2-2.
|
|
176
|
-
python_pptx2-2.
|
|
177
|
-
python_pptx2-2.
|
|
178
|
-
python_pptx2-2.
|
|
179
|
-
python_pptx2-2.
|
|
174
|
+
python_pptx2-2.19.0.dist-info/licenses/LICENSE,sha256=hLdud18ZPS9iSG3kBCBLiGYzj4A6zedCHiDejIDBXNg,1230
|
|
175
|
+
python_pptx2-2.19.0.dist-info/METADATA,sha256=ttj2GNUUnqaxdWQqPvqwfN4lOn6KcRzMWtcBt1UnnCA,14374
|
|
176
|
+
python_pptx2-2.19.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
177
|
+
python_pptx2-2.19.0.dist-info/entry_points.txt,sha256=UpD1_pA-2BPeN0iDeD-u4NZ_yC78TvBdWu3V1xLsSRE,105
|
|
178
|
+
python_pptx2-2.19.0.dist-info/top_level.txt,sha256=NDdhJ4rOySlDU-cw4g-bQMoZCiy41WszlRXmIiReSRs,6
|
|
179
|
+
python_pptx2-2.19.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|