package ocp-indent
A simple tool to indent OCaml programs
Install
Dune Dependency
Authors
Maintainers
Sources
1.8.1.tar.gz
md5=70db6649a8c08a682ad63730c9752e31
sha512=565353de333dd44375366fff75e85a6256c3cd9ff52b3db79803141f975e77cda04dfe32f5e0f2d4c82c59be8f04e9c2bf4d066b113b2cdf267f4c3dcfa401da
doc/src/ocp-indent.utils/util.ml.html
Source file util.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 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
(**************************************************************************) (* *) (* Copyright 2011 Jun Furuse *) (* Copyright 2012,2013 OCamlPro *) (* *) (* All rights reserved.This file is distributed under the terms of the *) (* GNU Lesser General Public License version 2.1 with linking *) (* exception. *) (* *) (* TypeRex 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 *) (* Lesser GNU General Public License for more details. *) (* *) (**************************************************************************) let compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c = fun f g x -> f (g (x)) let ( @* ) = compose let default d = function Some x -> x | None -> d let string_split char str = let rec aux acc pos = let i = try Some (String.rindex_from str pos char) with Not_found | Invalid_argument _ -> None in match i with | Some i -> aux (String.sub str (i + 1) (pos - i) :: acc) (pred i) | None -> String.sub str 0 (pos + 1) :: acc in aux [] (String.length str - 1) let string_split_chars chars str = let len = String.length str in let rec split pos = let rec lookup i = if i >= len then raise Not_found else if String.contains chars str.[i] then i else lookup (succ i) in try let i = lookup pos in if i > pos then String.sub str pos (i - pos) :: split (succ i) else split (succ i) with Not_found | Invalid_argument _ -> [ String.sub str pos (len - pos) ] in split 0 let is_prefix pfx str = let pfxlen = String.length pfx in let rec check i = i >= pfxlen || pfx.[i] = str.[i] && check (i+1) in String.length str >= pfxlen && check 0 let ends_with_escape s = let rec aux n = n >= 0 && s.[n] = '\\' && not (aux (n-1)) in aux (String.length s - 1) let count_leading_spaces s = let rec aux i = if i >= String.length s || s.[i] <> ' ' then i else aux (i+1) in aux 0 let shorten_string n s = match string_split '\n' s with | [] -> "" | [s] -> if String.length s <= n then s else let n1 = (n - 3) / 2 in let n2 = n - 3 - n1 in String.sub s 0 n1 ^ "..." ^ String.sub s (String.length s - n2) n2 | s1::r1::r -> let s2 = let rec last x = function x::r -> last x r | [] -> x in last r1 r in let l1 = String.length s1 and l2 = String.length s2 in let n1 = min l1 (max ((n-3) / 2) (n-3 - l2)) in let n2 = min l2 (n - 3 - n1) in String.sub s1 0 n1 ^ "..." ^ String.sub s2 (l2 - n2) n2
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>