Skip to content

Full direct object editing: page-content AST, vector, image, and text editing #606

Description

@mberrys

Scope

The most expensive item in the batch: it turns Loop from a production-fixup application into a genuine PDF editor — and it is the page-content object model the other mutation work depends on.

Core requirement

A page-content AST, not raw content-stream string editing:
GraphicsObject: Path, TextRun, Image, Form, Shading, Clip, Group. Every object carries its effective CTM, graphics state, clipping stack, transparency state, colour space, and resource dependencies.

Vector editing

Node movement, Bézier handles, fill/stroke changes, transform, delete, duplicate, compound paths; winding rules and clipping semantics preserved.

Image editing

V1 means production-safe placement editing: move, crop, scale, rotate, replace image, change resolution metadata intentionally, preserve ICC profile, masks and transparency. Not Photoshop.

Text editing

Much harder than it looks: a PDF may contain subset fonts holding only the glyphs used at generation time, so replacing text may need glyphs that do not exist. Expose two modes:

  • Safe text correction — existing encoded glyphs/font resources permit the requested replacement.
  • Recompose — choose/embed a font, reshape the text, and explicitly warn that metrics/reflow may change.
    Text state (matrices, kerning arrays, character/word spacing, rise, horizontal scaling, encodings) means text is treated as structured runs, not characters painted onto a canvas.

Non-negotiables

  • Edits share the mutation/undo/provenance architecture from the beginning (one change record per edit; reversibility stated).
  • Render/preflight/separation regression after every mutation class; untouched objects preserved where possible.
  • No second rewriting engine: this AST is the foundation Ink Manager, hairlines, trapping, imposition and packaging build on.

Prerequisites / related

Everything in this batch depends on it; it in turn consumes the existing operation registry/planner/transaction contracts (0.3.0 line).

Batch context (2026-09-15 architecture review). These items are epics sharing five foundations, not isolated UI features: a production PDF object/mutation engine (parse page content/resources into an editable object model, mutate transactionally, regenerate a valid PDF, preserve untouched objects, run render/preflight/separation regression after every mutation), a separation/color engine, a sheet/layout engine, a production semantic/job model, and a revision/provenance model. Every edit is expected to produce a change record (changed_object_ids, operation, before, after, warnings, reversible). Recommended sequencing: Ink Manager + mutation foundation + printer furniture + basic hairline normalization first; then imposition and direct-object editing foundations; then ISO 19593 packaging; then PDF/VT and XJDF; customer portals and cloud collaboration much later.

Parked: no milestone, labeled future planned. Promote by assigning a milestone and removing the label when a release train picks this up.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    future plannedParked future work: no milestone; promote by assigning a milestone

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions