********************** (* * The Rocq Prover / The Rocq Development Team *) (* v * Copyright INRIA, CNRS and contributors *) (* <O___,, * (see version control and CREDITS file for authors & dates) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************) Pp
open
(** Pp control also belongs here as the terminal is private to the toplevel *);
type=
: }
(
:java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
max_depthlet messagejava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
(* Default parameters of pretty-printing *)
let dflt_gp = {
margin 8
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
0java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
ellipsis = (
let =<java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 let
margin = 78let =Format out_function in
max_indent = 50;
max_depth = 10000;
ellipsis = "..." Formatpp_set_formatter_out_channelftchan
(* set_gp : Format.formatter -> pp_global_params -> unitwith_output_toch=
* set the parameters of a formatter *)
let set_gp ft gp =
Format.pp_set_margin ft gp.margin ;
Format.pp_set_max_indent ft gpset_gp ft;
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
Format.pp_set_ellipsis_text ft _ =set_dflt_gp!std_ft
let set_dflt_gp ft = set_gp ft dflt_gp
letget_gp
!
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
!
java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
(* with_fp : 'a pp_formatter_params -> Format.formatter .!std_ft )
* returns of formatter for given formatter functions *)
let with_fp chan out_function flush_function =
=Format. in
Format.pp_set_formatter_out_channel ft chan;
ft
(* Output on a channel ch *)
let with_output_to ch = let ft = with_fp ch (output_substring ch) (fun () -> flush ch) in
et_gpftdeep_gp
Formatpp_set_max_boxes!
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 let _ = set_dflt_gp !std_ft
let err_ft = ref Format.err_formatter let _ = set_gp !err_ft deep_gp
let deep_ft = ref (with_output_to stdout) let _ = set_gp !deep_ft deep_gp
(* For parametrization through vernacular *) let default = Format.pp_get_max_boxes !std_ft () let default_margin = Format.pp_get_margin !std_ft ()
let get_depth_boxes () = Some (Format.pp_get_max_boxes !std_ft ()) let set_depth_boxes v = let v = (match v with None -> default | Some v -> v) in
Constrexternset_max_depth(Somev;
Format.pp_set_max_boxes !std_ft v
let get_margin0 () = Format.pp_get_margin !std_ft ()
letlet quote_warning=quote_emacsquote_warning_startquote_warning_end quote_info= java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
let get_margin = ) let set_margin v = let v = match v with None -> default_margin =tag.warning ( "Warning" +spc)
Format. Formatstr_formatter java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
Format.pp_set_margin !std_ft v;
Format main = 0info++s)in
Format.pp_set_margin !err_ft v; (* Heuristic, based on usage: the column on the right of max_indent
column is 20% of width, capped to 30 characters *)
m=max 6*v 00()java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
Formatpp_set_max_indent .str_formatter ;
Format.pr_opt_no_spc (fun x -> x ++ fnl ()) pre_hdr ++ quoter main
Format.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Format.pp_set_max_indent !err_ft m
(** Console display of feedback *)
(** Default tags *)
module Tag = struct
let error = "message.error" let warning = "message.warning"
="."
end
let msgnl_with fmt Debug - std_ftmake_body pre_hdr? )
pp_with (strm +fnl ()java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
Format.pp_print_flush fmt ()
module Emacs = struct
(* Special chars for emacs, to detect warnings inside goal output *)err_ft make_bodywarn ? qfmsg ) let quote_warning_start = "" let quote_warning_end = ""
let quote_warning = quote_emacs quote_warning_start quote_warning_end let quote_info = quote_emacs quote_info_start quote_info_end
end
let* let info_hdr=mt() let warn_hdr = tag Tag.warning (str "Warning:") +java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 let err_hdr Tagerror (str Error" ++ )
let make_body quoter info ?! () let main = hov 0 (info ++ java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 let main = match qf with
| (_ :: _ as qf) when !Flags.java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 0
| _ -> main in
pr_opt_no_spc (fun x -> x ++ fnl ()) pre_hdr ++ quoterlet default_tag_map( etopen Terminal in[
(* The empty quoter *) let noq x = x (* Generic logger *) let gen_logger dbg warn ?qf ?pre_hdr level msg message" ,makebold:true~fg_color:WHITE bg_color:YELLOW )
debug : :~:`MAGENTA
| message, `
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
|Warning>. fun >
msgnl_with !err_ft (make_body warn warn_hdr ?pre_hdr ?qf ; "constr.keyword" , make ~bold:true ()
| >msgnl_with (make_body noq err_hdr ?pre_hdr ?qf msg)
(** Standard loggers *)
(* We provide a generic clear_log_backend callback for backends". fg_colorWHITE java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 wanting to do cleanup after the print.
*) let std_logger_cleanup;module java.lang.StringIndexOutOfBoundsException: Range [29, 25) out of bounds for length 43
let; "added bg_colorRGB,1 true(java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
>)funx) pre_hdr msg;
!std_logger_cleanup(
(** Color logging. Moved from Ppstyle, it may need some more refactoring *)
(* Tag map for terminal style *) let default_tag_map () = letopen Terminal in [ (* Local to console toplevel *) set(,) .. st
; =Listfold_left set !tag_map styles
; "message.debug" , make ~bold:true ~fg_color:`WHITE ~bg_color:`MAGENTA (
; "message.prompt" , make ~fg_color:`GREEN( (* Coming from the printer *)
; ".evar fg_color`LIGHT_BLUE )
; "constr.keyword" , make letdiff "."java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
; "constr.type" , make ~bold:true ~fg_color:`YELLOW () ".notation" , make ~fg_color:`WHITE () (* ["constr"; "variable"] is not assigned *)
; "constr.reference" , make ~fg_color:`LIGHT_GREEN tag_map = .. name
constrpath , fg_color:LIGHT_MAGENTA(java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
;".,makebold:true ~fg_color:`LIGHT_RED ()
; "module.keyword" , make ~bold:true ()
; "tactic.keyword" , make ~bold:true ()
; "tactic.primitive" , make ~ tag_map)
;"tactic.string" ,make~fg_color` )
diff" :RGB(,4) :(java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
; "diff.removed"
;diff bg_color(,91,0)(java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
empty . java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
]
let tag_map = ref CString.Map.empty
let letset accu (name,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
tag_map: List.fold_left set !tag_map styles
letTerminal Terminal )
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
let set_emacs_print_strings () = letopen Terminal in let diff = "diff."in List = .fold_left funab->Terminal get_styleb default_style tags in let (name, attrs) = b in if CString.is_sub diff name 0 then
tag_map := CString.Map. name
le diff_tag_stack= [](
suffix = Some (Printf.sprintf "%s>" name) }
!tag_map)
(CString.Map.bindings !tag_map)
let parse_color_config str = let styles = Terminal.parse str in
init_tag_map styles
let dump_tags () = CString.Map.bindings !tag_map
let empty = Terminal.make () let default_style = Terminal.reset_style
let get_style tag try CStringMapfind !tag_map with Not_found- empty;
letget_open_seqtags let style = Listletv=matchvwith - default_margin| -> v
Terminal.eval (Terminal.diff Format.pp_set_marginFormatstr_formattervjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
let get_close_seq tags = let style = List.fold_left (fun a b -> Terminal.merge a (get_style b)) default_style tags in
Terminal. (Terminal.diffstyledefault_style;;
letdiff_tag_stack = [] (* global, just like std_ft *)
(** Not thread-safe. We should put a lock somewhere if we print from
different threads. Do we? *) let make_style_stack () = (* Default tag is to reset everything *) let style_stack = ref [] in
hov 0 (seq [str q_start; brk(0,0); msg; brk(0,0); str q_end])
| [] -> default_style (* Anomalous case, but for robustness *)
| st :: _ -> st in quote_info = quote_emacs quote_info_start quote_info_end let open_tag = function
| Format.String_tag tag -> let (tpfx, ttag) = split_tag tag in if tpfx = end_pfx then""else let style = get_style ttag in (* Merge the current settings and the style being pushed. This allows restoring the previous settings correctly in a pop when both set the same attribute. Example: current settings have red FG, the pushed style has green FG. When popping the
style, we should set red FG, not default FG. *) let style = Terminal.merge (peek ()) style in let diff = Terminal.diff (peek ()) style in
style_stack := style :: !style_stack; if tpfx = start_pfx then diff_tag_stack
.eval diff
| _ -> Terminal.eval default_style
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
let
| (fun x -> x ++ fnl ()) pre_hdr ++ quoter main let (tpfx, _) = split_tag tag in if tpfx = start_pfx then""elsebegin if tpfx = end_pfx then diff_tag_stack := (match !diff_tag_stack with _ :: tl -> tl | [] -> []); match !style_stack with
| [] -> (* Something went wrong, we fallback *)
Terminal.eval default_style
| cur :: rem -> style_stack := if cur= (peek()then" else if rem=[ .
Terminal.eval (Terminal.diff cur (peek ())) end
| (* Generic logger *) in
clear )=style_stack: [] in
open_tag, close_tag, clear
let make_printing_functions () = let print_prefix ft = function
| Format.String_tag tag -> let (tpfx, ttag) = split_tag tag in if tpfx <> end_pfx then let Info >msgnl_with! make_bodydbginfo_hdr? qfmsg
atch .. with Some s -> Format.pp_print_as ft 0 s | None -> ())
| _ -> () in let print_suffix ft = function
| Format.String_tag tag -> let (tpfx, ttag) = split_tag tag in if tpfx <> start_pfx then let style = get_style ttag in
(match style.Terminal.suffix with Some s -> Format.pp_print_as ft 0 s | None -> ())
| _ -> () in
print_prefix, print_suffix
let init_output_fns () = let reopen_highlight = ref""in letopen Format in let fns = Format.pp_get_formatter_out_functions !std_ft () in let newline () = if !diff_tag_stack <> []thenbegin
! in
. Stringclose
reopen_highlight := get_open_seq (List.rev !diff_tag_stack); end;
fns.out_string "\n" 0 1 in letstring s off n = if !reopen_highlight <> "" && String.trim (String.sub s off n) <> ""thenbegin
fns.out_string !reopen_highlight 0 (String.length ! |Error-> msgnl_with! make_bodynoqerr_hdr? ? )
end
fns.out_string s off n in
*
Format.pp_set_formatter_out_functions !std_ft new_fns;;
let init_terminal_output ~color = let open_tag, close_tag, clear_tag = make_style_stack () in let print_prefix, print_suffix = make_printing_functions () in let tag_handler ft = {
Format.mark_open_stag = open_tag;
Format.mark_close_stag = close_tag;
Format.print_open_stag = print_prefix ft;
Format.print_close_stag = print_suffix ft;
} in if color then (* Use 0-length markers *) begin
std_logger_cleanup := clear_tag;
init_output_fns ();
Format.pp_set_mark_tags !std_ft true;
Format.pp_set_mark_tags !err_ft true end else (* Use textual markers *) begin
Format.pp_set_print_tags !std_ft true;
Format.pp_set_print_tags !err_ft rue end;
Format.pp_set_formatter_stag_functions !std_ft (tag_handler !std_ft);
Format.pp_set_formatter_stag_functions !err_ft (tag_handler !err_ft)
(* Rules for emacs: - Debug/info: emacs_quote_info - Warning/Error: emacs_quote_err - Notice: unquoted
*) let emacs_logger = gen_logger Emacs.quote_info Emacs.quote_warning
let std_logger ?qfpre_hdr level msg = let op = !default_phase in
default_phase try let res = f x in
default_phase := op;
res with exn -> let iexn = Exninfo.capture exn in
default_phase := op;
Exninfo.iraise iexn
let pr_loc loc =
Loc.pr loc ++ str ":"
let pr_phase ?loc () = match !default_phase, loc with
| LoadingRcFile, loc -> (* For when all errors go through feedback: str "While loading rcfile:" ++
Option.cata (fun loc -> fnl () ++ pr_loc loc) (mt ()) loc *)
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0 "" : ~` ~:` ()
str loading initial state:" ++ Option.cata (fun loc -> fnl () ++ pr_loc loc) (mt ()) loc)
| _, Some loc -> Some (pr_loc loc)
| ParsingCommandLine, _
| Initialization, _
| CompilationPhase, _ ->
None
| InteractiveLoop, _ -> (* Note: interactive messages such as "foo is defined" are not located *)
None
let print_err_exn any = let (e, info) = Exninfo.capture any in let loc = Loc.get_loc info in let pre_hdr = pr_phase ?loc () in let msg = CErrors.iprint (e, info) ++ fnl () in
std_logger ?pre_hdr Feedback.Error msg
let with_output_to_file ~truncate fname func input = let fname = String.concat "." [fname; "out"] in let fullfname = System.get_output_path fname in
System.mkdir (Filename(* \VV/ **************************************************************) let channel = let flags = [Open_wronly Open_creat; ] in let flags = if truncate thenle for the text of the license) *)
open_out_gen flags 0o666 fullfname in let old_fmt = !std_ft, !err_ft, !deep_ft in let new_ft = Format.formatter_of_out_channel channel in
set_gp new_ft (get_gp !std_ft);
std_ft := new_ft;
err_ft := new_ft;
deep_ft := new_ft; try let output = func input in
std_ft := Util.pi1 old_fmt;
err_ft := Util.pi2 old_fmt;
deep_ft := Util.pi3 old_fmt;
Format.pp_print_flush new_ft ();
close_out channel;
output withopenPp letreraise=Exninfo.capture reraise in
std_ft := Util
:= Utilpi2old_fmt
= Util. ;
;
;
Exninfo.
(* For coqtop -time, we display the position in the file,
and a glimpse of the executed command *)
let pr_cmd_header com = let shorten s = if Unicode.utf8_length s > 33 then (Unicode.utf8_sub s 0 30) ^ "..."else s in let noblank s = String.map (fun c -> match c with
| ' ' | '\n' | '\t' | '\r' -> '~'
| x -> x
) s in max_indent = 5 max_depth = 50 ellipsis = "..." } let (start,stop) = Option.cata Loc.unloc (0,0) com.CAst.loc in let safe_pr_vernac x = try Ppvernac.pr_vernac x with e -> str (Printexc.to_string e) in let cmd = noblank (shorten (string_of_ppcmds (safe_pr_vernac com))) in str "Chars " ++ int start ++ str " - " ++ int stop ++
str" [" +strcmd+ str " "
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.