A command that needs a whole number of 0 or more, such as `index` of
`appearance.setItem`, `anchor` of `path.removeAnchor` and
`addon.pen.removePoint`, `sourceDocument` of `edit.dropSelection`, `index`
of `document.activate` and `to` of `document.move`, answered "missing
integer `index`" (or "missing index") both when the key was left out and
when it was given as a value that is not a whole number of 0 or more, such
as "3", 2.5, -1 or true. A value that is given but is not one is now
refused with "`index` must be a whole number", the message object ids
already use. A key left out or given as null is still missing, and an
optional index such as `subpath` keeps its default. Neither error changes
the document or records an undo step.
Docs: docs/mcp.md, docs/target-app-parity.md.
A path's own lines can be followed by samples of the pen
(`(…) Xt n XD`). The reader took them as the end of the object, so the
style marker after them was not matched: the path came in as its drawn
look plus a second, unpainted copy of the path, and no note said the
look was kept. The samples now stay with the path. They aren't read,
so a path that has them keeps its drawn look alone, with the note, when
a setting of its Calligraphic brush varies with the pen (Pressure,
Tilt, Bearing or Rotation, with a variation above 0). With any other
style, an Art brush or a Calligraphic brush that doesn't follow the
pen included, it takes the style as it would without them.
A Calligraphic brush's filter with an entry the reader doesn't know, or
with a variable width, keeps the drawn look too, as an Art brush's
filter does.
Docs: docs/file-format-parity.md, docs/gaps.md.
A straight `(N) *` guide path that runs across the canvas or an artboard
opens as a ruler guide, but a hidden one (`1 Xw`) stayed a guide path.
It now opens as a ruler guide too, and every ruler guide made from such a
path keeps the path's hide, lock and name, so its Layers row shows them.
Before, a locked guide opened unlocked and a named one lost its name.
Hidden or locked guide paths that are short, slanted, grouped or `(S) *`
stay guide paths, and commented copies (`%_`) are still left out.
Docs: docs/target-app-parity.md, docs/file-format-parity.md.
A swatch delete, Swatch Options edit, merge, Edit Color Group, Spot
Colors options change or Default Swatches replace run as a
command.batch step left the fill and stroke new art takes linked to the
old or deleted swatch, because the defaults were skipped whenever an
interaction was open. A batch step now rewrites them as the command run
on its own does; a live Swatch Options preview still leaves them alone,
and a failed batch or a canceled batch preview puts them back.
The same commands now also rewrite the fills and strokes of the
appearance new art takes, and record the change with their undo step,
so Undo and Redo put the paints for new art back with the swatches.
The test for a triple-click whose first click makes the group now also
builds the planar map from the same two paths and checks that the face
at the click takes its fill from the square. The doc comment of the
double-click flood names the three points it checks along each edge
segment.
Each step of a Learn tutorial now has a check box that marks it done
once the tutorial's practice sample is open, and Finish tutorial marks
every step done. A skill's ring fills by the share of its tutorials
finished, its count shows tutorials finished of all, and a finished
tutorial has a check mark in its skill's list. Screen readers get the
count and the finished state as the rows' values.
The progress is saved with the UI preferences and read leniently: an
unknown tutorial, a step a tutorial does not have, a repeated entry or a
value of the wrong kind is skipped without resetting other preferences.
Reset progress under the list of skills clears it. A finished tutorial
can be finished again after a restart without reopening its sample.
- learn.markStep marks or clears one step; learn.resetProgress clears
the progress; learn.list adds done and total per skill and finished
and completedSteps per tutorial. Both new commands are in the UI
command catalogs, and bad params are errors that change nothing.
- New labels and messages have rows in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md and docs/ui-parity.md.
The Actions panel menu has a Button Mode item with a check mark. While it
is on, the panel shows every action of every set by name as a button in
its Action Options color, without set names, steps or checkmarks, and a
click on a button plays that action without its excluded steps. Choosing
Button Mode again shows the list.
- ui.action.buttonMode {enabled?} switches the view (left out: the
other view) and is kept with the UI preferences; it cannot be turned
on while an action records.
- ui.action.playAt {set, action} plays an action by its place, as the
buttons do.
- An action without a color is an ordinary button. The bottom bar shows
only Stop Playing/Recording while an action plays or records, and Play
Current Selection while one waits at a stop. Menu items for a selected
action or the current set are off in Button Mode.
Docs: docs/mcp.md, docs/ui-parity.md, docs/target-app-parity.md.
Adds 1,813 @msg rows to zh-hans.tsv, one for each status and error message the
untranslated report listed for Simplified Chinese, except the 38 that open
pull requests translate in their own rows: the composite font, justification
order and Blob Brush connect end errors. The catalog test rejects a second row
for the same key, so leaving them out keeps the catalog consistent when those
pull requests merge.
The report now lists 40 zh-hans messages: those 38, and two that no catalog
has a row for yet. Its menu, tl!, undo label and swatch name sections are
unchanged. Placeholders, backticked names, quoted values and JavaScript
identifiers stay as in the source.
Docs: docs/localization-parity.md (zh-hans row), docs/target-app-parity.md.
The Dutch catalog lacked a row for 1,813 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- nl.tsv gains 1,813 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing and
plug-ins. The translations are VectorCraft's own, written from the
English meaning with the catalog's conventions and its existing
feature names. Placeholders, parameter names, command ids and
literal values stay as the English writes them.
- The untranslated report lists 41 Dutch messages after the change:
the composite font errors, the justification spacing error and the
`connect` end error, which open #7211, #7116 and #7330 translate,
and three unknown-parameter and range errors that open #7353
rewrites so that a catalog row can match them. Menu strings, `tl!`
literals and undo labels are unchanged.
- The row for `{k} has control characters{_1}` does not match the
message for a multi-line File Info field, where the last
placeholder is empty.
- docs/localization-parity.md's Dutch row and a line in
docs/target-app-parity.md give the new counts.
A symbol instance colored with the Symbol Stainer lost its stain in
export whenever the canvas's stained art was not used:
- An instance with geometry effects was reshaped for export from the
symbol's art with only its dynamic changes, so SVG, PDF, EPS, .ai,
DXF, EMF/WMF and HPGL wrote the unstained colors. A color adjustment
on an instance recolored the unstained art the same way.
- PDF, EPS, legacy .ai, DXF and EMF/WMF wrote an instance without
effects from the unstained art.
tint_node, stain and instance_art now live in
vectorcraft_doc::symbol_overrides, which both the effects and the
exporters can use; vectorcraft_brush re-exports them. Baking, color
adjustments and the writers above now use instance_art: dynamic changes
first, then the stain.
- After a fill drag, the Live Paint Bucket stores the release point, so the
cursor swatch preview shows there instead of where the pointer last moved
before the press.
- Arrow nudges and Alt+arrow type spacing read Shift and Alt from the key
press, as the tool keys do, so a modifier released within the same frame
still makes a 10 pt nudge, a copy, or a spacing step.
- tool.setOption accepts cursorSwatchPreview for the Live Paint Bucket and
refuses a value that is not true or false.
The Turkish catalog had no row for 1,852 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- tr.tsv gains 1,811 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing,
plug-ins and Banner Hems and Grommets. The translations are
VectorCraft's own, written from the English meaning with the
catalog's terms and its existing feature names. Placeholders,
parameter names, command ids and literal values stay as the English
writes them.
- The 38 listed messages that open #7211, #7116 and #7330 add tr.tsv
rows for are left out, so the catalog has no duplicate key when they
merge.
- Three messages that open #7353 rewrites are left out: the unknown
parameter error and the PDF setting range error, which have two
placeholders in a row that no row can match, and the unknown
parameter error for a format's settings.
- The row for `{k} has control characters{_1}` does not match the
message for a multi-line File Info field, where the last
placeholder is empty.
- The Turkish row of docs/localization-parity.md gives the catalog's
current counts and what still falls back to English.
Docs: docs/target-app-parity.md, docs/localization-parity.md.
Every built-in preset other than Auto Color and Flat Logo now traces at
Paths 50. Corners is 100 in Technical Drawing, 75 in Default, Black and
White Logo, Line Art and Outline, and 50 in the others. Noise is 1 px in
Technical Drawing, 5 in High Fidelity Photo, 10 in Low Fidelity Photo, 15
in 3 Colors, 6 Colors, 16 Colors and Shades of Gray, 20 in Sketched Art,
Line Art and Outline, 25 in Default and Black and White Logo, and 90 in
Silhouettes. Palettes, color counts and the other options are unchanged.
This changes the output of every preset but Default, Auto Color and Flat
Logo. The traces take fewer anchors (High Fidelity Photo 5,494 to 3,136
and Black and White Logo 27 to 14 in crates/trace/tests/quality), and
outlines on flat art lie further from the true edge (16 Colors 0.100 to
0.123 px off on average).
Docs: docs/image-trace-adjustments.md, docs/image-trace-quality.md,
docs/target-app-parity.md.
A closed freehand stroke is fitted as the open stroke would be and closed by a
straight segment from its end back to its start. Fitted as one loop, the
closing segment curved on past both ends and back, like a hat's brim.
The Polish catalog lacked a row for 1,854 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- pl.tsv gains 1,808 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing and
plug-ins. The translations are VectorCraft's own, written from the
English meaning with the catalog's conventions and its existing
feature names. Placeholders, parameter names, command ids and
literal values stay as the English writes them.
- 44 of the others get their Polish rows from open #7211, #7214,
#7116, #7330 and #1931, so this change leaves them out. 2 are
messages that no catalog has a row for yet. Menu strings, `tl!`
literals, undo labels and swatch names are unchanged.
- Two of the messages have two placeholders in a row. The catalog does
not load such a row, so those two are still shown in English.
- The Polish row of docs/localization-parity.md gives the catalog's
current counts.
Docs: docs/target-app-parity.md, docs/localization-parity.md.
The Hungarian catalog lacked a row for 1,853 of the status and error
messages that the untranslated report finds in the sources, so the
status bar showed those messages in English.
- hu.tsv gains 1,813 `@msg` rows: the errors of commands and their
parameter checks, scripts, file import and export, printing and
plug-ins. The translations are VectorCraft's own, written from the
English meaning with the catalog's conventions and its existing
feature names. Placeholders, parameter names, command ids and
literal values stay as the English writes them.
- The 38 rows that open #7211, #7116 and #7330 add to hu.tsv are left
out, since a second row for the same key fails
bundled_catalogs_are_consistent. The report lists those 38 and two
messages that no catalog has a row for. Menu strings, `tl!`
literals, undo labels and swatch names are unchanged.
- Two of the messages have two placeholders in a row. The catalog does
not load such a row, so those two are still shown in English. The
row for `{k} has control characters{_1}` does not match the File
Info error for a multi-line field, where the last placeholder is
empty.
- The Hungarian row of docs/localization-parity.md gives the catalog's
current message counts.
Docs: docs/target-app-parity.md, docs/localization-parity.md.
- A face outline segment that runs along several edge segments (the
face has no corner where a crossing line splits the edge) now joins
the face to every edge segment it runs along, not only the one under
its middle, so a double-click flood no longer stops there.
- The first click of a triple-click on selected paths, which makes the
Live Paint group, takes the fill to match from the paths' closed
subpaths only, as the group's faces do; an open path in front no
longer gives the wrong fill.
cs is in COMPLETE_MESSAGES, but the untranslated report listed 1,853
status and error messages with no Czech row, so with the interface in
Czech those messages showed in English.
- cs.tsv gains 1,813 `@msg` rows in one block after the last row. The
translations are VectorCraft's own, written from the English meaning
with the catalog's terms and typography (polite second person, Czech
quotation marks „…“). Placeholders, backticked names, command ids,
double-quoted values and bare true, false and null stay as the
English writes them.
- The 38 messages whose Czech rows open #7211, #7116 and #7330 add are
left out, so the catalog keeps one row per key when they merge.
- Menu strings, `tl!` literals, undo labels and swatch names are
unchanged.
- The Czech row of docs/localization-parity.md gives the catalog's
current counts.
craft_dxf::parse_recovering reads the tags (ASCII and binary, any code
page), model::Document::read the sections, tables, blocks, layouts and
entity followers, and Entity::read each entity. The pair parser, the
records, the header, layer, block and layout readers and the colour
palette are gone; what stays is the mapping onto VectorCraft art.
Binary DXF files now open instead of being refused. A damaged binary
file says so.
The Traditional Chinese catalog had no row for 1,852 of the status and
error messages that i18n::tests::untranslated_report finds in the
sources, so the status bar showed them in English.
- zh-hant.tsv gets 1,813 @msg rows under one comment line at the end of
the file, written in Taiwan usage with the catalog's existing terms.
Each row keeps the English key, its placeholders, doubled braces,
parameter names, command ids and quoted values unchanged.
- The 38 rows that open #7211, #7116 and #7330 add, and the row #7214
added, are left out, so the catalogs stay consistent.
- docs/localization-parity.md and docs/target-app-parity.md give the new
counts: 3,438 @msg and 48 @msgplural rows, 40 messages still listed.
The rows for `{name} must be {lo}–{hi}{unit} (got {v})` and
`unknown parameter `{within}{key}`; {why}` are counted by the report, but
Template::parse does not load a template with two placeholders in a row,
so those two messages still show in English. The row for
`{k} has control characters{_1}` does not match the message for a
multi-line File Info field, where its last placeholder is empty.
On Linux and the BSDs, the desktop draws the window's frame on X11, on
Wayland compositors that draw server-side decorations and in a window
opened through XWayland. There, with VectorCraft Title Bar on Every
Desktop off, the window has the desktop's title bar with System Title
Bar on or off, and the dialog showed nothing about it under System
Title Bar.
- The desktop app records at startup whether VECTORCRAFT_TITLEBAR is
unset and the desktop would draw the frame without VectorCraft Title
Bar on Every Desktop (VectorcraftApp::desktop_keeps_frame), from the
frame probe and the launch path's XWayland choice.
- Preferences shows a note under System Title Bar in that case while
VectorCraft Title Bar on Every Desktop is off, with rows in the 27
catalogs that carry the neighboring title bar notes. The value is
worked out at startup, so a Linux Display Server change shows in the
note from the next start.
Docs: docs/control-protocol.md, docs/target-app-parity.md.
The Pencil's and the Paintbrush's new-path, continue, close and straight-line
cursors are drawn on the crosshair already; Precise Cursors no longer turns
them into the plain crosshair, so the badge still says what the press or the
release does.
In a document in picas, a bare number typed in Text Wrap Options › Offset
follows Preferences › Units › Numbers Without Units Are Points, as every
length field drawn by the shared unit field does: points while it is on
(the default), picas while it is off. A test covers both settings, and
the evidence line in docs/target-app-parity.md states the rule.