Commit Graph
4261 Commits
Author SHA1 Message Date
BFlat 8b8daabf3e Merge pull request #7359 from dotCooCoo/fix/tr-message-rows
i18n: Turkish has a row for 1,811 of the messages the untranslated report lists
2026-11-15 06:16:00 +07:00
BFlat c290957988 Merge pull request #7483 from dotCooCoo/fix/uk-missing-message-rows
i18n: Ukrainian translates 114 messages that no catalog had a row for
2026-11-15 05:31:03 +07:00
BFlat 0fe02d8544 Merge pull request #7651 from dotCooCoo/feat/smart-punctuation-dialog
Type: Smart Punctuation replaces ligatures, extra spaces and fractions and reports results
2026-11-15 05:30:55 +07:00
BFlat c0ce77a912 Merge pull request #7663 from dotCooCoo/feat/perspective-auto-plane-positioning
Perspective: Perspective Grid Options has Automatic Plane Positioning
2026-11-15 05:30:40 +07:00
BFlat ada5c74c47 Merge pull request #7203 from dotCooCoo/fix/file-folder-param-classification
Automation: one classification of file and folder params
2026-11-15 05:30:12 +07:00
BFlat 8346001971 Merge pull request #7618 from dotCooCoo/fix/opentype-ligature-note-every-frame
OpenType panel: the tracked-ligatures note reads every selected story frame
2026-11-15 05:29:54 +07:00
BFlat d68b7f3990 Merge pull request #7670 from dotCooCoo/feat/open-pdf-pages-as-links
Import PDF: Import PDF pages as links opens each page linked to its file
2026-11-15 05:29:21 +07:00
BFlat dcd6e69e83 Merge pull request #7610 from dotCooCoo/fix/text-wrap-offset-refused
Text wrap: an out-of-range or non-number offset is refused
2026-11-15 05:29:05 +07:00
BFlat ccb62b0912 Merge pull request #7660 from dotCooCoo/fix/svg-use-chain-bounded
SVG import: refuse an SVG whose use copies and styles expand past the limits
2026-11-15 05:27:22 +07:00
BFlat 15ae607c63 Merge pull request #7667 from dotCooCoo/feat/links-sort-by-size
Links: Sort by Size in the panel menu lists the smallest file first
2026-11-15 05:27:12 +07:00
dotCooCoo 9120268b7e Merge main into fix/tr-message-rows 2026-11-14 13:27:33 -08:00
BFlat 9ddbf25bef Merge pull request #7553 from dotCooCoo/feat/da-complete-messages
i18n: Danish translates status and error messages
2026-11-15 04:23:09 +07:00
BFlat bb59d1c711 Merge pull request #7657 from dotCooCoo/feat/asset-export-panel-menu-options
Asset Export: Create Sub-folders, Open Location after Export and Format Settings in the panel menu
2026-11-15 04:23:01 +07:00
dotCooCoo c96169ac1d OpenType panel: drop the first-run features binding the note no longer reads
After the merge of main, the tracked-ligatures note is the only reader of
the first run's features, and the branch replaces that check with one that
reads every frame of the story, so clippy reported the binding as unused.
2026-11-14 12:55:55 -08:00
dotCooCoo 65441c623a Merge main into fix/opentype-ligature-note-every-frame 2026-11-14 12:31:32 -08:00
dotCooCoo c7fa644f2f Merge main into fix/text-wrap-offset-refused 2026-11-14 12:30:12 -08:00
dotCooCoo ece1ed1980 Merge main into fix/tr-message-rows 2026-11-14 12:28:25 -08:00
dotCooCoo c10b1b3933 Merge main into feat/arrange-nest 2026-11-14 12:28:19 -08:00
dotCooCoo 6068c42ce6 Merge main into feat/open-pdf-pages-as-links 2026-11-14 12:23:47 -08:00
BFlat 107078ad10 Merge pull request #7579 from dotCooCoo/fix/pt-br-relink-and-feature-names
i18n: Brazilian Portuguese spells Relink correctly and calls process colors "cor de processo" in two messages
2026-11-15 03:23:15 +07:00
BFlat b0470e9b53 Merge pull request #7450 from dotCooCoo/fix/learn-panel-commands
Learn: the tabs, skill and tutorial rows and Back run commands
2026-11-15 03:23:07 +07:00
BFlat ddfe6fda67 Merge pull request #7560 from dotCooCoo/fix/type-no-op-undo-more
Undo: no step when Ruby, Character or another type command changes nothing
2026-11-15 03:22:37 +07:00
BFlat 85ce363b93 Merge pull request #7548 from dotCooCoo/fix/objects-on-path-widgets-flatten-once
Objects on Path: the widgets flatten the group's path once per lookup
2026-11-15 03:22:27 +07:00
BFlat bd214c124d Merge pull request #7640 from dotCooCoo/feat/canvas-character-alternates
Type: a selected character's alternate glyphs show beside it on the canvas
2026-11-15 03:22:11 +07:00
BFlat 2c6c88ebc5 Merge pull request #7604 from dotCooCoo/fix/pdf-art-bounds-printing-layers
Export: a page of the art's bounds is measured on the art the file draws
2026-11-15 03:21:52 +07:00
BFlat 6ee761e327 Merge pull request #7639 from dotCooCoo/feat/global-edit-rotated-copies
Global Edit: rotated copies are matched and take each edit turned by their angle
2026-11-15 03:21:03 +07:00
BFlat a33a296ccc Merge pull request #7530 from dotCooCoo/fix/vi-missing-message-rows
i18n: Vietnamese translates 115 status and error messages it lacked
2026-11-15 03:19:06 +07:00
dotCooCoo 35ab0ee859 Merge main into fix/file-folder-param-classification 2026-11-14 12:17:54 -08:00
dotCooCoo dab13fbf14 Import PDF: Import PDF pages as links opens each page linked to its file
File › Open's Import PDF dialog gets Import PDF pages as links. With it on,
each page picked opens as a placed document linked to that page of the
file, on an artboard of its Crop To box and a layer named after the page,
in place of editable art. The Links panel lists each page, and Embed makes
a page editable.

document.open takes the matching linkPages param. It is refused for a
file that is not a PDF or a PDF-compatible .ai, for bytes without a path,
with a password and with textAs: outlines. The pages share one copy of
the file, and the document opens in CMYK when most of its pages do.
Save asks for a name, as for other partly read PDFs.
2026-11-14 12:13:59 -08:00
dotCooCoo b7748581d5 Merge main into feat/asset-export-panel-menu-options 2026-11-14 12:12:44 -08:00
dotCooCoo 163f256418 Perspective: Perspective Grid Options has Automatic Plane Positioning
Perspective Grid Options gets the two Automatic Plane Positioning
checkboxes, Anchor Point of Perspective Artwork and Intersection of
Gridlines. With the Perspective Selection tool, Shift held over an
anchor point of art in perspective, or over a gridline intersection,
with no button down, moves the active plane through that point and
hides the other planes. A plane made active then passes through the
same point. The plane goes back to its place once an object is drawn
on it or attached to it, when the grid hides or no plane is active,
when the file is opened again, and with Escape.

- perspective.plane.infer {at?, tolerance?, clear?} positions, reads
  and clears the held point, which is view state, not an undo step.
- perspective.widget.options takes anchorPoint and gridlineIntersection,
  both on by default and kept with the preferences.
- perspective.plane.move moves a held plane from where it is held.
2026-11-14 12:11:36 -08:00
dotCooCoo 74dc87f922 Asset Export: panel export tests use temporary folders removed on drop
The four panel tests that export into a folder made it under the system
temporary folder and removed it at the end, so a failing assertion left
the files behind. They now use vectorcraft_testkit::TempDir, which
removes the folder when the test ends or panics.
2026-11-14 12:02:10 -08:00
dotCooCoo ebc82ca0d5 Links: Sort by Size in the panel menu lists the smallest file first
The Links panel menu gets Sort by Size beside Sort by Name, Kind and
Status, and links.list takes sort: "size". A row's size is the file size
Link Info shows: the file's size now, else the size the document keeps
of it. Rows without a size (embedded images, a missing file whose size
is not kept) come last, and equal sizes go by name. The size is read
only when sorting by it, and under automation read roots a file outside
them is not read.

Every catalog with Sort by Status gets a Sort by Size row; the Ukrainian
Sort by Status row, which read "Sort by:", now says "Sort by Status".
2026-11-14 11:43:39 -08:00
dotCooCoo a19646b2f3 Asset Export: Create Sub-folders, Open Location after Export and Format Settings in the panel menu
Create Sub-folders and Open Location after Export are check items that set
the settings the panel shares with Export for Screens, and the panel's
Export follows them. Create Sub-folders is checked as the dialog opens on
it: on for a document without export settings, and on for remembered
folders per row, format or item, which the panel's Export now uses too.
Format Settings... opens Export for Screens on the Assets tab showing the
first row's format settings.

assets.settings.set takes openLocation (kept in document.exportSettings,
not in presets), refuses a subfolders or openLocation value that is not
true, false or null, and with subfolders false given alone also ends a
remembered folder per format or item. Export for Screens reads remembered
empty folders as none, as an export does.
2026-11-14 11:26:20 -08:00
dotCooCoo 1bd269b4ed Type: Smart Punctuation replaces ligatures, extra spaces and fractions and reports results
Type > Smart Punctuation... now opens its own dialog in place of the
generic parameter form. It has the seven replacement options, Replace In
(Selected Text Only or Entire Document) and Report Results, which lists
how many of each chosen replacement were made after OK. The dialog opens
on the options confirmed last.

- type.smartPunctuation takes fiLigatures, flLigatures, spaces and
  fractions, all off by default, so existing calls behave as before.
- Ligatures write U+FB00 to U+FB04, longest match first. Expert
  Fractions writes the one-character fractions Unicode encodes, and
  skips one with a digit, a slash or a decimal point next to it, across
  a change of style too. Either is written only where the run's font
  has a glyph for it.
- Smart Spaces keeps one space after a period, across runs. An inline
  graphic separates the text on either side of it.
- The reply adds a replaced object with a count per kind. Nothing to
  replace still records no undo step.

Docs: docs/mcp.md, docs/type-parity.md.
2026-11-14 11:09:09 -08:00
datatimp 8d3f8d1ce5 Merge branch 'main' of https://github.com/storytold/vectorcraft into fix/7340-guide-row-clicks 2026-11-14 13:36:34 -05:00
dotCooCoo 3f3bccde77 Merge main into fix/svg-use-chain-bounded 2026-11-14 10:33:52 -08:00
dotCooCoo 2c5f3b9d20 SVG import: refuse an SVG whose use copies and styles expand past the limits
usvg copies the element a <use> shows, and every copy gets its own copy of
the declarations its style attribute and matching style sheet rules give
it. A chain of <use>s that doubles at each level made usvg build those
copies before the import's object limit was checked: a 101 kB file whose
rectangle has a 100 kB style took 4.7 GB at 14 levels, and one 100 kB
style sheet rule on 16,000 groups took 1.5 GB without any <use>. A plain
chain stopped at usvg's own 1,000,000-node limit with a parse error.

The import now measures, before usvg reads the SVG, how many elements it
expands to and how many bytes of style values those elements copy, each
element measured once and each <use> counted as one addition. References
follow usvg's rules: first element of an id, href before xlink:href, and
the self and back references usvg leaves out. An SVG past 999,999
elements (500,000 on the web) is refused as too large, a loop of <use>
references usvg would copy without end is refused too, and one past 64 MB
of copied style values is refused with the new SvgError::StylesTooLarge.
SVG images count toward the same 64 MB as the SVG showing them, an image
past either limit refuses the whole import, and an image that doesn't
decode does not count.
2026-11-14 10:33:00 -08:00
BFlat 0adbdce6cb Merge pull request #7621 from ruchirguitar/feat/symbols-item-context-menu 2026-11-15 01:14:51 +07:00
dotCooCoo 7cbbf97b74 Merge main into fix/pdf-art-bounds-printing-layers 2026-11-14 10:03:22 -08:00
dotCooCoo 7ff186bd31 Type: a selected character's alternate glyphs show beside it on the canvas
With a Type tool and exactly one character selected, the canvas shows up
to five of that character's alternate glyphs in a row beside it. A click
runs the command the Glyphs panel's double-click runs, as one undo step;
an arrow at the end opens the Glyphs panel on Alternates for Current
Selection when the character has more. Preferences > Type > Show
Character Alternates (showCharacterAlternates, on by default) turns the
row off.
2026-11-14 10:00:04 -08:00
dotCooCoo e1da80a2c8 Merge main into fix/learn-panel-commands 2026-11-14 09:52:25 -08:00
dotCooCoo 22f4b18021 Merge main into fix/tr-message-rows 2026-11-14 09:52:07 -08:00
dotCooCoo 283c13dfd8 Merge main into fix/type-no-op-undo-more 2026-11-14 09:49:48 -08:00
dotCooCoo 769d14ee7a Merge main into feat/arrange-nest 2026-11-14 09:47:03 -08:00
dotCooCoo 59f715ca00 Merge main into feat/da-complete-messages 2026-11-14 09:46:18 -08:00
dotCooCoo f43d16268a Global Edit: rotated copies are matched and take each edit turned by their angle
Select > Start Global Edit now also takes rotated copies of the selected
object or group, in the highlights before the start, in the Global Edit
Options' Results count and in the started edit. An edit reaches each copy
turned by that copy's angle, so an anchor moved to the right on the
selected object moves downward on a copy turned a quarter turn clockwise.

The copy's angle is the one that lays the selected object's anchors and
handles on the copy's in order (a least-squares fit in the unit box),
and the copy is the same shape when each point then lies within a
millionth of the larger side of the copy's box. Reflected copies and
copies stretched along one direction stay unmatched. With Size, a rotated
copy matches when it is the object rotated without scaling. The no-match
message now names only reflected copies, in every catalog that has it.

Docs: docs/mcp.md, docs/gaps.md, docs/ui-parity.md and the evidence list
in docs/target-app-parity.md.
2026-11-14 09:43:51 -08:00
BFlat 78131ae11c Merge pull request #7419 from dotCooCoo/fix/type-dialogs-story-wide
Type: Justification, OpenType, text styles and Convert to Text change every frame of a selected story
2026-11-15 00:42:04 +07:00
BFlat fcfad959ff Merge pull request #7588 from dotCooCoo/fix/mesh-point-color-panel
Color: the panels show the color and opacity of picked gradient mesh points
2026-11-15 00:41:54 +07:00
BFlat 63129de08a Merge pull request #7595 from dotCooCoo/fix/image-scaling-alpha
Images: scaled-down images keep their color beside clear pixels
2026-11-15 00:41:27 +07:00