mirror of
https://github.com/storytold/wordcraft.git
synced 2026-11-03 00:40:33 -06:00
* DOCX: VML horizontal rules take their line A web page's <hr> pasted into Word is a VML rule: `v:rect` with `o:hr="t"`, often `width:0`. WordCraft took the width as written and drew a 1 pt dot where Word draws a line across the page. Measured on Word with a synthetic document: a rule with no width and no `o:hrpct` spans the line inside the paragraph's indents; `o:hrpct` is a share of it in tenths of a percent (500 = half); `o:hrpct="0"` keeps the shape's own width; `o:hralign` places a shorter one (left, centre, right); `fillcolor` and `stroked` apply as to any VML shape. WordCraft now matches each case within 0.1 pt. - wordcraft-doc: ShapeExtra::hr (HorizontalRule: share, alignment, Word's standard look). - wordcraft-docx: `o:hr`, `o:hrpct`, `o:hralign`, `o:hrstd` read; a rule is written back as the same VML rule (DrawingML has none), and Word opens the re-saved file with the same lines. - wordcraft-layout: a rule takes its whole line and is drawn at its share; measured for a table column it asks for no width, so it follows its column. (Word draws a rule in a cell at the page's text width, centred on the cell and past its edges; it stays in the cell here.) docs/file-format-parity.md is updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Horizontal rules: only an inline, shown rule is one Review: the rule arm of the writer ignored the shape's placement, so a rule imported with position:absolute or visibility:hidden came back inline and visible. Only a rule in the text and shown is read as a rule now (a pasted <hr> is one); a positioned or hidden one stays a plain shape, which keeps both when saved. The writer checks the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Horizontal rules: a see-through fill is kept; column measuring asks for the right width Review: `write_hr` wrote only the fill's colour, so a rule with `v:fill opacity` came back opaque after a save; the opacity now goes back as `v:fill`. Review: measured for a table column, every rule asked for no width, so one of its own width (`o:hrpct="0"`) could end up clipped by a narrow column; it now asks for its width. AutoFit to contents measures on a line of its own width that the rule took for a real line, so a rule sharing its line made the column as wide as it could go; any measuring width now counts. `Placed::Shape` boxes its extras: with the rule, `Placed` went past clippy's large_enum_variant limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Horizontal rules: placed in what the line has left; rotation and flips kept on save Review: a whole-line rule ignores a first-line indent or a line narrowed by a float. Measured in Word, it does too: the width stays the share of the paragraph's width and the rule runs past the margin, or under a float on its right. What did differ was the placement: Word centres and right-aligns a rule in what the line has left, with a first-line indent moving the end of that room along, and a right-aligned rule beside a float was drawn off the page here. The display now places it that way (`ParaLayout::rule_room`). Review: a save dropped a rule's rotation and flips; they now go back in its style, as Word writes them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: VML horizontal-rule revision row at the top of the history --------- Co-authored-by: Daniele Mori <Dinasty@hotmail.it> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>