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

259 lines
14 KiB
Bash
Executable File

#!/bin/bash
# Basic PowerPoint shapes — geometries, fills, outlines, effects, rotation, opacity.
# Demonstrates: --type shape with geometry preset, solid/gradient/pattern/image fills,
# line styling (color/width/dash/arrowheads), rotation, opacity, shadow effects.
# 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-basic.pptx"
rm -f "$PPTX"
officecli create "$PPTX"
officecli open "$PPTX"
# ─────────────────────────────────────────────────────────────────────────────
# Slide 1 — Geometry preset gallery
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[1]' --type shape \
--prop text="Geometry Presets" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
# Row of 8 shapes, one per supported preset.
# Schema-declared presets: rect, roundRect, ellipse, triangle, diamond,
# parallelogram, rightArrow, star5
COL=0
for preset in rect roundRect ellipse triangle diamond parallelogram rightArrow star5; do
X=$(echo "0.5 + $COL * 1.55" | bc -l)
officecli add "$PPTX" '/slide[1]' --type shape \
--prop geometry="$preset" \
--prop x="${X}in" --prop y=1.5in --prop width=1.3in --prop height=1.3in \
--prop fill=4472C4 --prop color=FFFFFF \
--prop text="$preset" --prop size=11 --prop bold=true
COL=$((COL + 1))
done
# ─────────────────────────────────────────────────────────────────────────────
# Slide 2 — Fill variations on the same geometry
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[2]' --type shape \
--prop text="Fill Variations" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
# Solid hex
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=0.5in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop fill=E63946 --prop color=FFFFFF --prop bold=true \
--prop text='fill=E63946'
# Theme color (follows deck theme)
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=3.3in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop fill=accent2 --prop color=FFFFFF --prop bold=true \
--prop text='fill=accent2'
# Linear gradient (color1-color2-angle)
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=6.1in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop gradient="FF6B6B-4ECDC4-45" --prop color=FFFFFF --prop bold=true \
--prop text='gradient linear 45°'
# Radial gradient
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=8.9in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop gradient="radial:FFE66D-FF6B35-center" --prop color=000000 --prop bold=true \
--prop text='gradient radial'
# Pattern (preset:fg:bg)
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=0.5in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop pattern="diagBrick:1D3557:F1FAEE" --prop color=FFFFFF --prop bold=true \
--prop text='pattern diagBrick'
# Opacity (requires a fill to attach to)
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=3.3in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop fill=2A9D8F --prop opacity=0.4 --prop color=000000 --prop bold=true \
--prop text='fill + opacity=0.4'
# No fill (outline only)
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=6.1in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop fill=none --prop line="264653:2.5:solid" --prop color=264653 --prop bold=true \
--prop text='fill=none + outline'
# Per-stop gradient positions
officecli add "$PPTX" '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=8.9in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop gradient="FF0000@0-FFD700@40-0000FF@100" --prop color=FFFFFF --prop bold=true \
--prop text='gradient per-stop'
# ─────────────────────────────────────────────────────────────────────────────
# Slide 3 — Outline styling (line color / width / dash / caps / arrowheads)
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[3]' --type shape \
--prop text="Outline Styling" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
# Compound line form: color:width:dash
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=rect \
--prop x=0.5in --prop y=1.3in --prop width=3in --prop height=1.2in \
--prop fill=none --prop line="E63946:3:solid" \
--prop text='line="E63946:3:solid"' --prop size=12
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=rect \
--prop x=4in --prop y=1.3in --prop width=3in --prop height=1.2in \
--prop fill=none --prop line="1D3557:2:dash" \
--prop text='line="1D3557:2:dash"' --prop size=12
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=rect \
--prop x=7.5in --prop y=1.3in --prop width=3in --prop height=1.2in \
--prop fill=none --prop line="2A9D8F:2.5:dashDot" \
--prop text='line="2A9D8F:2.5:dashDot"' --prop size=12
# Per-attribute form: lineColor + lineWidth + lineDash
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=ellipse \
--prop x=0.5in --prop y=2.9in --prop width=3in --prop height=1.4in \
--prop fill=FFE66D --prop lineColor=E63946 --prop lineWidth=4pt --prop lineDash=solid \
--prop text='separate lineColor/lineWidth/lineDash' --prop size=11
# Compound stroke (cmpd=dbl → double line)
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=ellipse \
--prop x=4in --prop y=2.9in --prop width=3in --prop height=1.4in \
--prop fill=A8DADC --prop lineColor=1D3557 --prop lineWidth=6pt --prop cmpd=dbl \
--prop text='cmpd=dbl (double stroke)' --prop size=11
# Triple stroke
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=ellipse \
--prop x=7.5in --prop y=2.9in --prop width=3in --prop height=1.4in \
--prop fill=A8DADC --prop lineColor=1D3557 --prop lineWidth=8pt --prop cmpd=tri \
--prop text='cmpd=tri (triple stroke)' --prop size=11
# Arrowheads on shape outlines (rightArrow already arrow-shaped — demo headEnd/tailEnd here)
officecli add "$PPTX" '/slide[3]' --type shape \
--prop text="headEnd / tailEnd work on any outline (not just connectors):" \
--prop size=12 \
--prop x=0.5in --prop y=4.7in --prop width=12in --prop height=0.4in
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=rect \
--prop x=0.5in --prop y=5.2in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=000000 --prop lineWidth=2pt \
--prop headEnd=triangle --prop tailEnd=arrow
officecli add "$PPTX" '/slide[3]' --type shape --prop geometry=rect \
--prop x=5in --prop y=5.2in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=000000 --prop lineWidth=2pt \
--prop headEnd=diamond --prop tailEnd=oval
# ─────────────────────────────────────────────────────────────────────────────
# Slide 4 — Rotation, shadow effect, z-order via add order
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[4]' --type shape \
--prop text="Rotation + Effects" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
# Rotation in degrees (0..360)
COL=0
for r in 0 30 60 90 135 180 225 270; do
X=$(echo "0.5 + $COL * 1.55" | bc -l)
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=rightArrow \
--prop x="${X}in" --prop y=1.3in --prop width=1.4in --prop height=0.8in \
--prop fill=4472C4 --prop color=FFFFFF --prop bold=true \
--prop rotation="$r" --prop text="${r}°" --prop size=11
COL=$((COL + 1))
done
# Shadow effect: shadow=color:blur:offset:direction (handler's compound effect)
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=roundRect \
--prop x=1in --prop y=3in --prop width=3.5in --prop height=1.8in \
--prop fill=E63946 --prop color=FFFFFF --prop bold=true --prop size=14 \
--prop text='shadow=000000' \
--prop shadow=000000
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=roundRect \
--prop x=5.5in --prop y=3in --prop width=3.5in --prop height=1.8in \
--prop fill=2A9D8F --prop color=FFFFFF --prop bold=true --prop size=14 \
--prop text='glow=FFD700' \
--prop glow=FFD700
officecli add "$PPTX" '/slide[4]' --type shape --prop geometry=roundRect \
--prop x=10in --prop y=3in --prop width=3in --prop height=1.8in \
--prop fill=F4A261 --prop color=000000 --prop bold=true --prop size=14 \
--prop text='reflection=tight' \
--prop reflection=tight
# ─────────────────────────────────────────────────────────────────────────────
# Slide 5 — Stroke geometry details (lineCap / lineJoin / lineAlign)
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[5]' --type shape \
--prop text="Stroke Geometry — lineCap / lineJoin / lineAlign" \
--prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
# lineCap — how the stroke terminates at line endpoints / dash gaps.
# Most visible with a thick dashed stroke.
X=0.5
for cap in flat round square; do
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
--prop x="${X}in" --prop y=1.5in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=1D3557 --prop lineWidth=10pt \
--prop lineDash=dash --prop lineCap="$cap"
officecli add "$PPTX" '/slide[5]' --type shape \
--prop text="lineCap=$cap" --prop size=12 \
--prop x="${X}in" --prop y=1.8in --prop width=4in --prop height=0.4in \
--prop fill=none --prop line="000000:0:solid"
X=$(echo "$X + 4.3" | bc -l)
done
# lineJoin — corner style on a stroked shape.
# Most visible on a triangle outline with thick lines.
X=0.5
for join in round bevel miter; do
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=triangle \
--prop x="${X}in" --prop y=2.8in --prop width=2.5in --prop height=2in \
--prop fill=A8DADC --prop lineColor=E63946 --prop lineWidth=12pt \
--prop lineJoin="$join"
officecli add "$PPTX" '/slide[5]' --type shape \
--prop text="lineJoin=$join" --prop size=12 \
--prop x="${X}in" --prop y=4.9in --prop width=2.5in --prop height=0.4in \
--prop fill=none --prop line="000000:0:solid"
X=$(echo "$X + 3" | bc -l)
done
# miterLimit — caps how far a miter join's spike extends before it's clipped.
# Expressed in 1/1000ths of a percent; 800000 = 800%. Supplied as the compound
# lineJoin=miter:<lim> form which sets both join style and limit in one prop.
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=triangle \
--prop x=0.5in --prop y=5.1in --prop width=2.5in --prop height=1.6in \
--prop fill=A8DADC --prop lineColor=E63946 --prop lineWidth=8pt \
--prop lineJoin="miter:800000"
officecli add "$PPTX" '/slide[5]' --type shape \
--prop text='lineJoin="miter:800000" (limit 800%)' --prop size=12 \
--prop x=0.5in --prop y=6.9in --prop width=4in --prop height=0.4in \
--prop fill=none --prop line="000000:0:solid"
# lineAlign — stroke alignment relative to the path: ctr (centered) vs in (inset).
# Same shape, same border width, only the alignment of the stroke differs.
X=8.9
for algn in ctr in; do
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
--prop x="${X}in" --prop y=2.8in --prop width=1.9in --prop height=2in \
--prop fill=F4A261 --prop lineColor=1D3557 --prop lineWidth=12pt \
--prop lineAlign="$algn"
officecli add "$PPTX" '/slide[5]' --type shape \
--prop text="lineAlign=$algn" --prop size=12 \
--prop x="${X}in" --prop y=4.9in --prop width=2in --prop height=0.4in \
--prop fill=none --prop line="000000:0:solid"
X=$(echo "$X + 2.1" | bc -l)
done
officecli close "$PPTX"
officecli validate "$PPTX"
echo "Created: $PPTX"