package reason

  1. Overview
  2. Docs
Reason: Syntax & Toolchain for OCaml

Install

dune-project
 Dependency

Authors

Maintainers

Sources

reason-3.17.0.tbz
sha256=82c8819ce9fd215b7e7e2c6501e638e7a904ebe13ab5a1d8eac2679d8cf8a5eb
sha512=64f525d795501602d92174a35232c0791a0d77322c48397497c9ac3c1e0b76b86a89c3c50e057e52a8727d37b579720a0d48fb9fab3835193bb3a4668ded79cd

doc/src/reason.refmt-lib/end_of_line.ml.html

Source file end_of_line.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
type t =
  | LF
  | CRLF

let pp fmt eol =
  Format.pp_print_string fmt (match eol with LF -> "lf" | CRLF -> "crlf")

module Detect = struct
  let default = match Sys.win32 with true -> CRLF | _ -> LF

  let get_eol_for_file =
    let rec loop ic prev =
      match input_char ic with
      | '\n' -> (match prev with '\r' -> CRLF | _ -> LF)
      | c -> loop ic c
    in
    fun filename ->
      let ic = open_in_bin filename in
      let eol = try loop ic ' ' with End_of_file -> default in
      close_in ic;
      eol
end

module Convert = struct
  let lf_to_crlf =
    let rec loop sz =
      match String.index sz '\n' with
      | exception Not_found -> sz
      | idx ->
        let l = String.sub sz 0 idx ^ "\r\n" in
        let length = String.length sz in
        l ^ loop (String.sub sz (idx + 1) (length - idx - 1))
    in
    fun s -> loop s

  let get_formatter =
    let out_string (out_functions : Format.formatter_out_functions) eol =
     fun s p n ->
      match eol with
      | LF -> out_functions.out_string s p n
      | CRLF ->
        let str = String.sub s p n in
        let str = lf_to_crlf str in
        out_functions.out_string str 0 (String.length str)
    in
    fun output_channel eol ->
      let f = Format.formatter_of_out_channel output_channel in
      let new_functions =
        let out_functions = Format.pp_get_formatter_out_functions f () in
        { out_functions with out_string = out_string out_functions eol }
      in
      Format.pp_set_formatter_out_functions f new_functions;
      f
end
OCaml

Innovation. Community. Security.