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
285 lines
16 KiB
Bash
Executable File
285 lines
16 KiB
Bash
Executable File
#!/bin/bash
|
|
# Shape typography — paragraph spacing, character spacing, kerning, case, BCP-47 lang,
|
|
# RTL direction, complex-script (Arabic) font slot.
|
|
# Covers the typography props NOT touched by 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-typography.pptx"
|
|
|
|
rm -f "$PPTX"
|
|
officecli create "$PPTX"
|
|
officecli open "$PPTX"
|
|
|
|
LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.'
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Slide 1 — Paragraph spacing (lineSpacing / spaceBefore / spaceAfter)
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
officecli add "$PPTX" / --type slide
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop text="lineSpacing / spaceBefore / spaceAfter" --prop size=28 --prop bold=true \
|
|
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
|
|
|
# Reference (tight spacing) — default
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop x=0.5in --prop y=1.2in --prop width=4in --prop height=3.5in \
|
|
--prop fill=F1FAEE --prop size=14 --prop text="$LOREM"
|
|
officecli add "$PPTX" '/slide[1]/shape[2]' --type paragraph --prop text="$LOREM"
|
|
officecli add "$PPTX" '/slide[1]/shape[2]' --type paragraph --prop text="$LOREM"
|
|
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop text='default (no spacing props set)' --prop size=12 --prop italic=true \
|
|
--prop x=0.5in --prop y=4.8in --prop width=4in --prop height=0.4in
|
|
|
|
# lineSpacing=1.5x
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop x=5in --prop y=1.2in --prop width=4in --prop height=3.5in \
|
|
--prop fill=A8DADC --prop size=14 --prop text="$LOREM" --prop lineSpacing=1.5x
|
|
officecli add "$PPTX" '/slide[1]/shape[4]' --type paragraph --prop text="$LOREM" --prop lineSpacing=1.5x
|
|
officecli add "$PPTX" '/slide[1]/shape[4]' --type paragraph --prop text="$LOREM" --prop lineSpacing=1.5x
|
|
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop text='lineSpacing=1.5x (multiplier; also accepts 150% / 18pt)' \
|
|
--prop size=12 --prop italic=true \
|
|
--prop x=5in --prop y=4.8in --prop width=4in --prop height=0.4in
|
|
|
|
# spaceBefore + spaceAfter on each paragraph
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop x=9.5in --prop y=1.2in --prop width=4in --prop height=3.5in \
|
|
--prop fill=F4A261 --prop size=14 --prop text="$LOREM" \
|
|
--prop spaceBefore=12pt --prop spaceAfter=12pt
|
|
officecli add "$PPTX" '/slide[1]/shape[6]' --type paragraph --prop text="$LOREM" \
|
|
--prop spaceBefore=12pt --prop spaceAfter=12pt
|
|
officecli add "$PPTX" '/slide[1]/shape[6]' --type paragraph --prop text="$LOREM" \
|
|
--prop spaceBefore=12pt --prop spaceAfter=12pt
|
|
|
|
officecli add "$PPTX" '/slide[1]' --type textbox \
|
|
--prop text='spaceBefore=12pt spaceAfter=12pt' --prop size=12 --prop italic=true \
|
|
--prop x=9.5in --prop y=4.8in --prop width=4in --prop height=0.4in
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Slide 2 — Character spacing, kerning, all/small caps
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
officecli add "$PPTX" / --type slide
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop text="spacing / kern / cap" --prop size=28 --prop bold=true \
|
|
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
|
|
|
# Character spacing (1/100 pt; positive = looser, negative = tighter)
|
|
SAMPLE='Tight Loose Spacing TYPOGRAPHY'
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=0.5in --prop y=1.5in --prop width=13in --prop height=0.8in \
|
|
--prop size=22 --prop bold=true --prop text="$SAMPLE (default)"
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=0.5in --prop y=2.3in --prop width=13in --prop height=0.8in \
|
|
--prop size=22 --prop bold=true --prop text="$SAMPLE (spacing=-50)" \
|
|
--prop spacing=-50
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=0.5in --prop y=3.1in --prop width=13in --prop height=0.8in \
|
|
--prop size=22 --prop bold=true --prop text="$SAMPLE (spacing=200)" \
|
|
--prop spacing=200
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=0.5in --prop y=3.9in --prop width=13in --prop height=0.8in \
|
|
--prop size=22 --prop bold=true --prop text="$SAMPLE (spacing=500)" \
|
|
--prop spacing=500
|
|
|
|
# Kerning threshold — minimum font size (in 1/100 pt) at which kerning kicks in
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=0.5in --prop y=5in --prop width=6in --prop height=0.8in \
|
|
--prop size=18 --prop text="AVATAR Yawning (kern=1) — kern on from 0.01pt" \
|
|
--prop kern=1
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=7in --prop y=5in --prop width=6in --prop height=0.8in \
|
|
--prop size=18 --prop text="AVATAR Yawning (kern=0) — kern OFF" \
|
|
--prop kern=0
|
|
|
|
# Case rendering
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=0.5in --prop y=6in --prop width=4in --prop height=0.8in \
|
|
--prop size=18 --prop text="cap=none — Default case" --prop cap=none
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=4.7in --prop y=6in --prop width=4in --prop height=0.8in \
|
|
--prop size=18 --prop text="cap=small — Small caps" --prop cap=small
|
|
|
|
officecli add "$PPTX" '/slide[2]' --type textbox \
|
|
--prop x=8.9in --prop y=6in --prop width=4in --prop height=0.8in \
|
|
--prop size=18 --prop text="cap=all — All caps" --prop cap=all
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Slide 3 — direction=rtl + font.cs (Arabic / complex-script)
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
officecli add "$PPTX" / --type slide
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop text="direction=rtl + font.cs (complex script)" --prop size=28 --prop bold=true \
|
|
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
|
|
|
# LTR Arabic — punctuation/digits end up in left-to-right order
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop x=0.5in --prop y=1.5in --prop width=6in --prop height=1.2in \
|
|
--prop fill=F1FAEE --prop size=24 --prop bold=true \
|
|
--prop text="مرحبا بالعالم — 2026" \
|
|
--prop font.cs="Arabic Typesetting"
|
|
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop text='direction=ltr (default) + font.cs="Arabic Typesetting"' \
|
|
--prop size=12 --prop italic=true --prop color=666666 \
|
|
--prop x=0.5in --prop y=2.8in --prop width=6in --prop height=0.4in
|
|
|
|
# RTL Arabic — paragraph flows right-to-left
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop x=7in --prop y=1.5in --prop width=6in --prop height=1.2in \
|
|
--prop fill=A8DADC --prop size=24 --prop bold=true \
|
|
--prop text="مرحبا بالعالم — 2026" \
|
|
--prop direction=rtl --prop font.cs="Arabic Typesetting" --prop align=right
|
|
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop text='direction=rtl + align=right (aliases: dir, rtl)' \
|
|
--prop size=12 --prop italic=true --prop color=666666 \
|
|
--prop x=7in --prop y=2.8in --prop width=6in --prop height=0.4in
|
|
|
|
# Hebrew
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop x=0.5in --prop y=3.7in --prop width=12.5in --prop height=1.5in \
|
|
--prop fill=F4A261 --prop size=24 --prop bold=true \
|
|
--prop text="שלום עולם — Hebrew demo" \
|
|
--prop direction=rtl --prop font.cs="Arial Hebrew" --prop align=right
|
|
|
|
officecli add "$PPTX" '/slide[3]' --type textbox \
|
|
--prop text='Same RTL machinery covers Hebrew, Urdu, Persian etc. — pick the appropriate font.cs face.' \
|
|
--prop size=12 --prop italic=true --prop color=666666 \
|
|
--prop x=0.5in --prop y=5.3in --prop width=12.5in --prop height=0.4in
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Slide 4 — Bare 'font' + BCP-47 lang tag
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
officecli add "$PPTX" / --type slide
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop text="font (bare) + lang BCP-47" --prop size=28 --prop bold=true \
|
|
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
|
|
|
|
# Bare 'font' targets BOTH Latin and EastAsian slots in one shot
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop x=0.5in --prop y=1.5in --prop width=6in --prop height=1.5in \
|
|
--prop fill=F1FAEE --prop size=22 \
|
|
--prop text="Bare font sets Latin + EastAsian" \
|
|
--prop font="Times New Roman"
|
|
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop text='font="Times New Roman" (sets a:latin AND a:ea)' \
|
|
--prop size=12 --prop italic=true \
|
|
--prop x=0.5in --prop y=3.1in --prop width=6in --prop height=0.4in
|
|
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop x=7in --prop y=1.5in --prop width=6in --prop height=1.5in \
|
|
--prop fill=A8DADC --prop size=22 \
|
|
--prop text="Per-script gives finer control" \
|
|
--prop font.latin="Georgia" --prop font.ea="Yu Mincho"
|
|
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop text='font.latin=Georgia + font.ea="Yu Mincho" (a:latin / a:ea)' \
|
|
--prop size=12 --prop italic=true \
|
|
--prop x=7in --prop y=3.1in --prop width=6in --prop height=0.4in
|
|
|
|
# BCP-47 language tags — affects spellcheck, hyphenation, font fallback
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop x=0.5in --prop y=3.8in --prop width=4in --prop height=1in \
|
|
--prop fill=F4A261 --prop size=18 --prop text="Color or colour?" --prop lang=en-GB
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop text='lang=en-GB (British English spellcheck)' --prop size=12 --prop italic=true \
|
|
--prop x=0.5in --prop y=4.9in --prop width=4in --prop height=0.4in
|
|
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop x=4.7in --prop y=3.8in --prop width=4in --prop height=1in \
|
|
--prop fill=F4A261 --prop size=18 --prop text="Couleur en français" --prop lang=fr-FR
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop text='lang=fr-FR' --prop size=12 --prop italic=true \
|
|
--prop x=4.7in --prop y=4.9in --prop width=4in --prop height=0.4in
|
|
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop x=8.9in --prop y=3.8in --prop width=4in --prop height=1in \
|
|
--prop fill=F4A261 --prop size=18 --prop text="日本語のテスト" --prop lang=ja-JP \
|
|
--prop font.ea="Yu Mincho"
|
|
officecli add "$PPTX" '/slide[4]' --type textbox \
|
|
--prop text='lang=ja-JP + font.ea="Yu Mincho"' --prop size=12 --prop italic=true \
|
|
--prop x=8.9in --prop y=4.9in --prop width=4in --prop height=0.4in
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Slide 5 — strike / underline / valign / margin / list / lineOpacity / animation
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
officecli add "$PPTX" / --type slide
|
|
officecli add "$PPTX" '/slide[5]' --type textbox \
|
|
--prop text="strike / underline / valign / margin / list / lineOpacity / animation" \
|
|
--prop size=22 --prop bold=true \
|
|
--prop x=0.5in --prop y=0.3in --prop width=13in --prop height=0.6in
|
|
|
|
# strike + underline — set at shape level (applied to all runs as a default)
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=roundRect \
|
|
--prop x=0.5in --prop y=1.2in --prop width=3.5in --prop height=1.2in \
|
|
--prop fill=F4A261 --prop color=000000 --prop size=18 \
|
|
--prop text="strike=single" \
|
|
--prop strike=single
|
|
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=roundRect \
|
|
--prop x=4.3in --prop y=1.2in --prop width=3.5in --prop height=1.2in \
|
|
--prop fill=A8DADC --prop color=000000 --prop size=18 \
|
|
--prop text="underline=single" \
|
|
--prop underline=single
|
|
|
|
# valign — vertical text position inside the shape (top / middle / bottom)
|
|
for va in top middle bottom; do
|
|
case $va in top) X=0.5 ;; middle) X=4.3 ;; bottom) X=8.1 ;; esac
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
|
|
--prop x="${X}in" --prop y=2.6in --prop width=3.5in --prop height=2in \
|
|
--prop fill=DEEAF6 --prop lineColor=4472C4 --prop lineWidth=2pt \
|
|
--prop text="valign=$va" --prop size=16 --prop bold=true \
|
|
--prop valign="$va"
|
|
done
|
|
|
|
# Bottom area laid out as a 2x2 grid (left column x=0.5, right column x=5.0)
|
|
# so no boxes overlap.
|
|
|
|
# margin — inner text padding (uniform; also accepts per-edge via marginLeft etc.)
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=roundRect \
|
|
--prop x=0.5in --prop y=4.8in --prop width=4in --prop height=1.3in \
|
|
--prop fill=F1FAEE --prop lineColor=2A9D8F --prop lineWidth=2pt \
|
|
--prop text="margin=0.4in — large inner padding" --prop size=16 \
|
|
--prop margin=0.4in
|
|
|
|
# list — shape-level bullet/numbered list. Pass every item as ONE multiline
|
|
# text block so the list style applies to all paragraphs; paragraphs added
|
|
# after creation do NOT inherit the shape's list style.
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
|
|
--prop x=5in --prop y=4.8in --prop width=4.2in --prop height=1.5in \
|
|
--prop fill=F4A261 --prop color=000000 --prop size=14 \
|
|
--prop list=bullet \
|
|
--prop text="First item
|
|
Second item
|
|
Third item"
|
|
|
|
# lineOpacity — outline transparency (0=opaque … 1=invisible); needs a non-none line
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=rect \
|
|
--prop x=0.5in --prop y=6.4in --prop width=4in --prop height=0.95in \
|
|
--prop fill=4472C4 --prop lineColor=E63946 --prop lineWidth=6pt \
|
|
--prop lineOpacity=0.35 \
|
|
--prop text="lineOpacity=0.35" --prop color=FFFFFF --prop size=14
|
|
|
|
# animation — shape entrance animation (see animations.sh for full coverage)
|
|
officecli add "$PPTX" '/slide[5]' --type shape --prop geometry=roundRect \
|
|
--prop x=5in --prop y=6.4in --prop width=4.2in --prop height=0.95in \
|
|
--prop fill=E63946 --prop color=FFFFFF --prop size=14 --prop bold=true \
|
|
--prop text="animation=fadeIn" \
|
|
--prop animation=fadeIn
|
|
|
|
officecli close "$PPTX"
|
|
officecli validate "$PPTX"
|
|
echo "Created: $PPTX"
|