package acgtk
Abstract Categorial Grammar development toolkit
Install
Dune Dependency
Authors
Maintainers
Sources
acg-2.1.0-20240219.tar.gz
sha512=5d380a947658fb1201895cb4cb449b1f60f54914c563e85181d628a89f045c1dd7b5b2226bb7865dd090f87caa9187e0ea6c7a4ee3dc3dda340d404c4e76c7c2
doc/src/acgtk.svg_rendering/tree.ml.html
Source file tree.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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
open Cairo open Diagram type 'a t = T of 'a * 'a t list let rec map (f : 'a -> 'b) : 'a t -> 'b t = function | T (node, children) -> T (f node, List.map (map f) children) let rec map2 (f : 'a -> 'b -> 'c) (t1 : 'a t) (t2 : 'b t) : 'c t = match (t1, t2) with | T (root1, children1), T (root2, children2) -> T (f root1 root2, List.map2 (map2 f) children1 children2) let singleton (root : 'a) : 'a t = T (root, []) let rec to_diagram ?(hgap = 10.) ?(vgap = 20.) (t : diagram t) : diagram = match t with | T (node, []) -> node | T (node, children) -> let child_diagrams = List.map (to_diagram >> alignT) children in let child_exts = List.map extents child_diagrams in let rec hcat_origins (first : rectangle) (more : rectangle list) : float list = match more with | [] -> [] | next :: rest -> let offset = first.x +. first.w +. hgap -. next.x in offset :: hcat_origins { first with w = first.w +. hgap +. next.w } rest in let child_origins = 0. :: hcat_origins (List.hd child_exts) (List.tl child_exts) in let n_children = List.length children in let child_row_offset = if n_children mod 2 = 0 then (List.nth child_origins ((n_children / 2) - 1) +. List.nth child_origins (n_children / 2)) /. 2. else List.nth child_origins (n_children / 2) in let child_row = child_diagrams |> UtilsLib.Utils.intersperse (hspace hgap) |> hcat |> translateX (-.child_row_offset) in let child_origins = List.map (fun o -> o -. child_row_offset) child_origins in let antlers = blend (List.map (fun o -> line (0., 0.) (o, vgap)) child_origins) in vcat [ node; antlers; child_row ]
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>