Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,38 @@ follow semantic versioning; release dates are ISO 8601.

### Public API

- **A DOCX export anchors a drawing in a paragraph of the block it belongs to, so it moves with
that block when the text above is edited.**
- A shape stood in the paragraph whose text was nearest it, within 48pt, rising above that
paragraph's top by 24pt at most — in a table cell by a stroke's width —, and otherwise was
placed from the page's edges, where it stayed while the text moved away from it: an icon laid
over a card's corner, a sidebar's portrait, a skill's meter beside its label in a row, a
timeline's dots in a column of their own.
- A drawing a node paints is now anchored in the first paragraph able to carry it that the
nearest block holding it writes on its page — the node itself, a layer stack, a panel, a row,
but not the page's flow —, placed from that paragraph's top however far from its text it
stands. In a table cell, the cell of that paragraph's row holding the drawing across takes it,
its own where it stands in a column of its own; otherwise the paragraph's own cell keeps it,
placed out of its column, unless it holds text — a text box, a badge's letters —, which
LibreOffice 26.8 pulls back into the column. A cell set to the middle or the bottom, or
sitting in one, carries none: the block's next
paragraph able to place it takes the drawing, or else the next block up. A drawing no node
paints — a timeline's rail — and one whose blocks write no such paragraph on its page go to
the paragraph nearest it there. What a table's composed cell draws keeps the nearest-text
rule. The report's note on each drawing says how it is anchored.
- Measured in Word 16.0.20527 and LibreOffice 24.2: a shape anchored in a table cell's
paragraph stands where both say — rising 36pt above its row, hanging below its table, out of
its cell, taller than its row, in an exact row or a nested table, in front of the text or
behind it, and across the fidelity corpus from 155pt above its paragraph to 620pt below —;
neither clips it nor moves a line for it, and both move it with its row when the text above
is edited. LibreOffice 24.2 sets a cell carrying a drawing from its top whatever its vertical
alignment says, 16pt high in a cell set to the middle and 32pt in one set to the bottom.
- Of the 465 drawings the fidelity corpus placed on the page, 270 were drawn by a node, 5 were
timelines' rails and 190 were composed in table cells. All but 14 of the first 275 are now
anchored in a paragraph: the text boxes of `LumaStudio`'s sidebar and closing note, which no
paragraph of their column holds across, and two drawings on pages whose only text is a pair
of lines.

- **A DOCX export writes a painted box holding text in the body as a panel, its text inside its
outline.**
- A shape container shaped as a rectangle or a rounded rectangle, filled or outlined, holding
Expand Down
Binary file modified assets/readme/examples/word-export-companion.docx
Binary file not shown.
4 changes: 2 additions & 2 deletions docs/architecture/backend-capability-matrix.md

Large diffs are not rendered by default.

85 changes: 53 additions & 32 deletions docs/recipes/docx-export.md

Large diffs are not rendered by default.

91 changes: 46 additions & 45 deletions qa/src/test/resources/docx-fidelity/libreoffice-linux-lines.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# rows of invoice-metered_long, invoice-obsidian_long, synthetic-break_in_column, synthetic-break_in_panel, synthetic-card_over_pages: libreoffice build 420(Build:2) on linux
# rows of synthetic-clipped_container, synthetic-narrow_container, synthetic-rounded_card: libreoffice build 420(Build:2) on linux
# rows of synthetic-icon_over_card: libreoffice build 420(Build:2) on linux
# rows of cv-teal_pulse: libreoffice build 420(Build:2) on linux, from CI run 40503780286. Its email line, set in a cell set to the middle, stood +0.08pt while the contact separator was anchored in that cell, LibreOffice 24.2 then setting the cell from its top; the separator now goes elsewhere, as a cell set to the middle carries no drawing, and LibreOffice centres the cell as its neighbours: +0.93pt, Word +1.14pt. Ten other lines stand 0.1 to 0.3pt further, as the same run sets lines of documents the export does not change
cv-blue_banner 0:8f1010120ed6 0.02 1.90 jordanrivera
cv-blue_banner 0:8d7a2cca3060 0.00 0.14 +442055551000|jordan.rivera@exam
cv-blue_banner 0:b944906ed84c -0.20 -0.38 professionalsummary
Expand Down Expand Up @@ -1487,60 +1488,60 @@ cv-slate_orange 0:07ef0ade6bb2 0.05 0.07 •servsafefoodhandlercertificatio
cv-teal_pulse 0:a5800de7a5df -1.87 0.06 isabellamoore
cv-teal_pulse 0:aea71faf1482 -0.38 0.06 registerednurse
cv-teal_pulse 0:613c7b77c405 1.08 0.17 manchester,unitedkingdom
cv-teal_pulse 0:4ddba42ce115 0.08 0.14 isabella.moore@email.com
cv-teal_pulse 0:4ddba42ce115 0.93 0.14 isabella.moore@email.com
cv-teal_pulse 0:a8acc3a90a7b 0.68 0.17 +447700900123
cv-teal_pulse 0:84308bea4540 0.83 0.16 linkedin
cv-teal_pulse 0:32c1cf49a2fe 0.15 0.10 skills
cv-teal_pulse 0:9836c1fde1ab -0.09 0.08 patientassessment
cv-teal_pulse 0:7344802265f6 -0.11 0.08 careplanning
cv-teal_pulse 0:32b1d161b612 -0.13 0.08 medicationadministration
cv-teal_pulse 0:b9fff349f0ab -0.15 0.08 clinicaldocumentation
cv-teal_pulse 0:cc981996b30d -0.16 0.08 infectionprevention
cv-teal_pulse 0:48d90339937f -0.18 0.08 ivtherapy
cv-teal_pulse 0:a392ecf06df5 -0.20 0.08 woundcare
cv-teal_pulse 0:7016cd40c2ef -0.21 0.08 patienteducation
cv-teal_pulse 0:ff0a6cdd9508 -0.23 0.08 safeguarding
cv-teal_pulse 0:7b6511893d61 -0.25 0.08 teamcollaboration
cv-teal_pulse 0:d9ff32cb0736 -0.26 0.08 dischargecoordination
cv-teal_pulse 0:ceb75137b9fb -0.28 0.08 electronichealthrecords
cv-teal_pulse 0:b944906ed84c -0.30 0.08 professionalsummary
cv-teal_pulse 0:f8343b9099ef 0.65 0.06 compassionateregisterednursewith
cv-teal_pulse 0:50347a4f84fc 0.64 0.06 high-qualitypatientcareacrossacu
cv-teal_pulse 0:d24f5be95f6a 0.63 0.06 settings.skilledinpatientassessm
cv-teal_pulse 0:824bf3935437 0.62 0.06 multidisciplinarycollaboration,d
cv-teal_pulse 0:8d526cd52034 0.60 0.06 accurateclinicaldocumentation.kn
cv-teal_pulse 0:4d61455b351b 0.59 0.06 communication,andpatient-centred
cv-teal_pulse 0:c2f296ef30a3 -0.35 0.08 professionalexperience
cv-teal_pulse 0:9836c1fde1ab 0.21 0.08 patientassessment
cv-teal_pulse 0:7344802265f6 0.19 0.08 careplanning
cv-teal_pulse 0:32b1d161b612 0.17 0.08 medicationadministration
cv-teal_pulse 0:b9fff349f0ab 0.15 0.08 clinicaldocumentation
cv-teal_pulse 0:cc981996b30d 0.14 0.08 infectionprevention
cv-teal_pulse 0:48d90339937f 0.12 0.08 ivtherapy
cv-teal_pulse 0:a392ecf06df5 0.10 0.08 woundcare
cv-teal_pulse 0:7016cd40c2ef 0.09 0.08 patienteducation
cv-teal_pulse 0:ff0a6cdd9508 0.07 0.08 safeguarding
cv-teal_pulse 0:7b6511893d61 0.05 0.08 teamcollaboration
cv-teal_pulse 0:d9ff32cb0736 0.04 0.08 dischargecoordination
cv-teal_pulse 0:ceb75137b9fb 0.02 0.08 electronichealthrecords
cv-teal_pulse 0:b944906ed84c 0.25 0.08 professionalsummary
cv-teal_pulse 0:f8343b9099ef 0.15 0.06 compassionateregisterednursewith
cv-teal_pulse 0:50347a4f84fc 0.14 0.06 high-qualitypatientcareacrossacu
cv-teal_pulse 0:d24f5be95f6a 0.13 0.06 settings.skilledinpatientassessm
cv-teal_pulse 0:824bf3935437 0.12 0.06 multidisciplinarycollaboration,d
cv-teal_pulse 0:8d526cd52034 0.10 0.06 accurateclinicaldocumentation.kn
cv-teal_pulse 0:4d61455b351b 0.09 0.06 communication,andpatient-centred
cv-teal_pulse 0:c2f296ef30a3 0.20 0.08 professionalexperience
cv-teal_pulse 0:5cad9261fd60 0.14 0.06 seniorstaffnurse—manchesterroyal
cv-teal_pulse 0:5149e8e5e6b6 -0.08 0.05 deliverdirectnursingcareforadult
cv-teal_pulse 0:8dcc0d173718 -0.08 0.05 coordinatecareplanswithdoctors,t
cv-teal_pulse 0:325626fb2f7a -0.09 0.05 supervisejuniornursesandsupports
cv-teal_pulse 0:c2864de08768 -0.09 0.05 improveddischargecoordinationand
cv-teal_pulse 0:3ac4bbda9488 -0.10 0.05 maintainprecisedocumentationande
cv-teal_pulse 0:5149e8e5e6b6 0.22 0.05 deliverdirectnursingcareforadult
cv-teal_pulse 0:8dcc0d173718 0.22 0.05 coordinatecareplanswithdoctors,t
cv-teal_pulse 0:325626fb2f7a 0.21 0.05 supervisejuniornursesandsupports
cv-teal_pulse 0:c2864de08768 0.21 0.05 improveddischargecoordinationand
cv-teal_pulse 0:3ac4bbda9488 0.20 0.05 maintainprecisedocumentationande
cv-teal_pulse 0:59a7aa760eea 0.13 0.06 staffnurse—salfordgeneralhospita
cv-teal_pulse 0:99bff63b0b23 -0.09 0.05 providednursingcareacrossmedical
cv-teal_pulse 0:dee1c05c380e -0.09 0.05 administeredmedications,monitore
cv-teal_pulse 0:a0cc1403feda -0.10 0.05 supportedinfectioncontrolprocedu
cv-teal_pulse 0:25239222c011 -0.20 0.05 builtstrongrapportwithpatientsan
cv-teal_pulse 0:99bff63b0b23 0.21 0.05 providednursingcareacrossmedical
cv-teal_pulse 0:dee1c05c380e 0.21 0.05 administeredmedications,monitore
cv-teal_pulse 0:a0cc1403feda 0.20 0.05 supportedinfectioncontrolprocedu
cv-teal_pulse 0:25239222c011 0.10 0.05 builtstrongrapportwithpatientsan
cv-teal_pulse 0:f25d4331b19b 0.02 0.06 communitynurse—northcarecommunit
cv-teal_pulse 0:19eefb6b6368 -0.19 0.05 deliveredhome-basednursingcarean
cv-teal_pulse 0:16412b3fd5d8 -0.20 0.05 managedwoundcare,medicationsuppo
cv-teal_pulse 0:fb42708d13d3 -0.20 0.05 workedcloselywithgps,socialservi
cv-teal_pulse 0:68bf0109c6f8 -0.31 0.11 education
cv-teal_pulse 0:19eefb6b6368 0.11 0.05 deliveredhome-basednursingcarean
cv-teal_pulse 0:16412b3fd5d8 0.10 0.05 managedwoundcare,medicationsuppo
cv-teal_pulse 0:fb42708d13d3 0.10 0.05 workedcloselywithgps,socialservi
cv-teal_pulse 0:68bf0109c6f8 0.09 0.11 education
cv-teal_pulse 0:c1596da36d69 0.04 0.10 bsc(hons)adultnursing
cv-teal_pulse 0:47ce0218bbea -0.02 0.10 universityofmanchester
cv-teal_pulse 0:1da060005bfc -0.25 0.10 2013–2016
cv-teal_pulse 0:e831beb04c00 -0.31 0.06 certifications
cv-teal_pulse 0:ec8bd1e014bb -0.24 0.04 nmcregisterednurse
cv-teal_pulse 0:669f27afcccf -0.27 0.04 immediatelifesupport(ils)
cv-teal_pulse 0:34b32be15830 -0.30 0.04 venepunctureandcannulationcertif
cv-teal_pulse 0:32215e12a886 -0.33 0.04 safeguardingadultslevel3
cv-teal_pulse 0:676dfdd56ad2 -0.31 0.08 additionalinformation
cv-teal_pulse 0:47ce0218bbea 0.03 0.10 universityofmanchester
cv-teal_pulse 0:1da060005bfc 0.00 0.10 2013–2016
cv-teal_pulse 0:e831beb04c00 0.09 0.06 certifications
cv-teal_pulse 0:ec8bd1e014bb 0.06 0.04 nmcregisterednurse
cv-teal_pulse 0:669f27afcccf 0.03 0.04 immediatelifesupport(ils)
cv-teal_pulse 0:34b32be15830 0.00 0.04 venepunctureandcannulationcertif
cv-teal_pulse 0:32215e12a886 -0.03 0.04 safeguardingadultslevel3
cv-teal_pulse 0:676dfdd56ad2 0.09 0.08 additionalinformation
cv-teal_pulse 0:bcc890a69aa7 0.06 0.07 languages:english(native),
cv-teal_pulse 0:de15ca9e3d9f 0.03 0.07 polish(conversational)
cv-teal_pulse 0:b035d3696f4e -0.02 0.07 righttowork:unitedkingdom
cv-teal_pulse 0:cfa1d6dd779c -0.17 0.07 availability:1monthnotice
cv-teal_pulse 0:b9b8965717b3 -0.28 1.62 compassionatecare.clinicalexcell
cv-teal_pulse 0:b035d3696f4e 0.03 0.07 righttowork:unitedkingdom
cv-teal_pulse 0:cfa1d6dd779c 0.03 0.07 availability:1monthnotice
cv-teal_pulse 0:b9b8965717b3 0.07 1.62 compassionatecare.clinicalexcell
cv-terracotta_rail 0:920a88ef5818 0.10 0.12 oliver.bennett@email.com
cv-terracotta_rail 0:a8acc3a90a7b 0.10 0.12 +447700900123
cv-terracotta_rail 0:e8c463a6c54d 0.10 0.12 bristol,unitedkingdom
Expand Down
3 changes: 2 additions & 1 deletion qa/src/test/resources/docx-fidelity/libreoffice-linux.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ document engine_pages editor_pages lines matched median p90 over2
# rows of invoice-metered_long, invoice-obsidian_long, synthetic-break_in_column, synthetic-break_in_panel, synthetic-card_over_pages: libreoffice build 420(Build:2) on linux
# rows of synthetic-clipped_container, synthetic-narrow_container, synthetic-rounded_card: libreoffice build 420(Build:2) on linux
# rows of synthetic-icon_over_card: libreoffice build 420(Build:2) on linux
# rows of cv-teal_pulse: libreoffice build 420(Build:2) on linux, from CI run 40503780286. Its email line, set in a cell set to the middle, stood +0.08pt while the contact separator was anchored in that cell, LibreOffice 24.2 then setting the cell from its top; the separator now goes elsewhere, as a cell set to the middle carries no drawing, and LibreOffice centres the cell as its neighbours: +0.93pt, Word +1.14pt. Ten other lines stand 0.1 to 0.3pt further, as the same run sets lines of documents the export does not change
cv-blue_banner 2 2 54 52 0.16 0.25 0
cv-boxed_sections 2 2 58 58 0.06 0.11 0
cv-centered_headline 2 2 58 56 0.12 0.29 0
Expand All @@ -25,7 +26,7 @@ cv-professional_sidebar 1 1 68 64 0.20 0.28 0
cv-serif_headline 1 1 103 103 0.19 0.59 0
cv-sidebar_portrait 1 1 49 49 0.07 0.18 0
cv-slate_orange 1 1 87 86 0.23 0.99 0
cv-teal_pulse 1 1 57 57 0.20 0.63 0
cv-teal_pulse 1 1 57 57 0.12 0.25 0
cv-terracotta_rail 1 1 102 102 0.17 0.52 0
cv-timeline_minimal 2 2 89 87 0.05 0.11 0
cv-violet_grid 1 1 80 78 0.27 0.59 0
Expand Down
Loading
Loading