Format File Changes from 2025.1.4744 to 2026.1.4754

Changes to files in Formats/ and Adapters/ between ePublisher 2025.1.4744 and 2026.1.4754. Users who have created project-level overrides for any listed file should review and merge the corresponding changes.

Shared

File

Category

Summary

common/accessibility/images.xsl

common/landmarks/landmarks-core.xsl

Transform

New Landmarks-ComputeLandmarkID template honoring the per-style landmark-id-format option (hashed-16 default, hashed-8, source-id) with cross-document collision warnings; landmark paths no longer prefix anchors with ww

common/links/document_unique.xsl

Transform

Only processes link files for documents present in the target-filtered project, so documents excluded from the target no longer contribute stale link entries

common/links/group.xsl

Transform

Same target-filtered document restriction when merging per-group link files

common/locale/locales.xml

Localization

Added GroupsGridLabel string (Splash page Contents grid heading) across all locales; documented the optional CharacterFolding element for search character equivalence

common/locale/select.xsl

common/pages/popups.xsl

Transform

Progress counter now declares the actual popup count per document, preventing counter overflow when a document contains more than one popup

common/scripts/third-party-js.xsl

Transform

New file — pipeline that copies bundled third-party JavaScript libraries (DOMPurify, markdown-it) from versioned Helpers into output so the AI Assistant has no runtime CDN dependency

common/toc/resolve.xsl

Transform

TOC entries whose paragraph generates no output now inherit the destination of the nearest linkable child entry, fixing unlinkable entries and dead breadcrumbs

markdown/markdown-frames.xsl

Transform

Image title attribute resolved through the shared Images-Title template (tooltip vs. alt-text separation), including the Markdown image-link path

markdown/markdown-output.xsl

Transform

Compresses leading whitespace so content is not mistaken for an indented code block; code-span delimiters sized to exceed the longest interior backtick run, with CommonMark space padding; code-span content emitted raw (no HTML entity escaping); intra-word underscores no longer escaped (snake_case publishes cleanly); blockquote continuation fixed to check only the immediately following paragraph's resolved syntax; code-fence continuation prefix flattened to its string value

markdown/markdown-tables-html2md.xsl

Transform

Note scoping fixed for nesting: only notes whose nearest enclosing table is this table are emitted

reports/links/document.xsl

Transform

New report-links-runtime-anchor severity: runtime hash anchors (#/, #context/, #page/, #search/) are classified at that severity in formats that declare the setting instead of always reporting as unresolved anchors

reverb/url_maps.xsl

Transform

Shell-only targets (Generate Groups disabled) emit the url_maps skeleton without group-derived topic, page, or baggage entries

WebWorks Reverb 2.0

File

Category

Summary

format.wwfmt

Configuration

Adds federated-composition capabilities (generate-empty-project, composition-transform, composition descriptor names); new ThirdPartyScripts pipeline bundling DOMPurify + markdown-it; page-templates stage gains Page/Popup template URI parameters; landmarks generation moved to format-local Transforms/landmarks-json.xsl; new descriptor.xsl stage after url_maps

API/reverb-search.js

Scripting

Baggage-page search highlighter now folds equivalent characters (from the wwr_cf value passed by main search) and expands highlight terms into character classes so either apostrophe form matches

Pages/Connect.asp

Pages/Footer.asp

UI

Removed the data-highlight-require-whitespace attribute from the html element

Pages/Header.asp

UI

Removed the data-highlight-require-whitespace attribute from the html element

Pages/NotFound.asp

UI

Links the new css/custom.css user-override stylesheet

Pages/Page.asp

UI

Links css/custom.css; loads conditional optimized-reader.js; removed data-highlight-require-whitespace attribute

Pages/Parcel.asp

UI

Adds warning comment only — do not pretty-print this template (a self-closed script element silently drops the parcel's topics); no functional markup change

Pages/Popup.asp

UI

Links css/custom.css; removed data-highlight-require-whitespace attribute

Pages/Search.asp

UI

Links css/custom.css; loads idb-cache.js and conditional optimized-reader.js; removed data-highlight-require-whitespace attribute

Pages/Splash.asp

UI

Replaces the static splash image, inline styles, and WebWorks logo/disclaimer table with a splash_groups nav container populated at runtime with group entry-point cards (Contents grid); links css/custom.css; loads conditional optimized-reader.js

Pages/sass/_borders.scss

Styling

New dedicated Assistant nav-button border variables (plus hover/click states); nav buttons unified on divider-on-the-right convention; new Splash groups-grid card border variables

Pages/sass/_colors.scss

Styling

New assistant "powered by" badge colors and the Splash groups-grid card color palette

Pages/sass/_fonts.scss

Styling

New Splash groups-grid card title and member font variables

Pages/sass/_sizes.scss

Styling

New assistant_generate flag; nav-buttons row collapses when fewer than two of index/TOC/assistant are generated; new Splash groups-grid sizing set

Pages/sass/connect.scss

Styling

Menu width driven by the --menu-width custom property for runtime resizing; new resize-handle styles; nav row converted to flex layout shared by assistant/TOC/index; AI Assistant chat restyled as a flat transcript with role labels, avatar-image support, streaming reasoning blocks, and a "powered by" badge

Pages/sass/custom.scss

Styling

New file — user customization layer compiled to css/custom.css and linked last on every page; imports the variable partials and emits no CSS itself, so projects can override it to restyle output

Pages/sass/menu_initial_closed.scss

Styling

Closed-menu offsets switched to calc() on the --menu-width custom property (resizable menu)

Pages/sass/menu_initial_open.scss

Styling

Same --menu-width custom-property conversion for initial-open offsets, page margins, and widths

Pages/sass/skin.scss

Styling

Menu resize handle appearance; Assistant nav button uses its own variables; last nav button drops its right divider; new Splash groups-grid card styling (accent keyline, focus outline, reduced-motion handling); new Assistant chat theming block (role labels, user bubble, avatar, bubble typography)

Pages/sass/webworks.scss

Styling

Responsive layout rules for the Splash groups grid inside the page iframe (narrow/tall single column, narrow padding and gap)

Pages/scripts/assistant.js

Scripting

AI Assistant reworked: single POST chat/stream request with hand-rolled SSE parsing and abortable streaming; structured usage-limit refusals with countdown input lockout; streaming reasoning indicator and throttled render; all rendered markdown/evidence sanitized through bundled DOMPurify; page context capped at 16KB; configurable avatar image with safe-URL validation; anonymous end-user identity tokens; optional "Powered by WebWorks" badge

Pages/scripts/common.js

Scripting

New Diagnostics module logging unexpected caught exceptions with subsystem/parcel context; Message.Listen separates JSON-parse failures from handler throws; new shared own-property-guarded Message.Dispatch; parcel/index post failures now logged instead of swallowed

Pages/scripts/connect.js

Scripting

Parcel failure tolerance (onerror/watchdog so an absent parcel cannot hang the preload spinner; failed deep-links route to not-found); progressive hydration (non-gating hashes defer remaining parcel loads to idle); IndexedDB cache integration with per-parcel search/landmark hash keys; splash Groups Grid data collection and posting; menu Default Tab support; assistant tab hidden on file:// when configured; author-chrome runtime-hash link interception; menu resizer initialization

Pages/scripts/idb-cache.js

Scripting

New file — shared IndexedDB cache for per-parcel search records and the book index, in a per-base-url database; queued pre-open access, unavailability fallback, cross-instance LRU bookkeeping, database pruning, and a ?ww_no_cache=1 dev bypass

Pages/scripts/landmarks.js

Scripting

localStorage write-through caching of landmark chunks per parcel with stale-record sweeping, an origin-wide cache budget with LRU eviction, and quota-error retry; landmark extraction widened beyond 16-hex hashes so hashed-8 and source-id landmarks (including Unicode) resolve; re-entrant-safe load; missing chunks warn instead of erroring

Pages/scripts/menu.js

Scripting

New draggable/keyboard-operable menu width resizer (200-600px clamp, --menu-width custom property, persisted in localStorage, ARIA value attributes, disabled in narrow layout)

Pages/scripts/optimized-reader.js

Pages/scripts/page.js

Scripting

New splash Groups Grid renderer built with DOM APIs and textContent, hrefs validated via Message.IsSafeURL, layout mirroring the connect frame; dispatch switched to shared Message.Dispatch

Pages/scripts/popup.js

Scripting

Dispatch switched to the shared own-property-guarded Message.Dispatch

Pages/scripts/search.js

Scripting

Search character folding (folds stop words, forwards folding spec to baggage highlighter); IndexedDB search-chunk caching with per-parcel cache keys and write-through on network load; absent/corrupt chunk tolerance keeps scope maps aligned and the spinner alive; breadcrumb chunks drained on idle instead of re-walking all anchors; shell-only (zero-parcel) builds still complete the query

Pages/scripts/search-client.js

Scripting

Client search tokenizer folds query words to canonical form (matching the folded build-time index) and expands foldable characters into regex character classes for highlighting

Transforms/baggage-search-index.xsl

Transform

Locale-driven character folding configured into the C# baggage indexer; indexed words, synonyms, and stop words folded to canonical form so baggage indexing matches the content index and client tokenizer

Transforms/breadcrumbs.xsl

Transform

A breadcrumb entry resolving to the page being generated is emitted as plain text instead of a self-referential link

Transforms/compose.xsl

Transform

New file — federated-composition renderer: rebuilds the composed parcels manifest from a merge-settings spec plus harvested per-parcel manifest leaves, so a composition job can splice parcels into a deployed shell's index.html without rebuilding any parcel

Transforms/connect.fti

Configuration

New Generate Groups setting (connect-groups-generate; false builds a content-free shell); AI Assistant settings enabled plus knowledge-base-per-parcel and hide-when-file-local; new menu-default-tab setting (assistant/toc/index); new accessibility group with accessibility-optimized-reader-mode setting

Transforms/connect.xsl

Transform

Per-parcel search/landmark cache hashes emitted as data attributes on parcel manifest anchors (rebuilds only evict changed parcels' caches); shell-only mode emits an empty parcels manifest; MergeSettings fallback synthesizes one merge group per top-level group; optimized-reader page condition and new script replacements (default tab, hide-when-file-local, optimized reader)

Transforms/content.xsl

Transform

Custom-marked footnotes supported (mark rendered instead of a number, no number consumed, link targets the note paragraph); ww prefix removed from generated IDs, aria-controls, and link anchors; nested table/frame note scoping fixed; image title via shared Images-Title template; character-style tag can come from the document style catalog; runtime-link regex extended to match #/ anchors

Transforms/descriptor.xsl

Transform

New file — emits a durable per-parcel deploy descriptor into each group's output (composition metadata, url_maps slice, and a byte-identical parcels-manifest leaf) plus a shell descriptor; the bootstrap contract for federated composition

Transforms/index.xsl

Transform

Index generation gated on Generate Groups, so a shell-only target emits no per-group index

Transforms/knowledge-base-content.xsl

Transform

Knowledge-base anchors computed via Landmarks-ComputeLandmarkID (honors landmark-id-format); nested-table note scoping fix; image title via shared Images-Title template

Transforms/knowledge-base-pages.xsl

Transform

Knowledge Base zip renamed to knowledge-(project)-(generation-hash).zip; new per-parcel mode emits one knowledge zip per top-level group with its own groupID; guards against zero knowledge pages on shell builds

Transforms/landmarks-json.xsl

Transform

New file — format-local landmarks JSON driver whose per-group loop is gated on Generate Groups, so shell-only targets emit no landmark chunks; reuses shared landmarks-core.xsl

Transforms/not-found.xsl

Transform

Companion-PDF linking suppressed when Generate Groups is disabled

Transforms/pages.fti

Configuration

New landmark-id-format paragraph-style option (hashed-16 default, hashed-8, source-id); new report-links-runtime-anchor report setting (default ignore) declaring runtime hash anchors as browser-resolved

Transforms/pages.xsl

Transform

Page generation and companion-PDF link skipped for shell-only builds; page-landmark-id computed via Landmarks-ComputeLandmarkID; last-modified date can be overridden by a date marker; optimized-reader page condition; ww prefix dropped from dropdown IDs; obsolete highlight-require-whitespace replacement removed

Transforms/parcel.xsl

Transform

Parcel generation gated on Generate Groups; parcel TOC data now emitted whenever the splash page is in use (feeds the Contents groups grid); ww prefix removed from generated anchors

Transforms/project-copy.xsl

Transform

Adds Page/Popup page-template inputs to the action checksum and inventories group-level template chrome for zero-document (federated shell) builds

Transforms/sass.xsl

Transform

Adds Pages/sass/custom.scss to the SCSS inventory and action checksum (user override hook); passes an assistant_generate Sass variable from ai-assistant-generate

Transforms/search.xsl

Transform

Emits the locale's character-folding pairs into search.js so the client tokenizer folds like the index; optimized-reader page condition; obsolete highlight-require-whitespace replacement removed

Transforms/search-index.xsl

Transform

Character folding configured into the C# search indexer (words, synonyms, stop words); per-group index and word-pair generation gated on Generate Groups

Transforms/sitemap.xsl

Transform

Group enumeration gated on Generate Groups, suppressing per-group sitemaps and stub-group references in shell-only builds

Transforms/splash.xsl

Transform

New groups-grid-label replacement from the GroupsGridLabel locale string; optimized-reader page condition; companion-PDF linking gated on Generate Groups

Transforms/styles.xsl

Transform

Per-group document CSS generation gated on Generate Groups; character-style CSS also emits span.(class) selectors when the style's tag is not span

Markdown++ Output

File

Category

Summary

Transforms/content.xsl

Transform

Nested-table note scoping fix; image title attribute resolved through the shared Images-Title template (tooltip vs. alt-text separation), including the Markdown image-link path

PDF

File

Category

Summary

Transforms/compile.xsl

Transform

Upgrades Apache FOP 2.8 to 2.11 (wildcard CLASSPATH); a failed FO-to-PDF conversion (non-zero exit or missing PDF) is now reported as a generation error instead of silently succeeding; FOP console output partitioned so INFO noise logs as progress and only warning/error lines log as warnings

Transforms/content.xsl

Transform

Preformatted paragraphs may break across pages (taller-than-page code blocks no longer clipped); nested table/frame note scoping fix; raster images with explicit width/height/content-width/content-height dimensions are scaled by the FO engine at render time, preserving full resolution instead of pixel resampling

Dynamic HTML

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported (mark rendered instead of a number, no number consumed); nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title attribute via shared Images-Title template

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span, so styling applies to both the semantic tag and span fallbacks

Microsoft HTML Help

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported; nested table/frame note scoping fix; character-style tag can come from the document style catalog

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span

Eclipse Help

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported; nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title attribute via shared Images-Title template

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span

Oracle Help

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported; nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title attribute via shared Images-Title template

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span

Sun JavaHelp

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported; nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title attribute via shared Images-Title template

WebWorks Help

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported; nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title attribute via shared Images-Title template

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span

ePUB

File

Category

Summary

Transforms/content.xsl

Transform

Custom-marked footnotes supported; nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title attribute via shared Images-Title template

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span

WebWorks Reverb

File

Category

Summary

API/reverb-search.js

Scripting

Baggage-page search highlighter folds equivalent characters (from the wwr_cf value passed by main search) and expands highlight terms into character classes so either apostrophe form matches

Pages/Page.asp

UI

Removed the data-highlight-require-whitespace attribute from the html element

Pages/Search.asp

UI

Removed the data-highlight-require-whitespace attribute from the html element

Pages/scripts/search.js

Scripting

Search character folding: new folding global set from the locale, stop words folded, and the folding spec forwarded to the baggage highlighter (wwr_cf) via localStorage and query string

Pages/scripts/search-client.js

Scripting

Client search tokenizer folds query words to canonical form (matching the folded build-time index) and expands foldable characters into regex character classes for highlighting

Transforms/baggage-search-index.xsl

Transform

Locale-driven character folding configured into the C# baggage indexer; indexed words, synonyms, and stop words folded to canonical form

Transforms/content.xsl

Transform

Custom-marked footnotes supported (mark rendered instead of a number; reference links target the note's first paragraph); nested table/frame note scoping fix; character-style tag can come from the document style catalog; image title via shared Images-Title template; breadcrumb entry resolving to the current page emitted as text instead of a self-link

Transforms/pages.xsl

Transform

Removed the obsolete highlight-require-whitespace page-template replacement

Transforms/search.xsl

Transform

Emits the locale's character-folding pairs into the client search script; removed the obsolete highlight-require-whitespace replacement

Transforms/search-index.xsl

Transform

Character folding configured into the C# search indexer (words, synonyms, stop words folded to canonical form)

Transforms/styles.xsl

Transform

Character-style CSS also emits span.(class) selectors when the style's tag is not span

Markdown++

File

Category

Summary

helper/markdown/markdown/frontmatter.py

helper/markdown/markdown/includes.py

helper/markdown/markdown/parser.py

helper/markdown/markdown/patterns.py

helper/markdown/markdown/styles.py

Adapter

Default style catalog now declares semantic HTML tags (h1-h6, p, blockquote, pre, strong, em, code, del) with zeroed margins so rendered geometry is tag-independent; title style split into title 1 / title 2 levels; a style name used by more than one element kind drops its tag to avoid invalid nesting

helper/markdown/markdown/variables.py

Parsing

Escaped variable references (backslash before $name;) emit the reference as literal text — never substituted and never added to the project's variable list; code fences, code blocks, and code spans remain untouched

Adobe FrameMaker

File

Category

Summary

FrameMaker/clientlist.xml

Configuration

Registers the FrameMaker 2026 (version 18.0) client DLLs for x64 and x86

Microsoft Word

File

Category

Summary

Support/Word/generate-wif.xsl

Transform

Custom footnote/endnote marks (w:customMarkFollows) are captured and recorded as a mark attribute on the note, letting formats render the author's mark and suppress auto-numbering

DITA

File

Category

Summary

xml/scripts/dita/ant/webworks-1.4.xml

Adapter

Apache FOP invoked via forked CLI instead of the Ant fop task, fixing "No ImagePreloader found" dropping images from PDF/PostScript output

xml/scripts/dita/ant/webworks-1.5.xml

Adapter

Apache FOP invoked via forked CLI instead of the Ant fop task (ImagePreloader fix)

xml/scripts/dita/ant/webworks-1.8.xml

Adapter

Apache FOP invoked via forked CLI instead of the Ant fop task (ImagePreloader fix)

xml/scripts/dita/ant/webworks-2.1.xml

Adapter

Apache FOP invoked via forked CLI instead of the Ant fop task (ImagePreloader fix)

xml/scripts/dita/ant/webworks-3.3.xml

Adapter

Apache FOP invoked via forked CLI instead of the Ant fop task (ImagePreloader fix)

xml/scripts/dita/ant/webworks-3.6.1.xml

Adapter

Apache FOP invoked via forked CLI instead of the Ant fop task (ImagePreloader fix); FOP classpath widened to all build/*.jar files for the FOP 2.11 layout

xml/scripts/dita/ant/webworks-3.7.4.xml

Adapter

Apache FOP invoked via forked CLI (ImagePreloader fix); FOP classpath widened to all build/*.jar files

xml/scripts/dita/ant/webworks-4.0.xml

Adapter

Apache FOP invoked via forked CLI (ImagePreloader fix); FOP classpath widened to all build/*.jar files

xml/scripts/dita/ant/webworks-4.1.xml

Adapter

Apache FOP invoked via forked CLI (ImagePreloader fix); FOP classpath widened to all build/*.jar files

xml/scripts/dita/ant/webworks-4.4.xml

Adapter

New file — Ant build script for DITA-OT 4.4

xml/scripts/dita/ant/xsl/webworks-pdf-prep.xsl

Transform

Synthesizes a minimal DITA map for bare-topic inputs (topics added to a project without a ditamap), so DITA-OT topicmerge no longer produces empty merge output and the pdf2 plug-in no longer aborts

xml/scripts/dita/xsl/batch-files.xsl

Adapter

Adds DITA-OT 4.4 support (new default) with a Java 17-or-later environment check and its own batch-file template using FOP 2.11

xml/scripts/dita/xsl/generate-xml.xsl

Transform

Reads the new dita-use-source-ids adapter setting into the generate pipeline

xml/scripts/dita/xsl/generate-xml/util.xsl

Transform

Generate-ID uses the element's source @id when dita-use-source-ids is enabled, caching per node and deduping duplicate IDs with _2/_3 suffixes and a warning; new Compute-Satellite-ID keeps satellite element IDs collision-proof (colon-suffixed names cannot collide with NCName source IDs)

xml/scripts/dita/xsl/generate-xml/paragraph.xsl

Transform

Topic and section titles inherit their parent's source @id under dita-use-source-ids; markopen/markclose paragraph IDs built via Compute-Satellite-ID

xml/scripts/dita/xsl/generate-xml/content.xsl

Transform

Markopen/markclose paragraph IDs built via Compute-Satellite-ID

xml/scripts/dita/xsl/generate-xml/character.xsl

Transform

Markopen/markclose, trademark, and copyright TextRun IDs built via Compute-Satellite-ID

XML

File

Category

Summary

xml/adapter.fti

Configuration

DITA-OT 4.4 added to the toolkit version list and made the default; new dita-use-source-ids setting (default true) carrying source element IDs into generated output