package camlimages
Image processing library
Install
Dune Dependency
Authors
Maintainers
Sources
camlimages-5.0.4.tar.bz2
sha256=1c9a68bdc3d348c9f859d490dadf384926213e47a584159832f7fc4a20242865
md5=1ddba74d210b86a899b5d6565f45c2dc
doc/src/camlimages.core/mstring.ml.html
Source file mstring.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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
(***********************************************************************) (* *) (* Objective Caml *) (* *) (* François Pessaux, projet Cristal, INRIA Rocquencourt *) (* Pierre Weis, projet Cristal, INRIA Rocquencourt *) (* Jun Furuse, projet Cristal, INRIA Rocquencourt *) (* *) (* Copyright 1999-2004, *) (* Institut National de Recherche en Informatique et en Automatique. *) (* Distributed only by permission. *) (* *) (***********************************************************************) (* $Id: mstring.ml,v 1.1 2006/11/28 15:43:28 rousse Exp $*) (** String utilities *) open Util (** split a string according to char_sep predicate *) let split_str char_sep str = let len = String.length str in if len = 0 then [] else let rec skip_sep cur = if cur >= len then cur else if char_sep str.[cur] then skip_sep (succ cur) else cur in let rec split beg cur = if cur >= len then if beg = cur then [] else [String.sub str beg (len - beg)] else if char_sep str.[cur] then let nextw = skip_sep cur in String.sub str beg (cur - beg) :: split nextw nextw else split beg (succ cur) in let wstart = skip_sep 0 in split wstart wstart (* split a string according to char_sep predicate *) let split_str_quoted char_sep str = let len = String.length str in if len = 0 then [] else let cword = ref "" in let rec skip_sep cur = if cur >= len then cur else if char_sep str.[cur] then skip_sep (succ cur) else cur in let rec close_quote cur = if cur >= len then cur else if str.[cur] = '"' then cur else begin cword := !cword ^ String.make 1 str.[cur]; close_quote (succ cur) end in let rec split beg cur = if cur >= len then if beg = cur then [] else [!cword] else if str.[cur] = '"' then let endquote = close_quote (succ cur) in split beg (succ endquote) else if char_sep str.[cur] then let nextw = skip_sep cur in let word = !cword in cword := ""; word :: split nextw nextw else begin cword := !cword ^ String.make 1 str.[cur]; split beg (succ cur) end in let wstart = skip_sep 0 in split wstart wstart (* extract the . suffix (dot excluded) of a string *) let get_suffix s = try let dotpos = succ (String.rindex s '.') in String.sub s dotpos (String.length s - dotpos) with | Not_found -> "" (* HEX/DEC conversions *) let hex_to_dec c = match c with | '0'..'9' -> int_of_char c - 48 | 'a'..'f' -> int_of_char c - 87 (* 87 = int_of_char 'a' - 10 *) | 'A'..'F' -> int_of_char c - 55 (* 55 = int_of_char 'A' - 10 *) | _ -> failwith "hex_to_dec" let dec_to_hex i = if i < 10 then char_of_int (i + 48) (* 48 = int_of_char '0' *) else char_of_int (i + 55) (* 55 = int_of_char 'A' - 10 *) (* Converting a hex stored string *) let hex_to_string s = let len = String.length s / 2 in String.init len @@ fun i -> char_of_int ( 16 * (hex_to_dec s.[i + i]) + hex_to_dec s.[i + i + 1]) let gensym = let cnter = ref 0 in (fun n -> incr cnter; n ^ string_of_int !cnter) let rem_trailing_sp s = let l = String.length s in let pos = ref (l - 1) in while !pos >= 0 && List.mem s.[!pos] [' '; '\t'] do decr pos done; if !pos = l - 1 then s else String.sub s 0 (succ !pos) let catenate_sep = String.concat (** Filters CRLF: - CR -> LF - CRLF -> LF - LF -> LF We do this on successive chunks of a stream, so we need to consider the case when the chunk finishes on CR. Assume len > 0 *) let norm_crlf lastwascr buf offs len = let rpos = ref offs and wpos = ref 0 and dest = Bytes.create (len + 1) (* we need one more char *) and limit = offs + len - 1 and lastiscr = ref false in if lastwascr then if buf.[!rpos] = '\n' then begin dest << !wpos & '\n'; incr rpos; incr wpos end else begin dest << !wpos & '\n'; incr wpos end; while !rpos < limit do match buf.[!rpos] with | '\n' -> dest << !wpos & '\n'; incr rpos; incr wpos | '\r' -> if buf.[!rpos + 1] = '\n' then begin dest << !wpos & '\n'; rpos := !rpos + 2; incr wpos end else begin dest << !wpos & '\n'; incr rpos; incr wpos end | c -> dest << !wpos & c; incr rpos; incr wpos done; begin match buf.[offs+len-1] with | '\n' -> dest << !wpos & '\n'; incr wpos | '\r' -> lastiscr := true | c -> dest << !wpos & c; incr wpos end; Bytes.sub_string dest 0 !wpos, !lastiscr let hexchar c = let i = int_of_char c in String.init 3 @@ function | 0 -> '%' | 1 -> dec_to_hex (i / 16) | 2 -> dec_to_hex (i mod 16) | _ -> assert false
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>