package coq-lsp
Language Server Protocol native server for Coq
Install
Dune Dependency
Authors
Maintainers
Sources
coq-lsp-0.1.8.8.19.tbz
sha256=1e63289d620e533615812267e96e44c1b5cd2dbdaf26cc9dc8ba00051c2b08c0
sha512=9f5e25c6974d293e7c073e65f85936ef18180692dd031c7b709d24d3eefb1955e955c6208cf02c2ac70fa12966d96bc1d43b29f55c425274802289dcf66d5eb2
doc/src/coq-lsp.coq/utf8.ml.html
Source file utf8.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
(* utf8 utils, both Coq and Camomile have similar implementations, at some point we should remove this but for now we keep it internal. For now we use the Camomille functions *) type char = int type index = int (* Taken from camomille *) (* Copyright (C) 2002, 2003 Yamagata Yoriyuki. *) let rec search_head s i = if i >= String.length s then i else let n = Char.code (String.unsafe_get s i) in if n < 0x80 || n >= 0xc2 then i else search_head s (i + 1) let next s i = let n = Char.code s.[i] in if n < 0x80 then i + 1 else if n < 0xc0 then search_head s (i + 1) else if n <= 0xdf then i + 2 else if n <= 0xef then i + 3 else if n <= 0xf7 then i + 4 else if n <= 0xfb then i + 5 else if n <= 0xfd then i + 6 else invalid_arg "UTF8.next" let rec length_aux s c i = if i >= String.length s then c else let n = Char.code (String.unsafe_get s i) in let k = if n < 0x80 then 1 else if n < 0xc0 then invalid_arg "UTF8.length" else if n < 0xe0 then 2 else if n < 0xf0 then 3 else if n < 0xf8 then 4 else if n < 0xfc then 5 else if n < 0xfe then 6 else invalid_arg "UTF8.length" in length_aux s (c + 1) (i + k) let length s = length_aux s 0 0 let rec nth_aux s i n = if n = 0 then i else nth_aux s (next s i) (n - 1) let nth s n = nth_aux s 0 n (* end of camomille *) (* That's a tricky one, if the char we are requesting is out of bounds, then we return the last index, 0 in the case line is empty. *) let index_of_char ~line ~char = if char < length line then Some (nth line char) else None let find_char line byte = let rec f index n_chars = let next_index = next line index in if next_index > byte then n_chars else f next_index (n_chars + 1) in if byte < String.length line then Some (f 0 0) else None let char_of_index ~line ~byte = (* if Debug.unicode then *) (* Io.Log.trace "char_of_index" *) (* (Format.asprintf "str: '%s' | byte: %d" line byte); *) let char = find_char line byte in (* (if Debug.unicode then *) (* match char with *) (* | None -> Io.Log.trace "get_last_text" "failed" *) (* | Some char -> Io.Log.trace "get_last_text" (Format.asprintf "char: %d" char)); *) char
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>