Commit Graph
622 Commits
Author SHA1 Message Date
aiongg ba3e3d9e7c Convert to Text: paragraph marks drop a cell's section break too
The tab and comma separators already cleared it (#4155).
2026-10-25 03:51:11 +00:00
aiongg c2d2251328 Fields: one unquoted word sets a summary property
SUBJECT Draft sets the subject to Draft, as the field-argument rules
allow a value without quotes when it has no white space (#4217). A
switch alone, as in TITLE \* Upper, still sets nothing.
2026-10-25 03:51:09 +00:00
aiongg 8c035fbb2c Fields: \* ArabicDash formats any number field
It is a general format switch, so NUMPAGES, PAGEREF, SEQ and formulas
read it as PAGE does (#4226).
2026-10-25 03:51:09 +00:00
aiongg 36d7650d3e Convert to Text: drop the unused VMerge import 2026-10-25 02:44:24 +00:00
aiongg 8432e5fbb4 Read Mode catalog: Page Color is live
#4182 was written before view.readPageColor (#4172) landed, so the
progress log listed Page Color as missing. The catalog test checks it
is live.
2026-10-25 02:35:37 +00:00
aiongg 0ce539ca5e Convert to Text cuts the table with Table::split_off
A row content control that the cut crosses reopened below the
converted rows with its w:id, so the saved file had two controls with
the same id. Table::split_off (#4162) clears the id and ends the
vertical merges the same way, so Convert to Text and Split Table
follow one rule. Rows without cells leave an empty paragraph.
2026-10-25 02:35:37 +00:00
aiongg 6f6ff64af1 Merge PR #4205: Track Changes: Accept and Reject can move to the next change or stop tracking
# Conflicts:
#	docs/ui-parity.md
2026-10-25 02:23:07 +00:00
aiongg bc4a69b17d Merge PR #4182: Parity catalog: the checklist counts Read Mode's Column Width, Page Color and Layout
# Conflicts:
#	ROADMAP.md
#	docs/ui-parity.md
2026-10-25 02:23:02 +00:00
aiongg 5c779b3d96 Merge PR #4098: AutoFormat: *bold* and _italic_ become real formatting as you type
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/tools.rs
#	docs/typing-parity.md
2026-10-25 02:22:19 +00:00
aiongg 533686ce26 Merge PR #4139: AutoFormat: border and table lines stay text in a paragraph numbered by its style
# Conflicts:
#	crates/engine/src/cmd/text.rs
2026-10-25 02:21:33 +00:00
aiongg b8dfd9377a Merge PR #4226: Fields: \* DollarText and \* Hex write the result, and PAGE reads \* ArabicDash 2026-10-25 02:21:25 +00:00
aiongg 447254120a Merge PR #4224: Fields: \* Upper, \* Lower, \* Caps and \* FirstCap change the result, and CardText is lowercase
# Conflicts:
#	crates/engine/src/cmd/references.rs
2026-10-25 02:21:25 +00:00
aiongg 29bfb249b5 Merge PR #4217: Fields: SUBJECT, KEYWORDS, COMMENTS, LASTSAVEDBY, REVNUM and NUMCHARS update with the others 2026-10-25 02:21:11 +00:00
aiongg 1b629d1299 Merge PR #4155: Tables: Convert to Text asks for the separator and converts only the selected rows 2026-10-25 02:21:10 +00:00
aiongg 435cf3dbd2 Merge PR #4162: Tables: Split Table fixes the vertical merges and row content controls it splits 2026-10-25 02:21:10 +00:00
dotCooCoo 0dd06b1048 Fields: \* DollarText and \* Hex write the result, and PAGE reads \* ArabicDash
A field or table formula with \* DollarText or \* Hex showed its digits,
and PAGE \* ArabicDash showed the plain page number. \* DollarText now
writes the result in lowercase cardinal text with "and" and the first two
decimals (rounded) over 100, so { = 9.20 + 5.35 \* DollarText \* Upper }
shows FOURTEEN AND 55/100. \* Hex writes uppercase hexadecimal digits
(458 shows 1CA). PAGE \* ArabicDash shows the page number between
hyphens ("- 31 -"); other fields, PAGEREF included, skip it. The
page-number, SEQ, PAGEREF and count fields and table formulas read both
switches. Cardinal, ordinal and dollar text keep the digits of a number
past 999,999. Before, \* CardText showed such a number as "nine hundred
ninety-nine thousand nine hundred ninety-nine" and \* OrdText as "nine
hundred ninety-nine thousand nine hundred ninety-ninth".
2026-10-24 17:57:38 -07:00
dotCooCoo 86ccf6cf3d Fields: only quoted text after a summary field's name replaces the property
SUBJECT Draft left the field showing Draft and set the document's
subject to it. A TITLE, SUBJECT, AUTHOR, KEYWORDS or COMMENTS field now
replaces its property only when quoted text follows the field's name,
and otherwise shows the property as it is.
2026-10-24 17:55:11 -07:00
dotCooCoo 327cc595e4 Restrict Editing: Enter and typing at the start or end of an exception line go inside it
In a document that is read only or open to comments only, an exception
that starts a paragraph puts its start marker at the line start. Home,
Left, Right from the line above and Down into an empty line leave the
caret before that marker, outside the exception, so Enter and typing
there were refused. An editable line right after a protected line could
not be broken or typed into from its start. The same happened at the end
of a line that an exception ends, where End leaves the caret after the
end marker.

Typing now moves a caret right before the start of an exception the
author may edit to just inside it, and one right after its end back
inside it, as Document::typing_pos already does for the markers of a
block-level content control.
2026-10-24 17:20:56 -07:00
dotCooCoo c41251238b Fields: \* Upper, \* Lower, \* Caps and \* FirstCap change the result, and CardText is lowercase
Update Field and the page-number fields ignored the capitalization
switches, so TITLE \* Upper or FILENAME \* Lower showed the text as
stored. A \* CardText or \* OrdText result started with a capital
("Twelve"), where Word shows it in lowercase unless a capitalization
switch follows. A table formula with a \* switch, such as
=SUM(A1:B2) \* CardText or =SUM(ABOVE) \* MERGEFORMAT, was a syntax
error.

The results of the document information fields, DOCPROPERTY,
FILENAME, the dates, REF, PAGEREF, SEQ, STYLEREF and table formulas
now take the field's \* Upper, \* Lower, \* Caps or \* FirstCap switch
when Update Field computes them. PAGE, NUMPAGES, SECTION,
SECTIONPAGES, PAGEREF and STYLEREF take it when they are laid out.
Cardinal and ordinal text is lowercase ("twelve", "seventh") unless
one of the switches follows. WordCraft now reads a table formula's \*
switches separately from the formula. A whole-number result that a \*
number format such as CardText or roman covers is written in that
format; any other result, and any other \* switch, leaves the digits.
Table Layout › Data › Formula keeps the \* switches as typed.
2026-10-24 17:02:51 -07:00
aiongg ef175c6e2f Merge PR #4133: #4085: toggle the last highlight colour with the keyboard shortcut 2026-10-24 22:35:22 +00:00
dotCooCoo eccb2fc230 Fields: SUBJECT, KEYWORDS, COMMENTS, LASTSAVEDBY, REVNUM and NUMCHARS update with the others
Update Field left the SUBJECT, KEYWORDS, COMMENTS, LASTSAVEDBY, REVNUM
and NUMCHARS fields at their stored result, so one inserted in
WordCraft showed nothing, and the Field dialog did not list them.
These fields now update with the others and are listed under Document
Information.

A quoted text after TITLE, SUBJECT, AUTHOR, KEYWORDS or COMMENTS
replaces that property, at most 255 characters, as in Word, and later
fields, DOCPROPERTY included, show the new value. NUMWORDS, NUMCHARS
and REVNUM take a \* number format.
2026-10-24 15:22:57 -07:00
aiongg e23d5eb7f3 Tests: Undo moves past a step whose document is the one showing (#4004) 2026-10-24 21:50:45 +00:00
aiongg 6622e21af6 Tests: no stale layout after a command that changes nothing (#4004); new comments and replies carry their UTC time (#4079) 2026-10-24 21:39:22 +00:00
dotCooCoo c4827112ef AutoFormat: AutoCorrect corrects the first word of a marked span of several words
With *Bold* and _italic_ as real formatting on, the opening mark is not
part of the word AutoCorrect reads, so typing `*teh end* ` gives bold
`The end ` instead of `teh end `. A sentence capital is decided from the
text before the mark.
2026-10-24 14:32:36 -07:00
aiongg 885b1cbd13 Lasso: a recolour or move that changes nothing keeps the lasso selection (#4004) 2026-10-24 21:31:35 +00:00
dotCooCoo f409bd93c9 Track Changes: Accept and Reject can move to the next change or stop tracking
Word's Accept and Reject menus have Accept and Move to Next, Reject and
Move to Next, Accept All Changes and Stop Tracking, and Reject All
Changes and Stop Tracking. WordCraft's menus had only Accept This
Change, Accept All Changes, Reject Change and Reject All Changes.

review.accept and review.reject take "next": after the change at the
caret is resolved, the first change from the caret on is selected,
including one that starts and ends there, such as an empty paragraph's
formatting. Past the last change, the first change in the document is
selected, as Next Change does. With the caret on no change, they select
the next change as before and resolve nothing. review.acceptAll and
review.rejectAll take "stopTracking", which also turns Track Changes
off in the same undo step. The ribbon's Accept and Reject menus list
the four new items. The big Accept and Reject buttons are unchanged.
2026-10-24 14:28:54 -07:00
aiongg e211bff0b9 Tests: the history comparison leaves out the comments' UTC stamp too (#4079) 2026-10-24 21:16:54 +00:00
LQRD 68e5ae2253 #4085: include selected paragraph marks in the highlight decision
Match format_range for whole-cell segments and ordinary targets, including empty
paragraphs. Partial text columns leave their unselected marks out of the check.
Keep the large-run fixture prefix mark blue so it cannot mask the tail regression.

Before the fix, whole-cell and ordinary-mark regressions failed while the other5
highlight controls passed. All7 now pass, including inherited/empty cells,
unselected neighbours, empty-only ranges, partial columns and Undo/Redo.
Full cargo xtask ci passed all8 gates with serial tests. Previous head's CodeRabbit
docstring measurement95.24% exceeds80%; all3 new tests have documentation.
Native Word comparison remains pending. No new interface strings.
2026-10-25 02:16:26 +05:00
aiongg 69137e8469 cargo fmt 2026-10-24 21:06:29 +00:00
aiongg 34ec59fee1 Table of contents: Replace and Remove take the heading paragraph above the field's paragraph with the table (#4039) 2026-10-24 21:05:19 +00:00
aiongg 17804c706f Comment times: a Z on the local date alone is shown as written (older files); WordCraft's comments carry their UTC time; impossible dates and seconds show nothing (#4079) 2026-10-24 21:05:19 +00:00
aiongg 29c48a7eae Tables: cell widths start after a row's skipped grid columns (gridBefore), now that Insert Column syncs them (#4120) 2026-10-24 21:05:19 +00:00
aiongg 1dbbade6fa A command that changes nothing drops what it cached at the revision it touched, since that number comes round again (#4004) 2026-10-24 21:05:19 +00:00
aiongg 54f68cac11 Integration: #4004's restored layout revision gets its own name beside the outline's rev_before (#4014) 2026-10-24 21:05:19 +00:00
aiongg dd8ea27b99 Merge PR #4039: #3889, #3891: Update Table keeps the styles and columns of a localized table of contents 2026-10-24 21:05:19 +00:00
aiongg 8e8d8b4dd2 Merge PR #4172: Read Mode: a Page color menu shows the columns on white, sepia or a dark page 2026-10-24 21:05:18 +00:00
aiongg 0e571c1fc6 Merge PR #4133: #4085: toggle the last highlight colour with the keyboard shortcut 2026-10-24 21:05:13 +00:00
aiongg 6ba3d8d2a7 Merge PR #4123: AutoFormat: Enter twice after a short line makes it a heading 2026-10-24 21:05:05 +00:00
aiongg 540d0b2b34 Merge PR #4101: AutoCorrect: words after a no-break space are corrected 2026-10-24 20:42:03 +00:00
aiongg 5d9d9f5be4 Merge PR #4004: #4001: A command that changes nothing is not an edit 2026-10-24 20:42:01 +00:00
aiongg e62af05110 Merge PR #4171: Picture memory limits for 6 audit issues: one decoder, TIFF strips, styles, Remove Background, Windows paste, render cache 2026-10-24 20:38:55 +00:00
aiongg a4ba4b8f0f Merge PR #4147: Reject '+' sign in print page ranges 2026-10-24 20:38:53 +00:00
aiongg d5c2d88935 Merge PR #4129: AutoFormat: border lines and +---+ tables track the characters they delete 2026-10-24 20:38:52 +00:00
aiongg d0a9dde289 Merge PR #4120: Engine: keep cell widths in step after Insert Column; validate a version restore before saving 2026-10-24 20:38:50 +00:00
aiongg 35f0a7c785 Merge PR #4113: AutoFormat: Tab and Backspace at the start of a line set the paragraph's indents 2026-10-24 20:38:50 +00:00
aiongg 39dee609c1 Merge PR #4112: MCP: type_text with paragraphs is one command, not a snapshot of the document per line (#3973) 2026-10-24 20:38:49 +00:00
aiongg cb88382b10 Merge PR #3998: Resolve note separator revisions in Accept/Reject All 2026-10-24 20:38:42 +00:00
LQRD e499ecc5c3 #4085: integrate main and keep the highlighter choice in previews
Merge upstream9d1067fc, preserving both progress-document histories.
Copy the session highlighter choice into command previews, and verify that the
preview toggles the chosen colour without changing the document or undo history.
Document the shared-registry constructor as well as the public constructor.

Validation: complete integrated cargo xtask ci passed all8 gates, including all4
highlight regressions; RUST_TEST_THREADS=1. Local named-function doc audit16/16.
Native Word comparison pending. No new interface strings in this fix.
2026-10-25 01:35:28 +05:00
dotCooCoo a499d1d675 Parity catalog: the checklist counts Read Mode's Column Width, Page Color and Layout
The feature catalog had a row for View › Read Mode and none for the
items in Read Mode's own View menu, so the parity checklist did not
count them. Column Width maps to view.readColumnWidth, which is live.
Page Color maps to view.readPageColor and Layout to view.readLayout;
neither command exists on main, so both are listed as missing.

docs/parity-checklist.md is regenerated with `cargo xtask parity`:
503 of 520 catalog features have commands (96.7%).
2026-10-24 13:26:56 -07:00
dotCooCoo 07c052f881 Merge main into feat/autoformat-bold-italic 2026-10-24 13:18:49 -07:00