Commit Graph
2360 Commits
Author SHA1 Message Date
aiongg 42eaf774e9 Merge PR #1068: Table › Convert Rows › To Header, To Body and To Footer
crates/engine/src/cmd/table.rs: add the PR's three commands before the branch's select commands, which keep their target descriptions (#803).
docs/gaps.md: keep the branch's text; Convert Rows leaves the list of missing menu items.
2026-10-16 04:08:22 +00:00
aiongg 6e4f122b8c Merge PR #1100: Placed greyscale and bitmap images take the swatch applied to them (IDML, screen, PDF)
Graphic literals (cli perf, doc assets/item, engine datamerge/export/file/links/mathexpr/media/table/sample, epub, format, pdf, pptx, render, tools, ui-egui properties, and tests): name the branch's clip and wrap (#561, #381) and the PR's fill.
crates/doc/src/item.rs: Graphic keeps wrap and gains fill.
crates/idml/src/import.rs: read the image swatch, then the branch's styled FrameFittingOption lookup; the graphic keeps its wrap.
crates/idml/src/tests/assets.rs: keep both new tests.
crates/render/src/lib.rs: keep #362's crop-box sizing of placed PDFs and colour the resulting pixmap.
crates/render/tests/colorize.rs, crates/epub/tests/grouped_reading_order.rs, crates/compose/src/tests.rs: literals name the branch's Asset and Graphic fields.
crates/pdf/src/export.rs: the soft mask interpolates by the standard's raster mode (the branch has no per-exporter interpolate switch).
docs/gaps.md, docs/target-app-parity.md: status lines list both sides' changes; gap text keeps the clipping-path items and adds the image swatch.
2026-10-16 04:07:57 +00:00
aiongg 499f5f27c6 Merge PR #1001: Importers: XML element nesting and DTD group nesting are bounded (#712)
crates/engine/src/dtd.rs: keep the branch's version; #319 already bounds DTD group nesting (with the same limit of 64) along with the entity budget and matching fixes, so this PR's DTD part is dropped. The XML element limits are taken.
2026-10-16 04:03:53 +00:00
aiongg 4aeda523b6 Integration: #1027 composite-font scales are checked after the percent conversion 2026-10-16 04:03:45 +00:00
aiongg 910c59f108 Merge PR #1027: idml: one unusable CJK metric no longer refuses the whole file
crates/idml/src/import.rs: keep the branch's strict Mojikumi row reader (#129), which refuses a non-finite value; take the PR's composite-font filters.
crates/idml/src/tests.rs: the PR's test drops its Mojikumi NaN row, which #129 refuses on purpose.
2026-10-16 04:03:35 +00:00
aiongg 20d74af057 Merge PR #1015: fix: IDML links in a subfolder beside the package load on another machine 2026-10-16 04:03:06 +00:00
aiongg 174ff23f17 Merge PR #1010: IDML: preserve liquid guides on document and parent pages
crates/idml/src/lib.rs: crate doc keeps the branch's feather list and adds liquid guides.
crates/idml/src/tests.rs: keep all test modules from both sides.
docs/file-format-parity.md: keep both change-log rows; status line names both changes.
ROADMAP.md: drop the blank line the union merge left inside the progress log, and a stray one further down.
2026-10-16 04:03:02 +00:00
aiongg 3ea3cd97dd Merge PR #1054: Keep text of inline content controls in DOCX import
crates/textimport/src/docx.rs: keep the branch's page_break_ends_its_paragraph test (already present further down); add the PR's inline content control test.
2026-10-16 04:02:18 +00:00
aiongg 8c36382780 Merge PR #1038: Fix \rightarrow closing a \left fence early in math expressions 2026-10-16 04:02:02 +00:00
aiongg bcb082b12b Merge PR #986: Flatten deleted text variables in table cells and notes 2026-10-16 04:01:17 +00:00
aiongg e921288953 Merge next-integ (winit from main's fork) 2026-10-16 04:01:05 +00:00
aiongg 5639ba8203 Integration: winit from main's fork, with the macOS Dock Quit opt-in
The merge took next's winit patch (rust-windowing/winit#4694, the Windows mixed-DPI drag fix) and
left out main's (skylartaylor/winit 3d51077f, with_close_requested_on_terminate), so Quit from the
Dock stopped asking to save (#623, released in 0.8.0). Cargo takes one winit patch, so the batch
keeps main's until one fork holds both commits; the Windows fix (#631) follows then.
2026-10-16 03:57:21 +00:00
aiongg 2f017d0826 Merge upstream main a7f3239cf (#1103, #1101) into next
Cargo.lock: next's lock plus main's same-file dependency (regenerated by cargo).
2026-10-16 03:52:20 +00:00
aiongg a7f3239cfb Merge pull request #1103 from skylartaylor/codex/windows-installer-latest-20261014-01
feat(installer): unify Windows setup and completion screens
2026-10-15 23:51:07 -04:00
aiongg 1061c44763 Integration: #325 New Document: mobile presets don't turn on the primary text frame
Primary Text Frame autoflow is still an open gap, and file.new {preset} goes through the same
builder. The TABS doc comment goes back onto TABS; the de and ja rows of the removed
"No saved presets yet" text go.
2026-10-16 03:48:21 +00:00
aiongg a59edb861a Merge PR #325 (new head c96d3e1fa): New Document window
Next keeps its tree (the PR's earlier commits, with #683's Preview on top) plus the PR's two new commits, 3d91e6460 (a tab selects its first preset; Saved starts with [Default]) and c96d3e1fa (the eight-unit Units list; mobile presets turn on the primary text frame).
crates/engine/src/cmd/file.rs, crates/ui-egui/src/dialogs.rs, crates/ui-egui/src/lib.rs: keep next's side (Preview, new_document::create).
crates/ui-egui/src/new_document.rs: next's side plus the two new commits.
crates/ui-egui/src/i18n.rs, i18n/it.rs: next's rows minus the removed "No saved presets yet" text.
docs/target-app-parity.md: keep next's New Document line (with Preview).
ROADMAP.md: the New Document line was already there; keep one.
2026-10-16 03:48:01 +00:00
aiongg b8d3bd57c9 Merge PR #469 (new head 12a41f69d): Document Setup
The PR's commits are next's merged ones rebased onto main; next keeps its tree.
crates/engine/src/cmd/layout.rs: keep c99dbd7d (margins vs parent pages) and next's chapter numbering and tests.
crates/ui-egui/src/dialogs.rs: keep next's side.
crates/ui-egui/src/i18n.rs, i18n/it.rs: keep next's rows; the PR's Document Setup rows are already there.
docs/target-app-parity.md: keep next's side; the Gradients line is already there.
ROADMAP.md: the Document Setup line was already there; keep one.
2026-10-16 03:47:14 +00:00
aiongg f3c65416e3 Merge PR #580 (new head eb4e811b5): portable mode
The PR's commits are next's merged ones rebased onto main; next keeps its tree.
apps/designcraft/src/main.rs: keep next's startup block (status_line, catch_unwind app creator); portable_note set after load_prefs.
README.md: keep next's Portable mode section, then Graphics backend and processor.
2026-10-16 03:47:00 +00:00
aiongg d4e4b9ad13 Merge PR #591 (new head 183feade3): double-click a handle to fit the frame
crates/engine/src/cmd/object.rs: next's side with 069fe47b's auto-size guard, plus the PR's object.fit locked-objects note and the bottom-on-the-last-baseline fit; the reapplied fit_text_frame_tests module dropped, its baseline assertion added to next's copy.
crates/tools/src/select.rs, crates/tools/src/tests.rs: keep next's side.
crates/ui-egui/src/canvas.rs: drop the reapplied duplicate of the handle double-click test.
ROADMAP.md: next's line with the locked-objects note; no second copy.
2026-10-16 03:46:49 +00:00
aiongg 03f3b21f95 Merge PR #342 (new head 0d89d8699): Numbering & Section Options, chapter numbering
The PR's commits are next's merged ones rebased onto main; next keeps its tree.
crates/doc/src/lib.rs: keep next's saturating page_number and MAX_PAGE_NUMBER in page.rs.
crates/engine/src/cmd/layout.rs: keep next's start_number() check, section_start_numbers_are_bounded and Document Setup's refusal.
crates/engine/src/cmd/mod.rs: keep next's side.
crates/ui-egui/src/dialogs.rs: keep next's popup Enter/Escape guard (4e5e040a7).
crates/ui-egui/src/i18n.rs, i18n/it.rs: keep next's rows; the PR's are already there.
docs/target-app-parity.md: the Numbering & Section Options line was already there; keep one.
2026-10-16 03:45:57 +00:00
aiongg 1d35fc92de Merge PR #466 (new head dba8774a1): font menu laid out like the reference
The PR's commits are next's merged ones rebased onto main; next keeps its tree.
ROADMAP.md: the font menu line was already there; keep one.
crates/ui-egui/src/i18n.rs: keep next's New Document rows next to the font menu rows.
crates/ui-egui/src/lib.rs: keep next's UiState fields (recent documents, preview) with the font sample ones.
crates/ui-egui/src/panels/mod.rs: keep next's swatch_picker return value.
docs/ui-parity.md: keep next's IME row.
2026-10-16 03:45:39 +00:00
aiongg faa882503a Merge PR #315 (new head c314ec31d): font fallback retry
crates/fonts/src/tests_sysfonts.rs: the postscript-name test sat at two positions; keep next's.
2026-10-16 03:45:22 +00:00
aiongg c9d8c859ad Merge PR #388 (new head 16e3469f7): rebased onto main; content already in next 2026-10-16 03:45:11 +00:00
aiongg a65bbeacb7 Merge PR #525 (new head a14acea3a): rebased onto main; content already in next 2026-10-16 03:45:11 +00:00
aiongg 344bc4f1e6 Merge PR #618 (new head bfe7ba75b): rebased onto main; content already in next 2026-10-16 03:45:10 +00:00
aiongg c50444926b Merge PR #550 (new head e9d3effe6): rebased onto main; content already in next 2026-10-16 03:45:10 +00:00
aiongg 21c481bf1f Merge PR #255 (new head da7a457c9): rebased onto main; content already in next 2026-10-16 03:45:10 +00:00
aiongg 0cb8baa02c Merge PR #341 (new head a6814bc61): rebased onto main; content already in next 2026-10-16 03:45:10 +00:00
aiongg a9bf4573b2 Integration: cargo fmt 2026-10-16 03:42:21 +00:00
aiongg c119c809e1 Integration: MCP tool schemas list every key their tools forward
The server refuses arguments a tool's schema doesn't list (#803), so keys a
tool passes on must be in its schema. new_document lacked intent, units,
startPage, slug and primaryTextFrame (and bleed's edge array); ui_set lacked
status, documentGrid, controlBar, closePanel and dockExpanded; drag lacked
button and ctrl, and click and drag forwarded each other's keys. A test checks
forwarded keys against the schemas, file.new's params and ui.set's handler.
2026-10-16 03:40:17 +00:00
aiongg 27d7cc87bd Integration: --pdf-options null means no options
main (#731) and next fixed the same panic separately; main reads null as no
options and tests that the export succeeds, next's test listed null among the
errors. The CLI keeps main's reading.
2026-10-16 03:37:53 +00:00
aiongg f419fa2a7a Integration: exported ruler guides are measured from the exported ruler origin
next writes the document's ruler origin (Spread, Page or Spine) to IDML; main
measured guide locations from the spread's left edge, as for SpreadOrigin only.
A page-origin document's guides came back one page width to the right. The
round-trip test covers all three origins.
2026-10-16 03:37:26 +00:00
aiongg 02a0023edc Integration: next's file reads go through the checked readers
main's file guard requires reads to pass the automation roots. Loading styles
from a path, the recent-files check and sniffing a dropped file without an
extension read with std::fs directly; they use the engine's io module.
2026-10-16 03:34:57 +00:00
aiongg 67401dae97 Integration: MCP roots test expects file.save to add the document extension
next's file.save names the file with the .designcraft extension; main's test
looked for the path as given.
2026-10-16 03:33:48 +00:00
aiongg 13d64351fc Integration: book roots test calls paginate and syncStyles without params
next refuses unknown parameters; main's test passed an unused `path` to
commands that take none. Their write-root refusal comes from the chapters.
2026-10-16 03:33:09 +00:00
aiongg ba260c8e39 Integration: duplicateSpread's params doc parses as parameters
next's params parser splits on commas; main's wording put a comma inside the
`to` description. next's wording has none.
2026-10-16 03:32:38 +00:00
aiongg 1caf53f40b Integration: keep-lines IDML tests expect the split main's frame gives
The merge took main's 236 pt test frame (19 lines whatever the last line's
descent) with next's 7/3 expectations, which belong to next's 240 pt frame.
With main's frame the paragraph splits 6/4, as main's tests said.
2026-10-16 03:32:00 +00:00
aiongg fa3d13ae5a Integration: a failed script rolls back instead of leaving an undo step
main rolls a half-run script back (#709); next's #406 test expected the
successful prefix to stay as an undo step. Both keep a partial edit from being
stranded; the script keeps main's rollback, and the test checks that. The
generic partial-failure undo step stays covered by the fillWithPlaceholder test.
2026-10-16 03:31:05 +00:00
aiongg 0209b6781b Integration: .indd and .indt files open through the converter
next converts InDesign files (#808); main's #21 check refused them by extension
before the converter ran. The check goes, and a converter error carries #21's
advice to export IDML.
2026-10-16 03:30:00 +00:00
aiongg a546e371c8 Integration: find.find and find.next accept find.change's keys
The Find/Change dialog and main's find-scope tests send one parameter set
(with change, first, attrs) to Find, Find Next and Change. next's strict
parameter check refused those keys on find.find and find.next, so Find
failed in the dialog. The two commands now name the keys as ignored.
2026-10-16 03:28:53 +00:00
aiongg b1421d53e4 Integration: slices give every endnote and editorial marker a payload
next's extract fills missing payloads with empty notes so the slice is a valid
story; main's test expected the slice to hold only the payloads the source had.
The pasted result is the same either way.
2026-10-16 03:28:14 +00:00
aiongg af086dc145 Integration: the Gradient panel and Swatch Options send CMYK in model form
Main reads bare CMYK as 0..100 (#910), so the fractions both UIs sent turned M 100 % into M 1 %. The {model: cmyk} form takes fractions.
2026-10-16 03:25:55 +00:00
aiongg f7e6ba8f1a Integration: the Text Wrap panel test expects next's Wrap To row after the offsets
Next added Wrap To / Contour Type to the panel on purpose; main's test listed only the offsets.
2026-10-16 03:25:54 +00:00
aiongg ad33df4dbe Integration: Georgian rows for next's menu labels (Open Recent, Clear Recent Files, Transparency…, Strokes and Fills…, Show/Hide Document Grid)
Main's Georgian catalog predates these menu items from next; its menu test requires every label translated.
2026-10-16 03:25:54 +00:00
skylar taylor-barrick 9673682cc2 Merge pull request #1101 from dylanmtaylor/ci/craft-common-actions
ci: add nix check workflow
2026-10-15 21:25:05 -06:00
aiongg 0e30ad50d0 Integration: cargo fmt 2026-10-16 03:11:53 +00:00
aiongg 1a6ee2ca70 Integration: compile fixes after merging main a184db6f8
- compose: a test frame literal named section_marker twice.
- export: PPTX rasterizing keeps a wrap stand-in for each rasterized object (next's rasterize_where takes keep_wrap).
- flex: to_bytes returns a Result on main.
- package, combined_close_glyph test: load_document_fonts takes an access check.
- pptx test: Graphic literal gains next's clip and wrap fields.
- render placed_pdf test: PdfCrop imported twice.
2026-10-16 03:11:36 +00:00
aiongg 18ae8e4761 Merge upstream main a184db6f8 with our 15 PRs (batch-0) into next
Conflicts resolved per file (both sides kept unless noted):
crates/engine/src/atomic.rs | 1 | main's: `write_file` removed (main routes command writes through `crate::io::write_file`); its one caller in file.rs now uses `crate::io::write_file`
crates/engine/src/cmd/datamerge/fill.rs | 1 | next's `Graphic` literal (has `clip` and `wrap`, which next's `Graphic` carries)
crates/engine/src/cmd/datamerge/mod.rs | 1 | main's `read_path_capped` (crate::io metadata/read_capped, roots checked); next's capped read is the same behaviour
crates/engine/src/cmd/datamerge/parse.rs | 1 | main's (`crate::io::metadata`, `crate::io::Metadata`)
crates/engine/src/cmd/edit.rs | 1 | next's `spread_param(p, "edit.paste")` (the second argument is the command id on both sides)
crates/engine/src/cmd/export.rs | 3 | main's: EPUB params doc, `toc_title` once (main's position; next's duplicate dropped)
crates/engine/src/cmd/file.rs | 7 | place doc: next's (lists page/rect/autoflow params #803 checks); next's recent-file functions + main's `foreign_document`; next's open (load_bytes, warnings, non-DesignCraft refusal) with main's checked `crate::io::read_file` for the bytes; main's `check_write` be
crates/engine/src/cmd/find.rs | 7 | main's Find scope (FindContext, scope/selection/story, continuation, UTF-8 repair) on next's `designcraft_compose::grep::Grep` (dialect GREP): find uses `find_all` capped at MAX_MATCHES, change uses `replacements`/`find_all` (literal change text not expanded), fin
crates/engine/src/cmd/fonts.rs | 1 | next's (`has_style`, resolved/replacement face); `has_style` already compares styles ignoring spacing and case, which is main's `same_style` fix; main's test kept
crates/engine/src/cmd/interchange.rs | 1 | next's `import_idml_report_with_previews` (previews for unreadable links)
crates/engine/src/cmd/layout.rs | 8 | pages.insert: main's overflow-safe `after` + next's checked `parent_ref`; main's duplicateSpread doc; layout.section: next's `SectionEdit` (already keeps unnamed settings, #717) with main's `d.repaginate()` moved into `SectionEdit::apply` (remove and set paths),
crates/engine/src/cmd/links.rs | 5 | next's links.list (no doc clone); main's `text_status` via crate::io; `use std::io::Read` dropped (unused after main's read_capped); test literals main's. `link_missing` (next) uses `crate::io::exists` for the file-guard scan
crates/engine/src/cmd/object.rs | 4 | object.fill/stroke tint-alone: main's (23e1680e7; out-of-range tint is an error, which main's test asserts); object.fit doc: next's (lists `axis`)
crates/engine/src/cmd/paths.rs | 1 | next's (shatai transform on outlines)
crates/engine/src/cmd/place_text.rs | 1 | next's `add_flow_frame` (used by autoflow)
crates/engine/src/cmd/preflight.rs | 2 | next's overset/unplacedStory issue (its `overset_location` already applies the parent transform main's #738 fix adds); next's two test modules kept with main's
crates/engine/src/cmd/scripts.rs | 1 | combined: next's `in_undo_step = false` (#406) + main's full rollback of a failed script (#709)
crates/engine/src/cmd/style.rs | 14 | param docs next's (gradient swatch.create, swatch stops, model colours); create_para next's; rename_style main's structure (rename entry, then `redirect_style_refs`), redirect has next's full reference set (cells, defaults, notes, TOC) + main's never-based-on-it
crates/engine/src/cmd/text.rs | 10 | main's selectSentence/Paragraph/Story + select_around; next's selectionAttrs (mixed) + main's openTypeFeatures/type.feature; main's comments; tracked typing: next's `reserve_command_text` + main's `insert_format_at`; empty-paragraph mark formatting main's (with `
crates/engine/src/cmd/thread.rs | 1 | next's `spread_param(p, "text.thread")`
crates/engine/src/dtd.rs | 1 | next's linear, depth-bounded `expand_parameter_entities` with main's budget (input + 1 MiB, `MAX_EXPANDED_BYTES`) and message ("expand the DTD beyond"); 16 MiB constant removed; both sides' tests pass on message
crates/engine/src/guard.rs | 2 | main's whole-transaction snapshot (docs, active, journal; #742) + next's `in_undo_step` restore; tests both
crates/engine/src/lib.rs | 5 | LoadedGraphic doc next's; next's `new_document_preview`; execute: main's `discard_stale_find_scope()` before next's nested-undo run; modules both (tests_autosize, tests_file_guard, tests_params, tests_roots)
crates/engine/src/recovery.rs | 1 | next's test (superset of main's assertion)
crates/engine/src/tests.rs | 4 | moved tests deduplicated (identical on both sides); next's preflight and direct-selection/kerning tests + main's style-delete, locked-frame and baseline-fit tests
crates/engine/src/tests_idml.rs | 3 | main's order (drop cap and margins tests identical on both sides, once each)
crates/ui-egui/src/canvas.rs | 3 | next's screen_options/DisplayKey block and tests kept; two tests that auto-merge had added twice (parent_guides_on_a_page_are_not_picked_there, baseline_grid_lines_are_the_ones_on_the_page) kept once; main's `typing`/`screen_at`/`click` helpers and its tests clicks
crates/ui-egui/src/control.rs | 3 | main's `count` check and pending budget (control queue + synthetic queue); exact-budget test runs both sides' cases (click 255 on 9,492 pending; drag 9492×255)
crates/ui-egui/src/cursors.rs | 1 | main's (same Pen cursor set)
crates/ui-egui/src/dialogs.rs | 14 | dialog body (newDocument … alert match) is next's text, with main's Find/Change scope reset (`set_field`, `reset_find_scope`, `find_change_params`) and main's Create Guides / Margins and Columns arms ported in; `Dialog::new` ruby section (next) + main's `set_fi
crates/ui-egui/src/i18n.rs | 7 | ka and pl modules, languages, statics and lookups both; `category_first` covers uk, ru, pl, ka and `count_label` keeps next's Czech plurals; shared TABLE union; next's duplicate rows for Auto, Number:, Gutter:, Top:, Bottom:, Inside:, Outside:, Left:, Right: dropped
crates/ui-egui/src/i18n/ar.rs | 2 | union of rows, no duplicate keys
crates/ui-egui/src/i18n/it.rs | 1 | union of rows, no duplicate keys
crates/ui-egui/src/i18n/ja.rs | 1 | union of rows, no duplicate keys
crates/ui-egui/src/i18n/pt_br.rs | 1 | union of rows, no duplicate keys
crates/ui-egui/src/i18n/uk.rs | 1 | union of rows, no duplicate keys
crates/ui-egui/src/icons.rs | 2 | both tests (main's typography icon, next's distribute icons)
crates/ui-egui/src/lib.rs | 11 | UiState: next's tabs_panel + main's last_color/last_gradient; `cursors` field once; next's SVG paste and paste-on-spread-in-view; next's extensionless document open; opens_as_document next's comment; tests both (next's control bar / key-name tests, main's rich black
crates/ui-egui/src/menus.rs | 15 | app.language doc next's text with pl and ka; UI_COMMANDS both (next's Tabs, Toggle Presentation, Apply None text; main's panel commands, Apply Color, Apply Gradient); Edit › Interface Language stays out (next moved it to Preferences); Type menu main's order with
crates/ui-egui/src/panels/glyphs.rs | 1 | next's (already has main's scroll-bar fix); the scroll-bar test module auto-merge had added twice kept once
crates/ui-egui/src/panels/layers.rs | 3 | next's drag-and-drop `object_rows`, with main's features ported into it: selection reveal (layer opens, row scrolls into view once), selected rows highlighted (also a group whose member is selected), double-click rename in place (`object.rename` queued like
crates/ui-egui/src/panels/mod.rs | 6 | tabs + typography modules and color_panel_tests; SelInfo has wrap_side/wrap_contour and wrap_offsets (offsets from the graphic's own wrap when it is selected); next's swatch_picker returning the chip response; next's content_selection_tests
crates/ui-egui/src/panels/pages.rs | 1 | next's (parents dragged by id)
crates/ui-egui/src/panels/properties.rs | 4 | next's swatch popup (Apply To, Tint); main's four wrap offsets then next's Wrap To / Contour Type; test fixtures main's (`..Default::default()`, no unused builder)
crates/ui-egui/src/panels/swatches.rs | 3 | main's Delete Swatch button + next's New Swatch comment; next's draggable rows; click: main's PICKED + fill/stroke in front, with next's no-apply on double-click
crates/ui-egui/src/toolbar.rs | 2 | main's Apply Color / Gradient / None wells and functions; next's apply_none doc line
crates/compose/src/lib.rs | 5 | next's line loop kept (mark_leading + last_line_mark, wrap segments/carry, grid gyoudori); main's mark-chars base_leading block (auto-merged) stays beside it. `fits`: next's #106 rule (baseline fit for horizontal frames, full descent for paths, vertical text, footnote
crates/compose/src/tests.rs | 5 | next's tests (tombstone set, sliver/one-sided/contour/clipping wrap tests, borders, lists, kenten, grid, anchored wrap, balance, shaped frames) plus main's an_empty_last_paragraph_isnt_overset; main's wrap_object_beside_one_narrow_column_leaves_the_other_alone re-ad
crates/doc/src/assets.rs | 1 | main's doc comment (same meaning)
crates/doc/src/build.rs | 3 | parent_page_for: next's parent_page_for_side (RTL-aware); single_sided_page_shows_first_parent_page test kept once, at main's position
crates/doc/src/item.rs | 1 | next's rotated_group_bounds_follow_the_children_outlines test kept
crates/doc/src/lib.rs | 1 | next's kerning_increment field kept; main's "Bulleted & Numbered" wording
crates/doc/src/page.rs | 1 | next's outer_page_indices + parent_page_for_side (integration of parent-margins with rtl-master-sides); main's parent_page_index dropped, its only caller (build.rs) uses parent_page_for_side
crates/doc/src/slice.rs | 5 | extract: next's `marked()` (get-based, fix_notes/fix_endnotes/fix_marks; main's version indexed slices and could panic); insert_story: main's take() limit on endnote/editorial payload copies with next's id comment, redundant `let ne`/`let nn` dropped; main's excess_note
crates/geom/src/corners.rs | 1 | next's box_outline_rounds_only_closed_corners test kept
crates/render/src/damage.rs | 1 | next's wrapping-anchored-object damage test kept
crates/render/src/fx.rs | 2 | feather: next's choke/corners sigma+join inside main's structure (body and clip at device resolution, with_filters(.., None)); inner glow centre: next's blend `mix` with main's clip argument (bp, xf)
crates/render/src/lib.rs | 3 | next's layer comment; next's front baseline grid draw after items; gradient match on g.kind (main's tuple scrutinee did not match the single-pattern arms)
crates/render/src/text.rs | 5 | paint_glyphs: main's paint_stroke closure structure with next's stroke overprint (overprinting helper, stroke `(TextPaint, bool)`); callers pass next's overprint_fill/overprint_stroke
crates/render/tests/placed_pdf.rs | 1 | main's `near` helper version
crates/tools/src/lib.rs | 1 | main's (PenConvert already declared below, avoids a duplicate variant)
crates/tools/src/pen.rs | 1 | main's module doc
crates/tools/src/select.rs | 1 | next's Drag::Corner variant (live corners) kept
crates/tools/src/tests.rs | 4 | next's tests (content drag, live corners, table border drag, eyedropper matchFrom, fitting handles, pen cursors once); eyedropper_ignores_inactive keeps next's samples_image check (main's exact-JSON compare lacks matchFrom) with main's `..Default::default()` Asset lit
crates/tools/src/text.rs | 2 | next's table border drag (BorderDrag, border_at) kept, then main's comment on locked text frames
crates/tools/src/xform.rs | 2 | main's explicit `Vec<&Item>` for shown children; next's eyedropper matchFrom (integration 796e9d713)
Cargo.toml | 2 | main's craft-pdf workspace dep added (craft-print stays once, in next's craft-libs block); [patch.crates-io] keeps next's winit (rust-windowing #4694 backport) and adds main's krilla patch; main's skylartaylor winit left out (see UNSURE 1)
Cargo.lock | 1 | union: next's craft-atomic and craft-cms entries plus main's craft-pdf entry; needs `cargo` normalisation
README.md | 1 | Open bullet combines INDD import via indd-utils (next) and editable PowerPoint export (main); main's paragraph break kept
contributors/people.toml | 1 | both people kept (switch87 from next, Nmarello from main)
apps/designcraft-cli/src/main.rs | 4 | next's `Export` enum dispatch kept; main's .pptx export added as `Export::Pptx` (run prints slides and warnings, script runs file.exportPptx); main's `--pdf-options` null-as-{} parse; usage lines list .pptx
apps/designcraft/src/main.rs | 3 | `startup.leave()` right after `app.ui` (main #380) and next's macOS `sync_movable` kept after the IME discard; next's Apple Events install kept; main's macOS Dock Quit `with_close_requested_on_terminate` block left out (needs the skylartaylor winit; UNSURE 1)
crates/fonts/src/fontdb.rs | 9 | FONT6 aliases (next) combined with #911 WWS names (main): ScannedFace and both CatalogEntry constructors carry `wws` and `aliases`; `canonical_family` falls back to WWS family names; `exact_style_traits` canonicalises then tries typographic, then WWS names (`named_st
crates/format/src/lib.rs | 1 | tests: both sides kept (next's r7a nullable-default tests; main's oversized ZIP entry/asset/entry-count tests)
crates/idml/src/import.rs | 11 | main's bounded `Package` reader under next's `import_idml_report_with_previews` (metadata read through `pkg.part`); next's `tab_list_repaired` kept; ruler origin: next's `settings.ruler_origin`, and main's guide import reads it (main's private `RulerOrigin` enum and
crates/idml/src/tests.rs | 6 | item-level union: all next tests plus main's new ones (ruler guides, package limits, CJK leading model, liquid page rules module, mojikumi); no test dropped
crates/mcp/src/backend.rs | 1 | test comment merged from both
crates/pdf/src/tests.rs | 1 | tests: both sides kept
crates/pdf/src/text.rs | 4 | next's (skew `tan`, cluster `start`, ruby overprint warning); main had no change here beyond base
crates/textimport/src/docx.rs | 5 | next's (ListCounter integration for list levels, page-break test position); main's side was the older form of the same code
crates/epub/src/lib.rs | 30 | non-test code is next's (StoryWriter holds img_src/images/no_alt/heading_ids; covers main's #787/#791/#782 fixes, plus #314 group transforms, anchored images in images_without_alt, endnote story skipped in the TOC); tests: next's set plus main's extra css_weight_style a
docs/control-protocol.md | 2 | next's rows (ui.paste, count 1–255, documentGrid) and wording
docs/file-format-parity.md | 1 | rows combined (next's ICC notes, main's TIFF indexed colour)
docs/gaps.md | 2 | status change notes unioned; Flex Layout removed from missing (main implemented it), next's Parent Options sentence kept
docs/localization-parity.md | 4 | Polish and Georgian rows; 5 languages beyond the twelve; file list includes cs and ka; both history rows
docs/roadmap.md | 1 | M1 next's (#186 fixed on next), M2 main's IME wording
docs/target-app-parity.md | 6 | next's status line; File formats row next's, UI/UX row main's (IME no longer failing); UI line next's plus main's Swatches detail; one Page tool line (main's fuller one); Load styles and main's fuller Pathfinder line both kept, main's duplicate short Pathfinder line r
docs/ui-parity.md | 1 | IME row main's, Font menu row next's

i18n/fr.rs: five rows dropped that main's shared table now has (Row, Open Path, Flex Layout, Current Page Number, Rulers).
2026-10-16 03:09:22 +00:00
aiongg 3b6a5f35cb Merge PR #487: Pen: a click does what the cursor shows over an open path's end point 2026-10-16 02:51:57 +00:00
aiongg bfe6172dff Merge PR #380: Startup: pick the GPU that drives the display, fall back across adapters and backends, and log startup errors
Conflict in apps/designcraft/src/main.rs (with #366): keep both, self.startup.leave() then the macOS IME discard.
2026-10-16 02:51:57 +00:00