- Pairs pair inside one paragraph, heading or cell; links' addresses,
images, code and <code>/<kbd> text stay literal.
- Adjacent formulas stay two; a parting space is dropped after parsing.
- Stray and escaped dollars, in or out of a formula, stay dollars.
- A formula's node spans its delimiters; its value is the written TeX.
- A formula wrapped whole draws at its own line's start.
- A failed inline formula shows its reason after the TeX.
Co-Authored-By: Claude <noreply@anthropic.com>
The strip scrolled its chosen tab in once, at its first width; a
panel opening beside it then narrowed it and pushed the tab out
of view (ElyTable on a 30-sheet workbook). The strip now follows
its chosen tab whenever the choice or its width changes, checked
at paint with the width just laid out; a manual scroll stays
until either changes.
Co-Authored-By: Claude <noreply@anthropic.com>
A horizontal strip with more tabs than room clipped the rest out
of reach (ElyTable's sheets, Gitea #8). The strip now scrolls
sideways, the wheel included, and scrolls the chosen tab fully
into view whenever the choice changes; a manual scroll stays
until then. The tabs may shrink below their natural width.
Co-Authored-By: Claude <noreply@anthropic.com>
Without the front matter construct, an open front matter block parsed
as a rule and a setext heading, so its keys drew bright and bold. The
highlighter now parses as the file does.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The field's highlighter gave headings and bold semibold over the drawn
bold, and its plain color hid a sixth-level heading's muted color. It
now uses the drawn weight, and runs inside a sixth-level heading stay
muted. Front matter opens in its mono, muted panel. The open text box
is built by one function, so tests read its background directly.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The open field sits in the closed block's frame at its size, line
height and weight; headings keep their step. Code and math keep their
panel. Typewriter centering also keys on the ends' room, so a block
opened at the same height still centers.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Headings and strong text share one bold weight, so strong text in a
heading no longer draws lighter. A heading's line height is relative
to its own size, and tests check every level's size against the body,
a larger body and a zoomed document.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Bracket and match offsets from the last draw belong to that text's
stamp, so an input-method edit before the next draw no longer splits
a character into font runs. A press past the last glyph's start picks
the nearer of that start and the line end.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sizes follow Typora's steps over the body (2.25, 1.75, 1.5, 1.25, 1, 1)
so levels 3 and 4 stand out; level 6 is muted; line height fits the size.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Carets, selections, presses and the input method box measured the line
as columns times one 'm', so a wide character (CJK, emoji) put the caret
mid-glyph. editor::measure lays out the drawn line; rulers and indent
guides stay on the column grid; whitespace marks hide the rest.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The screen keeps a single line break (Typora's default when writing);
outputs read with Reader::joined, which joins them as GFM does. Heading
titles read on one line.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Panels occlude the rows under them. A submenu without room on the
right opens on the left of its row. A submenu opens after the pointer
rests 150 ms; a row crossed toward an open submenu waits 300 ms.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An emptied bare edge cell writes a pipe so its column stays. The caret
reads the escaped write-back. A right press beside an edited cell keeps
its place. A move that waits on a long read opens once the read lands.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A trailing backslash doubles only before a closing pipe. A write at a
block's start keeps the block, so Tab leaves a first cell without outer
pipes. Padding of the open cell moves its caret to the end, and a right
press there points at the end.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A press inside the open cell stays with its field. Find opens the
cell holding a match. A closing backslash no longer escapes the
next pipe. A right press after typed pipes reads the right byte.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Visual mode opened a pressed table whole, as Markdown source. A press
in a table now opens only that cell, in place, as its source in a
one-line field; the rest of the table stays drawn. Tab and Shift-Tab
walk the cells, Up and Down move a row or leave the table, Enter and
Escape write back in one undo step, and a bare pipe typed in a cell is
escaped on write-back. The table drawing moves to render/table.rs and
presses on a cell's padding name the cell.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
drawn_at aligns each source piece once instead of re-reading the span
for every drawn byte, so a right press near a long paragraph's start
stays linear. A newer press drops an older pending open-block lookup.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The find counts, toggles, replace buttons, the builders' add, join and
direction labels, the filter tests and the password tooltip read the
builtin catalog. Test::label becomes Test::key, the choice's value; its
label is the catalog's. The shipped-copy scan checks button, segment and
match-arm text on every match, and zh-CN render tests cover both.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The open block's target was read at the selection's start and from
the syntax tree only, so a press on the second of two selected links
named the first, and an inline anchor read as its outer link.
point_open now reads the byte under the press and resolves links as
drawing does; delete_image takes that byte.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Select's default placeholder, the clear, close, remove and unpin tooltips,
the completion menu's empty line and the size sample showed English under
zh-CN. A source test now fails on any fixed English literal in them.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A right press in a text field or the code editor keeps a selection it
lands in, else moves the caret. In visual mode a right press in the open
block keeps it open and emits Pointed, read apart from the whole text.
MarkdownDocument::delete_image removes the picture at the caret.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
An edit past an open block wrote it back and dropped its input while
it held focus, so focus fell to the window root and Undo reached
nothing. The next render passes such focus to the document.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Typora's Paragraph > Table > Delete Table. It removes the table as the
block command does and refuses outside a table as TableRefusal::Outside.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A menu or dialog took focus, the open block wrote back and closed, and
the overlay handed focus back to a closed input: its command reached
nothing and the selection was gone. The block now waits for the overlay
to let focus go, and writes back only when focus lands elsewhere.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The editor splits lines on LF only, so End can leave the caret
between CR and LF. The edit runner and table insert now settle the
selection before the CR; the line helpers assert they never see a
split instead of guessing.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The code editor splits lines on LF only, so End and Right can leave the
caret between CR and LF. line_start and line_end now read that spot as
the end of its line, so insert_table keeps CRLF around a new table.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Table rewrites find their prefix and rows by CR, LF and CRLF alike and
write the table's own line ending; insert_table takes the text's. A
cell's width counts a tab as 4 and a control character as 0, as
Typora's wcswidth does.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>