1# Rust ink authoring
2
3`drawing/candidate` is the page writer's output for
4`an_ink_drawing_is_written_erased_stroke_by_stroke_and_removed` in
5`crates/onestore/tests/page_ink.rs`: on a section created in Rust, a page-level
6ink object with two strokes, a 60 pt square at (300, 120) and a red diagonal,
7stored the way OneNote 2010 stores a mouse drawing
8(`corpus/native-ink/cold-ui-ink`): an ink container listed as a page child, its
9data node listing stroke objects, each stroke's coordinates as ISF multi-byte
10first differences in HIMETRIC with its index, language, identity, time and
11half-inch origin, and one drawing-attribute object per distinct pen carrying
12the dimension table OneNote wrote. `drawing/cold` is a fresh OneNote 2010
13read: the `InkDrawing` reports the stroke extent as its position and size (one
14HIMETRIC unit larger, as OneNote does) and `page-000.png` shows the square and
15diagonal rendered.
16
17`handwriting/candidate` is the same drawing held by a new paragraph of the body
18outline (`handwriting_is_written_as_paragraph_content`); `handwriting/cold`
19shows OneNote accepting it as an `InkDrawing` inside the outline element, the
20outline grown to contain the strokes' absolute page coordinates.
21
22`tools/test_ink_edit.py` checks both without a VM. Regenerate with
23`ONESTORE_INK_EXPORT` and `ONESTORE_INK_PARAGRAPH_EXPORT` set to new absolute
24directories while running the tests, then cold-open each with
25`tools/native_runner.py OUTPUT COLD --expected-pages 1 --collect-notebook
26--screenshots`.
27
28`native-mouse-over-text/` is OneNote 2010 receiving mouse strokes over an
29outline's text and in empty space (`tools/native_handwriting.py`): both
30became page-level `InkDrawing` objects. Mouse ink never produces
31handwriting paragraphs or embedded ink in text runs, so those forms stay
32read-only retained content until a pen-authored fixture exists.