package crs

  1. Overview
  2. Docs
A tool for managing code review comments embedded in source code

Install

Dune Dependency

Authors

Maintainers

Sources

crs-0.0.20250705.tbz
sha256=e9f9f5ec5aea9658ed640aaa06f887985bb6870adcf7555ebf6d48bb741e4793
sha512=901ac1caae6c4103a320b4a3a177ca3aa0583ad533c54e7740aba6652ccdbd6311d07ab4b73e3ba750beed24f85479b5e1b0e94504ecfd0c59bd49cdabebc369

doc/src/crs.text-table/box.ml.html

Source file box.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
(********************************************************************************)
(*  crs - A tool for managing code review comments embedded in source code      *)
(*  Copyright (C) 2024-2025 Mathieu Barbin <mathieu.barbin@gmail.com>           *)
(*                                                                              *)
(*  This file is part of crs.                                                   *)
(*                                                                              *)
(*  crs is free software; you can redistribute it and/or modify it under the    *)
(*  terms of the GNU Lesser General Public License as published by the Free     *)
(*  Software Foundation either version 3 of the License, or any later version,  *)
(*  with the LGPL-3.0 Linking Exception.                                        *)
(*                                                                              *)
(*  crs is distributed in the hope that it will be useful, but WITHOUT ANY      *)
(*  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS   *)
(*  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License and     *)
(*  the file `NOTICE.md` at the root of this repository for more details.       *)
(*                                                                              *)
(*  You should have received a copy of the GNU Lesser General Public License    *)
(*  and the LGPL-3.0 Linking Exception along with this library. If not, see     *)
(*  <http://www.gnu.org/licenses/> and <https://spdx.org>, respectively.        *)
(********************************************************************************)

module Column = struct
  type t =
    { header : string
    ; align : Text_table_ast.Align.t
    ; cells : Text_table_ast.Cell.t list
    ; length : int
    }
end

type t = { columns : Column.t array }

let of_text_table (Text_table_ast.T { columns; rows }) =
  let columns =
    Array.of_list_map columns ~f:(fun { header; align; make_cell } ->
      let cells = List.map rows ~f:(fun row -> make_cell row) in
      let length =
        List.fold cells ~init:0 ~f:(fun len cell -> Int.max len (String.length cell.text))
      in
      if length = 0
      then None
      else (
        let length = Int.max length (String.length header) in
        Some { Column.header; align; cells; length }))
    |> Array.filter_map ~f:Fn.id
  in
  { columns }
;;

let pad s ~len ~align =
  let slen = String.length s in
  if slen >= len
  then s
  else (
    let pad = String.make (len - slen) ' ' in
    match (align : Text_table_ast.Align.t) with
    | Left -> s ^ pad
    | Right -> pad ^ s
    | Center ->
      let left = (len - slen) / 2 in
      let right = len - slen - left in
      String.make left ' ' ^ s ^ String.make right ' ')
;;
OCaml

Innovation. Community. Security.