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
259 lines
14 KiB
Bash
Executable File
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"
|