Module Block_layout

type step =
  1. | At of int
  2. | Mouth of int
  3. | Arg of int
type path = {
  1. script : int;
  2. steps : step list;
}
type piece =
  1. | Body of {
    1. path : path;
    2. spec : Scratch_blocks.spec;
    3. x : float;
    4. y : float;
    5. w : float;
    6. h : float;
    7. mouths : (float * float) list;
    }
  2. | Label of {
    1. x : float;
    2. y : float;
    3. text : string;
    }
  3. | Slot of {
    1. path : path;
    2. part : Scratch_blocks.part;
    3. x : float;
    4. y : float;
    5. w : float;
    6. h : float;
    7. text : string;
    }
type target =
  1. | Below of path
  2. | Above of int
  3. | In_mouth of path * int
val arm : float
val snap_distance : float
val size : measure:(string -> float) -> Scratch_blocks.block -> float * float
val height : measure:(string -> float) -> Scratch_blocks.block list -> float
val width : measure:(string -> float) -> Scratch_blocks.block list -> float
val layout : measure:(string -> float) -> Scratch_blocks.script list -> piece list * (target * (float * float)) list
val snap : measure:(string -> float) -> Scratch_blocks.script list -> Scratch_blocks.block list -> at:(float * float) -> target option
val block_at : piece list -> (float * float) -> path option
val slot_at : piece list -> (float * float) -> path option