Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Roqc/printing/   (Beweissystem des Inria Version 9.1.0©)  Datei vom 15.8.2025 mit Größe 2 kB image not shown  

Quelle  topfmt.ml   Sprache: SML

 
********************** 
(*         *      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 = ""

  letquote_info_start = "
  let quote_info_end = ""

  let quote_emacs q_start q_end msg =
    hov 0 (seq [str q_start; brk(0,0); msg; brk(0,0); str q_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 () = let open 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  
  let set 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 () =
  let open 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 "" 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 "" else begin
        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
  let open 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
  let string s off n =
    if !reopen_highlight <> ""  && String.trim (String.sub s off n) <> "" then begin
      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

(* This is specific to the toplevel *)

type execution_phase =
  | ParsingCommandLine
  | Initialization
  | LoadingPrelude
  | LoadingRcFile
  | InteractiveLoop
  | CompilationPhase

let default_phase = ref InteractiveLoop

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 " "

100%


¤ Dauer der Verarbeitung: 0.10 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.