-
Notifications
You must be signed in to change notification settings - Fork 1
Comparing changes
Open a pull request
base repository: JSv4/Docxodus
base: v5.3.0
head repository: JSv4/Docxodus
compare: v5.4.0
- 19 commits
- 9 files changed
- 2 contributors
Commits on Dec 21, 2025
-
test(converter): add feature verification tests for resolved gaps
Add comprehensive test suite (FeatureVerificationTests.cs) that verifies all 8 resolved features in the WmlToHtmlConverter gaps document: - @page CSS rule generation (GeneratePageCss setting) - Table DXA width conversion (twips to points) - Borderless table detection (data-borderless attribute) - Theme color resolution (ResolveThemeColors setting) - Document language on <html> element - Foreign text language spans (lang attributes) - Font fallback improvements (serif/sans-serif/monospace) - CJK font-family fallback chains (Japanese, Chinese, Korean) All 15 tests pass, confirming the features work correctly. Also updates gaps document with verification summary table.
Configuration menu - View commit details
-
Copy full SHA for a3faaf5 - Browse repository at this point
Copy the full SHA a3faaf5View commit details -
Merge pull request #88 from JSv4/feature/verify-resolved-gaps
test(converter): add feature verification tests for resolved gaps
Configuration menu - View commit details
-
Copy full SHA for b9df194 - Browse repository at this point
Copy the full SHA b9df194View commit details
Commits on Dec 22, 2025
-
fix(converter): skip footnoteRef/endnoteRef runs to prevent empty spans
When rendering footnotes/endnotes, Word documents contain runs with w:footnoteRef or w:endnoteRef elements that display the note number inside the note text. Since we add note numbers separately (via footnote-number span in paginated mode or <ol> value in non-paginated mode), these runs produced empty styled spans causing whitespace issues. This fix detects runs containing only w:footnoteRef or w:endnoteRef and returns null, preventing the creation of empty spans in the HTML output. - Add check in ConvertRun() to skip footnoteRef/endnoteRef-only runs - Add tests for both paginated and non-paginated footnote rendering
Configuration menu - View commit details
-
Copy full SHA for 4fe7906 - Browse repository at this point
Copy the full SHA 4fe7906View commit details -
feat(converter): align footnote/endnote rendering with LibreOffice
- Remove brackets from footnote/endnote reference numbers ([2] → 2) - Put <sup> inside anchor tag like LibreOffice does - Skip span wrapper for runs containing only footnote/endnote references to prevent whitespace issues from nested elements - Move backref arrow inside last paragraph to prevent line breaks - Skip runs containing only w:footnoteRef/w:endnoteRef placeholders Before: <span class="pt-FootnoteReference"><sup><a>[2]</a></sup></span> After: <a class="footnote-ref"><sup>2</sup></a> LibreOffice: <a class="sdfootnoteanc"><sup>1</sup></a>
Configuration menu - View commit details
-
Copy full SHA for 9aa0d01 - Browse repository at this point
Copy the full SHA 9aa0d01View commit details -
Merge pull request #89 from JSv4/feature/fix-footnote-ref-empty-spans
fix(converter): skip footnoteRef/endnoteRef runs to prevent empty spans
Configuration menu - View commit details
-
Copy full SHA for df13c6f - Browse repository at this point
Copy the full SHA df13c6fView commit details -
Configuration menu - View commit details
-
Copy full SHA for 69cb130 - Browse repository at this point
Copy the full SHA 69cb130View commit details -
Merge pull request #90 from JSv4/feature/footnote-rendering-libreoffi…
…ce-alignment feat(converter): align footnote/endnote rendering with LibreOffice
Configuration menu - View commit details
-
Copy full SHA for c44fc55 - Browse repository at this point
Copy the full SHA c44fc55View commit details
Commits on Dec 23, 2025
-
feat(converter): align whitespace handling with LibreOffice HTML output
- Remove white-space: pre-wrap from default CSS to match LibreOffice behavior - Add ConvertTextWithNbsp() to convert significant whitespace to entities (multiple consecutive spaces, leading/trailing spaces in text runs) - Add NormalizeInlineWhitespace() to remove whitespace text nodes between inline elements in the XElement tree - Add ToHtmlString() helper method for proper HTML serialization that removes formatting whitespace between inline elements while preserving indentation This ensures that HTML formatting (newlines/indentation) doesn't create visible spaces between adjacent spans/anchors in the rendered output, matching how LibreOffice generates HTML from DOCX documents.
Configuration menu - View commit details
-
Copy full SHA for 6905587 - Browse repository at this point
Copy the full SHA 6905587View commit details -
fix: use Unicode non-breaking space for XML compatibility
Use \u00A0 character instead of entity to ensure HTML output can be parsed as valid XML by tests.
Configuration menu - View commit details
-
Copy full SHA for 977f372 - Browse repository at this point
Copy the full SHA 977f372View commit details -
Merge pull request #91 from JSv4/feature/nested-list-styles
feat(converter): align whitespace handling with LibreOffice HTML output
Configuration menu - View commit details
-
Copy full SHA for e448ece - Browse repository at this point
Copy the full SHA e448eceView commit details -
fix(converter): remove default 108% line-height to match LibreOffice …
…output Previously, DefineLineHeight() unconditionally added `line-height: 108%` to all unidirectional paragraphs. This made text appear more compressed than LibreOffice's HTML output, which doesn't set any explicit line-height and lets browsers use their default (~120%). Changes: - Remove the hardcoded 108% line-height default from DefineLineHeight() - Line-height is now only set when explicitly specified via w:lineRule in the document (already handled by CreateStyleFromSpacing) This improves visual alignment with LibreOffice's HTML rendering for paragraph and line spacing.
Configuration menu - View commit details
-
Copy full SHA for 6ec7a79 - Browse repository at this point
Copy the full SHA 6ec7a79View commit details -
Merge pull request #92 from JSv4/feature/remove-default-line-height
fix(converter): remove default 108% line-height to match LibreOffice output
Configuration menu - View commit details
-
Copy full SHA for 73c0ae3 - Browse repository at this point
Copy the full SHA 73c0ae3View commit details -
fix(converter): handle legal numbering continuation pattern
Fix incorrect multi-level list numbering when items continue a flat sequence at different indentation levels. Documents with items like 1., 2., 3. at level 0 followed by item at level 1 (with start=4) now render as "4." instead of "3.4". The fix adds "continuation pattern" detection in ListItemRetriever.cs: - Detects when a deeper-level item continues a flat list sequence (start value equals parent counter + 1) - When detected, uses level 0's format string with current counter - Tracks continuation state per level with inheritance - Resets deeper level tracking when going to shallower levels Also adds: - docs/ooxml_corner_cases.md for documenting OOXML edge cases - CLAUDE.md section on documenting corner cases
Configuration menu - View commit details
-
Copy full SHA for d88aff6 - Browse repository at this point
Copy the full SHA d88aff6View commit details -
fix(converter): use effective level for run/paragraph properties in c…
…ontinuation patterns When a list item is detected as a "continuation pattern" (deeper-level item that continues a flat sequence), the converter now uses level 0's properties for: - Run properties (rPr) - fixes underline appearing incorrectly - Paragraph properties (pPr) - fixes tab stops and indentation Changes: - FormattingAssembler.cs: Use GetEffectiveLevel() in NormalizeListItemsTransform, ParaStyleParaPropsStack, and AnnotateParagraph functions - ListItemRetriever.cs: Made ContinuationInfo class internal for cross-file access - Updated CHANGELOG.md and docs/ooxml_corner_cases.md with fix details
Configuration menu - View commit details
-
Copy full SHA for 4220569 - Browse repository at this point
Copy the full SHA 4220569View commit details -
test(converter): add continuation pattern tests for legal numbering
Added two tests to verify the continuation pattern fix: - HC050_ContinuationPattern_RendersCorrectNumber: Verifies items at ilvl=1 with start=4 render as "4." instead of "3.4" - HC051_ContinuationPattern_UsesLevel0Formatting: Verifies continuation items use level 0's run properties (no underline when level 1 has underline) These tests create programmatic documents with multi-level numbered lists to verify the fix handles the edge case correctly.
Configuration menu - View commit details
-
Copy full SHA for aa48357 - Browse repository at this point
Copy the full SHA aa48357View commit details -
fix(converter): prevent mutation of numbering definition during forma…
…tting Clone numberingParaProps before removing non-indent elements to avoid mutating the original numbering definition. This was causing subsequent list items using the same numbering level to lose their tab definitions, resulting in inconsistent wrapper span widths (0.5in instead of 0.25in). Also updated CalculateSpanWidthTransform to check accumulated properties (pt:pPr) first for indentation and tabs, falling back to direct properties (w:pPr) if not found.
Configuration menu - View commit details
-
Copy full SHA for d2de7d2 - Browse repository at this point
Copy the full SHA d2de7d2View commit details -
Merge pull request #93 from JSv4/feature/fix-legal-numbering-continua…
…tion fix(converter): handle legal numbering continuation pattern
Configuration menu - View commit details
-
Copy full SHA for fa9facd - Browse repository at this point
Copy the full SHA fa9facdView commit details -
fix(converter): use sequential display numbers for footnotes/endnotes
Per ECMA-376, the w:id attribute on footnoteReference/endnoteReference elements is a reference identifier linking to definitions, not the display number. Display numbers should be sequential (1, 2, 3...) based on document order. Previously, we incorrectly used raw XML IDs (e.g., 2, 3, 4...) as display numbers, causing footnotes to be numbered starting from 2 instead of 1. Changes: - Add FootnoteNumberingTracker class to map XML IDs to sequential display numbers based on document order - Update ProcessFootnoteReference/ProcessEndnoteReference to use display numbers instead of XML IDs - Update RenderFootnotesSection/RenderEndnotesSection to order notes by document order and use correct display numbers - Update RenderPaginatedFootnoteRegistry for pagination mode - Update documentation in docs/ooxml_corner_cases.md
Configuration menu - View commit details
-
Copy full SHA for f70ad50 - Browse repository at this point
Copy the full SHA f70ad50View commit details
Commits on Dec 24, 2025
-
Merge pull request #94 from JSv4/feature/fix-footnote-numbering
fix(converter): use sequential display numbers for footnotes/endnotes
Configuration menu - View commit details
-
Copy full SHA for 8942fc3 - Browse repository at this point
Copy the full SHA 8942fc3View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v5.3.0...v5.4.0