OfficeTalkEngine — .NET Library

.NET 9 execution engine for OfficeTalk documents. Resolves addresses, validates semantics, and applies deterministic operations to Microsoft Office documents via the OpenXML SDK.

Quick Start

Parse and Execute

using OfficeTalk.Parsing;
using OfficeTalkEngine.Execution;

var source = """
    OFFICETALK/1.0 Word
    AT paragraph[1]
        SET "Hello, World!"
    """;

// Parse the OfficeTalk source
var parser = new OfficeTalkParser();
var document = parser.Parse(source);

// Execute against a Word document
var executor = new WordExecutor();
executor.Execute(document, "template.docx", "output.docx");

Semantic Validation

using OfficeTalk.Parsing;
using OfficeTalkEngine.Validation;

var parser = new OfficeTalkParser();
var document = parser.Parse(source);

var validator = new SemanticValidator();
var result = validator.Validate(document, "template.docx");

if (!result.IsValid)
{
    foreach (var error in result.Errors)
        Console.WriteLine($"Error: {error}");
}

Address Resolution

using DocumentFormat.OpenXml.Packaging;
using OfficeTalk.Ast;
using OfficeTalkEngine.Addressing;

using var doc = WordprocessingDocument.Open("document.docx", false);
var resolver = new WordAddressResolver(doc);

var address = new Address
{
    Segments = { new AddressSegment { Identifier = "heading", Predicates = { new KeyValuePredicate { Key = "level", Operator = PredicateOperator.Equals, Value = "1" } } } }
};

var elements = resolver.Resolve(address);

Architecture

OfficeTalkEngine implements a three-phase execution pipeline:

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   1. Resolve     │────▶│   2. Validate    │────▶│   3. Execute    │
│                  │     │                  │     │                 │
│ Address segments │     │ Addresses exist? │     │ Snapshot all    │
│ matched against  │     │ Styles valid?    │     │ resolutions,    │
│ document tree    │     │ Search text      │     │ then apply ops  │
│                  │     │ present?         │     │ deterministically│
└─────────────────┘     └──────────────────┘     └─────────────────┘

Phase 1: Address Resolution

IAddressResolver implementations navigate document structure segment by segment, applying predicates (positional, text match, level) to locate target elements.

Phase 2: Semantic Validation

SemanticValidator checks that all addresses resolve, REPLACE search strings exist in target content, and STYLE references map to actual document styles.

Phase 3: Execution

IOfficeTalkExecutor implementations apply operations with snapshot semantics — all addresses are resolved before any mutations occur, ensuring deterministic results.

Project Structure

dotnet/
├── OfficeTalkEngine.slnx
├── src/
│   └── OfficeTalkEngine/
│       ├── Addressing/          # Address resolution against documents
│       │   ├── IAddressResolver.cs
│       │   └── WordAddressResolver.cs
│       ├── Execution/           # Operation execution
│       │   ├── IOfficeTalkExecutor.cs
│       │   ├── WordExecutor.cs        # OpenXML SDK executor
│       │   └── WordComExecutor.cs     # Word COM Interop executor (live editing)
│       └── Validation/          # Semantic validation
│           └── SemanticValidator.cs
└── tests/
    ├── OfficeTalkEngine.Tests/
    │   ├── Addressing/
    │   │   └── WordAddressResolverTests.cs
    │   └── Execution/
    │       └── WordExecutorTests.cs
    └── OfficeTalkEngine.ParityTests/   # COM vs OpenXML parity tests
        └── ParityTests.cs

Supported Operations

Operation Word (OpenXML) Word (COM) Excel PowerPoint
SET
REPLACE / REPLACE ALL
INSERT BEFORE/AFTER
DELETE
APPEND / PREPEND
FORMAT
STYLE
COMMENT
INSERT ROW/COLUMN
SET CELLS / MERGE CELLS
INSERT IMAGE
INSERT TABLE
LINK
INSERT LIST
SET RUNS
INSERT SLIDE / DUPLICATE
ADD/RENAME/DELETE SHEET
INSPECT
PROPERTY

Dependencies

Package Version Purpose
SpecWorks.OfficeTalk (project ref) Core parsing and AST
DocumentFormat.OpenXml 3.1.0 OpenXML SDK for Office documents

License

MIT License

CLI Tool

OfficeTalkEngine includes a command-line tool for applying OfficeTalk documents:

dotnet tool install -g SpecWorks.OfficeTalk.CLI

Commands

Command Description
officetalk apply Apply an OfficeTalk document to an Office file
officetalk validate Validate an OfficeTalk document (syntactic + semantic)
officetalk parse Parse and display the AST of an OfficeTalk document
officetalk inspect Inspect the structure of an Office document
officetalk version Display version information

Example

# Apply changes to a Word document
officetalk apply -i changes.otk document.docx

# Inspect a spreadsheet's structure
officetalk inspect budget.xlsx --address "sheet[1]" --depth 1

# Validate an OfficeTalk file
officetalk validate -i review.otk

Live Editing with COM

When running on Windows with an Office application open, the CLI automatically uses COM interop to apply changes live — edits appear instantly in the open document. This works with Word, Excel, and PowerPoint.

Supported Formats

Format Operations COM Live Edit
Word (.docx) SET, DELETE, REPLACE, FORMAT, STYLE, INSERT, COMMENT
Excel (.xlsx) SET, DELETE, COMMENT, FORMAT
PowerPoint (.pptx) SET, DELETE, COMMENT, FORMAT

Test Cases

Parity test cases in testcases/ verify that the execution engine produces correct results for each operation type.

API Reference