Skip to content

vscode-v2.11.0

Latest

Choose a tag to compare

@superdoc-bot superdoc-bot released this 06 Jun 00:00

What's New

Fonts API for custom registration and per-document mapping

  • superdoc.fonts.add({ family, weight, style }, url) registers custom fonts and awaits them before layout
  • superdoc.fonts.map({ 'Calibri': 'Carlito', ... }) maps logical families per editor β€” custom substitutes override bundled defaults
  • superdoc.fonts.preload(['Georgia', ...]) loads families before measurement
  • superdoc.fonts.getReport(), getMissingFonts(), getDocumentFonts() surface font diagnostics
  • Font changes emit fonts-changed events with load status and resolution reasons

Bundled font substitutes for common Word families

  • Calibri, Cambria, Arial, Times New Roman, Courier New load metric-compatible open substitutes (Carlito, Liberation Sans, Liberation Serif, Liberation Mono) β€” no configuration required
  • Helvetica aliases to bundled Liberation Sans
  • All substitutes load before measurement β€” rendering is deterministic, no late-load reflow

Structural tracked changes for tables

  • Import whole-table insert/delete as single tracked-change item (not per-row)
  • Render visually β€” inserted tables green, deleted tables struck-through with red rows
  • Cell text inside tracked table subsumed into structural change β€” one review bubble, one decision
  • Accept cascades: accepting inserted table accepts contained cell text; rejecting removes whole table
  • Right-rail bubble labels "Added table" / "Deleted table"

PAGEREF field resolution to live target page numbers

  • Resolve PAGEREF instructions to display number, format (numeric picture, general format), and relative position (\p β†’ "on page N", "above", "below")
  • Preserve instruction tokens and CHARFORMAT properties for export round-trip
  • Render in document body with live re-resolution on pagination change

SEQ sequence field support

  • Import and export SEQ field instructions with numbering, restart, and hidden-field state
  • Resolve in layout using shared evaluator: counter tracking, heading-level serials, explicit restart precedence
  • Field discovery reads resolvedNumber; export emits current evaluated results
  • Preserve raw instructions for lossless round-trip

NUMPAGES field formatting with numeric pictures and ordinal

  • Parse \# "0" (numeric picture) and \* Ordinal format switches on insert and import
  • Format total page count as "1", "I", "1st" per field switch
  • Applied to both inserted and refreshed fields
  • Preserve instructions on import for export parity

PAGE field formatting with numeric pictures

  • Parse \# "0" (numeric pictures) and \* general-format switches (Arabic, Roman, Alphabetic, ArabicDash)
  • Format page numbers per field β€” "1", "i", "A", "1-" β€” independent of section numbering format
  • Preserve instructions on import; export round-trips back to same field code

SECTIONPAGES field support

  • Resolve SECTIONPAGES field to section-aware page count with section-level numbering awareness

Document background

  • Import and render document-level background image positioned behind all body content

Nested content controls

  • Import nested block SDTs (SDT inside paragraph) and nested inline SDTs (SDT inside run)
  • Preserve structure through export

Templates can be applied to documents

  • doc.template.apply(templateDoc) applies formatting, styles, and structure from template to active document

Author colors for tracked changes

  • Per-author tracked change highlights in track-changes UI

Improvements

Multi-column sections now render with explicit per-column widths and gaps

  • Authored column widths preserved β€” no scaling to fit content area
  • Per-column gaps (w:col/@w:space) drive separator positions, not uniform section gap
  • Footnote assignment and positioning use per-column geometry
  • Column hit-testing honors per-column boundaries, not uniform stride
  • Separators position at resolved geometry

Footnote pagination matches Word's behavior

  • Ordered-cluster rule β€” first N-1 anchors on a page render fully, only Nth may split across pages
  • Body paginator reserves minStart (first-line height) for each new anchor, allowing tight packing
  • Continuation pages reserve only remaining space after cluster obligation
  • One-line widows absorbed by bumping reserve when eliminates a split
  • Footnote numbering honors per-section w:footnotePr/@numFmt, @numStart, and eachSect restart
  • Custom-mark footnotes (customMarkFollows) no longer consume an ordinal
  • Marker is plain superscript with space gap before body text

Tracked change rendering

  • Inserted table rows paint green, deleted rows paint struck-through red
  • Right-rail bubble for structural table changes
  • Inline changes inside tracked table suppressed (structural bubble only)

Table border and shading fidelity

  • Collapsed shared edges resolve per ECMA-376 Β§17.4.66 β€” greater weight wins, style precedence breaks ties
  • Explicit nil borders suppress dividers (both adjacent cells nil = no line)
  • Cell shading β€” pct/auto patterns resolve to Word-matching blend colors
  • Row-level tblPrEx borders merged and rendered once per edge
  • Rowspan continuation rows no longer double interior lines
  • Keep-next paragraphs before tables reserve only first row height (table splits normally)

Header/footer refs inherit across multiple sections

  • Walk back to nearest prior section defining first/even/default variant (not just immediately prior)
  • first and even no longer fall back to default per OOXML Β§17.10.1
  • Preserve section fallback refs in section resolver

Field-annotation pills resolve fonts per document

  • Pills measure and paint through document's font resolver
  • Custom substitutes and bundled clones apply to field content
  • Underline rendering matches adjacent text

Anchored tables reposition with per-wrap padding

  • Apply correct offset based on wrap value (square, tight, through)

Underlined tabs render flush with text underline

  • Tab underline anchor aligns to line-box top and ends at baseline offset
  • Measured ascent/descent from tab font drives line height
  • One merged overlay for text and tab underlines, consistent weight throughout

Fixes

  • Image resize in suggesting mode no longer duplicates (uses AttrStep, preserves track-changes state)
  • Tracked deletion coalescing in suggesting mode β€” adjacent Backspace batches into single change
  • Multi-column sections with explicit equal widths now balance correctly (only skip genuinely-unequal widths)
  • Per-column w:space honored for unequal columns per ECMA-376 Β§17.6.4
  • Hit-testing resolves mid-page column region β€” column boundaries correct when section breaks change columns mid-page
  • Explicit column layout idempotence β€” per-column gaps preserved through resolveColumnLayout
  • Table hit-testing uses region column count, not page-start count
  • Cell border conflict resolution respects explicit nil borders on both sides of shared edges
  • Rowspan continuation rows include spanning cells in measure, preventing doubled interior lines
  • Nested tracked-change decisions resolve structural changes on shared revision ids
  • Nested content controls import and export without data loss
  • Empty text runs skip flow accounting, preventing phantom spaces and height inflation
  • Field keyword dispatch case-insensitive (lowercase PAGE/NUMPAGES now work in headers/footers)
  • SEQ field result caching preserves lowercase seq fields and cached numbers nested inside runs
  • Continuation separators and dividers correctly sized per ECMA-376 (standard β‰ˆ 0.5Γ— width, continuation β‰ˆ full width)
  • Font embedding policy gated on embedding check; malformed embeds skip instead of aborting
  • Provider precedence: registered real face > bundled substitute > as-requested
  • Quoted primary family normalized through resolution, collapsing distinct signatures
  • Header/footer display numbers for odd/even parity respect per-section numbering restarts and offsets
  • Section inheritance walks back across all prior sections, not just immediately preceding
  • Legacy header/footer refs preserved through adapter, not exposed through resolution
  • Page field format switches case-insensitive and preserve internal whitespace in quoted numeric pictures
  • TOC updates followed by F9 preserve SEQ position shifts
  • Comment resolution on whole-thread level with batch processing (dangling comments after resolve fixed)
  • Nested replacement tracked-change decisions handle replacement boundaries correctly