Files
wehub-resource-sync 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
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

247 lines
14 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"