8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
247 lines
14 KiB
Bash
Executable File
247 lines
14 KiB
Bash
Executable File
#!/bin/bash
|
||
# Shape effects and meta — autoFit, flipH/V, image fill, 3D (bevel/depth/lighting/material),
|
||
# softEdge, hyperlinks on shape, name override, zorder.
|
||
# Covers the shape props NOT touched by shapes-basic / shapes-connectors / textboxes-basic.
|
||
|
||
# NOTE: intentionally NO `set -e`. Like the SDK twin's doc.batch, this script
|
||
# tolerates forward-compat 'UNSUPPORTED props' warnings (officecli exit 2) and
|
||
# keeps building so the full document is produced.
|
||
DIR="$(dirname "$0")"
|
||
PPTX="$DIR/shapes-effects.pptx"
|
||
|
||
# Build a tiny PNG once (16×16 magenta+yellow checker) for the image-fill demo.
|
||
SAMPLE_PNG="$(mktemp -t ocli-shape-fill.XXXXXX).png"
|
||
python3 - "$SAMPLE_PNG" <<'PY'
|
||
import struct, zlib, sys
|
||
W = H = 64
|
||
rows = []
|
||
for y in range(H):
|
||
row = b"\x00"
|
||
for x in range(W):
|
||
cell = (x // 16 + y // 16) & 1
|
||
row += (b"\xE6\x39\x46" if cell else b"\xFF\xE6\x6D")
|
||
rows.append(row)
|
||
raw = b"".join(rows)
|
||
def chunk(t, d):
|
||
return struct.pack(">I", len(d)) + t + d + struct.pack(">I", zlib.crc32(t + d) & 0xffffffff)
|
||
png = b"\x89PNG\r\n\x1a\n"
|
||
png += chunk(b"IHDR", struct.pack(">IIBBBBB", W, H, 8, 2, 0, 0, 0))
|
||
png += chunk(b"IDAT", zlib.compress(raw))
|
||
png += chunk(b"IEND", b"")
|
||
open(sys.argv[1], "wb").write(png)
|
||
PY
|
||
|
||
rm -f "$PPTX"
|
||
officecli create "$PPTX"
|
||
officecli open "$PPTX"
|
||
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# Slide 1 — autoFit (text overflow behavior)
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
officecli add "$PPTX" / --type slide
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop text="autoFit — text overflow behavior" --prop size=28 --prop bold=true \
|
||
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
||
|
||
LONGTEXT='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.'
|
||
|
||
# 'none' — text just overflows the box
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop x=0.5in --prop y=1.5in --prop width=4in --prop height=1.5in \
|
||
--prop fill=F1FAEE --prop size=18 --prop text="$LONGTEXT" \
|
||
--prop autoFit=none
|
||
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop text='autoFit=none (overflows)' --prop size=12 --prop italic=true \
|
||
--prop x=0.5in --prop y=3.2in --prop width=4in --prop height=0.4in
|
||
|
||
# 'normal' — shrinks text to fit
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop x=5in --prop y=1.5in --prop width=4in --prop height=1.5in \
|
||
--prop fill=A8DADC --prop size=18 --prop text="$LONGTEXT" \
|
||
--prop autoFit=normal
|
||
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop text='autoFit=normal (text shrinks)' --prop size=12 --prop italic=true \
|
||
--prop x=5in --prop y=3.2in --prop width=4in --prop height=0.4in
|
||
|
||
# 'shape' — box resizes to fit text
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop x=9.5in --prop y=1.5in --prop width=4in --prop height=1.5in \
|
||
--prop fill=F4A261 --prop size=18 --prop text="$LONGTEXT" \
|
||
--prop autoFit=shape
|
||
|
||
officecli add "$PPTX" '/slide[1]' --type textbox \
|
||
--prop text='autoFit=shape (box grows)' --prop size=12 --prop italic=true \
|
||
--prop x=9.5in --prop y=4.5in --prop width=4in --prop height=0.4in
|
||
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# Slide 2 — flipH / flipV (mirror)
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
officecli add "$PPTX" / --type slide
|
||
officecli add "$PPTX" '/slide[2]' --type textbox \
|
||
--prop text="flipH / flipV — mirror" --prop size=28 --prop bold=true \
|
||
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
||
|
||
# Original
|
||
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=rightArrow \
|
||
--prop x=0.5in --prop y=2in --prop width=2.8in --prop height=1.5in \
|
||
--prop fill=4472C4 --prop color=FFFFFF --prop bold=true --prop text="original"
|
||
|
||
# flipH
|
||
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=rightArrow \
|
||
--prop x=4in --prop y=2in --prop width=2.8in --prop height=1.5in \
|
||
--prop fill=E63946 --prop color=FFFFFF --prop bold=true --prop text="flipH=true" \
|
||
--prop flipH=true
|
||
|
||
# flipV
|
||
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=rightArrow \
|
||
--prop x=7.5in --prop y=2in --prop width=2.8in --prop height=1.5in \
|
||
--prop fill=2A9D8F --prop color=FFFFFF --prop bold=true --prop text="flipV=true" \
|
||
--prop flipV=true
|
||
|
||
# flipH + flipV (= rotation 180° visually, but stored as flip flags not rotation)
|
||
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=rightArrow \
|
||
--prop x=11in --prop y=2in --prop width=2.8in --prop height=1.5in \
|
||
--prop fill=F4A261 --prop color=000000 --prop bold=true --prop text="flipH + flipV" \
|
||
--prop flipH=true --prop flipV=true
|
||
|
||
officecli add "$PPTX" '/slide[2]' --type textbox \
|
||
--prop text='Aliases: flipHorizontal, flipVertical. Flip flags are stored independently of rotation, so flipH + rotate=90 chains predictably.' \
|
||
--prop size=14 --prop italic=true --prop color=666666 \
|
||
--prop x=0.5in --prop y=4in --prop width=13in --prop height=0.6in
|
||
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# Slide 3 — image fill on a shape (blipFill, NOT --type picture)
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
officecli add "$PPTX" / --type slide
|
||
officecli add "$PPTX" '/slide[3]' --type textbox \
|
||
--prop text="image= — picture as shape fill (blipFill)" --prop size=28 --prop bold=true \
|
||
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
||
|
||
# The image fills the shape interior; the geometry preset clips the image.
|
||
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=ellipse \
|
||
--prop x=0.5in --prop y=1.5in --prop width=3.5in --prop height=3.5in \
|
||
--prop image="$SAMPLE_PNG" \
|
||
--prop lineColor=1D3557 --prop lineWidth=3pt
|
||
|
||
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=star5 \
|
||
--prop x=4.5in --prop y=1.5in --prop width=3.5in --prop height=3.5in \
|
||
--prop image="$SAMPLE_PNG"
|
||
|
||
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=diamond \
|
||
--prop x=8.5in --prop y=1.5in --prop width=3.5in --prop height=3.5in \
|
||
--prop image="$SAMPLE_PNG" \
|
||
--prop lineColor=1D3557 --prop lineWidth=3pt
|
||
|
||
officecli add "$PPTX" '/slide[3]' --type textbox \
|
||
--prop text='image="/path/to/photo.png" turns the shape into a clipped picture — different element from --type picture, which embeds the bitmap with its native bounding box.' \
|
||
--prop size=14 --prop italic=true --prop color=666666 \
|
||
--prop x=0.5in --prop y=5.5in --prop width=13in --prop height=1in
|
||
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# Slide 4 — 3D effects (bevel, bevelBottom, depth, lighting, material)
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
officecli add "$PPTX" / --type slide
|
||
officecli add "$PPTX" '/slide[4]' --type textbox \
|
||
--prop text="3D — bevel / depth / lighting / material" --prop size=28 --prop bold=true \
|
||
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
||
|
||
# Bevel top, default size
|
||
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=roundRect \
|
||
--prop x=0.5in --prop y=1.4in --prop width=3in --prop height=1.8in \
|
||
--prop fill=4472C4 --prop color=FFFFFF --prop bold=true --prop size=14 \
|
||
--prop text='bevel=circle' \
|
||
--prop bevel=circle
|
||
|
||
# Bevel top + bottom with explicit widths
|
||
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=roundRect \
|
||
--prop x=4in --prop y=1.4in --prop width=3in --prop height=1.8in \
|
||
--prop fill=E63946 --prop color=FFFFFF --prop bold=true --prop size=14 \
|
||
--prop text='bevel=angle-8-4 + bevelBottom=circle-4-4' \
|
||
--prop bevel=angle-8-4 --prop bevelBottom=circle-4-4
|
||
|
||
# Extrusion depth
|
||
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=roundRect \
|
||
--prop x=7.5in --prop y=1.4in --prop width=3in --prop height=1.8in \
|
||
--prop fill=2A9D8F --prop color=FFFFFF --prop bold=true --prop size=14 \
|
||
--prop text='depth=14pt + bevel=softRound' \
|
||
--prop depth=14pt --prop bevel=softRound
|
||
|
||
# Lighting + material combos
|
||
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=ellipse \
|
||
--prop x=0.5in --prop y=3.7in --prop width=3in --prop height=1.8in \
|
||
--prop fill=F4A261 --prop color=000000 --prop bold=true --prop size=12 \
|
||
--prop text='bevel=circle-8 depth=10 lighting=threePt material=metal' \
|
||
--prop bevel=circle-8 --prop depth=10 --prop lighting=threePt --prop material=metal
|
||
|
||
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=ellipse \
|
||
--prop x=4in --prop y=3.7in --prop width=3in --prop height=1.8in \
|
||
--prop fill=A8DADC --prop color=000000 --prop bold=true --prop size=12 \
|
||
--prop text='lighting=balanced material=plastic' \
|
||
--prop bevel=circle-6 --prop depth=8 --prop lighting=balanced --prop material=plastic
|
||
|
||
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=ellipse \
|
||
--prop x=7.5in --prop y=3.7in --prop width=3in --prop height=1.8in \
|
||
--prop fill=FFD700 --prop color=000000 --prop bold=true --prop size=12 \
|
||
--prop text='lighting=harsh material=warmMatte' \
|
||
--prop bevel=circle-6 --prop depth=8 --prop lighting=harsh --prop material=warmMatte
|
||
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# Slide 5 — softEdge + link + tooltip + name + zorder
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
officecli add "$PPTX" / --type slide
|
||
officecli add "$PPTX" '/slide[5]' --type textbox \
|
||
--prop text="softEdge / link / name / zorder" --prop size=28 --prop bold=true \
|
||
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
||
|
||
# softEdge — feathered/blurred edge in points
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=ellipse \
|
||
--prop x=0.5in --prop y=1.5in --prop width=3in --prop height=2in \
|
||
--prop fill=E63946 --prop color=FFFFFF --prop bold=true \
|
||
--prop text='softEdge=0 (sharp)' --prop softEdge=0
|
||
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=ellipse \
|
||
--prop x=4in --prop y=1.5in --prop width=3in --prop height=2in \
|
||
--prop fill=E63946 --prop color=FFFFFF --prop bold=true \
|
||
--prop text='softEdge=8pt' --prop softEdge=8pt
|
||
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=ellipse \
|
||
--prop x=7.5in --prop y=1.5in --prop width=3in --prop height=2in \
|
||
--prop fill=E63946 --prop color=FFFFFF --prop bold=true \
|
||
--prop text='softEdge=20pt (heavy feather)' --prop softEdge=20pt
|
||
|
||
# link + tooltip on a shape — entire shape becomes clickable
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=roundRect \
|
||
--prop x=0.5in --prop y=4in --prop width=4in --prop height=1in \
|
||
--prop fill=2A9D8F --prop color=FFFFFF --prop bold=true --prop size=16 \
|
||
--prop text="Click me → example.com" \
|
||
--prop link=https://example.com --prop tooltip="Open example.com" \
|
||
--prop name="cta-button"
|
||
|
||
officecli add "$PPTX" '/slide[5]' --type textbox \
|
||
--prop text='link=https://example.com tooltip="Open example.com" name="cta-button"' \
|
||
--prop size=12 --prop italic=true --prop color=666666 \
|
||
--prop x=0.5in --prop y=5.1in --prop width=6in --prop height=0.4in
|
||
|
||
# zorder — three overlapping shapes with explicit stack order
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
|
||
--prop x=8in --prop y=4in --prop width=2.5in --prop height=2.5in \
|
||
--prop fill=4472C4 --prop name="back" --prop zorder=1 \
|
||
--prop color=FFFFFF --prop bold=true --prop text="back (zorder=1)"
|
||
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
|
||
--prop x=9in --prop y=4.5in --prop width=2.5in --prop height=2.5in \
|
||
--prop fill=E63946 --prop name="middle" --prop zorder=2 \
|
||
--prop color=FFFFFF --prop bold=true --prop text="middle (zorder=2)"
|
||
|
||
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
|
||
--prop x=10in --prop y=5in --prop width=2.5in --prop height=2.5in \
|
||
--prop fill=F4A261 --prop name="front" --prop zorder=3 \
|
||
--prop color=000000 --prop bold=true --prop text="front (zorder=3)"
|
||
|
||
officecli close "$PPTX"
|
||
officecli validate "$PPTX"
|
||
rm -f "$SAMPLE_PNG"
|
||
echo "Created: $PPTX"
|