Commit Graph
62 Commits
Author SHA1 Message Date
Steffen Becker db0fe71cdb feat: a table keeps the cell margins its file gave it
The cell padding was a constant in three places that disagreed with each
other, so a narrow column lost 0.38cm it did not have: a bibliography
marker column of 0.71cm wrapped "[2] " onto three lines and every entry
grew with it, costing a fixture a whole page.

The table now carries its own margins (w:tblCellMar, direct or from the
table style; fo:padding on the ODF cell style) and both exports write
them back. A side within a twentieth of a millimetre of the default is
the default, or Word's 108 twips would tag every table.
2026-08-08 12:18:16 +00:00
Steffen Becker 5549d625f7 feat: the index reads like the one a word processor generates
Its leader is real dots now, not a border, so it scales with the font and
reaches the PDF as text. Title and entries follow the document's Heading 1
and default style, which is what the index styles of Word and LO are based on.
2026-08-08 09:33:25 +00:00
Steffen Becker c82a78cc6a feat: character spacing, and a line box that multiplies its two halves
Word's Title style tightens by -0.5pt, so a title came out ~3mm wide of
LibreOffice's. letterSpacingPt joins TextProps and rides both formats
(w:spacing, fo:letter-spacing).

Line spacing needed the same care: it is proportional to the font's natural
line height, so the factor and that height are now separate CSS variables and
editor.css multiplies them in one place. Before, whichever of the two was
declared nearer simply overwrote the other — a block carrying its own font
silently dropped the style's spacing.
2026-08-08 08:30:05 +00:00
Steffen Becker c34fb4312a fix: drop the trailing-break line after an inline atom
A paragraph holding an image rendered a line taller than it does anywhere
else: under white-space: pre-wrap the browser already shows the last line, so
ProseMirror's hack BR adds an empty one. The hack is kept where it earns its
keep — after a real break it carries the caret onto the empty line, and in an
empty block it is the only line box there is.
2026-08-08 08:30:04 +00:00
Steffen Becker 943a885754 feat: carry the item's formatting into its list marker
The marker took only the weight of the item's first text portion. It now takes
the family, slant, size and color too — as custom properties on every item,
since they inherit and a nested item must not take its parent's.

A named paragraph style reaches it a second way: the marker inherits the list
item's own font, and the document stylesheet only styled the item's paragraph,
so an imported document whose Standard style is Arial drew its numbers in the
editor's serif default. styleCss now emits the style's text half for the item
too (li:has(> …)).

Both file formats carry marker formatting per level, so a level definition is
written only for a list whose items agree: ODF mints a character style the level
points at, DOCX the level's w:rPr. A mixed list gets none on purpose, so
LibreOffice keeps applying its own first-portion rule.
2026-08-07 20:26:44 +00:00
Steffen Becker 0b54f6cc44 feat: render a list marker bold when the item starts bold
A bold mark sits inside the item's paragraph and never reaches ::marker, so the
roman numerals of a numbered heading stayed light while their text was bold.
A plugin tags such items and editor.css weights the marker. The trigger is the
first text portion, which is the rule LibreOffice numbering itself uses.
2026-08-07 17:41:09 +00:00
Steffen Becker 7c09727cda docs: remove word as placeholder for general text editor 2026-08-07 18:08:20 +02:00
Steffen Becker 7d4a0b256e fix: indent list levels by the step both exporters write
Lists were padded 1.5rem per level on screen while the DOCX and ODT
exports place item text at LIST_LEFT_STEP_CM (1.27cm) per level, so the
editor disagreed with its own output and with Word and LibreOffice by
6.4mm on the first level, doubling with each nesting level.
2026-08-06 20:01:23 +00:00
Steffen Becker 275a77564e fix: use Word's asymmetric cell padding for tables
Cells padded 0.1cm on all sides; Word and LibreOffice use 0.19cm left and
right and none top or bottom. Text sat 0.7mm too far left and every row
was 2mm too tall, so the offset accumulated down a table.

odf-kit only writes the fo:padding shorthand, which ODF defines as a
single length — LibreOffice drops a two-value form — so the export
expands it per side.
2026-08-06 19:26:56 +00:00
Steffen Becker 6c256c6533 fix: add pre-wrap for line-end space 2026-08-06 20:46:17 +02:00
Steffen Becker ca4fbd422b feat: table margin edge resize 2026-07-31 17:46:26 +02:00
Steffen Becker ac9d6cdcff feat: named paragraph styles with inheritance 2026-07-28 23:53:00 +02:00
Steffen Becker d461ce09a6 fix: align styles and headings to libreoffice 2026-07-28 22:45:24 +02:00
Steffen Becker 56f884a412 feat: dropdown for text styles 2026-07-27 20:35:55 +02:00
Steffen Becker f1ba14c948 feat: add paragraph frames and background 2026-07-19 16:34:23 +02:00
Steffen Becker cf665e25a0 fix: stop formatting marks from moving text 2026-07-17 07:51:58 +02:00
Steffen Becker 6535d4c58d fix: page breaks, empty lines, ... 2026-07-15 22:19:49 +02:00
Steffen Becker 0526579f2b fix: text field frame 2026-07-10 16:25:20 +02:00
Steffen Becker de283adab5 feat: introduce columns 2026-07-08 19:17:16 +00:00
Steffen Becker e44f09ef42 feat: proper ordered list cycling 2026-07-05 11:51:07 +02:00
Steffen Becker b20ea051ad style: introduce island toolbar 2026-07-04 23:19:01 +02:00
Steffen Becker d018092cce feat: improve ordered list 2026-07-04 21:45:05 +02:00
Steffen Becker 3b7e7606bb feat: bullet symbols 2026-07-04 17:14:54 +02:00
Steffen Becker 0aa9399f93 feat: textbox and shapes 2026-07-03 22:53:38 +02:00
Steffen Becker a5bb2deaa2 feat: table of content 2026-07-01 21:17:44 +02:00
Steffen Becker 418f152d4b feat: header row toggle 2026-06-28 12:23:41 +02:00
Steffen Becker 3b299809e1 feat: search and replace 2026-06-28 00:05:37 +02:00
Steffen Becker 98e7ee2458 feat: add hyperlinks 2026-06-27 19:55:56 +02:00
Steffen Becker 20706c80cb feat: image image text wrapping 2026-06-24 21:49:59 +02:00
Steffen Becker f79be768f9 feat: add image width height adaption and rotation 2026-06-24 21:49:59 +02:00
Steffen Becker 64ae976ecf feat: insert images 2026-06-21 12:14:10 +02:00
Steffen Becker 8e8b93bccf fix: list indent buttons 2026-06-21 11:16:59 +02:00
Steffen Becker 0a35a65c83 feat: add spell-check 2026-06-18 23:34:45 +02:00
Steffen Becker 69cb74c824 feat: different types of ordered list 2026-06-10 23:42:08 +02:00
Steffen Becker c641dda4e0 feat: switch from css zoom (rerunning layout at every scale) to pure view transform (more stable) 2026-06-09 10:18:39 +02:00
Steffen Becker bb281c60c1 feat: move table row bars by mouse 2026-06-08 20:35:57 +02:00
Steffen Becker dafca8de2b feat: move table column bars by mouse 2026-06-07 16:42:16 +02:00
Steffen Becker d5aa63cd77 fix: page gap of between tables 2026-06-07 14:12:21 +02:00
Steffen Becker 3f3db893ba fix: table page break 2026-06-06 20:32:23 +02:00
Steffen Becker 631e6aa5e9 feat: add table toolbar 2026-06-06 16:09:48 +02:00
Steffen Becker e2f522854f feat: tables 2026-06-06 12:22:45 +02:00
Steffen Becker 61400d1eed feat: page orientation 2026-06-04 14:05:14 +02:00
Steffen Becker 2088423b59 feat: page margin setting 2026-06-03 18:10:45 +02:00
Steffen Becker d297b0b272 fix: adjust format to match libreoffice/word 2026-06-02 23:02:22 +02:00
Steffen Becker 91a37c5652 fix: heading line space 2026-05-31 15:42:42 +02:00
Steffen Becker 8d4adf27fd fix: color inconsistency 2026-05-30 00:39:46 +02:00
Steffen Becker 3d8366c73f feat: add font color 2026-05-29 10:41:12 +02:00
Steffen Becker a2e1a6ffe9 fix: adjust dark theme to true color and use turquoise-grey 2026-05-29 10:24:11 +02:00
Steffen Becker e03b1d04ec feat: introduce formatting marks 2026-05-28 17:39:34 +02:00
Steffen Becker ae81b93662 style: no additional space between list points 2026-05-27 20:10:21 +02:00