vectorcraft/crates/engine/src
IHAGI-c 35c4a428ff Graph Data: blank cells are left out, not drawn as zero; quoted numbers are labels
A graph's data can now hold blank cells: an empty CSV cell, a null in
`rows` (any cell that isn't a finite number), the rest of a short row,
or a row that has only a label.

- Columns, bars and stacked segments leave a blank cell out instead of
  drawing a zero-height mark.
- Line and scatter graphs break their lines around it and draw no
  marker there; the value axis ignores it.
- Area, pie and radar graphs draw it as 0, which is what it adds to
  them.

The help pages don't describe blank cells, so this is our own choice:
a cell with no value has nothing to draw, which also matches how a
series with a missing year reads in a report.

In the file a blank cell keeps a 0 in `rows` and is listed in a new
`blanks` field ([category, series] pairs, written only when there are
any). A version that doesn't know blanks ignores the field and reads
the zeros, so files still open there, and files without blanks are
unchanged.

A number in straight quotes is a label, as the help page on graph
labels says (a year as a category name, for one). The CSV reader used
to strip the quotes first and read it as a value. Label columns are now
decided for the whole column: once any row starts with a label, every
row's first cell is its label, so a row with an empty label no longer
shifts its values one place left. The data window writes a header row,
labels that are empty, read as numbers or have spaces around them in
quotes, and blanks as empty cells, so they come back as they were.
graph.setData {} returns blanks in `rows` as null, so the rows it
returns can be edited and sent back. A label-only row keeps its place
with blank values; a row with neither a value nor a label is dropped,
and a first row that is a label followed by empty cells (`Year,,`) is
still read as a header with no series names.

The data grid is built in full for drawing and for the data window, so
it now stops at 10,000 categories of 256 series, which keeps a file
with one very long row from allocating without bound.

Behaviour (quoted labels): Add graph labels and data sets:
https://helpx.adobe.com/illustrator/desktop/automate-visualize-data/visualize-data/add-graph-labels-and-data-sets.html
2026-10-10 17:59:45 +07:00
..
cmd Graph Data: blank cells are left out, not drawn as zero; quoted numbers are labels 2026-10-10 17:59:45 +07:00
file_access.rs Fix #832: --automation-read-root and --automation-write-root confine the MCP server's files 2026-10-10 14:27:24 +07:00
guard.rs Robustness: VectorCraft never crashes — no panics in shipped code 2026-10-05 06:28:59 +07:00
inspect.rs M7: area type auto size and shrink text to fit 2026-10-08 14:48:25 -07:00
lib.rs Fix #832: --automation-read-root and --automation-write-root confine the MCP server's files 2026-10-10 14:27:24 +07:00
steps.rs Part of #785: run and command_batch steps can use earlier results 2026-10-10 10:28:03 +07:00
tests.rs Fix #903: Reselect repeats a Same command after Deselect 2026-10-10 12:55:37 +07:00
tests_adjust.rs Fix #122: colour adjustment live effects (Effect > Color Adjustments) 2026-10-06 00:42:26 +07:00
tests_appearance.rs M3.46: three-state knockout groups (on, neutral, off) render, export and edit 2026-10-04 23:04:20 +07:00
tests_areafit.rs M7: area type auto size and shrink text to fit 2026-10-08 14:48:25 -07:00
tests_assets.rs M4.65: Asset Export panel and the Assets tab of Export for Screens 2026-10-05 15:24:54 +07:00
tests_attributes.rs Fix #522: SVG round trips keep hidden objects and data-* attributes 2026-10-09 03:36:08 +07:00
tests_bboxrotate.rs Fix #712: the bounding box hides while a drag moves, scales or rotates 2026-10-09 17:39:12 +07:00
tests_blendfidelity.rs M8.20: blends interpolate strokes, gradients, groups, type and symbols faithfully 2026-10-06 12:01:28 +07:00
tests_blendopts.rs M8.18: Blend Options dialog and the Blend tool's anchor targeting 2026-10-06 11:01:18 +07:00
tests_blendspine.rs M8.19: blend spine and keys editable on the canvas 2026-10-06 11:12:58 +07:00
tests_brushsym.rs Part of gap 5: Scatter, Art and Pattern Brush Options 2026-10-10 17:48:05 +07:00
tests_build.rs Image Trace: Flat Logo mode (sub-pixel edges, restored corners, true lines and circles) 2026-10-09 17:57:04 +11:00
tests_charstroke.rs M3.40: stroke on type — the Stroke panel edits the characters' stroke 2026-10-05 01:09:55 +07:00
tests_clip.rs M3.75: layer clipping masks from the Layers panel button 2026-10-05 00:27:31 +07:00
tests_clipboard.rs Fix #693: a click activates its artboard; in-place pastes go onto it 2026-10-09 13:32:44 +07:00
tests_clipflavours.rs Fix #398: Linux/Wayland bitmap paste, copied files paste as art 2026-10-08 07:44:23 +07:00
tests_clippaint.rs M3.89: a clipping path's fill paints behind the clipped art, its stroke over it 2026-10-05 03:11:04 +07:00
tests_cmdsplit.rs M3.8: register the split paint modules next to paint so the command palette keeps listing them (Stroke Options for "stroke") 2026-10-04 11:32:11 +07:00
tests_cmykflatten.rs M3.90: blend modes and opacity composite inks in CMYK documents 2026-10-05 04:30:06 +07:00
tests_colorguide.rs M3.53: Color Guide has 21 harmony rules, Steps and Variation options, a fixed base colour and Save Colors as Swatches 2026-10-05 00:13:36 +07:00
tests_colorguidelib.rs M3.95: Color Guide Limit to Library and Edit or Apply Colors without art 2026-10-05 05:08:15 +07:00
tests_colormgmt.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_colorthemes.rs M3.96: Color Themes panel with a local theme library 2026-10-05 05:08:28 +07:00
tests_containers.rs M14.4: tests main gained follow the no-panic lint rules 2026-10-05 06:40:34 +07:00
tests_css.rs M4.96: Window › CSS Properties shows, copies and exports the CSS of the selection 2026-10-05 16:03:11 +07:00
tests_cut.rs Fix #122: Mirror & Cut, Line Cut and Rectangle Cut tools 2026-10-06 00:42:26 +07:00
tests_dashalign.rs M3.38: dashes fitted to corners and path ends, a flag of their own that keeps the offset 2026-10-04 23:37:58 +07:00
tests_distort.rs Perspective grid: coming back from a temporary tool keeps a hidden grid hidden (review of #333) 2026-10-08 03:27:36 +07:00
tests_docsetup.rs M4.20: Document Setup with bleed, transparency grid, paper and type options 2026-10-05 08:28:16 +07:00
tests_draw2.rs Fix #798: the Curvature tool edits any selected path 2026-10-10 11:12:10 +07:00
tests_editcolors.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_effectedit.rs M3.42: Appearance editing depth — drag effect rows to reorder them or move them into/out of fills and strokes (Alt copies), click an effect name to edit it in its prefilled dialog, choosing an applied effect asks to edit it or add another, Show All Hidden Attributes, multi-select and Alt-drag duplicate of fills/strokes, drag the thumbnail onto art to copy the appearance, stroke rows note brush/Dashed/profile, Shift-click a chip for the mixer, Properties fx opens the effect menu 2026-10-04 23:01:34 +07:00
tests_emptytype.rs Part of #394: Preferences for snapping, handles, rubber bands, pattern tiles, tints and type 2026-10-08 09:43:12 +07:00
tests_envelope.rs clippy: a byte string for the envelope test's newline (byte_char_slices, red on main with Rust 1.99) 2026-10-06 07:09:35 -04:00
tests_envelope_distort.rs M8.16: Envelopes bend images, symbols, gradients, patterns and appearance; warps keep their frame 2026-10-06 12:01:47 +07:00
tests_envelope_edit.rs M8.17: Edit envelopes on the canvas: Edit Contents, mesh points and handles, Control bar 2026-10-06 12:16:59 +07:00
tests_expand.rs M14.4: as_chunks for the pixel loops main gained since the no-panics branch 2026-10-05 06:40:34 +07:00
tests_eyedropper.rs Type: Hebrew and Arabic text laid out right to left (bidi), aligned by its direction 2026-10-08 05:24:44 +07:00
tests_file.rs Tests: Japanese file and folder names save, open, export and title documents 2026-10-07 13:20:07 +07:00
tests_fileinfo.rs M4.55: File Info with author, description, keyword chips, rating and copyright, written to SVG, PDF and PNG 2026-10-05 09:55:47 +07:00
tests_flatpresets.rs M3.93: Edit > Transparency Flattener Presets… manages built-in and saved flattener presets 2026-10-05 02:36:28 +07:00
tests_flatpreview.rs M3.94: Window > Flattener Preview shows what flattening would rasterize, outline and change 2026-10-05 02:36:43 +07:00
tests_flatten.rs M14.4: as_chunks for the pixel loops main gained since the no-panics branch 2026-10-05 06:40:34 +07:00
tests_focal.rs M14.4: tests main gained follow the no-panic lint rules 2026-10-05 06:40:34 +07:00
tests_fontfiles.rs Review fixes for #792: build expected test paths with the platform's separator 2026-10-10 09:07:53 +07:00
tests_fontlist.rs Fonts: the font menus leave out macOS's hidden "." families 2026-10-06 15:33:21 -04:00
tests_freeform.rs M3.97: freeform points drag out to delete, spread ring drags, Lines mode draws lines 2026-10-05 04:43:43 +07:00
tests_gradient.rs M3.98: radial annotator extent ellipse, aspect handle and off-centre focal point 2026-10-05 04:43:43 +07:00
tests_gradpanel.rs M3.52: Eyedropper Options with Picks Up / Applies trees, Alt and Shift+Alt modes, image sampling 2026-10-05 02:08:10 +07:00
tests_halftone.rs Fix #122: Object > Vector Halftone 2026-10-06 00:42:26 +07:00
tests_inline.rs M7: inline symbols in text 2026-10-08 15:45:34 -07:00
tests_journal.rs Fix #400: Scrub numeric fields by dragging their label 2026-10-08 11:33:57 +07:00
tests_knockout.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_labspots.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_layerclip.rs Layers: sublayers are layers, not objects, and every row has a command 2026-10-07 22:29:15 +07:00
tests_layers.rs Layers: keep clippy happy (menu item type, no unreachable in tests) 2026-10-07 23:06:31 +07:00
tests_library.rs Fix #926: the Libraries panel's search, groups and library export/import 2026-10-10 17:17:01 +07:00
tests_linked_stops.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_links.rs Fix #918: PSD and PSB files open and place as their merged image 2026-10-10 16:09:41 +07:00
tests_linkspanel.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_liquify.rs M8.4: Liquify keeps going while held, leaves non-paths alone, strokes apply incrementally 2026-10-06 12:00:52 +07:00
tests_live.rs Type Object Selection by Path Only: every baseline, Type tool and Eyedropper (review of #475) 2026-10-08 18:59:47 +07:00
tests_livecorners.rs Fix #938: Live Corner widgets on every selected path 2026-10-10 17:19:52 +07:00
tests_maskview.rs M3.86: Alt-click the mask thumbnail to view only the mask 2026-10-05 03:11:04 +07:00
tests_menucmds.rs Crop Image: trim an image to its pixels that aren't fully transparent 2026-10-09 17:24:04 +13:00
tests_nativefile.rs M4.35: native files compress, save atomically, drop unused images, keep newer keys and save down to v1 2026-10-05 12:27:02 +07:00
tests_newart.rs M3.65: new-art appearance template (stroke options and graphic styles with nothing selected, New Art Has Basic Appearance) 2026-10-05 04:38:09 +07:00
tests_newdoc.rs Fix #681: Rearrange All Artboards layouts, order and one-click access 2026-10-09 12:22:48 +07:00
tests_objexpand.rs M14.4: as_chunks for the pixel loops main gained since the no-panics branch 2026-10-05 06:40:34 +07:00
tests_opacitymask.rs M3.48: Page Isolated Blending and Page Knockout Group 2026-10-04 23:10:06 +07:00
tests_outlinestroke.rs M3.38: dashes fitted to corners and path ends, a flag of their own that keeps the offset 2026-10-04 23:37:58 +07:00
tests_overprint.rs M3.50: Overprint Black dialog with fill/stroke, rich and spot black options 2026-10-05 00:01:02 +07:00
tests_package.rs Review fixes for #777: report sections per document, fmt, docs and ROADMAP 2026-10-10 09:32:12 +07:00
tests_paintproxy.rs M3.51: Fill/Stroke chips open swatch and mixer popovers; panel shortcuts; Recolor quick action 2026-10-05 02:05:33 +07:00
tests_panelcmds.rs M7: Every-line Composer for ragged text 2026-10-08 14:03:33 -07:00
tests_paragraphs.rs M7: per-paragraph paragraph attributes 2026-10-08 15:07:13 -07:00
tests_pathops.rs Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated. 2026-10-01 14:30:09 -04:00
tests_pathtype.rs Fix #429: Type on a path brackets, flip and Type on a Path Options that keep the type in place 2026-10-08 12:50:25 +07:00
tests_pattern.rs Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated. 2026-10-01 14:30:09 -04:00
tests_pdffidelity.rs M4.59: pattern strokes and freeform gradients keep their look in PDF 2026-10-05 11:52:35 +07:00
tests_pdfmarks.rs M4.72: PDF export draws printer's marks in Registration around each page 2026-10-05 13:05:20 +07:00
tests_pdfpresets.rs M4.86: PDF page thumbnails and fast web view (linearised files) 2026-10-05 18:05:36 +07:00
tests_pdfraster.rs Fix #827: shadows and glows keep their blend modes in PDF 2026-10-10 10:28:04 +07:00
tests_persp_planes.rs M8.13: Perspective planes move along their normals with widgets, alone, with or copying their objects 2026-10-06 11:44:11 +07:00
tests_persp_select.rs M8.10: Perspective grid view options: Lock Grid, Lock Station Point, Snap to Grid, Show Rulers 2026-10-06 11:49:19 +07:00
tests_persp_text.rs M8.14: Type and symbols in perspective are really projected and stay editable; attachments survive copies 2026-10-06 12:10:00 +07:00
tests_perspgrid.rs Fix #321: the perspective grid hides while a perspective tool is chosen 2026-10-08 03:27:36 +07:00
tests_place.rs M4.54: Placing a text file asks for Text Import Options and sets it as area type 2026-10-05 10:07:23 +07:00
tests_placed_document.rs Placed documents: Links commands check, update, relink and break their links 2026-10-08 12:20:51 -07:00
tests_plugins.rs Fix #121: sandboxed WebAssembly plug-ins: object filters and live effects 2026-10-06 00:19:41 +07:00
tests_prefs.rs Part of #394: Show Font Names in English labels the font menus. 2026-10-10 14:10:31 +07:00
tests_previewbounds.rs M3.67: Use Preview Bounds measures strokes in transforms, the bounding box and Align 2026-10-05 03:59:37 +07:00
tests_print.rs M4.75: File → Print writes the job as a print-ready PDF: paper, scale, tiles, marks and bleed, separations 2026-10-05 15:13:10 +07:00
tests_printadvanced.rs M4.81: Print advanced options: overprints, flattener, printer profile, bitmap 2026-10-05 17:27:00 +07:00
tests_printpresets.rs M4.79: print presets in the Print dialog and Edit > Print Presets 2026-10-05 16:30:46 +07:00
tests_printpreview.rs M4.78: File > Print opens the Print dialog and prints through the system 2026-10-05 16:30:35 +07:00
tests_printps.rs M4.92: Print to a PostScript file 2026-10-05 17:01:36 +07:00
tests_printtiling.rs M4.80: Print Tiling tool and View > Show Print Tiling 2026-10-05 17:26:59 +07:00
tests_proxyitems.rs M3.51: Fill/Stroke chips open swatch and mixer popovers; panel shortcuts; Recolor quick action 2026-10-05 02:05:33 +07:00
tests_puppetwarp.rs M8.6: Puppet Warp pins appear at once, warp from the rest shape and follow Undo 2026-10-06 11:16:10 +07:00
tests_rasterfilters.rs Part of gap 2: Effect › Video (De-Interlace, NTSC Colors) 2026-10-10 17:05:56 +07:00
tests_rastersettings.rs M4.56: Document Raster Effects Settings with colour model, background, anti-alias, clipping mask and room around 2026-10-05 09:55:48 +07:00
tests_recolor.rs M3.79: Edit or Apply Color Group opens Recolor Artwork on a colour group 2026-10-05 04:20:27 +07:00
tests_recovery.rs EPS import: bound what hostile editing data can cost, and say when it can't be read 2026-10-09 03:49:49 -04:00
tests_registration.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_save.rs Fix #638: Layers panel lays out only the rows in view and keeps open rows in the file 2026-10-09 08:19:49 +07:00
tests_saveoptions.rs M4.38: native and .ai save options: each artboard to its own file, linked files, ICC profiles, PDF content 2026-10-05 15:24:19 +07:00
tests_scalestrokes.rs Fix #291: live corners stay circular when a rectangle is scaled unevenly 2026-10-07 20:25:41 +07:00
tests_shaper.rs M2.9: add editable Shaper groups and shape orientation steps 2026-10-08 22:52:23 +01:00
tests_slices.rs M4.89: Slice and Slice Selection tools draw, pick, move, resize and delete slices 2026-10-05 12:52:15 +07:00
tests_smartguides.rs Fix #506: drawing tools snap to Smart Guides as the Selection tool does 2026-10-08 23:20:27 +07:00
tests_strokegeom.rs M3.20: visual bounds cover arrowheads so overhanging heads are not culled; one arrowhead-weight helper 2026-10-04 17:40:41 +07:00
tests_strokegradient.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_strokereach.rs M3.63: visual bounds and clicks take in the whole stroke 2026-10-05 02:55:23 +07:00
tests_strokeux.rs Stroke: per-unit weight presets so mm/cm/in dropdowns show clean numbers 2026-10-08 12:26:47 +07:00
tests_stylelib.rs Swatches: swatch.library.copyToUser copies a loaded library into User Defined 2026-10-09 13:32:59 -07:00
tests_stylepanel.rs M14.4: tests main gained follow the no-panic lint rules 2026-10-05 06:40:34 +07:00
tests_styles.rs M3.68: groups, layers and type have their own fills, strokes and effects, with Contents and Characters rows 2026-10-05 00:59:34 +07:00
tests_swatchcmds.rs M3.59: tints of global and spot colours, tint swatches and Global colour balance 2026-10-05 02:29:17 +07:00
tests_swatches.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_swatchlib.rs Swatches: swatch.library.copyToUser copies a loaded library into User Defined 2026-10-09 13:32:59 -07:00
tests_targeting.rs M3.69: target circles target layers, groups and objects; drag them to move appearances 2026-10-05 02:15:41 +07:00
tests_textcombos.rs M7: tests for the text engine features combined 2026-10-08 20:30:14 -07:00
tests_textedit.rs Part of #394: Preferences for snapping, handles, rubber bands, pattern tiles, tints and type 2026-10-08 09:43:12 +07:00
tests_textimport.rs AF.3: native Affinity import with artboards, vectors, text and images 2026-10-08 17:58:11 +00:00
tests_tileedge.rs M3.72: Tile Edge Color dialog and Show Swatch Bounds in pattern editing 2026-10-05 01:50:25 +07:00
tests_tints.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_toolsettings.rs M8.2: tool options last across tool switches and launches 2026-10-06 09:23:44 +07:00
tests_transparencygrid.rs M3.88: Show Transparency Grid is per-document engine view state 2026-10-05 03:11:04 +07:00
tests_typearea.rs M7: area type vertical alignment 2026-10-08 14:28:02 -07:00
tests_units.rs M14.5: Preferences > Units drive every length the UI shows and reads 2026-10-05 07:43:41 +07:00
tests_webexport.rs Fix #839: Save for Web accepts a typed width or height 2026-10-10 10:27:52 +07:00
tests_widthpoints.rs M3.64: Width tool depth: Width Point Edit, multi-select, Alt-copy and discontinuous points 2026-10-05 04:38:09 +07:00
tests_widthprofiles.rs M3.61: width profile library: Add to Profiles, Delete Profile, Reset Profiles 2026-10-05 02:55:21 +07:00
tests_widthtool.rs M8.7: Width tool edits compound-path strokes, shows every subpath's points, own cursors 2026-10-06 12:01:10 +07:00
tests_xform.rs M11: honor Move Artwork in artboard coordinate edits 2026-10-10 09:49:24 +02:00
tooling.rs Fix #712: the bounding box hides while a drag moves, scales or rotates 2026-10-09 17:39:12 +07:00
units.rs M14.5: Preferences > Units drive every length the UI shows and reads 2026-10-05 07:43:41 +07:00