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

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"