# feat: write table rows, columns and new tables through the page model · clo/snowbound

[View on GitCafe](https://git.cafe/clo/snowbound/commit/59c8648048632812f85fd595c05aa9720ad2a051)

Repository: [clo/snowbound](https://git.cafe/clo/snowbound)

Visibility: public

Requested revision: 59c8648048632812f85fd595c05aa9720ad2a051

Requested commit: 59c8648048632812f85fd595c05aa9720ad2a051

Commit: 59c8648048632812f85fd595c05aa9720ad2a051

Tree: 2bad0c7aaf539ac8292d94301a97f32d68d6c791

Author: clover caruso

Committer: clover caruso

## Message

```
feat: write table rows, columns and new tables through the page model

Table structure in the page model is a difference the writer now lowers.
Native rows and cells are plain containers: a new cell carries the
modification time, the indent array copied from a sibling cell and the flags
every native cell has; a new row lists its cells; every table has its row and
cell order rebuilt to the model, and its column count, widths (in inches),
lock bitmap and border flag rewritten. A new table starts as an empty text
paragraph placed like any other, whose content the structure pass replaces
with the table before the deferred cell containers receive their paragraphs.
Paragraphs of removed rows and cells are covered by the removal. Table
identity, layout and tags, and cell layout, indents and shading stay fixed;
an emptied cell keeps the replacement paragraph the tree writer provides.

corpus/table-edit is the native gate: a Rust-created two-by-two table on a
fresh page, and a native table on the tree fixture with a third column and a
second row added, both cold-read by OneNote 2010 with widths, locks, borders,
rows and cell text intact; tools/test_table_edit.py checks both without a VM.

Assisted-by: claude-fable-5.1

```

## Parents

- [8b4f45b5b7a6d9b8555e7234a123c9887495d265](https://git.cafe/clo/snowbound/commit/8b4f45b5b7a6d9b8555e7234a123c9887495d265?format=markdown)

[Source at this commit](https://git.cafe/clo/snowbound/tree/59c8648048632812f85fd595c05aa9720ad2a051?format=markdown)
