Spec-Zone.ru › OCaml

Модуль Format_doc

module Format_doc: sig .. end

Компонентный документ для механизма форматирования Format.

Этот модуль представляет чистый неизменяемый тип документа, описывающий последовательность инструкций форматирования, которые позднее будут выведены механизмом форматирования. Кроме того, он предоставляет интерпретатор строк формата, создающий документы этого типа на основе строки формата и соответствующих функций форматирования.

Модуль разработан для совместимости на уровне исходного кода с кодом, определяющим функции форматирования: замена `Format` на `Format_doc` в вашем коде преобразует функции форматирования `Format` в функции форматирования `Format_doc`.

module Doc: sig .. end

Определения и неизменяемый API для составления документов

API совместимости

Приведённые ниже функции и типы обеспечивают совместимость на уровне исходного кода с функциями форматирования и преобразование функций форматирования из Format_doc в функции форматирования Format. Обратное преобразование реализовано с помощью обходного механизма в инструкции форматирования и должно использоваться только для сохранения обратной совместимости.

type doc = Doc.t 
type t = doc 
type formatter 
type 'a printer = formatter -> 'a -> unit 
val formatter : doc ref -> formatter

formatter rdoc создаёт Format_doc.formatter, обновляющий ссылку rdoc

type 'a format_printer = Format.formatter -> 'a -> unit 

Преобразовать функцию форматирования Format_doc в функцию форматирования Format.

val compat : 'a printer -> 'a format_printer
val compat1 : ('p1 -> 'a printer) -> 'p1 -> 'a format_printer
val compat2 : ('p1 -> 'p2 -> 'a printer) ->       'p1 -> 'p2 -> 'a format_printer
val deprecated_printer : (Format.formatter -> unit) -> formatter -> unit

При необходимости встроить функцию форматирования Format в поток инструкций форматирования. Это нарушает все гарантии, предоставляемые Format_doc.

val deprecated : 'a format_printer -> 'a printer
val deprecated1 : ('p1 -> 'a format_printer) -> 'p1 -> 'a printer

Интерпретаторы строк формата

val fprintf : formatter -> ('a, formatter, unit) format -> 'a
val kfprintf : (formatter -> 'a) ->       formatter ->       ('b, formatter, unit, 'a) format4 -> 'b
val asprintf : ('a, formatter, unit, string) format4 -> 'a
val kasprintf : (string -> 'a) -> ('b, formatter, unit, 'a) format4 -> 'b
val dprintf : ('a, formatter, unit, formatter -> unit) format4 ->       'a
val kdprintf : ((formatter -> unit) -> 'a) ->       ('b, formatter, unit, 'a) format4 -> 'b
val doc_printf : ('a, formatter, unit, doc) format4 -> 'a

Format_doc.doc_printf и Format_doc.kdoc_printf напрямую создают документ

val kdoc_printf : (doc -> 'r) ->       ('a, formatter, unit, 'r) format4 -> 'a

Совместимость с Format_doc.Doc

val doc_printer : 'a printer -> 'a Doc.printer
val pp_doc : doc printer

Совместимость исходного кода с Format

Функции форматирования строк

val pp_print_string : string printer
val pp_print_substring : pos:int -> len:int -> string printer
val pp_print_text : string printer
val pp_print_bytes : bytes printer
val pp_print_as : formatter -> int -> string -> unit
val pp_print_substring_as : pos:int -> len:int -> formatter -> int -> string -> unit

Функции форматирования примитивных типов

val pp_print_char : char printer
val pp_print_int : int printer
val pp_print_float : float printer
val pp_print_bool : bool printer
val pp_print_nothing : unit printer

Комбинаторы функций форматирования

val pp_print_iter : ?pp_sep:unit printer ->       (('a -> unit) -> 'b -> unit) ->       'a printer -> 'b printer
val pp_print_list : ?pp_sep:unit printer ->       'a printer -> 'a list printer
val pp_print_array : ?pp_sep:unit printer ->       'a printer -> 'a array printer
val pp_print_seq : ?pp_sep:unit printer ->       'a printer -> 'a Seq.t printer
val pp_print_option : ?none:unit printer ->       'a printer -> 'a option printer
val pp_print_result : ok:'a printer ->       error:'e printer -> ('a, 'e) result printer
val pp_print_either : left:'a printer ->       right:'b printer -> ('a, 'b) Either.t printer

Блоки и теги

val pp_open_stag : Format.stag printer
val pp_close_stag : unit printer
val pp_open_box : int printer
val pp_close_box : unit printer

Подсказки для переносов

val pp_print_space : unit printer
val pp_print_cut : unit printer
val pp_print_break : formatter -> int -> int -> unit
val pp_print_custom_break : formatter ->       fits:string * int * string -> breaks:string * int * string -> unit

Табуляции

val pp_open_tbox : unit printer
val pp_close_tbox : unit printer
val pp_set_tab : unit printer
val pp_print_tab : unit printer
val pp_print_tbreak : formatter -> int -> int -> unit

Переводы строк и сброс буфера

val pp_print_if_newline : unit printer
val pp_force_newline : unit printer
val pp_print_flush : unit printer
val pp_print_newline : unit printer

Функции, специфичные для компилятора

Разделители

val comma : unit printer
val semicolon : unit printer

Вывод компилятора

val pp_two_columns : ?sep:string ->       ?max_lines:int -> formatter -> (string * string) list -> unit

pp_two_columns ?sep ?max_lines ppf l выводит строки из l в виде двух столбцов, разделённых sep (по умолчанию — "|"). max_lines можно использовать, чтобы задать максимальное число выводимых строк: если входных строк слишком много, посередине вставляется многоточие.

Пример:

pp_two_columns ~max_lines:3 Format.std_formatter [
      "abc", "hello";
      "def", "zzz";
      "a"  , "bllbl";
      "bb" , "dddddd";
    ]

выводит

    abc | hello
    ...
    bb  | dddddd
   

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/compilerlibref/Format_doc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API