Commit Graph
12247 Commits
Author SHA1 Message Date
makesomethingshit e56f95270c #6307: Preserve concurrent parity revision entries 2026-11-10 00:58:06 +09:00
makesomethingshit 804e6d5b14 #6307: Keep parity evidence away from the changing header 2026-11-10 00:57:12 +09:00
makesomethingshit 898db5d72d #6307: Keep spinner evidence separate from shared status lines 2026-11-10 00:53:11 +09:00
dotCooCoo 01673695af JavaScript: a computed XML name or attribute run cannot add markup
An embedded expression used as a tag or attribute name must now be one XML
name, and one used as a run of attributes must hold only name="value"
attributes separated by white space. Anything else throws SyntaxError, so a
script string cannot add an attribute, close the tag or add a child.

{name}={value} in a tag now reads as a computed attribute name, as in the
example in ECMA-357 section 11.1.4.
2026-11-09 07:47:29 -08:00
makesomethingshit 5bf0f337df #6307: Keep numeric spinner arrows repeating while held 2026-11-10 00:45:55 +09:00
Ahmed Gomaa 6e71211a16 PDF import: preserve authored text in ActualText spans
Editable PDF import derived characters from glyph Unicode/CID mappings
even when the enclosing marked-content sequence supplied /ActualText.
A span that paints "xy" but says "AB", followed by "C", imported "xyC".

Track the outermost replacement owner per span (absent, explicitly
empty, consumed), decode it with the existing PDF text-string decoder,
emit it once at the first placeable glyph, and let the remaining glyphs
of the span advance the pen without phantom character slots or
inferred spaces. Authored stretches keep their logical order while
adjacent ordinary text still goes through visual-to-logical
reconstruction. Glyph identity still drives font matching. Depth and
size are bounded; oversized or unbalanced spans fall back to glyph
mappings with a warning.

Outlines mode and PDF export are unchanged. Parity docs updated,
scores unchanged.

Fixes #6165.
2026-11-09 17:43:28 +02:00
dotCooCoo 80ef5d5f53 JavaScript: a limit while a list or named match replaces XML children leaves the tree intact
Replacing a child with a list, inserting a list, and assigning or
replacing by name now check the depth and take all fuel and heap before
the first change. A limit no longer leaves the old child removed, part
of a list inserted or one of several matches gone.

appendChild and assignment past the end of a list remove their empty
placeholder when the assignment stops. A list that takes an earlier
sibling at an index keeps that node in its slot.
2026-11-09 07:37:24 -08:00
dotCooCoo 775d72ddff Merge main into feat/js-e4x-xml 2026-11-09 07:35:58 -08:00
BFlat 7875114168 Merge pull request #6308 from Messhias/feat/g5-dynamic-symbol-part-appearance
G5: dynamic symbol parts take opacity, blend and non-solid paint
2026-11-09 22:31:51 +07:00
JonRC ddbc0d545a Fix #6320: EPS import warns about fonts that aren't available
Type set in a family that isn't available keeps its name and shows in
the fallback font, as in PDF import, but EPS import said nothing. It
now notes each such family once, in the order its type comes (at most
64), and ends with PDF import's warning: "fonts that aren't available
show in the fallback font until they are: <families>".

Tests that set type in fonts the test machine may lack (Helvetica,
Ryumin, made-up names) check the program's warnings without that note,
since which fonts are installed depends on the machine.
2026-11-09 12:31:17 -03:00
dotCooCoo d225a20195 Merge main into feat/js-e4x-xml 2026-11-09 07:28:10 -08:00
BFlat 67c7cbda51 Merge pull request #6321 from jmverges/fix/6313-pdf-image-mask-colorized
PDF import: image masks open colorized by the color they are painted in (#6313)
2026-11-09 22:26:37 +07:00
NetterSilverandClaude Haiku 5.5 511bb23999 Strip leading byte-order mark in graph CSV parser
Found while testing crates/engine/src/cmd/graph/data.rs:45-47 (parse_csv)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-09 15:25:52 +00:00
dotCooCoo dbfd3f8a80 JavaScript: XML rejects reserved namespace bindings and names
The XML parser now throws SyntaxError when markup binds the xml or xmlns prefix or either fixed URI against the Namespaces in XML rules. addNamespace, setName, setLocalName and setNamespace throw TypeError for the same bindings and leave the node unchanged.

A new element or attribute cannot be in the xmlns namespace, and an attribute in no namespace cannot be named xmlns. The xmlns URI cannot be the default XML namespace. These assignments throw TypeError.
2026-11-09 07:22:20 -08:00
Taha-Mahmoodi 367131d73d Merge origin/main 2026-11-09 19:43:16 +04:30
Taha-Mahmoodi f19f95f9e0 Merge origin/main 2026-11-09 19:42:31 +04:30
dotCooCoo 237ba7a483 JavaScript: a limit during an XML insert, delete or put leaves the tree intact
insertChild, prependChild, replace and list assignment take their heap
and fuel before moving a node out of its old parent. Replace past the
last child charges before the push, so a child is never left without
its parent link. Deleting a child or attribute by name, assigning an
attribute or assigning text to an element take the fuel for the whole
step before emptying the node. normalize removes the next text node
before it stores the joined text.
2026-11-09 07:09:12 -08:00
dotCooCoo 7cce6cd129 Merge main into feat/js-e4x-xml 2026-11-09 06:54:18 -08:00
dotCooCoo f85c555014 JavaScript: run E4X XML literals and the XML, XMLList, Namespace and QName objects behind an option
With `Options::e4x` set, vectorcraft-js runs ECMA-357 (2nd edition):
XML and XMLList literals with embedded expressions, the `..`, `.@`,
`.*`, `.()` and `::` selectors, assignment and `delete` on selected
nodes, `for each`, `default xml namespace`, and the four objects with
their methods and settings. The option is off by default, and without
it the syntax and globals do not exist.

Parsing, serializing, comparing and copying trees use no native stack,
and each takes fuel and counts against the heap limit. Inserting a node
into itself or its descendants throws a TypeError before the tree
changes. A literal or XML string nested past `Options::max_depth` gives
a SyntaxError, and a tree built past that depth stops at the heap limit.
`XML.prototype.xpath` is not provided.
2026-11-09 06:50:32 -08:00
BFlat c66cb516e2 Merge pull request #6317 from dotCooCoo/fix/pdf-cmyk-gradient-image
PDF export: dithered and Perceptual CMYK gradients stay CMYK
2026-11-09 21:46:10 +07:00
Taha-Mahmoodi 32911997ad Merge remote-tracking branch 'origin/main' into fix/import-document-title
# Conflicts:
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-09 19:15:30 +04:30
jmvergesandClaude Opus 5.5 def928c0dc PDF import: image masks open colorized by the color they are painted in (#6313)
A PDF image mask (`/ImageMask true`) painted in a solid color opened as an
RGB image with the color in its pixels: Fill and Recolor Artwork didn't
reach the color, a spot color lost its ink, and the same mask painted again
in another color took the first one, because the painted image was cached
by the mask alone, and so did an uncolored pattern whose cell draws a mask.

It now opens as a grayscale image of what it paints, colorized by that
color, as the .ai reader opens a 1-bit image mask (#5790). A spot color
keeps its swatch and tint. The page's walk counts paths, not images, so the
ink is found from the color space. Readings of a pattern cell are told
apart by colorized images' colors too. Inside an alpha soft mask, or
painted with a pattern, a mask opens as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 14:43:13 +00:00
Fabio William Conceição 84e7d55bc8 G5: finish Eyedropper and undo wording for a picked part
copyFrom only writes paints enabled for pickup and apply, and paint, Transparency and the Eyedropper record an undo step only when the override changes.
2026-11-09 14:42:18 +00:00
Fabio William Conceição a4ea6d6fbe Merge remote-tracking branch 'upstream/main' into feat/g5-dynamic-symbol-part-appearance
# Conflicts:
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-09 14:42:18 +00:00
BFlat b4cb6a69c4 Merge pull request #6306 from thisisgomaa/fix/macos-native-cursor-delivery
macOS: deliver canvas cursors through AppKit pending a winit fix
2026-11-09 21:37:25 +07:00
Fabio William Conceição 0f2dde0282 G5: qualify when a picked part takes the Eyedropper and Transparency
copyFrom still edits the part when reverse, append and defaultsOnly are false, and reverse copies onto source. transparency.set records an undo step only when the override changes.
2026-11-09 14:27:19 +00:00
Fabio William Conceição e88e9077e7 G5: spell out part-paint targets and the pen gaps still open
A picked part takes transparency and the Eyedropper only when those calls omit their other targets. Art, Pattern and Bristle brushes, native Wayland and the web still do not take tilt, bearing or rotation.
2026-11-09 14:07:48 +00:00
Fabio William Conceição 08cc3d6ffa Merge remote-tracking branch 'upstream/main' into feat/g5-dynamic-symbol-part-appearance
# Conflicts:
#	docs/target-app-parity.md
2026-11-09 14:07:11 +00:00
Ahmed Gomaa 7020af6501 Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 15:59:17 +02:00
dotCooCoo 90bc821f3f PDF: dithered and Perceptual CMYK gradients stay CMYK
A dithered fill or a Perceptual linear or radial gradient whose stops
are all CMYK was written as an RGB image. It is now a CMYK image.
The stops keep their inks, an off-center midpoint is halfway between
its two stops' inks, and a Perceptual curve uses the ink mixes a
DeviceN shading uses. Dither's noise is added per ink and adds no ink
where the gradient has none.

The Output settings convert the inks as they do for any CMYK image.
A gradient with an RGB, gray or Lab stop, a stop linked to a spot
swatch, or a Perceptual curve of more than 4,096 stops is still written
as an RGB image.
2026-11-09 05:55:04 -08:00
Patrick Nadeau 3befda6e12 M4: limit gradient documentation to PDF behavior 2026-11-09 08:45:23 -05:00
Patrick Nadeau ad7cf2898c M4: keep gradient evidence with October history 2026-11-09 08:45:23 -05:00
Patrick Nadeau 6063e662bc M4: correct PDF gradient progress dates after review 2026-11-09 08:45:23 -05:00
Patrick Nadeau ac674accfd M4: fix PDF gradient placement in transparency groups
Move form transforms into page space so Quartz keeps gradients aligned with their artwork. Add macOS rendering regressions and round-trip coverage for transparency, masks, layers and overprint.

Update the fix for the shared craft-pdf writer and the split exporter modules. Preserve upstream mask, coordinate-limit and layer-box fixes, moving the layer's paper bounds into the form's new space too.

Verified all three Quartz regressions fail on upstream 65adb7b21 and all five gradient-form tests pass with the fix. The new translated-layer regression also fails without moving the layer's paper bounds.

Before the final rebase onto 782f213e4: 463 PDF tests passed (one existing ignored test), workspace fmt, PDF Clippy, wasm, pdf-deps, layers, assets and brands passed. The final rebase reconciles documentation only; the PDF crate is unchanged from that tested revision.

After the final rebase, workspace fmt and Clippy pass. Full cargo xtask ci timed out while compiling workspace tests, so the full test suite and remaining CI stages did not complete. The earlier macOS Clippy blocker has been fixed upstream.
2026-11-09 08:45:23 -05:00
BFlat 1eaf678083 Merge pull request #6158 from thisisgomaa/fix/arabic-mark-colour-ownership
Type: colouring Arabic marks preserves joining and glyph ownership
2026-11-09 20:39:32 +07:00
Taha-Mahmoodi 5d9c16411b Merge remote-tracking branch 'origin/main' into feat/glyph-alternates
# Conflicts:
#	docs/gaps.md
#	docs/target-app-parity.md
#	docs/type-parity.md
2026-11-09 17:48:57 +04:30
Fabio William Conceição 0216bd58c5 G5: document gradient, pattern, opacity and blend on a picked part
The MCP guide and the Eyedropper spec still said those were refused for a Direct Selection of a dynamic symbol part.
2026-11-09 13:12:49 +00:00
Taha-Mahmoodi 1ba9025583 Glyphs: warn for Entire Font glyph choices and fit regression previews 2026-11-09 17:35:08 +04:30
Ahmed Gomaa 5c64c074ca Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 15:02:19 +02:00
Ahmed Gomaa 7d4f8dce27 Merge remote-tracking branch 'upstream/main' into fix/arabic-mark-colour-ownership 2026-11-09 15:02:18 +02:00
Fabio William Conceição 6def1c6b04 Merge remote-tracking branch 'upstream/main' into feat/g5-dynamic-symbol-part-appearance
# Conflicts:
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-09 13:00:35 +00:00
Taha-Mahmoodi 673298e86d Merge remote-tracking branch 'origin/main' into fix/import-document-title
# Conflicts:
#	docs/file-format-parity.md
#	docs/gaps.md
#	docs/target-app-parity.md
2026-11-09 17:29:33 +04:30
Taha-Mahmoodi 645ad40c87 Merge remote-tracking branch 'origin/main' into fix/ruler-double-click-guide 2026-11-09 17:29:20 +04:30
Taha-Mahmoodi 699073d66e Glyphs: accept positional glyph choices and tighten reviewed style values 2026-11-09 17:11:14 +04:30
BFlat 6dac80e75d Merge pull request #6166 from thisisgomaa/codex/snapping-quick-access
Control bar: add glyph and alignment guide toggles to Snapping
2026-11-09 19:38:52 +07:00
BFlat 49853de906 Merge pull request #6303 from Hassan1305/feat-4936-dictionary-followups
Part of #4936: follow-ups to #6296 (read the dictionary file whole; keep other windows' words when a save fails)
2026-11-09 19:19:41 +07:00
Fabio William Conceição 1ff0fd62fc G5: rustfmt dynamic symbol part paint paths 2026-11-09 12:18:55 +00:00
Fabio William Conceição 1e278a3dff G5: dynamic symbol parts take opacity, blend and non-solid paint
Direct Selection of a path, compound path or type inside a dynamic instance now applies transparency and gradient or pattern fills through the usual paint commands, and the G5 docs catch up on Overlap and Pattern auto corners.
2026-11-09 12:14:14 +00:00
Ahmed Gomaa 7fa506c3f8 Merge remote-tracking branch 'upstream/main' into fix/macos-native-cursor-delivery 2026-11-09 14:13:27 +02:00
Ahmed Gomaa e873ae6f87 Merge remote-tracking branch 'upstream/main' into codex/snapping-quick-access 2026-11-09 14:03:54 +02:00