package lsp
LSP protocol implementation in OCaml
Install
Dune Dependency
Authors
Maintainers
Sources
jsonrpc-1.6.1.tbz
sha256=bccc0d7194714a4c40c362766ad9095d3c58505a1d4f1dc4becd9b3d1bda8209
sha512=199bee8c74aec6822bc83bf9a7c3757206bdaa55a19cd1f5cf480127618a078baa1e917f6a90a6135a5277e4eb87977e685c10e6503f546997e6b985949e190f
doc/src/lsp.stdune/ansi_color.ml.html
Source file ansi_color.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 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
# 1 "submodules/dune/otherlibs/stdune-unstable/ansi_color.ml" module Style = struct type t = string let to_dyn s = Dyn.Encoder.string s let fg_black = "30" let fg_red = "31" let fg_green = "32" let fg_yellow = "33" let fg_blue = "34" let fg_magenta = "35" let fg_cyan = "36" let fg_white = "37" let fg_default = "39" let fg_bright_black = "90" let fg_bright_red = "91" let fg_bright_green = "92" let fg_bright_yellow = "93" let fg_bright_blue = "94" let fg_bright_magenta = "95" let fg_bright_cyan = "96" let fg_bright_white = "97" let fg_all = [ fg_black ; fg_green ; fg_yellow ; fg_blue ; fg_magenta ; fg_cyan ; fg_white ; fg_bright_black ; fg_bright_red ; fg_bright_green ; fg_bright_yellow ; fg_bright_blue ; fg_bright_magenta ; fg_bright_cyan ; fg_bright_white ] let bg_black = "40" let bg_red = "41" let bg_green = "42" let bg_yellow = "43" let bg_blue = "44" let bg_magenta = "45" let bg_cyan = "46" let bg_white = "47" let bg_default = "49" let bg_bright_black = "100" let bg_bright_red = "101" let bg_bright_green = "102" let bg_bright_yellow = "103" let bg_bright_blue = "104" let bg_bright_magenta = "105" let bg_bright_cyan = "106" let bg_bright_white = "107" let bg_all = [ bg_black ; bg_red ; bg_green ; bg_yellow ; bg_blue ; bg_magenta ; bg_cyan ; bg_white ; bg_default ; bg_bright_black ; bg_bright_red ; bg_bright_green ; bg_bright_yellow ; bg_bright_blue ; bg_bright_magenta ; bg_bright_cyan ; bg_bright_white ] let bold = "1" let dim = "2" let underlined = "4" let escape_sequence l = let l = "0" :: l in Printf.sprintf "\027[%sm" (String.concat l ~sep:";") let escape_sequence_no_reset l = Printf.sprintf "\027[%sm" (String.concat l ~sep:";") end let term_supports_color = lazy (match Stdlib.Sys.getenv "TERM" with | exception Not_found -> false | "dumb" -> false | _ -> true) let stdout_supports_color = lazy (Lazy.force term_supports_color && Unix.isatty Unix.stdout) let stderr_supports_color = lazy (Lazy.force term_supports_color && Unix.isatty Unix.stderr) let rec tag_handler current_styles ppf styles pp = Format.pp_print_as ppf 0 (Style.escape_sequence_no_reset styles); Pp.to_fmt_with_tags ppf pp ~tag_handler:(tag_handler (current_styles @ styles)); Format.pp_print_as ppf 0 (Style.escape_sequence current_styles) let make_printer supports_color ppf = let f = lazy (if Lazy.force supports_color then Pp.to_fmt_with_tags ppf ~tag_handler:(tag_handler []) else Pp.to_fmt ppf) in Staged.stage (fun pp -> Lazy.force f pp; Format.pp_print_flush ppf ()) let print = Staged.unstage (make_printer stdout_supports_color Format.std_formatter) let prerr = Staged.unstage (make_printer stderr_supports_color Format.err_formatter) let strip str = let len = String.length str in let buf = Buffer.create len in let rec loop i = if i = len then Buffer.contents buf else match str.[i] with | '\027' -> skip (i + 1) | c -> Buffer.add_char buf c; loop (i + 1) and skip i = if i = len then Buffer.contents buf else match str.[i] with | 'm' -> loop (i + 1) | _ -> skip (i + 1) in loop 0 let parse_line str styles = let len = String.length str in let add_chunk acc ~styles ~pos ~len = if len = 0 then acc else let s = Pp.verbatim (String.sub str ~pos ~len) in let s = match styles with | [] -> s | _ -> Pp.tag styles s in Pp.seq acc s in let rec loop styles i acc = match String.index_from str i '\027' with | None -> (styles, add_chunk acc ~styles ~pos:i ~len:(len - i)) | Some seq_start -> ( let acc = add_chunk acc ~styles ~pos:i ~len:(seq_start - i) in (* Skip the "\027[" *) let seq_start = seq_start + 2 in if seq_start >= len || str.[seq_start - 1] <> '[' then (styles, acc) else match String.index_from str seq_start 'm' with | None -> (styles, acc) | Some seq_end -> let styles = if seq_start = seq_end then (* Some commands output "\027[m", which seems to be interpreted the same as "\027[0m" by terminals *) [] else String.sub str ~pos:seq_start ~len:(seq_end - seq_start) |> String.split ~on:';' |> List.fold_left ~init:(List.rev styles) ~f:(fun styles s -> if s = Style.fg_default then List.filter styles ~f:(fun s -> not (List.mem Style.fg_all s ~equal:String.equal)) else if s = Style.bg_default then List.filter styles ~f:(fun s -> not (List.mem Style.bg_all s ~equal:String.equal)) else if s = "0" then [] else s :: styles) |> List.rev in loop styles (seq_end + 1) acc) in loop styles 0 Pp.nop let parse = let rec loop styles lines acc = match lines with | [] -> Pp.vbox (Pp.concat ~sep:Pp.cut (List.rev acc)) | line :: lines -> let styles, pp = parse_line line styles in loop styles lines (pp :: acc) in fun str -> loop [] (String.split_lines str) []
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>