Commit Graph
216 Commits
Author SHA1 Message Date
Brandon Thomas c9e071c355 Merge PR #517 from NikitkaRa: PPTX: owned corpus round-trip, keep notes-master header and footer 2026-10-14 13:08:48 -04:00
Brandon Thomas 11e36ed3ac Merge PR #516 from NikitkaRa: Transitions: built-in sounds, Stop Previous Sound and Loop Until Next 2026-10-14 13:08:48 -04:00
Brandon Thomas cc0a2f3dc5 Merge PR #505 from NikitkaRa: Transitions: choose a transition sound and play it in the show
# Conflicts:
#	crates/pptx/tests/roundtrip.rs
2026-10-14 13:08:47 -04:00
Brandon Thomas f4892fc9e7 Merge PR #504 from NikitkaRa: Text: set text transparency from Text Fill (#32)
# Conflicts:
#	crates/engine/src/tests.rs
#	crates/pptx/tests/roundtrip.rs
2026-10-14 13:08:47 -04:00
Brandon Thomas 163a259db4 Merge PR #480 from NikitkaRa: Pptx: budget chart points, chart XML size, inflate work and VML lookups (#401) 2026-10-14 13:08:44 -04:00
Brandon Thomas 78b6c2982f Merge PR #439 from NikitkaRa: Pptx: read and write embedded fonts
# Conflicts:
#	crates/pptx/tests/roundtrip.rs
2026-10-14 13:08:43 -04:00
Brandon Thomas 402c1f4611 Merge PR #222 from justinjohn0306: Animations: nine PowerPoint exit effects import as themselves (#147)
# Conflicts:
#	crates/anim/src/tests.rs
#	crates/pptx/tests/roundtrip.rs
2026-10-14 12:58:00 -04:00
Brandon Thomas a5eae5e9cf Merge PR #216 from justinjohn0306: PPTX: a lone guide keeps the name its preset uses, adj1 or adj (#214)
# Conflicts:
#	crates/pptx/tests/roundtrip.rs
2026-10-14 12:58:00 -04:00
Brandon Thomas 4dc6e06c41 Merge PR #212 from justinjohn0306: PPTX: .potx and .ppsx declare a template and slide show main part (#210)
# Conflicts:
#	crates/pptx/tests/roundtrip.rs
2026-10-14 12:58:00 -04:00
Brandon Thomas 8ffb218f78 Merge PR #356 from natocool2: Bump quick-xml to 0.41 (RUSTSEC-2026-0194, RUSTSEC-2026-0195) 2026-10-14 12:57:24 -04:00
Brandon Thomas 30d282d510 Merge PR #348 from marcoarnulfo: Open: a password-protected presentation says so, and open errors show on the start screen 2026-10-14 12:57:23 -04:00
Brandon Thomas af1c6696ca Merge PR #280 from albayazid: Comments: threads and resolved state survive a .pptx round trip (#70) 2026-10-14 12:57:23 -04:00
Brandon Thomas b7cb5331d7 Merge PR #242 from pierrevbc: SmartArt: text is laid out on its text rectangle (dsp:txXfrm), not in columns 2026-10-14 12:57:22 -04:00
Brandon Thomas d281ba7707 Merge PR #149 from alexanderalber: PPTX import: a transition without spd is 0.5 s, not the effect's default (#117) 2026-10-14 12:57:19 -04:00
Brandon Thomas 24644f3e3b Merge PR #83 from MarekSpodBiedry: PPTX: animation rewind survives save and reopen (#77) 2026-10-14 12:57:18 -04:00
Brandon Thomas a9b8cc4f4a Merge PR #728 from midasmatterhorn: pptx: write linked pictures with r:link so PowerPoint resolves external images 2026-10-14 12:53:34 -04:00
midasmatterhorn 5d31b78736 pptx: write linked pictures with r:link so PowerPoint resolves external images 2026-10-14 18:01:42 +03:00
Nikita Rakitin f036a8e805 PPTX: Color Pulse emphasis is written as a colour change, not a grow 2026-10-14 06:44:59 +03:00
Nikita Rakitin ce3725a5c8 PPTX: literal CR LF and CR in XML read as LF; line feeds in run text read as line breaks 2026-10-14 06:37:15 +03:00
Nikita Rakitin 800c2008df PPTX: table styles the file defines are kept on save even when no table uses them 2026-10-14 06:15:05 +03:00
Nikita Rakitin 6b0c1db6ed PPTX: the notes master's own placeholders and colour map are kept on save 2026-10-14 05:41:01 +03:00
Nikita Rakitin f22ff9eb62 Format after merging main 2026-10-14 05:20:38 +03:00
Nikita Rakitin 5398c2397c Merge remote-tracking branch 'origin/main' into m-pptx-chart-workbook
# Conflicts:
#	ROADMAP.md
#	crates/pptx/src/read/chart.rs
#	docs/gaps.md
2026-10-14 05:20:31 +03:00
Nikita Rakitin 3ea696dc1a Charts: read, write and draw error bars 2026-10-14 04:48:33 +03:00
Nikita Rakitin 4a7ad03eb0 Charts: logarithmic value axes 2026-10-14 04:45:26 +03:00
Nikita Rakitin aed386e269 Charts: draw, read and write value-axis minor gridlines 2026-10-14 04:39:00 +03:00
Nikita Rakitin 3960ea47cd Charts: 100 % stacked axes count in percent; linked axis formats come from the data 2026-10-14 04:19:16 +03:00
Nikita Rakitin 0b66323765 PPTX: shape text without an anchor sits at the top (or the theme's spDef anchor); write ctr for the model's middle default 2026-10-14 04:03:35 +03:00
Nikita Rakitin 71b02327cf Charts: category axis orientation (maxMin) read, written and drawn; horizontal bars run bottom-up 2026-10-14 03:16:35 +03:00
Nikita Rakitin 8e124d32a8 Charts: clustered bar widths from gap width and overlap as fractions of one bar; schema defaults when absent 2026-10-14 03:09:16 +03:00
Nikita Rakitin cbc6cd0e34 Charts: draw data-point fills on columns and bars, smoothed lines, and the file's chart text colour 2026-10-14 03:03:16 +03:00
Nikita RakitinandCursor 7764c27cc4 SmartArt: Name and Title org chart, closer Half Circle, ten more layouts, convert to and from text and shapes
Name and Title Organization Chart with a title box per node (DiagramNode.title, smartArt.setNodes title; written as the title box's presentation point text and read back). Half Circle Org Chart draws two half rings per node. New layouts: Vertical Box List, Trapezoid List, Table List, Accent Process, Continuous Block Process, Basic Bending Process, Linear Venn, Stacked Venn, Nested Target. smartArt.fromText (Convert to SmartArt), smartArt.toText and smartArt.toShapes, with a Convert menu in SmartArt Design.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 02:26:58 +03:00
Nikita RakitinandCursor b4c03f0a75 SmartArt: organisation charts with assistants, segmented and multidirectional cycles, cycle matrix, segmented pyramid, pie
Organization Chart and Half Circle Organization Chart with elbow connectors; assistant nodes (Add Assistant, written as asst points and read back) sit beside their parent on a row of their own. Segmented Cycle, Multidirectional Cycle, Cycle Matrix, Segmented Pyramid and Basic Pie. Venn labels move further out so the third circle's no longer runs into the overlap.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 02:16:40 +03:00
Nikita RakitinandCursor 00dd069678 SmartArt: six more layouts, clear Venn labels, read back older Picture Accent Process files
Text Cycle, Continuous Cycle, Horizontal Hierarchy, Grid Matrix, Gear and Funnel. Venn labels sit further out, clear of the overlaps. Files where Picture Accent Process was written as pList2 (with DeckCraft's process-category layout part) import as Picture Accent Process again. Round shapes' text shrinks to the inscribed width.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 02:07:51 +03:00
Nikita RakitinandCursor c5a63fc8b7 SmartArt: node pictures from the data model, Brick Scene camera, four more layouts
Node pictures are written on the data model's presentation points (blip through the data part's rels) and read back into the outline on import. Picture Accent Process is hProcess10, not pList2 (checked against PowerPoint's layout list); pList2 is now Horizontal Picture List. Brick Scene looks through an isometric camera. New layouts: Horizontal Picture List, Basic Timeline, Basic Venn, Basic Target.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 02:02:42 +03:00
Nikita RakitinandCursor 6f19e0bd07 SmartArt: shrink text to fit, picture layouts, 3-D styles and more colours
Each shape's text shrinks so its longest word fits on a line (the pyramid tip no longer breaks words). Three picture layouts (Vertical Picture List, Picture Caption List, Picture Accent Process) with a picture placeholder per node and smartArt.picture to fill it. Five 3-D SmartArt Styles (Polished, Inset, Cartoon, Powder, Brick Scene) drawn with lit bevels, and Colorful Range and Gradient Range colours; all written to and read from the .pptx quickStyle and colors parts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:56:36 +03:00
Nikita RakitinandCursor 1a0ffc6413 Draw: pen pressure scales ink width
A pen reading of 1 is the full pen width. A lighter touch draws a thinner
stroke, and a zero reading stays visible at 8% of the pen. A mouse, a
missing or non-finite reading, and a stroke whose samples are all the old
placeholder 0.5 still draw at the pen width. PPTX keeps one width per
stroke: the mean of the samples for a pressured stroke, the pen width for
a legacy one. Tilt is not read.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:56:23 +03:00
Nikita RakitinandCursor 1866de9895 SmartArt: 15 layouts, SmartArt Styles and Change Colors
Layouts now include Vertical and Horizontal Bullet List, Basic Block List,
Basic/Chevron/Vertical/Step Up Process, Basic and Block Cycle, Basic Radial,
Basic and Inverted Pyramid (bands drawn as polygons so the slope and the
text stay right), Basic and Titled Matrix, and Hierarchy. Each layout says
which nodes each shape shows, so typed text maps back for any layout.

SmartArt Styles (flat, subtle, intense, white outline) and Change Colors
(colourful or one accent) are kept on the diagram, offered in the SmartArt
Design tab, and written to .pptx as quick style / colour definition ids
(and read back from them).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:42:52 +03:00
Nikita RakitinandCursor c176d42bb4 Charts: polar radar, stock high-low lines and up/down bars, combo sample
Radar and filled radar charts are drawn polar: spokes per category,
polygon gridlines and value labels up the first spoke. Stock charts
draw high-low lines with close dashes, or up/down bars between open
and close, and are saved as c:stockChart (hiLowLines, upDownBars)
instead of a line chart; c:upDownBars is read, and chart.options takes
upDownBars. New stock charts start as high-low-close and new combo
charts as columns with a line.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:31:40 +03:00
Nikita RakitinandCursor b03b19bca7 SmartArt: write the outline to .pptx as a diagram; read it back from the data model
Export: a group with a diagram becomes a graphicFrame naming ppt/diagrams
data, layout, quickStyle and colors parts, plus the group's shapes as the
cached drawing (dsp). The data model is built from the outline (doc, node,
parTrans/sibTrans points and parOf links). A diagram read from a file keeps
its own layout, quick style and colour parts until its layout is switched.

Import: the outline is rebuilt from the data model's parOf tree, so
PowerPoint diagrams get the Text Pane. Their shapes stay the file's drawing
until the first outline edit (typed text isn't mapped back to nodes then).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:29:49 +03:00
Nikita RakitinandCursor 210df9a3d1 Charts: keep and draw region map charts
Read the regionMap chartEx layout as a RegionMap chart (regions and
their colour values), write the part back as read while unchanged, and
when edited rebuild it with the original geography (projection, culture
and cached boundaries) carried over. With no map data in the repo, the
renderer draws each region as a value-coloured tile with a colour scale
and a note that the map itself is not drawn.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:23:54 +03:00
Nikita RakitinandCursor b3420a0b04 Charts: multi-level treemaps and sunbursts; inclusive box quartiles
Read, keep and write every cx:lvl of a chartEx category dimension,
build a category tree from runs of parent labels, and draw treemaps as
nested squarified groups with banners and sunbursts as one ring per
level. Box & whisker honours quartileMethod="inclusive" (QUARTILE.INC)
on import, render, save and the chart.options command.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:16:09 +03:00
Nikita RakitinandCursor 15daed6ca4 Charts: histograms, Pareto and box and whisker; Office 2016 charts save as themselves
Histograms and Paretos bin their observations (bin count, bin width or
Scott's rule) and draw as touching columns, a Pareto with its cumulative
line on a percentage axis. Box and whisker charts draw exclusive-quartile
boxes, 1.5 IQR whiskers, means and outliers per category group.

Edited and new Office 2016 charts are written as chartEx parts from the
model (with the plain-chart fallback), so a waterfall stays a waterfall.
The chart menus list all seven types, and chart.options sets bins and
waterfall totals.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-14 01:08:13 +03:00
Nikita Rakitin 8fd04ebd92 PPTX: round-trip chart trendlines
An owned corpus slice checks combo charts with data labels, merged
tables with diagonal borders, and text columns, autofit, vertical text
and a WordArt warp. Trendlines (type, order, period, forecast,
intercept, equation and R²) are now read and written.
2026-10-14 00:58:20 +03:00
Nikita Rakitin 9f8c860f90 PPTX corpus: themes, masters, effects and links; keep text Mouse Over actions
New owned corpus test on PowerPoint-shaped XML: a custom-theme deck with
shadow, glow, soft-edge and reflection effects and every common text and
shape hyperlink, and a two-master deck with its own themes and layouts.
The one loss it found: a:hlinkMouseOver on text runs was dropped; it is
now read into RunProps::hover and written back.
2026-10-14 00:52:25 +03:00
Nikita Rakitin c94b5c8d1e PPTX: round-trip 3-D models and animation bounce end
An owned corpus opens, saves and reopens SmartArt and OLE kept as XML, audio and video bookmarks and trims, a section with a hidden slide, slide-number and date fields, ink, .glb models and animation repeat, bounce end and triggers. Relationship-bearing SmartArt and OLE, playback options and rewind stay with their open PRs.
2026-10-14 00:35:12 +03:00
Nikita Rakitin 184b76e2a7 Round-trip text effects, layout, fills, bevels and connectors
An owned corpus of those kinds survives open, save and reopen. A run's
inner shadow, reflection and soft edge were dropped, and a bevel preset
with no kept 3-D XML was not written back, so import and export now keep
them.
2026-10-14 00:04:22 +03:00
Nikita RakitinandCursor b763579d94 View: movable drawing guides saved with the presentation
View > Guides used to paint two fixed centre lines. Guides now belong
to the presentation (DrawGuide, read from and written to p:guideLst in
viewProps.xml, in eighths of a point), so they survive a save and
reopen in PowerPoint.

- Turning Guides on gives a deck without guides PowerPoint's two
  centre guides.
- A guide can be dragged anywhere away from shapes. It moves in whole
  points, unless Alt is held or snapping is off, and shows its
  distance from the centre while it moves.
- A guide dropped off the slide is deleted.
- The slide context menu's Grid and Guides submenu has Add Vertical
  Guide and Add Horizontal Guide.
- While guides are shown, moving and resizing shapes snaps to them.

New commands guide.add, guide.move and guide.delete are undoable;
guide.list is a query.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 23:55:59 +03:00
Nikita Rakitin f9d5a43174 Round-trip comments, links, shows, groups and inherited placeholders
An owned corpus of those element kinds survives open, save and reopen.
Paragraph default run properties, including a link, and action sounds
were dropped on save, so import and export now keep them.
2026-10-13 23:43:03 +03:00
Nikita RakitinandCursor 0d47da07e5 Charts: draw waterfall, funnel, treemap and sunburst layouts
These Office 2016 charts were drawn as plain columns. Now:
- waterfall: bars float from the running total, total points
  (cx:subtotals, now read into Chart.subtotals) stand on the axis and
  reset it, increases/decreases/totals take accents 1-3 with a matching
  legend, and connectors join each bar to the next;
- funnel: centred bars as wide as their value, category labels on the
  left and values inside;
- treemap: squarified tiles in proportion to their value, labelled;
- sunburst: the innermost level as a ring with an open centre.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 23:16:23 +03:00