This document tracks per-field compliance objectives for DocxportNet. Use it as a living checklist while iterating field-by-field. Mark items as done only when we have tests that demonstrate the behavior in a Word document (or a minimal synthetic document that mirrors Word output).
Legend:
- Not done
- Done
- [~] Partial / in progress
- End-to-end test in a Word document (or synthetic OpenXML body) that matches expected output.
- Cached result handling (cache mode) covered by test when applicable.
- CHARFORMAT and MERGEFORMAT behavior covered where relevant.
- Nested-field behavior covered where relevant.
- Regression test present (explicitly tracked).
Status: feature-complete
- Structured branch replay (runs + formatting).
- Nested field evaluation inside expressions.
- Wildcards and numeric/string comparisons.
- Error propagation in comparisons (uses nested field text).
- Regression test present.
Status: feature-complete
- Sets bookmark value; emits no output.
- Nested-field value for SET.
- Cache mode suppresses SET output.
- Regression test present.
Status: feature-complete (review multi-run bookmarks)
- Resolves bookmark value.
- REF switches: \d \f \h \n \p \r \t \w (via resolver).
- CHARFORMAT/MERGEFORMAT for rendered output.
- Multi-run/structured bookmark replay.
- Regression test present.
Status: feature-complete (edge-case hardening optional)
- Resolver path (delegate / value resolver).
- Error text when missing.
- CHARFORMAT/MERGEFORMAT for rendered output.
- Regression test present.
Status: feature-complete
- Uses NowProvider for DATE/TIME.
- Uses document properties for CREATEDATE/SAVEDATE/PRINTDATE (with fallback).
- @ formatting coverage.
- Regression test present.
Status: feature-complete (custom props optional)
- Built-in core properties resolve.
- Custom properties resolve (includeCustomProperties = true).
- * formatting coverage.
- Regression test present.
Status: feature-complete (mail-merge semantics implemented)
- \b and \f behavior when result is non-blank.
- \m alias mapping.
- \v vertical rendering.
- General format switches (*, #, @) applied.
- Mail-merge record semantics (record cursor + NEXT/NEXTIF/SKIPIF integration).
- Regression test present.
Status: partial
- Increment behavior.
- \c repeat.
- \r reset.
- \s heading level reset.
- \h hide (and interaction with *).
- General format switches (*, #).
- Regression test present.
Status: feature-complete
- Returns 1/0 and applies formatting.
- Nested field evaluation.
- Regression test present.
Status: partial (delegate-backed)
- Delegate prompt + default.
- \o behavior (only-once semantics vs true merge behavior).
- No output emitted.
- Regression test present.
Status: feature-complete
- Evaluates comparison correctly.
- Suppresses output.
- Record skipping / control-flow integration (merge cursor).
- Regression test present.
Status: partial
- Core operators and comparisons.
- Supported functions (current registry).
- Table range resolution (A1, ABOVE/LEFT/RIGHT/BELOW) with TableResolver.
- Error handling parity with Word (not yet implemented).
- Additional Word functions (not yet implemented).
- Regression test present.
Status: feature-complete
- Advances merge record cursor unconditionally.
- No output emitted.
- Regression test present.
Status: feature-complete
- MERGEREC returns current record number from data source.
- MERGESEQ returns sequence number of merged records.
- Regression test present.
Status: not tracked
- Resolves from document stats.
- Compute on the fly when stats missing.
- Formatting switches apply where relevant.
- Regression test present.
Status: out of scope (requires pagination/layout engine)
- Resolves page number for bookmark (PAGEREF).
- Resolves note reference mark for bookmark (NOTEREF).
- Regression test present.
Status: partial (locale-aware providers; simple templates)
- Provider-based macro resolution (locale-aware registry).
- Uses merge cursor values.
- Regression test present.
- [~] Locale-specific templates (may differ from Word labels; documented intentional divergence).
Status: partial (locale-aware providers; simple templates)
- Provider-based macro resolution (locale-aware registry).
- Uses merge cursor values.
- Regression test present.
- [~] Locale-specific templates (may differ from Word labels; documented intentional divergence).
Status: partial (pluggable provider; basic TSV rendering)
- Pluggable database provider interface (optional external providers).
- Default provider (e.g., SqlClient / T-SQL).
- Optional providers (ODBC, PostgreSQL, MySQL).
- External data query support (document-level or provider-driven).
- Mapping to output rows/records.
- Configurable rendering (table/HTML/Markdown).
- Regression test present.
Status: not tracked
- External content resolution (file/URL).
- Security/sandbox policy for external loads.
- Regression test present.
Status: out of scope (requires indexing + layout engine). Note: Full support needs a two-pass indexer (collect entries first, render later) plus pagination to compute page numbers. A possible interim “TOC-lite” would link to headings/bookmarks without page numbers.
- TOC aggregation and rendering (with page numbers).
- TC entry capture for TOC.
- INDEX aggregation and rendering (with page numbers).
- XE entry capture for index.
- RD external document inclusion.
- Optional TOC-lite (hyperlinks only, no page numbers).
- Regression test present.
Status: partial
- Word-style error strings for REF/DOCVARIABLE/DOCPROPERTY missing values.
- Formula error strings for divide-by-zero and syntax/unknown functions.
- Word-style error strings for other field types (e.g., SEQ, MERGEFIELD, ASK).
- [~] Nested field error propagation behavior (known divergence: missing REF inside IF).
- [~] Regression tests for error strings across all fields.