package tiny_appkits
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Application engines from scratch: a spreadsheet, rich text, paint, draw, CAD, editors and more
Install
dune-project
Dependency
Authors
Maintainers
Sources
0.3.6.tar.gz
md5=7c636383d146d30ac6f2fa234a6253c8
sha512=c79f3823c5f8f57e5038eb640d487c61168b84aa07c61999d6622ef9fd0c890e2b03b4c6a7cdbbe9352a49e25dda00ac7bb14693cee8e3d7beeed251351a2af0
doc/src/tiny_appkits.appkit_richtext/Flow.ml.html
Source file Flow.ml
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(* Claude Code * * Copyright (C) 2026 Yoann Padioleau * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public License * (LGPL) as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. *) type placed_line = { line : Page.line; column : int; top : float } type placed_frame = { frame : int; in_column : int; at : float; height : float } type t = { lines : placed_line list; frames : placed_frame list; columns : int } let flow ~column_height ~anchors page = (* where the next thing goes: a column, and how far down it *) let col = ref 0 and y = ref 0. in (* something h high goes here, or at the top of the next column *) let place h = if !y > 0. && !y +. h > column_height then ( incr col; y := 0.); let at = (!col, !y) in y := !y +. h; at in let lines = Page.lines page in let last = List.length lines - 1 in let anchors = List.mapi (fun i (offset, h) -> (i, offset, h)) anchors in let placed_lines = ref [] and frames = ref [] in List.iteri (fun k (l : Page.line) -> let column, top = place l.height in placed_lines := { line = l; column; top } :: !placed_lines; (* the frames anchored in this line -- the last line takes those anchored at the very end, or past it *) List.iter (fun (i, offset, h) -> if (offset >= l.first && offset < l.stop) || (k = last && offset >= l.stop) then let in_column, at = place h in frames := { frame = i; in_column; at; height = h } :: !frames) anchors) lines; { lines = List.rev !placed_lines; frames = List.rev !frames; columns = !col + 1 }
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>