1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//! [`AnchoredIsland`]/[`IslandAnchor`] — an image anchored in the flow,
//! with the following flow content running beside it in a side strip
//! (design doc §2.3's own file placement, `scene/island.rs`, though this
//! crate's own `AnchoredIsland` shape diverges from the doc's — see this
//! module's own "Divergence" doc comment below).
//!
//! ## Divergence from the design doc's own `AnchoredIsland` (report)
//!
//! The design doc's §2.3 `AnchoredIsland` is a FIXED-POSITION, NON-FLOW-
//! participating element living in `SceneSpec.islands` — its own explicit
//! `rect`/`z_index`/`reading_order`, independent of the flow's own reading
//! order (PowerPoint's own free-canvas model). `SceneSpec` itself is not
//! part of this crate yet (§2.1, deferred past every phase so far — see
//! this crate's `CLAUDE.md`). This feature's own task brief instead asks
//! for "images anchored IN THE FLOW with text running beside them" — a
//! genuinely different placement model (reading-order-driven, closer to
//! Word's own inline "square"/"tight" text wrap than PowerPoint's free
//! canvas). Implemented here as a NEW, additive [`crate::scene::Block::Island`]
//! flow variant instead: an `AnchoredIsland` reserves its own rect at
//! whatever the CURRENT flow cursor is when [`crate::compose::compose`]
//! reaches it (never an author-authored absolute `rect`), and the blocks
//! immediately following it in the SAME flow are the ones that run beside
//! it — see `compose::flow`'s own module docs for the exact strip-filling
//! mechanics. A future `SceneSpec`-based, truly non-flow-participating
//! `AnchoredIsland` (the doc's own original shape) can still be added
//! additively later without touching this one — they answer genuinely
//! different questions ("where does an image sit independent of reading
//! order" vs. "where does TEXT flow around an image").
use crateImageBlock;
/// Which side of an [`AnchoredIsland`]'s own image sits, and therefore
/// which side(s) [`crate::compose::flow`] carves side-strip regions for
/// the flow content immediately following it.
/// An image anchored in the flow, with the flow content immediately
/// following it running beside it in a side strip for the image's own
/// vertical band (this module's own "Divergence" doc comment explains why
/// this differs from the design doc's own free-canvas `AnchoredIsland`).
/// ATOMIC exactly like [`crate::scene::Block::Figure`]/
/// [`crate::scene::Block::Image`] — never split across regions; one
/// taller than the remaining region space defers WHOLE to the next
/// region.