'(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n' Text '(*' Comment ' ' Comment '*)' Comment '\n' Text '(*' Comment ' Objective Caml ' Comment '*)' Comment '\n' Text '(*' Comment ' ' Comment '*)' Comment '\n' Text '(*' Comment ' Pierre Weis, projet Cristal, INRIA Rocquencourt ' Comment '*)' Comment '\n' Text '(*' Comment ' ' Comment '*)' Comment '\n' Text '(*' Comment ' Copyright 1996 Institut National de Recherche en Informatique et ' Comment '*)' Comment '\n' Text '(*' Comment ' en Automatique. All rights reserved. This file is distributed ' Comment '*)' Comment '\n' Text '(*' Comment ' under the terms of the GNU Library General Public License, with ' Comment '*)' Comment '\n' Text '(*' Comment ' the special exception on linking described in file ../LICENSE. ' Comment '*)' Comment '\n' Text '(*' Comment ' ' Comment '*)' Comment '\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text '(*' Comment ' $Id: format.ml,v 1.65 2005/09/26 10:13:08 weis Exp $ ' Comment '*)' Comment '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Data structures definitions.\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text 'type' Keyword ' ' Text 'size' Name ';;' Operator '\n\n' Text 'external' Keyword ' ' Text 'size_of_int' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ' ' Text '->' Operator ' ' Text 'size' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double '%identity' Literal.String.Double '"' Literal.String.Double ';;' Operator '\n' Text 'external' Keyword ' ' Text 'int_of_size' Name ' ' Text ':' Operator ' ' Text 'size' Name ' ' Text '->' Operator ' ' Text 'int' Keyword.Type ' ' Text '=' Operator ' ' Text '"' Literal.String.Double '%identity' Literal.String.Double '"' Literal.String.Double ';;' Operator '\n\n' Text '(*' Comment ' Tokens are one of the following : ' Comment '*)' Comment '\n\n' Text 'type' Keyword ' ' Text 'pp_token' Name ' ' Text '=' Operator '\n' Text '|' Operator ' ' Text 'Pp_text' Name.Class ' ' Text 'of' Keyword ' ' Text 'string' Keyword.Type ' ' Text '(*' Comment ' normal text ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_break' Name.Class ' ' Text 'of' Keyword ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ' ' Text 'int' Keyword.Type ' ' Text '(*' Comment ' complete break ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_tbreak' Name.Class ' ' Text 'of' Keyword ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ' ' Text 'int' Keyword.Type ' ' Text '(*' Comment ' go to next tabulation ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_stab' Name.Class ' ' Text '(*' Comment ' set a tabulation ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_begin' Name.Class ' ' Text 'of' Keyword ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ' ' Text 'block_type' Name ' ' Text '(*' Comment ' beginning of a block ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_end' Name.Class ' ' Text '(*' Comment ' end of a block ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_tbegin' Name.Class ' ' Text 'of' Keyword ' ' Text 'tblock' Name ' ' Text '(*' Comment ' beginning of a tabulation block ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_tend' Name.Class ' ' Text '(*' Comment ' end of a tabulation block ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_newline' Name.Class ' ' Text '(*' Comment ' to force a newline inside a block ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_if_newline' Name.Class ' ' Text '(*' Comment ' to do something only if this very\n line has been broken ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_open_tag' Name.Class ' ' Text 'of' Keyword ' ' Text 'string' Keyword.Type ' ' Text '(*' Comment ' opening a tag name ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_close_tag' Name.Class ' ' Text '(*' Comment ' closing the most recently opened tag ' Comment '*)' Comment '\n\n' Text 'and' Operator.Word ' ' Text 'tag' Name ' ' Text '=' Operator ' ' Text 'string' Keyword.Type '\n\n' Text 'and' Operator.Word ' ' Text 'block_type' Name ' ' Text '=' Operator '\n' Text '|' Operator ' ' Text 'Pp_hbox' Name.Class ' ' Text '(*' Comment ' Horizontal block no line breaking ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_vbox' Name.Class ' ' Text '(*' Comment ' Vertical block each break leads to a new line ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_hvbox' Name.Class ' ' Text '(*' Comment ' Horizontal-vertical block: same as vbox, except if this block\n is small enough to fit on a single line ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_hovbox' Name.Class ' ' Text '(*' Comment ' Horizontal or Vertical block: breaks lead to new line\n only when necessary to print the content of the block ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_box' Name.Class ' ' Text '(*' Comment ' Horizontal or Indent block: breaks lead to new line\n only when necessary to print the content of the block, or\n when it leads to a new indentation of the current line ' Comment '*)' Comment '\n' Text '|' Operator ' ' Text 'Pp_fits' Name.Class ' ' Text '(*' Comment ' Internal usage: when a block fits on a single line ' Comment '*)' Comment '\n\n' Text 'and' Operator.Word ' ' Text 'tblock' Name ' ' Text '=' Operator ' ' Text 'Pp_tbox' Name.Class ' ' Text 'of' Keyword ' ' Text 'int' Keyword.Type ' ' Text 'list' Keyword.Type ' ' Text 'ref' Name ' ' Text '(*' Comment ' Tabulation box ' Comment '*)' Comment '\n' Text ';;' Operator '\n\n' Text '(*' Comment ' The Queue:\n contains all formatting elements.\n elements are tuples ' Comment '(' Comment 'size, token, length' Comment ')' Comment ', where\n size is set when the size of the block is known\n len is the declared length of the token. ' Comment '*)' Comment '\n' Text 'type' Keyword ' ' Text 'pp_queue_elem' Name ' ' Text '=' Operator ' ' Text '{' Operator '\n ' Text 'mutable' Keyword ' ' Text 'elem_size' Name ' ' Text ':' Operator ' ' Text 'size' Name ';' Operator ' ' Text 'token' Name ' ' Text ':' Operator ' ' Text 'pp_token' Name ';' Operator ' ' Text 'length' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type '\n' Text '}' Operator ';;' Operator '\n\n' Text '(*' Comment ' Scan stack:\n each element is ' Comment '(' Comment 'left_total, queue element' Comment ')' Comment ' where left_total\n is the value of pp_left_total when the element has been enqueued. ' Comment '*)' Comment '\n' Text 'type' Keyword ' ' Text 'pp_scan_elem' Name ' ' Text '=' Operator ' ' Text 'Scan_elem' Name.Class ' ' Text 'of' Keyword ' ' Text 'int' Keyword.Type ' ' Text '*' Operator ' ' Text 'pp_queue_elem' Name ';;' Operator '\n\n' Text '(*' Comment ' Formatting stack:\n used to break the lines while printing tokens.\n The formatting stack contains the description of\n the currently active blocks. ' Comment '*)' Comment '\n' Text 'type' Keyword ' ' Text 'pp_format_elem' Name ' ' Text '=' Operator ' ' Text 'Format_elem' Name.Class ' ' Text 'of' Keyword ' ' Text 'block_type' Name ' ' Text '*' Operator ' ' Text 'int' Keyword.Type ';;' Operator '\n\n' Text '(*' Comment ' General purpose queues, used in the formatter. ' Comment '*)' Comment '\n' Text 'type' Keyword ' ' Text "'" Keyword 'a' Name ' ' Text 'queue_elem' Name ' ' Text '=' Operator ' ' Text '|' Operator ' ' Text 'Nil' Name.Class ' ' Text '|' Operator ' ' Text 'Cons' Name.Class ' ' Text 'of' Keyword ' ' Text "'" Keyword 'a' Name ' ' Text 'queue_cell' Name '\n' Text 'and' Operator.Word ' ' Text "'" Keyword 'a' Name ' ' Text 'queue_cell' Name ' ' Text '=' Operator ' ' Text '{' Operator 'mutable' Keyword ' ' Text 'head' Name ' ' Text ':' Operator ' ' Text "'" Keyword 'a' Name ';' Operator ' ' Text 'mutable' Keyword ' ' Text 'tail' Name ' ' Text ':' Operator ' ' Text "'" Keyword 'a' Name ' ' Text 'queue_elem' Name '}' Operator ';;' Operator '\n\n' Text 'type' Keyword ' ' Text "'" Keyword 'a' Name ' ' Text 'queue' Name ' ' Text '=' Operator ' ' Text '{' Operator '\n ' Text 'mutable' Keyword ' ' Text 'insert' Name ' ' Text ':' Operator ' ' Text "'" Keyword 'a' Name ' ' Text 'queue_elem' Name ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'body' Name ' ' Text ':' Operator ' ' Text "'" Keyword 'a' Name ' ' Text 'queue_elem' Name '\n' Text '}' Operator ';;' Operator '\n\n' Text '(*' Comment ' The formatter specific tag handling functions. ' Comment '*)' Comment '\n' Text 'type' Keyword ' ' Text 'formatter_tag_functions' Name ' ' Text '=' Operator ' ' Text '{' Operator '\n ' Text 'mark_open_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ';' Operator '\n ' Text 'mark_close_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ';' Operator '\n ' Text 'print_open_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text 'print_close_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n\n' Text '}' Operator ';;' Operator '\n\n' Text '(*' Comment ' A formatter with all its machinery. ' Comment '*)' Comment '\n' Text 'type' Keyword ' ' Text 'formatter' Name ' ' Text '=' Operator ' ' Text '{' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_scan_stack' Name ' ' Text ':' Operator ' ' Text 'pp_scan_elem' Name ' ' Text 'list' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_format_stack' Name ' ' Text ':' Operator ' ' Text 'pp_format_elem' Name ' ' Text 'list' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_tbox_stack' Name ' ' Text ':' Operator ' ' Text 'tblock' Name ' ' Text 'list' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_tag_stack' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text 'list' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_mark_stack' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text 'list' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Global variables: default initialization is\n set_margin 78\n set_min_space_left 0. ' Comment '*)' Comment '\n ' Text '(*' Comment ' Value of right margin. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_margin' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Minimal space left before margin, when opening a block. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_min_space_left' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Maximum value of indentation:\n no blocks can be opened further. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_max_indent' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Space remaining on the current line. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_space_left' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Current value of indentation. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_current_indent' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' True when the line has been broken by the pretty-printer. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_is_new_line' Name ' ' Text ':' Operator ' ' Text 'bool' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Total width of tokens already printed. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_left_total' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Total width of tokens ever put in queue. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_right_total' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Current number of opened blocks. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_curr_depth' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Maximum number of blocks which can be simultaneously opened. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_max_boxes' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Ellipsis string. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_ellipsis' Name ' ' Text ':' Operator ' ' Text 'string' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Output function. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_output_function' Name ' ' Text ':' Operator ' ' Text 'string' Keyword.Type ' ' Text '->' Operator ' ' Text 'int' Keyword.Type ' ' Text '->' Operator ' ' Text 'int' Keyword.Type ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Flushing function. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_flush_function' Name ' ' Text ':' Operator ' ' Text 'unit' Keyword.Type ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Output of new lines. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_output_newline' Name ' ' Text ':' Operator ' ' Text 'unit' Keyword.Type ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Output of indentation spaces. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_output_spaces' Name ' ' Text ':' Operator ' ' Text 'int' Keyword.Type ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Are tags printed ? ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_print_tags' Name ' ' Text ':' Operator ' ' Text 'bool' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Are tags marked ? ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_mark_tags' Name ' ' Text ':' Operator ' ' Text 'bool' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' Find opening and closing markers of tags. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_mark_open_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_mark_close_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_print_open_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text 'mutable' Keyword ' ' Text 'pp_print_close_tag' Name ' ' Text ':' Operator ' ' Text 'tag' Name ' ' Text '->' Operator ' ' Text 'unit' Keyword.Type ';' Operator '\n ' Text '(*' Comment ' The pretty-printer queue. ' Comment '*)' Comment '\n ' Text 'mutable' Keyword ' ' Text 'pp_queue' Name ' ' Text ':' Operator ' ' Text 'pp_queue_elem' Name ' ' Text 'queue' Name '\n' Text '}' Operator ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Auxilliaries and basic functions.\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n\n' Text '(*' Comment ' Queues auxilliaries. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'make_queue' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text '{' Operator 'insert' Name ' ' Text '=' Operator ' ' Text 'Nil' Name.Class ';' Operator ' ' Text 'body' Name ' ' Text '=' Operator ' ' Text 'Nil' Name.Class '}' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'clear_queue' Name ' ' Text 'q' Name ' ' Text '=' Operator ' ' Text 'q' Name '.' Operator 'insert' Name ' ' Text '<-' Operator ' ' Text 'Nil' Name.Class ';' Operator ' ' Text 'q' Name '.' Operator 'body' Name ' ' Text '<-' Operator ' ' Text 'Nil' Name.Class ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'add_queue' Name ' ' Text 'x' Name ' ' Text 'q' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'c' Name ' ' Text '=' Operator ' ' Text 'Cons' Name.Class ' ' Text '{' Operator 'head' Name ' ' Text '=' Operator ' ' Text 'x' Name ';' Operator ' ' Text 'tail' Name ' ' Text '=' Operator ' ' Text 'Nil' Name.Class '}' Operator ' ' Text 'in' Keyword '\n ' Text 'match' Keyword ' ' Text 'q' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text '{' Operator 'insert' Name ' ' Text '=' Operator ' ' Text 'Cons' Name.Class ' ' Text 'cell' Name '}' Operator ' ' Text '->' Operator ' ' Text 'q' Name '.' Operator 'insert' Name ' ' Text '<-' Operator ' ' Text 'c' Name ';' Operator ' ' Text 'cell' Name '.' Operator 'tail' Name ' ' Text '<-' Operator ' ' Text 'c' Name '\n ' Text '(*' Comment ' Invariant: when insert is Nil body should be Nil. ' Comment '*)' Comment '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'q' Name '.' Operator 'insert' Name ' ' Text '<-' Operator ' ' Text 'c' Name ';' Operator ' ' Text 'q' Name '.' Operator 'body' Name ' ' Text '<-' Operator ' ' Text 'c' Name ';;' Operator '\n\n' Text 'exception' Keyword ' ' Text 'Empty_queue' Name.Class ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'peek_queue' Name ' ' Text '=' Operator ' ' Text 'function' Keyword '\n ' Text '|' Operator ' ' Text '{' Operator 'body' Name ' ' Text '=' Operator ' ' Text 'Cons' Name.Class ' ' Text '{' Operator 'head' Name ' ' Text '=' Operator ' ' Text 'x' Name '}' Operator '}' Operator ' ' Text '->' Operator ' ' Text 'x' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'raise' Keyword ' ' Text 'Empty_queue' Name.Class ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'take_queue' Name ' ' Text '=' Operator ' ' Text 'function' Keyword '\n ' Text '|' Operator ' ' Text '{' Operator 'body' Name ' ' Text '=' Operator ' ' Text 'Cons' Name.Class ' ' Text '{' Operator 'head' Name ' ' Text '=' Operator ' ' Text 'x' Name ';' Operator ' ' Text 'tail' Name ' ' Text '=' Operator ' ' Text 'tl' Name '}' Operator '}' Operator ' ' Text 'as' Keyword ' ' Text 'q' Name ' ' Text '->' Operator '\n ' Text 'q' Name '.' Operator 'body' Name ' ' Text '<-' Operator ' ' Text 'tl' Name ';' Operator '\n ' Text 'if' Keyword ' ' Text 'tl' Name ' ' Text '=' Operator ' ' Text 'Nil' Name.Class ' ' Text 'then' Keyword ' ' Text 'q' Name '.' Operator 'insert' Name ' ' Text '<-' Operator ' ' Text 'Nil' Name.Class ';' Operator ' ' Text '(*' Comment ' Maintain the invariant. ' Comment '*)' Comment '\n ' Text 'x' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'raise' Keyword ' ' Text 'Empty_queue' Name.Class ';;' Operator '\n\n' Text '(*' Comment ' Enter a token in the pretty-printer queue. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_enqueue' Name ' ' Text 'state' Name ' ' Text '(' Operator '{' Operator 'length' Name ' ' Text '=' Operator ' ' Text 'len' Name '}' Operator ' ' Text 'as' Keyword ' ' Text 'token' Name ')' Operator ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '+' Operator ' ' Text 'len' Name ';' Operator '\n ' Text 'add_queue' Name ' ' Text 'token' Name ' ' Text 'state' Name '.' Operator 'pp_queue' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_clear_queue' Name ' ' Text 'state' Name ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_left_total' Name ' ' Text '<-' Operator ' ' Text '1' Literal.Number.Integer ';' Operator ' ' Text 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '<-' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'clear_queue' Name ' ' Text 'state' Name '.' Operator 'pp_queue' Name ';;' Operator '\n\n' Text '(*' Comment " Pp_infinity: large value for default tokens size.\n\n Pp_infinity is documented as being greater than 1e10; to avoid\n confusion about the word ``greater'', we choose pp_infinity greater\n than 1e10 + 1; for correct handling of tests in the algorithm,\n pp_infinity must be even one more than 1e10 + 1; let's stand on the\n safe side by choosing 1.e10+10.\n\n Pp_infinity could probably be 1073741823 that is 2^30 - 1, that is\n the minimal upper bound for integers; now that max_int is defined,\n this limit could also be defined as max_int - 1.\n\n However, before setting pp_infinity to something around max_int, we\n must carefully double-check all the integer arithmetic operations\n that involve pp_infinity, since any overflow would wreck havoc the\n pretty-printing algorithm's invariants. Given that this arithmetic\n correctness check is difficult and error prone and given that 1e10\n + 1 is in practice large enough, there is no need to attempt to set\n pp_infinity to the theoretically maximum limit. Is it not worth the\n burden ! " Comment '*)' Comment '\n\n' Text 'let' Keyword ' ' Text 'pp_infinity' Name ' ' Text '=' Operator ' ' Text '1000000010' Literal.Number.Integer ';;' Operator '\n\n' Text '(*' Comment ' Output functions for the formatter. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_output_string' Name ' ' Text 'state' Name ' ' Text 's' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_output_function' Name ' ' Text 's' Name ' ' Text '0' Literal.Number.Integer ' ' Text '(' Operator 'String' Name.Namespace '.' Punctuation 'length' Name ' ' Text 's' Name ')' Operator '\n' Text 'and' Operator.Word ' ' Text 'pp_output_newline' Name ' ' Text 'state' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_output_newline' Name ' ' Text '()' Name.Builtin.Pseudo ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_display_blanks' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_output_spaces' Name ' ' Text 'n' Name ';;' Operator '\n\n' Text '(*' Comment ' To format a break, indenting a new line. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text 'offset' Name ' ' Text 'width' Name ' ' Text '=' Operator '\n ' Text 'pp_output_newline' Name ' ' Text 'state' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_is_new_line' Name ' ' Text '<-' Operator ' ' Text 'true' Name.Builtin.Pseudo ';' Operator '\n ' Text 'let' Keyword ' ' Text 'indent' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'width' Name ' ' Text '+' Operator ' ' Text 'offset' Name ' ' Text 'in' Keyword '\n ' Text '(*' Comment " Don't indent more than pp_max_indent. " Comment '*)' Comment '\n ' Text 'let' Keyword ' ' Text 'real_indent' Name ' ' Text '=' Operator ' ' Text 'min' Name ' ' Text 'state' Name '.' Operator 'pp_max_indent' Name ' ' Text 'indent' Name ' ' Text 'in' Keyword '\n ' Text 'state' Name '.' Operator 'pp_current_indent' Name ' ' Text '<-' Operator ' ' Text 'real_indent' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_current_indent' Name ';' Operator '\n ' Text 'pp_display_blanks' Name ' ' Text 'state' Name ' ' Text 'state' Name '.' Operator 'pp_current_indent' Name ';;' Operator '\n\n' Text '(*' Comment ' To force a line break inside a block: no offset is added. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'break_line' Name ' ' Text 'state' Name ' ' Text 'width' Name ' ' Text '=' Operator ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'width' Name ';;' Operator '\n\n' Text '(*' Comment ' To format a break that fits on the current line. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text 'width' Name ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '-' Operator ' ' Text 'width' Name ';' Operator '\n ' Text 'pp_display_blanks' Name ' ' Text 'state' Name ' ' Text 'width' Name ';;' Operator '\n\n' Text '(*' Comment ' To indent no more than pp_max_indent, if one tries to open a block\n beyond pp_max_indent, then the block is rejected on the left\n by simulating a break. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_force_break_line' Name ' ' Text 'state' Name ' ' Text '=' Operator '\n ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Format_elem' Name.Class ' ' Text '(' Operator 'bl_ty' Name ',' Operator ' ' Text 'width' Name ')' Operator ' ' Text '::' Operator ' ' Text '_' Operator ' ' Text '->' Operator '\n ' Text 'if' Keyword ' ' Text 'width' Name ' ' Text '>' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text 'then' Keyword '\n ' Text '(' Operator 'match' Keyword ' ' Text 'bl_ty' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_fits' Name.Class ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '|' Operator ' ' Text 'Pp_hbox' Name.Class ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'break_line' Name ' ' Text 'state' Name ' ' Text 'width' Name ')' Operator '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'pp_output_newline' Name ' ' Text 'state' Name ';;' Operator '\n\n' Text '(*' Comment ' To skip a token, if the previous line has been broken. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_skip_token' Name ' ' Text 'state' Name ' ' Text '=' Operator '\n ' Text '(*' Comment ' When calling pp_skip_token the queue cannot be empty. ' Comment '*)' Comment '\n ' Text 'match' Keyword ' ' Text 'take_queue' Name ' ' Text 'state' Name '.' Operator 'pp_queue' Name ' ' Text 'with' Keyword '\n ' Text '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size' Name ';' Operator ' ' Text 'length' Name ' ' Text '=' Operator ' ' Text 'len' Name '}' Operator ' ' Text '->' Operator '\n ' Text 'state' Name '.' Operator 'pp_left_total' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_left_total' Name ' ' Text '-' Operator ' ' Text 'len' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '+' Operator ' ' Text 'int_of_size' Name ' ' Text 'size' Name ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n The main pretting printing functions.\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text '(*' Comment ' To format a token. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'format_pp_token' Name ' ' Text 'state' Name ' ' Text 'size' Name ' ' Text '=' Operator ' ' Text 'function' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_text' Name.Class ' ' Text 's' Name ' ' Text '->' Operator '\n ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '-' Operator ' ' Text 'size' Name ';' Operator '\n ' Text 'pp_output_string' Name ' ' Text 'state' Name ' ' Text 's' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_is_new_line' Name ' ' Text '<-' Operator ' ' Text 'false' Name.Builtin.Pseudo '\n\n ' Text '|' Operator ' ' Text 'Pp_begin' Name.Class ' ' Text '(' Operator 'off' Name ',' Operator ' ' Text 'ty' Name ')' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'insertion_point' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text 'in' Keyword '\n ' Text 'if' Keyword ' ' Text 'insertion_point' Name ' ' Text '>' Operator ' ' Text 'state' Name '.' Operator 'pp_max_indent' Name ' ' Text 'then' Keyword '\n ' Text '(*' Comment " can't open a block right there. " Comment '*)' Comment '\n ' Text 'begin' Keyword ' ' Text 'pp_force_break_line' Name ' ' Text 'state' Name ' ' Text 'end' Keyword ';' Operator '\n ' Text 'let' Keyword ' ' Text 'offset' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '-' Operator ' ' Text 'off' Name ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'bl_type' Name ' ' Text '=' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'ty' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_vbox' Name.Class ' ' Text '->' Operator ' ' Text 'Pp_vbox' Name.Class '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'if' Keyword ' ' Text 'size' Name ' ' Text '>' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text 'then' Keyword ' ' Text 'ty' Name ' ' Text 'else' Keyword ' ' Text 'Pp_fits' Name.Class '\n ' Text 'end' Keyword ' ' Text 'in' Keyword '\n ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text '<-' Operator '\n ' Text 'Format_elem' Name.Class ' ' Text '(' Operator 'bl_type' Name ',' Operator ' ' Text 'offset' Name ')' Operator ' ' Text '::' Operator ' ' Text 'state' Name '.' Operator 'pp_format_stack' Name '\n\n ' Text '|' Operator ' ' Text 'Pp_end' Name.Class ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'x' Name ' ' Text '::' Operator ' ' Text '(' Operator 'y' Name ' ' Text '::' Operator ' ' Text 'l' Name ' ' Text 'as' Keyword ' ' Text 'ls' Name ')' Operator ' ' Text '->' Operator ' ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text '<-' Operator ' ' Text 'ls' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No more block to close. ' Comment '*)' Comment '\n ' Text 'end' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_tbegin' Name.Class ' ' Text '(' Operator 'Pp_tbox' Name.Class ' ' Text '_' Operator ' ' Text 'as' Keyword ' ' Text 'tbox' Name ')' Operator ' ' Text '->' Operator '\n ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name ' ' Text '<-' Operator ' ' Text 'tbox' Name ' ' Text '::' Operator ' ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name '\n\n ' Text '|' Operator ' ' Text 'Pp_tend' Name.Class ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'x' Name ' ' Text '::' Operator ' ' Text 'ls' Name ' ' Text '->' Operator ' ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name ' ' Text '<-' Operator ' ' Text 'ls' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No more tabulation block to close. ' Comment '*)' Comment '\n ' Text 'end' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_stab' Name.Class ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_tbox' Name.Class ' ' Text 'tabs' Name ' ' Text '::' Operator ' ' Text '_' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'add_tab' Name ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'function' Keyword '\n ' Text '|' Operator ' ' Text '[]' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text '[' Operator 'n' Name ']' Operator '\n ' Text '|' Operator ' ' Text 'x' Name ' ' Text '::' Operator ' ' Text 'l' Name ' ' Text 'as' Keyword ' ' Text 'ls' Name ' ' Text '->' Operator ' ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '<' Operator ' ' Text 'x' Name ' ' Text 'then' Keyword ' ' Text 'n' Name ' ' Text '::' Operator ' ' Text 'ls' Name ' ' Text 'else' Keyword ' ' Text 'x' Name ' ' Text '::' Operator ' ' Text 'add_tab' Name ' ' Text 'n' Name ' ' Text 'l' Name ' ' Text 'in' Keyword '\n ' Text 'tabs' Name ' ' Text ':=' Operator ' ' Text 'add_tab' Name ' ' Text '(' Operator 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ')' Operator ' ' Text '!' Operator 'tabs' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No opened tabulation block. ' Comment '*)' Comment '\n ' Text 'end' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_tbreak' Name.Class ' ' Text '(' Operator 'n' Name ',' Operator ' ' Text 'off' Name ')' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'insertion_point' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text 'in' Keyword '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_tbox' Name.Class ' ' Text 'tabs' Name ' ' Text '::' Operator ' ' Text '_' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'find' Name ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'function' Keyword '\n ' Text '|' Operator ' ' Text 'x' Name ' ' Text '::' Operator ' ' Text 'l' Name ' ' Text '->' Operator ' ' Text 'if' Keyword ' ' Text 'x' Name ' ' Text '>' Operator '=' Operator ' ' Text 'n' Name ' ' Text 'then' Keyword ' ' Text 'x' Name ' ' Text 'else' Keyword ' ' Text 'find' Name ' ' Text 'n' Name ' ' Text 'l' Name '\n ' Text '|' Operator ' ' Text '[]' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text 'raise' Keyword ' ' Text 'Not_found' Name.Class ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'tab' Name ' ' Text '=' Operator '\n ' Text 'match' Keyword ' ' Text '!' Operator 'tabs' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'x' Name ' ' Text '::' Operator ' ' Text 'l' Name ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'try' Keyword ' ' Text 'find' Name ' ' Text 'insertion_point' Name ' ' Text '!' Operator 'tabs' Name ' ' Text 'with' Keyword ' ' Text 'Not_found' Name.Class ' ' Text '->' Operator ' ' Text 'x' Name ' ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'insertion_point' Name ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'offset' Name ' ' Text '=' Operator ' ' Text 'tab' Name ' ' Text '-' Operator ' ' Text 'insertion_point' Name ' ' Text 'in' Keyword '\n ' Text 'if' Keyword ' ' Text 'offset' Name ' ' Text '>' Operator '=' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'then' Keyword ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text '(' Operator 'offset' Name ' ' Text '+' Operator ' ' Text 'n' Name ')' Operator ' ' Text 'else' Keyword '\n ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text '(' Operator 'tab' Name ' ' Text '+' Operator ' ' Text 'off' Name ')' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No opened tabulation block. ' Comment '*)' Comment '\n ' Text 'end' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_newline' Name.Class ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Format_elem' Name.Class ' ' Text '(' Operator '_' Operator ',' Operator ' ' Text 'width' Name ')' Operator ' ' Text '::' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'break_line' Name ' ' Text 'state' Name ' ' Text 'width' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'pp_output_newline' Name ' ' Text 'state' Name '\n ' Text 'end' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_if_newline' Name.Class ' ' Text '->' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_current_indent' Name ' ' Text '!=' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name '\n ' Text 'then' Keyword ' ' Text 'pp_skip_token' Name ' ' Text 'state' Name '\n\n ' Text '|' Operator ' ' Text 'Pp_break' Name.Class ' ' Text '(' Operator 'n' Name ',' Operator ' ' Text 'off' Name ')' Operator ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Format_elem' Name.Class ' ' Text '(' Operator 'ty' Name ',' Operator ' ' Text 'width' Name ')' Operator ' ' Text '::' Operator ' ' Text '_' Operator ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'ty' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_hovbox' Name.Class ' ' Text '->' Operator '\n ' Text 'if' Keyword ' ' Text 'size' Name ' ' Text '>' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name '\n ' Text 'then' Keyword ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text 'off' Name ' ' Text 'width' Name '\n ' Text 'else' Keyword ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text 'n' Name '\n ' Text '|' Operator ' ' Text 'Pp_box' Name.Class ' ' Text '->' Operator '\n ' Text '(*' Comment ' Have the line just been broken here ? ' Comment '*)' Comment '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_is_new_line' Name ' ' Text 'then' Keyword ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text 'else' Keyword '\n ' Text 'if' Keyword ' ' Text 'size' Name ' ' Text '>' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name '\n ' Text 'then' Keyword ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text 'off' Name ' ' Text 'width' Name ' ' Text 'else' Keyword '\n ' Text '(*' Comment ' break the line here leads to new indentation ? ' Comment '*)' Comment '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_current_indent' Name ' ' Text '>' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'width' Name ' ' Text '+' Operator ' ' Text 'off' Name '\n ' Text 'then' Keyword ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text 'off' Name ' ' Text 'width' Name '\n ' Text 'else' Keyword ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text 'n' Name '\n ' Text '|' Operator ' ' Text 'Pp_hvbox' Name.Class ' ' Text '->' Operator ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text 'off' Name ' ' Text 'width' Name '\n ' Text '|' Operator ' ' Text 'Pp_fits' Name.Class ' ' Text '->' Operator ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text 'n' Name '\n ' Text '|' Operator ' ' Text 'Pp_vbox' Name.Class ' ' Text '->' Operator ' ' Text 'break_new_line' Name ' ' Text 'state' Name ' ' Text 'off' Name ' ' Text 'width' Name '\n ' Text '|' Operator ' ' Text 'Pp_hbox' Name.Class ' ' Text '->' Operator ' ' Text 'break_same_line' Name ' ' Text 'state' Name ' ' Text 'n' Name '\n ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No opened block. ' Comment '*)' Comment '\n ' Text 'end' Keyword '\n\n ' Text '|' Operator ' ' Text 'Pp_open_tag' Name.Class ' ' Text 'tag_name' Name ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'marker' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_open_tag' Name ' ' Text 'tag_name' Name ' ' Text 'in' Keyword '\n ' Text 'pp_output_string' Name ' ' Text 'state' Name ' ' Text 'marker' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_mark_stack' Name ' ' Text '<-' Operator ' ' Text 'tag_name' Name ' ' Text '::' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_stack' Name '\n\n ' Text '|' Operator ' ' Text 'Pp_close_tag' Name.Class ' ' Text '->' Operator '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_mark_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'tag_name' Name ' ' Text '::' Operator ' ' Text 'tags' Name ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'marker' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_close_tag' Name ' ' Text 'tag_name' Name ' ' Text 'in' Keyword '\n ' Text 'pp_output_string' Name ' ' Text 'state' Name ' ' Text 'marker' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_mark_stack' Name ' ' Text '<-' Operator ' ' Text 'tags' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No more tag to close. ' Comment '*)' Comment '\n ' Text 'end' Keyword ';;' Operator '\n\n' Text '(*' Comment ' Print if token size is known or printing is delayed.\n Size is known when not negative.\n Printing is delayed when the text waiting in the queue requires\n more room to format than exists on the current line. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'advance_left' Name ' ' Text 'state' Name ' ' Text '=' Operator '\n ' Text 'try' Keyword '\n ' Text 'match' Keyword ' ' Text 'peek_queue' Name ' ' Text 'state' Name '.' Operator 'pp_queue' Name ' ' Text 'with' Keyword '\n ' Text '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size' Name ';' Operator ' ' Text 'token' Name ' ' Text '=' Operator ' ' Text 'tok' Name ';' Operator ' ' Text 'length' Name ' ' Text '=' Operator ' ' Text 'len' Name '}' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'size' Name ' ' Text '=' Operator ' ' Text 'int_of_size' Name ' ' Text 'size' Name ' ' Text 'in' Keyword '\n ' Text 'if' Keyword ' ' Text 'not' Name '\n ' Text '(' Operator 'size' Name ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ' ' Text '&&' Operator '\n ' Text '(' Operator 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_left_total' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_space_left' Name ')' Operator ')' Operator '\n ' Text 'then' Keyword ' ' Text 'begin' Keyword '\n ' Text 'ignore' Name '(' Operator 'take_queue' Name ' ' Text 'state' Name '.' Operator 'pp_queue' Name ')' Operator ';' Operator '\n ' Text 'format_pp_token' Name ' ' Text 'state' Name ' ' Text '(' Operator 'if' Keyword ' ' Text 'size' Name ' ' Text '<' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'then' Keyword ' ' Text 'pp_infinity' Name ' ' Text 'else' Keyword ' ' Text 'size' Name ')' Operator ' ' Text 'tok' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_left_total' Name ' ' Text '<-' Operator ' ' Text 'len' Name ' ' Text '+' Operator ' ' Text 'state' Name '.' Operator 'pp_left_total' Name ';' Operator '\n ' Text 'advance_left' Name ' ' Text 'state' Name '\n ' Text 'end' Keyword '\n ' Text 'with' Keyword ' ' Text 'Empty_queue' Name.Class ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text 'tok' Name ' ' Text '=' Operator ' ' Text 'pp_enqueue' Name ' ' Text 'state' Name ' ' Text 'tok' Name ';' Operator ' ' Text 'advance_left' Name ' ' Text 'state' Name ';;' Operator '\n\n' Text '(*' Comment ' To enqueue a string : try to advance. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'make_queue_elem' Name ' ' Text 'size' Name ' ' Text 'tok' Name ' ' Text 'len' Name ' ' Text '=' Operator '\n ' Text '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size' Name ';' Operator ' ' Text 'token' Name ' ' Text '=' Operator ' ' Text 'tok' Name ';' Operator ' ' Text 'length' Name ' ' Text '=' Operator ' ' Text 'len' Name '}' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'enqueue_string_as' Name ' ' Text 'state' Name ' ' Text 'size' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'len' Name ' ' Text '=' Operator ' ' Text 'int_of_size' Name ' ' Text 'size' Name ' ' Text 'in' Keyword '\n ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text '(' Operator 'make_queue_elem' Name ' ' Text 'size' Name ' ' Text '(' Operator 'Pp_text' Name.Class ' ' Text 's' Name ')' Operator ' ' Text 'len' Name ')' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'enqueue_string' Name ' ' Text 'state' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'len' Name ' ' Text '=' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'length' Name ' ' Text 's' Name ' ' Text 'in' Keyword '\n ' Text 'enqueue_string_as' Name ' ' Text 'state' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text 'len' Name ')' Operator ' ' Text 's' Name ';;' Operator '\n\n' Text '(*' Comment ' Routines for scan stack\n determine sizes of blocks. ' Comment '*)' Comment '\n\n' Text '(*' Comment ' The scan_stack is never empty. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'scan_stack_bottom' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'q_elem' Name ' ' Text '=' Operator ' ' Text 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '(' Operator '-' Operator '1' Literal.Number.Integer ')' Operator ')' Operator ' ' Text '(' Operator 'Pp_text' Name.Class ' ' Text '"' Literal.String.Double '"' Literal.String.Double ')' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text '[' Operator 'Scan_elem' Name.Class ' ' Text '(' Operator '-' Operator '1' Literal.Number.Integer ',' Operator ' ' Text 'q_elem' Name ')' Operator ']' Operator ';;' Operator '\n\n' Text '(*' Comment ' Set size of blocks on scan stack:\n if ty = true then size of break is set else size of block is set;\n in each case pp_scan_stack is popped. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'clear_scan_stack' Name ' ' Text 'state' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_scan_stack' Name ' ' Text '<-' Operator ' ' Text 'scan_stack_bottom' Name ';;' Operator '\n\n' Text '(*' Comment ' Pattern matching on scan stack is exhaustive,\n since scan_stack is never empty.\n Pattern matching on token in scan stack is also exhaustive,\n since scan_push is used on breaks and opening of boxes. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'set_size' Name ' ' Text 'state' Name ' ' Text 'ty' Name ' ' Text '=' Operator '\n ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_scan_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Scan_elem' Name.Class '\n ' Text '(' Operator 'left_tot' Name ',' Operator '\n ' Text '(' Operator '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size' Name ';' Operator ' ' Text 'token' Name ' ' Text '=' Operator ' ' Text 'tok' Name '}' Operator ' ' Text 'as' Keyword ' ' Text 'queue_elem' Name ')' Operator ')' Operator ' ' Text '::' Operator ' ' Text 't' Name ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'size' Name ' ' Text '=' Operator ' ' Text 'int_of_size' Name ' ' Text 'size' Name ' ' Text 'in' Keyword '\n ' Text '(*' Comment ' test if scan stack contains any data that is not obsolete. ' Comment '*)' Comment '\n ' Text 'if' Keyword ' ' Text 'left_tot' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_left_total' Name ' ' Text 'then' Keyword ' ' Text 'clear_scan_stack' Name ' ' Text 'state' Name ' ' Text 'else' Keyword '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'tok' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_break' Name.Class ' ' Text '(' Operator '_' Operator ',' Operator ' ' Text '_' Operator ')' Operator ' ' Text '|' Operator ' ' Text 'Pp_tbreak' Name.Class ' ' Text '(' Operator '_' Operator ',' Operator ' ' Text '_' Operator ')' Operator ' ' Text '->' Operator '\n ' Text 'if' Keyword ' ' Text 'ty' Name ' ' Text 'then' Keyword '\n ' Text 'begin' Keyword '\n ' Text 'queue_elem' Name '.' Operator 'elem_size' Name ' ' Text '<-' Operator ' ' Text 'size_of_int' Name ' ' Text '(' Operator 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '+' Operator ' ' Text 'size' Name ')' Operator ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_scan_stack' Name ' ' Text '<-' Operator ' ' Text 't' Name '\n ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text 'Pp_begin' Name.Class ' ' Text '(' Operator '_' Operator ',' Operator ' ' Text '_' Operator ')' Operator ' ' Text '->' Operator '\n ' Text 'if' Keyword ' ' Text 'not' Name ' ' Text 'ty' Name ' ' Text 'then' Keyword '\n ' Text 'begin' Keyword '\n ' Text 'queue_elem' Name '.' Operator 'elem_size' Name ' ' Text '<-' Operator ' ' Text 'size_of_int' Name ' ' Text '(' Operator 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '+' Operator ' ' Text 'size' Name ')' Operator ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_scan_stack' Name ' ' Text '<-' Operator ' ' Text 't' Name '\n ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' scan_push is only used for breaks and boxes. ' Comment '*)' Comment '\n ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' scan_stack is never empty. ' Comment '*)' Comment ';;' Operator '\n\n' Text '(*' Comment ' Push a token on scan stack. If b is true set_size is called. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'scan_push' Name ' ' Text 'state' Name ' ' Text 'b' Name ' ' Text 'tok' Name ' ' Text '=' Operator '\n ' Text 'pp_enqueue' Name ' ' Text 'state' Name ' ' Text 'tok' Name ';' Operator '\n ' Text 'if' Keyword ' ' Text 'b' Name ' ' Text 'then' Keyword ' ' Text 'set_size' Name ' ' Text 'state' Name ' ' Text 'true' Name.Builtin.Pseudo ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_scan_stack' Name ' ' Text '<-' Operator '\n ' Text 'Scan_elem' Name.Class ' ' Text '(' Operator 'state' Name '.' Operator 'pp_right_total' Name ',' Operator ' ' Text 'tok' Name ')' Operator ' ' Text '::' Operator ' ' Text 'state' Name '.' Operator 'pp_scan_stack' Name ';;' Operator '\n\n' Text '(*' Comment ' To open a new block :\n the user may set the depth bound pp_max_boxes\n any text nested deeper is printed as the ellipsis string. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text 'br_ty' Name ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'elem' Name ' ' Text '=' Operator '\n ' Text 'make_queue_elem' Name '\n ' Text '(' Operator 'size_of_int' Name ' ' Text '(' Operator '-' Operator ' ' Text 'state' Name '.' Operator 'pp_right_total' Name ')' Operator ')' Operator '\n ' Text '(' Operator 'Pp_begin' Name.Class ' ' Text '(' Operator 'indent' Name ',' Operator ' ' Text 'br_ty' Name ')' Operator ')' Operator '\n ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'scan_push' Name ' ' Text 'state' Name ' ' Text 'false' Name.Builtin.Pseudo ' ' Text 'elem' Name ' ' Text 'else' Keyword '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name '\n ' Text 'then' Keyword ' ' Text 'enqueue_string' Name ' ' Text 'state' Name ' ' Text 'state' Name '.' Operator 'pp_ellipsis' Name ';;' Operator '\n\n' Text '(*' Comment ' The box which is always opened. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_open_sys_box' Name ' ' Text 'state' Name ' ' Text '=' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'Pp_hovbox' Name.Class ';;' Operator '\n\n' Text '(*' Comment ' Close a block, setting sizes of its subblocks. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_close_box' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '>' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'then' Keyword '\n ' Text 'begin' Keyword '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'begin' Keyword '\n ' Text 'pp_enqueue' Name ' ' Text 'state' Name '\n ' Text '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ';' Operator ' ' Text 'token' Name ' ' Text '=' Operator ' ' Text 'Pp_end' Name.Class ';' Operator ' ' Text 'length' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '}' Operator ';' Operator '\n ' Text 'set_size' Name ' ' Text 'state' Name ' ' Text 'true' Name.Builtin.Pseudo ';' Operator ' ' Text 'set_size' Name ' ' Text 'state' Name ' ' Text 'false' Name.Builtin.Pseudo '\n ' Text 'end' Keyword ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '-' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'end' Keyword ';;' Operator '\n\n' Text '(*' Comment ' Open a tag, pushing it on the tag stack. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_open_tag' Name ' ' Text 'state' Name ' ' Text 'tag_name' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_print_tags' Name ' ' Text 'then' Keyword ' ' Text 'begin' Keyword '\n ' Text 'state' Name '.' Operator 'pp_tag_stack' Name ' ' Text '<-' Operator ' ' Text 'tag_name' Name ' ' Text '::' Operator ' ' Text 'state' Name '.' Operator 'pp_tag_stack' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_print_open_tag' Name ' ' Text 'tag_name' Name ' ' Text 'end' Keyword ';' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_mark_tags' Name ' ' Text 'then' Keyword '\n ' Text 'pp_enqueue' Name ' ' Text 'state' Name '\n ' Text '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ';' Operator ' ' Text 'token' Name ' ' Text '=' Operator ' ' Text 'Pp_open_tag' Name.Class ' ' Text 'tag_name' Name ';' Operator ' ' Text 'length' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '}' Operator ';;' Operator '\n\n' Text '(*' Comment ' Close a tag, popping it from the tag stack. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_close_tag' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_mark_tags' Name ' ' Text 'then' Keyword '\n ' Text 'pp_enqueue' Name ' ' Text 'state' Name '\n ' Text '{' Operator 'elem_size' Name ' ' Text '=' Operator ' ' Text 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ';' Operator ' ' Text 'token' Name ' ' Text '=' Operator ' ' Text 'Pp_close_tag' Name.Class ';' Operator ' ' Text 'length' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '}' Operator ';' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_print_tags' Name ' ' Text 'then' Keyword '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'state' Name '.' Operator 'pp_tag_stack' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'tag_name' Name ' ' Text '::' Operator ' ' Text 'tags' Name ' ' Text '->' Operator '\n ' Text 'state' Name '.' Operator 'pp_print_close_tag' Name ' ' Text 'tag_name' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_tag_stack' Name ' ' Text '<-' Operator ' ' Text 'tags' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text '(*' Comment ' No more tag to close. ' Comment '*)' Comment '\n ' Text 'end' Keyword ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_print_tags' Name ' ' Text 'state' Name ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_print_tags' Name ' ' Text '<-' Operator ' ' Text 'b' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_set_mark_tags' Name ' ' Text 'state' Name ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_tags' Name ' ' Text '<-' Operator ' ' Text 'b' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_get_print_tags' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_print_tags' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_get_mark_tags' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_tags' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_set_tags' Name ' ' Text 'state' Name ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'pp_set_print_tags' Name ' ' Text 'state' Name ' ' Text 'b' Name ';' Operator ' ' Text 'pp_set_mark_tags' Name ' ' Text 'state' Name ' ' Text 'b' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_get_formatter_tag_functions' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text '{' Operator '\n ' Text 'mark_open_tag' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_open_tag' Name ';' Operator '\n ' Text 'mark_close_tag' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_mark_close_tag' Name ';' Operator '\n ' Text 'print_open_tag' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_print_open_tag' Name ';' Operator '\n ' Text 'print_close_tag' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_print_close_tag' Name ';' Operator '\n' Text '}' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_formatter_tag_functions' Name ' ' Text 'state' Name ' ' Text '{' Operator '\n ' Text 'mark_open_tag' Name ' ' Text '=' Operator ' ' Text 'mot' Name ';' Operator '\n ' Text 'mark_close_tag' Name ' ' Text '=' Operator ' ' Text 'mct' Name ';' Operator '\n ' Text 'print_open_tag' Name ' ' Text '=' Operator ' ' Text 'pot' Name ';' Operator '\n ' Text 'print_close_tag' Name ' ' Text '=' Operator ' ' Text 'pct' Name ';' Operator '\n ' Text '}' Operator ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_mark_open_tag' Name ' ' Text '<-' Operator ' ' Text 'mot' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_mark_close_tag' Name ' ' Text '<-' Operator ' ' Text 'mct' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_print_open_tag' Name ' ' Text '<-' Operator ' ' Text 'pot' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_print_close_tag' Name ' ' Text '<-' Operator ' ' Text 'pct' Name ';;' Operator '\n\n' Text '(*' Comment ' Initialize pretty-printer. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_rinit' Name ' ' Text 'state' Name ' ' Text '=' Operator '\n ' Text 'pp_clear_queue' Name ' ' Text 'state' Name ';' Operator '\n ' Text 'clear_scan_stack' Name ' ' Text 'state' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_format_stack' Name ' ' Text '<-' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_tbox_stack' Name ' ' Text '<-' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_tag_stack' Name ' ' Text '<-' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_mark_stack' Name ' ' Text '<-' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_current_indent' Name ' ' Text '<-' Operator ' ' Text '0' Literal.Number.Integer ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<-' Operator ' ' Text '0' Literal.Number.Integer ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_space_left' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ';' Operator '\n ' Text 'pp_open_sys_box' Name ' ' Text 'state' Name ';;' Operator '\n\n' Text '(*' Comment ' Flushing pretty-printer queue. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_flush_queue' Name ' ' Text 'state' Name ' ' Text 'b' Name ' ' Text '=' Operator '\n ' Text 'while' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '>' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'do' Keyword '\n ' Text 'pp_close_box' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo '\n ' Text 'done' Keyword ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_right_total' Name ' ' Text '<-' Operator ' ' Text 'pp_infinity' Name ';' Operator '\n ' Text 'advance_left' Name ' ' Text 'state' Name ';' Operator '\n ' Text 'if' Keyword ' ' Text 'b' Name ' ' Text 'then' Keyword ' ' Text 'pp_output_newline' Name ' ' Text 'state' Name ';' Operator '\n ' Text 'pp_rinit' Name ' ' Text 'state' Name ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Procedures to format objects, and use boxes\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text '(*' Comment ' To format a string. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_as_size' Name ' ' Text 'state' Name ' ' Text 'size' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name '\n ' Text 'then' Keyword ' ' Text 'enqueue_string_as' Name ' ' Text 'state' Name ' ' Text 'size' Name ' ' Text 's' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_print_as' Name ' ' Text 'state' Name ' ' Text 'isize' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'pp_print_as_size' Name ' ' Text 'state' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text 'isize' Name ')' Operator ' ' Text 's' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_print_string' Name ' ' Text 'state' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'pp_print_as' Name ' ' Text 'state' Name ' ' Text '(' Operator 'String' Name.Namespace '.' Punctuation 'length' Name ' ' Text 's' Name ')' Operator ' ' Text 's' Name ';;' Operator '\n\n' Text '(*' Comment ' To format an integer. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_int' Name ' ' Text 'state' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'pp_print_string' Name ' ' Text 'state' Name ' ' Text '(' Operator 'string_of_int' Name ' ' Text 'i' Name ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' To format a float. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_float' Name ' ' Text 'state' Name ' ' Text 'f' Name ' ' Text '=' Operator ' ' Text 'pp_print_string' Name ' ' Text 'state' Name ' ' Text '(' Operator 'string_of_float' Name ' ' Text 'f' Name ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' To format a boolean. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_bool' Name ' ' Text 'state' Name ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'pp_print_string' Name ' ' Text 'state' Name ' ' Text '(' Operator 'string_of_bool' Name ' ' Text 'b' Name ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' To format a char. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_char' Name ' ' Text 'state' Name ' ' Text 'c' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 's' Name ' ' Text '=' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'create' Name ' ' Text '1' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 's' Name '.' Operator '[' Operator '0' Literal.Number.Integer ']' Operator ' ' Text '<-' Operator ' ' Text 'c' Name ';' Operator '\n ' Text 'pp_print_as' Name ' ' Text 'state' Name ' ' Text '1' Literal.Number.Integer ' ' Text 's' Name ';;' Operator '\n\n' Text '(*' Comment ' Opening boxes. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_open_hbox' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'Pp_hbox' Name.Class '\n' Text 'and' Operator.Word ' ' Text 'pp_open_vbox' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text '=' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text 'Pp_vbox' Name.Class '\n\n' Text 'and' Operator.Word ' ' Text 'pp_open_hvbox' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text '=' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text 'Pp_hvbox' Name.Class '\n' Text 'and' Operator.Word ' ' Text 'pp_open_hovbox' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text '=' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text 'Pp_hovbox' Name.Class '\n' Text 'and' Operator.Word ' ' Text 'pp_open_box' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text '=' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'state' Name ' ' Text 'indent' Name ' ' Text 'Pp_box' Name.Class ';;' Operator '\n\n' Text '(*' Comment ' Print a new line after printing all queued text\n ' Comment '(' Comment 'same for print_flush but without a newline' Comment ')' Comment '. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_newline' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'pp_flush_queue' Name ' ' Text 'state' Name ' ' Text 'true' Name.Builtin.Pseudo ';' Operator ' ' Text 'state' Name '.' Operator 'pp_flush_function' Name ' ' Text '()' Name.Builtin.Pseudo '\n' Text 'and' Operator.Word ' ' Text 'pp_print_flush' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'pp_flush_queue' Name ' ' Text 'state' Name ' ' Text 'false' Name.Builtin.Pseudo ';' Operator ' ' Text 'state' Name '.' Operator 'pp_flush_function' Name ' ' Text '()' Name.Builtin.Pseudo ';;' Operator '\n\n' Text '(*' Comment ' To get a newline when one does not want to close the current block. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_force_newline' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text '(' Operator 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ')' Operator ' ' Text 'Pp_newline' Name.Class ' ' Text '0' Literal.Number.Integer ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' To format something if the line has just been broken. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_if_newline' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text '(' Operator 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ')' Operator ' ' Text 'Pp_if_newline' Name.Class ' ' Text '0' Literal.Number.Integer ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' Breaks: indicate where a block may be broken.\n If line is broken then offset is added to the indentation of the current\n block else ' Comment '(' Comment 'the value of' Comment ')' Comment ' width blanks are printed.\n To do ' Comment '(' Comment '?' Comment ')' Comment ' : add a maximum width and offset value. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_break' Name ' ' Text 'state' Name ' ' Text 'width' Name ' ' Text 'offset' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'elem' Name ' ' Text '=' Operator '\n ' Text 'make_queue_elem' Name '\n ' Text '(' Operator 'size_of_int' Name ' ' Text '(' Operator '-' Operator ' ' Text 'state' Name '.' Operator 'pp_right_total' Name ')' Operator ')' Operator '\n ' Text '(' Operator 'Pp_break' Name.Class ' ' Text '(' Operator 'width' Name ',' Operator ' ' Text 'offset' Name ')' Operator ')' Operator '\n ' Text 'width' Name ' ' Text 'in' Keyword '\n ' Text 'scan_push' Name ' ' Text 'state' Name ' ' Text 'true' Name.Builtin.Pseudo ' ' Text 'elem' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_print_space' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'pp_print_break' Name ' ' Text 'state' Name ' ' Text '1' Literal.Number.Integer ' ' Text '0' Literal.Number.Integer '\n' Text 'and' Operator.Word ' ' Text 'pp_print_cut' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'pp_print_break' Name ' ' Text 'state' Name ' ' Text '0' Literal.Number.Integer ' ' Text '0' Literal.Number.Integer ';;' Operator '\n\n' Text '(*' Comment ' Tabulation boxes. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_open_tbox' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'elem' Name ' ' Text '=' Operator '\n ' Text 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ')' Operator ' ' Text '(' Operator 'Pp_tbegin' Name.Class ' ' Text '(' Operator 'Pp_tbox' Name.Class ' ' Text '(' Operator 'ref' Name ' ' Text '[]' Name.Builtin.Pseudo ')' Operator ')' Operator ')' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text 'elem' Name ';;' Operator '\n\n' Text '(*' Comment ' Close a tabulation block. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_close_tbox' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '>' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'then' Keyword ' ' Text 'begin' Keyword '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'elem' Name ' ' Text '=' Operator ' ' Text 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ')' Operator ' ' Text 'Pp_tend' Name.Class ' ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text 'elem' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '-' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'end' Keyword ';;' Operator '\n\n' Text '(*' Comment ' Print a tabulation break. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_print_tbreak' Name ' ' Text 'state' Name ' ' Text 'width' Name ' ' Text 'offset' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'elem' Name ' ' Text '=' Operator '\n ' Text 'make_queue_elem' Name '\n ' Text '(' Operator 'size_of_int' Name ' ' Text '(' Operator '-' Operator ' ' Text 'state' Name '.' Operator 'pp_right_total' Name ')' Operator ')' Operator '\n ' Text '(' Operator 'Pp_tbreak' Name.Class ' ' Text '(' Operator 'width' Name ',' Operator ' ' Text 'offset' Name ')' Operator ')' Operator '\n ' Text 'width' Name ' ' Text 'in' Keyword '\n ' Text 'scan_push' Name ' ' Text 'state' Name ' ' Text 'true' Name.Builtin.Pseudo ' ' Text 'elem' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_print_tab' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'pp_print_tbreak' Name ' ' Text 'state' Name ' ' Text '0' Literal.Number.Integer ' ' Text '0' Literal.Number.Integer ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_tab' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '<' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'elem' Name ' ' Text '=' Operator '\n ' Text 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ')' Operator ' ' Text 'Pp_stab' Name.Class ' ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'enqueue_advance' Name ' ' Text 'state' Name ' ' Text 'elem' Name ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Procedures to control the pretty-printers\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text '(*' Comment ' Fit max_boxes. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_set_max_boxes' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '>' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'then' Keyword ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ' ' Text '<-' Operator ' ' Text 'n' Name ';;' Operator '\n\n' Text '(*' Comment ' To know the current maximum number of boxes allowed. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_get_max_boxes' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_over_max_boxes' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_curr_depth' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_max_boxes' Name ';;' Operator '\n\n' Text '(*' Comment ' Ellipsis. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_set_ellipsis_text' Name ' ' Text 'state' Name ' ' Text 's' Name ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_ellipsis' Name ' ' Text '<-' Operator ' ' Text 's' Name '\n' Text 'and' Operator.Word ' ' Text 'pp_get_ellipsis_text' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_ellipsis' Name ';;' Operator '\n\n' Text '(*' Comment ' To set the margin of pretty-printer. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_limit' Name ' ' Text 'n' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '<' Operator ' ' Text 'pp_infinity' Name ' ' Text 'then' Keyword ' ' Text 'n' Name ' ' Text 'else' Keyword ' ' Text 'pred' Name ' ' Text 'pp_infinity' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_min_space_left' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '>' Operator '=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'pp_limit' Name ' ' Text 'n' Name ' ' Text 'in' Keyword '\n ' Text 'state' Name '.' Operator 'pp_min_space_left' Name ' ' Text '<-' Operator ' ' Text 'n' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_max_indent' Name ' ' Text '<-' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_min_space_left' Name ';' Operator '\n ' Text 'pp_rinit' Name ' ' Text 'state' Name ';;' Operator '\n\n' Text '(*' Comment ' Initially, we have :\n pp_max_indent = pp_margin - pp_min_space_left, and\n pp_space_left = pp_margin. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'pp_set_max_indent' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text '=' Operator '\n ' Text 'pp_set_min_space_left' Name ' ' Text 'state' Name ' ' Text '(' Operator 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'n' Name ')' Operator ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_get_max_indent' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_max_indent' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_margin' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '>' Operator '=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'then' Keyword '\n ' Text 'let' Keyword ' ' Text 'n' Name ' ' Text '=' Operator ' ' Text 'pp_limit' Name ' ' Text 'n' Name ' ' Text 'in' Keyword '\n ' Text 'state' Name '.' Operator 'pp_margin' Name ' ' Text '<-' Operator ' ' Text 'n' Name ';' Operator '\n ' Text 'let' Keyword ' ' Text 'new_max_indent' Name ' ' Text '=' Operator '\n ' Text '(*' Comment ' Try to maintain max_indent to its actual value. ' Comment '*)' Comment '\n ' Text 'if' Keyword ' ' Text 'state' Name '.' Operator 'pp_max_indent' Name ' ' Text '<' Operator '=' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name '\n ' Text 'then' Keyword ' ' Text 'state' Name '.' Operator 'pp_max_indent' Name ' ' Text 'else' Keyword '\n ' Text '(*' Comment ' If possible maintain pp_min_space_left to its actual value,\n if this leads to a too small max_indent, take half of the\n new margin, if it is greater than 1. ' Comment '*)' Comment '\n ' Text 'max' Name ' ' Text '(' Operator 'max' Name ' ' Text '(' Operator 'state' Name '.' Operator 'pp_margin' Name ' ' Text '-' Operator ' ' Text 'state' Name '.' Operator 'pp_min_space_left' Name ')' Operator '\n ' Text '(' Operator 'state' Name '.' Operator 'pp_margin' Name ' ' Text '/' Operator ' ' Text '2' Literal.Number.Integer ')' Operator ')' Operator ' ' Text '1' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text '(*' Comment ' Rebuild invariants. ' Comment '*)' Comment '\n ' Text 'pp_set_max_indent' Name ' ' Text 'state' Name ' ' Text 'new_max_indent' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_get_margin' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_margin' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_formatter_output_functions' Name ' ' Text 'state' Name ' ' Text 'f' Name ' ' Text 'g' Name ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_output_function' Name ' ' Text '<-' Operator ' ' Text 'f' Name ';' Operator ' ' Text 'state' Name '.' Operator 'pp_flush_function' Name ' ' Text '<-' Operator ' ' Text 'g' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_get_formatter_output_functions' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text '(' Operator 'state' Name '.' Operator 'pp_output_function' Name ',' Operator ' ' Text 'state' Name '.' Operator 'pp_flush_function' Name ')' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_all_formatter_output_functions' Name ' ' Text 'state' Name '\n ' Text '~' Operator 'out' Name ':' Operator 'f' Name ' ' Text '~' Operator 'flush' Name ':' Operator 'g' Name ' ' Text '~' Operator 'newline' Name ':' Operator 'h' Name ' ' Text '~' Operator 'spaces' Name ':' Operator 'i' Name ' ' Text '=' Operator '\n ' Text 'pp_set_formatter_output_functions' Name ' ' Text 'state' Name ' ' Text 'f' Name ' ' Text 'g' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_output_newline' Name ' ' Text '<-' Operator ' ' Text '(' Operator 'function' Keyword ' ' Text '()' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text 'h' Name ' ' Text '()' Name.Builtin.Pseudo ')' Operator ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_output_spaces' Name ' ' Text '<-' Operator ' ' Text '(' Operator 'function' Keyword ' ' Text 'n' Name ' ' Text '->' Operator ' ' Text 'i' Name ' ' Text 'n' Name ')' Operator ';;' Operator '\n' Text 'let' Keyword ' ' Text 'pp_get_all_formatter_output_functions' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text '(' Operator 'state' Name '.' Operator 'pp_output_function' Name ',' Operator ' ' Text 'state' Name '.' Operator 'pp_flush_function' Name ',' Operator '\n ' Text 'state' Name '.' Operator 'pp_output_newline' Name ',' Operator ' ' Text 'state' Name '.' Operator 'pp_output_spaces' Name ')' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_set_formatter_out_channel' Name ' ' Text 'state' Name ' ' Text 'os' Name ' ' Text '=' Operator '\n ' Text 'state' Name '.' Operator 'pp_output_function' Name ' ' Text '<-' Operator ' ' Text 'output' Name ' ' Text 'os' Name ';' Operator '\n ' Text 'state' Name '.' Operator 'pp_flush_function' Name ' ' Text '<-' Operator ' ' Text '(' Operator 'fun' Keyword ' ' Text '()' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text 'flush' Name ' ' Text 'os' Name ')' Operator ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Creation of specific formatters\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text 'let' Keyword ' ' Text 'default_pp_mark_open_tag' Name ' ' Text 's' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double '<' Literal.String.Double '"' Literal.String.Double ' ' Text '^' Operator ' ' Text 's' Name ' ' Text '^' Operator ' ' Text '"' Literal.String.Double '>' Literal.String.Double '"' Literal.String.Double ';;' Operator '\n' Text 'let' Keyword ' ' Text 'default_pp_mark_close_tag' Name ' ' Text 's' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double '' Literal.String.Double '"' Literal.String.Double ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'default_pp_print_open_tag' Name ' ' Text 's' Name ' ' Text '=' Operator ' ' Text '()' Name.Builtin.Pseudo ';;' Operator '\n' Text 'let' Keyword ' ' Text 'default_pp_print_close_tag' Name ' ' Text '=' Operator ' ' Text 'default_pp_print_open_tag' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'pp_make_formatter' Name ' ' Text 'f' Name ' ' Text 'g' Name ' ' Text 'h' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text '(*' Comment ' The initial state of the formatter contains a dummy box. ' Comment '*)' Comment '\n ' Text 'let' Keyword ' ' Text 'pp_q' Name ' ' Text '=' Operator ' ' Text 'make_queue' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'sys_tok' Name ' ' Text '=' Operator '\n ' Text 'make_queue_elem' Name ' ' Text '(' Operator 'size_of_int' Name ' ' Text '(' Operator '-' Operator '1' Literal.Number.Integer ')' Operator ')' Operator ' ' Text '(' Operator 'Pp_begin' Name.Class ' ' Text '(' Operator '0' Literal.Number.Integer ',' Operator ' ' Text 'Pp_hovbox' Name.Class ')' Operator ')' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'add_queue' Name ' ' Text 'sys_tok' Name ' ' Text 'pp_q' Name ';' Operator '\n ' Text 'let' Keyword ' ' Text 'sys_scan_stack' Name ' ' Text '=' Operator '\n ' Text '(' Operator 'Scan_elem' Name.Class ' ' Text '(' Operator '1' Literal.Number.Integer ',' Operator ' ' Text 'sys_tok' Name ')' Operator ')' Operator ' ' Text '::' Operator ' ' Text 'scan_stack_bottom' Name ' ' Text 'in' Keyword '\n ' Text '{' Operator 'pp_scan_stack' Name ' ' Text '=' Operator ' ' Text 'sys_scan_stack' Name ';' Operator '\n ' Text 'pp_format_stack' Name ' ' Text '=' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_tbox_stack' Name ' ' Text '=' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_tag_stack' Name ' ' Text '=' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_mark_stack' Name ' ' Text '=' Operator ' ' Text '[]' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_margin' Name ' ' Text '=' Operator ' ' Text '78' Literal.Number.Integer ';' Operator '\n ' Text 'pp_min_space_left' Name ' ' Text '=' Operator ' ' Text '10' Literal.Number.Integer ';' Operator '\n ' Text 'pp_max_indent' Name ' ' Text '=' Operator ' ' Text '78' Literal.Number.Integer ' ' Text '-' Operator ' ' Text '10' Literal.Number.Integer ';' Operator '\n ' Text 'pp_space_left' Name ' ' Text '=' Operator ' ' Text '78' Literal.Number.Integer ';' Operator '\n ' Text 'pp_current_indent' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer ';' Operator '\n ' Text 'pp_is_new_line' Name ' ' Text '=' Operator ' ' Text 'true' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_left_total' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'pp_right_total' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'pp_curr_depth' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ';' Operator '\n ' Text 'pp_max_boxes' Name ' ' Text '=' Operator ' ' Text 'max_int' Name ';' Operator '\n ' Text 'pp_ellipsis' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double '.' Literal.String.Double '"' Literal.String.Double ';' Operator '\n ' Text 'pp_output_function' Name ' ' Text '=' Operator ' ' Text 'f' Name ';' Operator '\n ' Text 'pp_flush_function' Name ' ' Text '=' Operator ' ' Text 'g' Name ';' Operator '\n ' Text 'pp_output_newline' Name ' ' Text '=' Operator ' ' Text 'h' Name ';' Operator '\n ' Text 'pp_output_spaces' Name ' ' Text '=' Operator ' ' Text 'i' Name ';' Operator '\n ' Text 'pp_print_tags' Name ' ' Text '=' Operator ' ' Text 'false' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_mark_tags' Name ' ' Text '=' Operator ' ' Text 'false' Name.Builtin.Pseudo ';' Operator '\n ' Text 'pp_mark_open_tag' Name ' ' Text '=' Operator ' ' Text 'default_pp_mark_open_tag' Name ';' Operator '\n ' Text 'pp_mark_close_tag' Name ' ' Text '=' Operator ' ' Text 'default_pp_mark_close_tag' Name ';' Operator '\n ' Text 'pp_print_open_tag' Name ' ' Text '=' Operator ' ' Text 'default_pp_print_open_tag' Name ';' Operator '\n ' Text 'pp_print_close_tag' Name ' ' Text '=' Operator ' ' Text 'default_pp_print_close_tag' Name ';' Operator '\n ' Text 'pp_queue' Name ' ' Text '=' Operator ' ' Text 'pp_q' Name '\n ' Text '}' Operator ';;' Operator '\n\n' Text '(*' Comment ' Default function to output spaces. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'blank_line' Name ' ' Text '=' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'make' Name ' ' Text '80' Literal.Number.Integer ' ' Text "' '" Literal.String.Char ';;' Operator '\n' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'display_blanks' Name ' ' Text 'state' Name ' ' Text 'n' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'then' Keyword '\n ' Text 'if' Keyword ' ' Text 'n' Name ' ' Text '<' Operator '=' Operator ' ' Text '80' Literal.Number.Integer ' ' Text 'then' Keyword ' ' Text 'state' Name '.' Operator 'pp_output_function' Name ' ' Text 'blank_line' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'n' Name ' ' Text 'else' Keyword '\n ' Text 'begin' Keyword '\n ' Text 'state' Name '.' Operator 'pp_output_function' Name ' ' Text 'blank_line' Name ' ' Text '0' Literal.Number.Integer ' ' Text '80' Literal.Number.Integer ';' Operator '\n ' Text 'display_blanks' Name ' ' Text 'state' Name ' ' Text '(' Operator 'n' Name ' ' Text '-' Operator ' ' Text '80' Literal.Number.Integer ')' Operator '\n ' Text 'end' Keyword ';;' Operator '\n\n' Text '(*' Comment ' Default function to output new lines. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'display_newline' Name ' ' Text 'state' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator ' ' Text 'state' Name '.' Operator 'pp_output_function' Name ' ' Text '"' Literal.String.Double '\\n' Literal.String.Escape '"' Literal.String.Double ' ' Text '0' Literal.Number.Integer ' ' Text '1' Literal.Number.Integer ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'make_formatter' Name ' ' Text 'f' Name ' ' Text 'g' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'ff' Name ' ' Text '=' Operator ' ' Text 'pp_make_formatter' Name ' ' Text 'f' Name ' ' Text 'g' Name ' ' Text 'ignore' Name ' ' Text 'ignore' Name ' ' Text 'in' Keyword '\n ' Text 'ff' Name '.' Operator 'pp_output_newline' Name ' ' Text '<-' Operator ' ' Text 'display_newline' Name ' ' Text 'ff' Name ';' Operator '\n ' Text 'ff' Name '.' Operator 'pp_output_spaces' Name ' ' Text '<-' Operator ' ' Text 'display_blanks' Name ' ' Text 'ff' Name ';' Operator '\n ' Text 'ff' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'formatter_of_out_channel' Name ' ' Text 'oc' Name ' ' Text '=' Operator '\n ' Text 'make_formatter' Name ' ' Text '(' Operator 'output' Name ' ' Text 'oc' Name ')' Operator ' ' Text '(' Operator 'fun' Keyword ' ' Text '()' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text 'flush' Name ' ' Text 'oc' Name ')' Operator ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'formatter_of_buffer' Name ' ' Text 'b' Name ' ' Text '=' Operator '\n ' Text 'make_formatter' Name ' ' Text '(' Operator 'Buffer' Name.Namespace '.' Punctuation 'add_substring' Name ' ' Text 'b' Name ')' Operator ' ' Text 'ignore' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'stdbuf' Name ' ' Text '=' Operator ' ' Text 'Buffer' Name.Namespace '.' Punctuation 'create' Name ' ' Text '512' Literal.Number.Integer ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'str_formatter' Name ' ' Text '=' Operator ' ' Text 'formatter_of_buffer' Name ' ' Text 'stdbuf' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'std_formatter' Name ' ' Text '=' Operator ' ' Text 'formatter_of_out_channel' Name ' ' Text 'stdout' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'err_formatter' Name ' ' Text '=' Operator ' ' Text 'formatter_of_out_channel' Name ' ' Text 'stderr' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'flush_str_formatter' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '=' Operator '\n ' Text 'pp_flush_queue' Name ' ' Text 'str_formatter' Name ' ' Text 'false' Name.Builtin.Pseudo ';' Operator '\n ' Text 'let' Keyword ' ' Text 's' Name ' ' Text '=' Operator ' ' Text 'Buffer' Name.Namespace '.' Punctuation 'contents' Name ' ' Text 'stdbuf' Name ' ' Text 'in' Keyword '\n ' Text 'Buffer' Name.Namespace '.' Punctuation 'reset' Name ' ' Text 'stdbuf' Name ';' Operator '\n ' Text 's' Name ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Basic functions on the standard formatter\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text 'let' Keyword ' ' Text 'open_hbox' Name ' ' Text '=' Operator ' ' Text 'pp_open_hbox' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'open_vbox' Name ' ' Text '=' Operator ' ' Text 'pp_open_vbox' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'open_hvbox' Name ' ' Text '=' Operator ' ' Text 'pp_open_hvbox' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'open_hovbox' Name ' ' Text '=' Operator ' ' Text 'pp_open_hovbox' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'open_box' Name ' ' Text '=' Operator ' ' Text 'pp_open_box' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'close_box' Name ' ' Text '=' Operator ' ' Text 'pp_close_box' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'open_tag' Name ' ' Text '=' Operator ' ' Text 'pp_open_tag' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'close_tag' Name ' ' Text '=' Operator ' ' Text 'pp_close_tag' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_as' Name ' ' Text '=' Operator ' ' Text 'pp_print_as' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_string' Name ' ' Text '=' Operator ' ' Text 'pp_print_string' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_int' Name ' ' Text '=' Operator ' ' Text 'pp_print_int' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_float' Name ' ' Text '=' Operator ' ' Text 'pp_print_float' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_char' Name ' ' Text '=' Operator ' ' Text 'pp_print_char' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_bool' Name ' ' Text '=' Operator ' ' Text 'pp_print_bool' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_break' Name ' ' Text '=' Operator ' ' Text 'pp_print_break' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_cut' Name ' ' Text '=' Operator ' ' Text 'pp_print_cut' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_space' Name ' ' Text '=' Operator ' ' Text 'pp_print_space' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'force_newline' Name ' ' Text '=' Operator ' ' Text 'pp_force_newline' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_flush' Name ' ' Text '=' Operator ' ' Text 'pp_print_flush' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_newline' Name ' ' Text '=' Operator ' ' Text 'pp_print_newline' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_if_newline' Name ' ' Text '=' Operator ' ' Text 'pp_print_if_newline' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'open_tbox' Name ' ' Text '=' Operator ' ' Text 'pp_open_tbox' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'close_tbox' Name ' ' Text '=' Operator ' ' Text 'pp_close_tbox' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_tbreak' Name ' ' Text '=' Operator ' ' Text 'pp_print_tbreak' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_tab' Name ' ' Text '=' Operator ' ' Text 'pp_set_tab' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'print_tab' Name ' ' Text '=' Operator ' ' Text 'pp_print_tab' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_margin' Name ' ' Text '=' Operator ' ' Text 'pp_set_margin' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_margin' Name ' ' Text '=' Operator ' ' Text 'pp_get_margin' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_max_indent' Name ' ' Text '=' Operator ' ' Text 'pp_set_max_indent' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_max_indent' Name ' ' Text '=' Operator ' ' Text 'pp_get_max_indent' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_max_boxes' Name ' ' Text '=' Operator ' ' Text 'pp_set_max_boxes' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_max_boxes' Name ' ' Text '=' Operator ' ' Text 'pp_get_max_boxes' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'over_max_boxes' Name ' ' Text '=' Operator ' ' Text 'pp_over_max_boxes' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_ellipsis_text' Name ' ' Text '=' Operator ' ' Text 'pp_set_ellipsis_text' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_ellipsis_text' Name ' ' Text '=' Operator ' ' Text 'pp_get_ellipsis_text' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_formatter_out_channel' Name ' ' Text '=' Operator '\n ' Text 'pp_set_formatter_out_channel' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_formatter_output_functions' Name ' ' Text '=' Operator '\n ' Text 'pp_set_formatter_output_functions' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_formatter_output_functions' Name ' ' Text '=' Operator '\n ' Text 'pp_get_formatter_output_functions' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_all_formatter_output_functions' Name ' ' Text '=' Operator '\n ' Text 'pp_set_all_formatter_output_functions' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_all_formatter_output_functions' Name ' ' Text '=' Operator '\n ' Text 'pp_get_all_formatter_output_functions' Name ' ' Text 'std_formatter' Name '\n\n' Text 'and' Operator.Word ' ' Text 'set_formatter_tag_functions' Name ' ' Text '=' Operator '\n ' Text 'pp_set_formatter_tag_functions' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_formatter_tag_functions' Name ' ' Text '=' Operator '\n ' Text 'pp_get_formatter_tag_functions' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'set_print_tags' Name ' ' Text '=' Operator '\n ' Text 'pp_set_print_tags' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_print_tags' Name ' ' Text '=' Operator '\n ' Text 'pp_get_print_tags' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'set_mark_tags' Name ' ' Text '=' Operator '\n ' Text 'pp_set_mark_tags' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'get_mark_tags' Name ' ' Text '=' Operator '\n ' Text 'pp_get_mark_tags' Name ' ' Text 'std_formatter' Name '\n' Text 'and' Operator.Word ' ' Text 'set_tags' Name ' ' Text '=' Operator '\n ' Text 'pp_set_tags' Name ' ' Text 'std_formatter' Name '\n' Text ';;' Operator '\n\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Printf implementation.\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text '(*' Comment ' Error messages when processing formats. ' Comment '*)' Comment '\n\n' Text '(*' Comment ' Trailer: giving up at character number ... ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'giving_up' Name ' ' Text 'mess' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text '"' Literal.String.Double 'fprintf: ' Literal.String.Double '"' Literal.String.Double ' ' Text '^' Operator ' ' Text 'mess' Name ' ' Text '^' Operator ' ' Text '"' Literal.String.Double ' ``' Literal.String.Double '"' Literal.String.Double ' ' Text '^' Operator ' ' Text 'fmt' Name ' ' Text '^' Operator ' ' Text '"' Literal.String.Double "'', " Literal.String.Double '\\\n' Literal.String.Double ' giving up at character number ' Literal.String.Double '"' Literal.String.Double ' ' Text '^' Operator ' ' Text 'string_of_int' Name ' ' Text 'i' Name ' ' Text '^' Operator '\n ' Text '(' Operator 'if' Keyword ' ' Text 'i' Name ' ' Text '<' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'length' Name ' ' Text 'fmt' Name '\n ' Text 'then' Keyword ' ' Text '"' Literal.String.Double ' (' Literal.String.Double '"' Literal.String.Double ' ' Text '^' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'make' Name ' ' Text '1' Literal.Number.Integer ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text '^' Operator ' ' Text '"' Literal.String.Double ').' Literal.String.Double '"' Literal.String.Double '\n ' Text 'else' Keyword ' ' Text 'String' Name.Namespace '.' Punctuation 'make' Name ' ' Text '1' Literal.Number.Integer ' ' Text "'.'" Literal.String.Char ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' When an invalid format deserves a special error explanation. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'format_invalid_arg' Name ' ' Text 'mess' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'invalid_arg' Name ' ' Text '(' Operator 'giving_up' Name ' ' Text 'mess' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' Standard invalid format. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'invalid_format' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'format_invalid_arg' Name ' ' Text '"' Literal.String.Double 'bad format' Literal.String.Double '"' Literal.String.Double ' ' Text 'fmt' Name ' ' Text 'i' Name ';;' Operator '\n\n' Text '(*' Comment ' Cannot find a valid integer into that format. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'invalid_arg' Name ' ' Text '(' Operator 'giving_up' Name ' ' Text '"' Literal.String.Double 'bad integer specification' Literal.String.Double '"' Literal.String.Double ' ' Text 'fmt' Name ' ' Text 'i' Name ')' Operator ';;' Operator '\n\n' Text '(*' Comment ' Finding an integer out of a sub-string of the format. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'format_int_of_string' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'sz' Name ' ' Text '=' Operator '\n ' Text 'try' Keyword ' ' Text 'int_of_string' Name ' ' Text 's' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'Failure' Name.Class ' ' Text 's' Name ' ' Text '->' Operator ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n ' Text 'size_of_int' Name ' ' Text 'sz' Name ';;' Operator '\n\n' Text '(*' Comment ' Getting strings out of buffers. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'get_buffer_out' Name ' ' Text 'b' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 's' Name ' ' Text '=' Operator ' ' Text 'Buffer' Name.Namespace '.' Punctuation 'contents' Name ' ' Text 'b' Name ' ' Text 'in' Keyword '\n ' Text 'Buffer' Name.Namespace '.' Punctuation 'reset' Name ' ' Text 'b' Name ';' Operator '\n ' Text 's' Name ';;' Operator '\n\n' Text '(*' Comment ' [ppf] is supposed to be a pretty-printer that outputs in buffer [b]:\n to extract contents of [ppf] as a string we flush [ppf] and get the string\n out of [b]. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'string_out' Name ' ' Text 'b' Name ' ' Text 'ppf' Name ' ' Text '=' Operator '\n ' Text 'pp_flush_queue' Name ' ' Text 'ppf' Name ' ' Text 'false' Name.Builtin.Pseudo ';' Operator '\n ' Text 'get_buffer_out' Name ' ' Text 'b' Name ';;' Operator '\n\n' Text '(*' Comment ' Applies [printer] to a formatter that outputs on a fresh buffer,\n then returns the resulting material. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'exstring' Name ' ' Text 'printer' Name ' ' Text 'arg' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'Buffer' Name.Namespace '.' Punctuation 'create' Name ' ' Text '512' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'ppf' Name ' ' Text '=' Operator ' ' Text 'formatter_of_buffer' Name ' ' Text 'b' Name ' ' Text 'in' Keyword '\n ' Text 'printer' Name ' ' Text 'ppf' Name ' ' Text 'arg' Name ';' Operator '\n ' Text 'string_out' Name ' ' Text 'b' Name ' ' Text 'ppf' Name ';;' Operator '\n\n' Text '(*' Comment ' To turn out a character accumulator into the proper string result. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'implode_rev' Name ' ' Text 's0' Name ' ' Text '=' Operator ' ' Text 'function' Keyword '\n ' Text '|' Operator ' ' Text '[]' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text 's0' Name '\n ' Text '|' Operator ' ' Text 'l' Name ' ' Text '->' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'concat' Name ' ' Text '"' Literal.String.Double '"' Literal.String.Double ' ' Text '(' Operator 'List' Name.Namespace '.' Punctuation 'rev' Name ' ' Text '(' Operator 's0' Name ' ' Text '::' Operator ' ' Text 'l' Name ')' Operator ')' Operator ';;' Operator '\n\n' Text 'external' Keyword ' ' Text 'format_to_string' Name ' ' Text ':' Operator ' ' Text '(' Operator "'" Keyword 'a' Name ',' Operator ' ' Text "'" Keyword 'b' Name ',' Operator ' ' Text "'" Keyword 'c' Name ',' Operator ' ' Text "'" Keyword 'd' Name ')' Operator ' ' Text 'format4' Name ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ' ' Text '=' Operator ' ' Text '"' Literal.String.Double '%identity' Literal.String.Double '"' Literal.String.Double ';;' Operator '\n\n' Text '(*' Comment ' [fprintf_out] is the printf-like function generator: given the\n - [str] flag that tells if we are printing into a string,\n - the [out] function that has to be called at the end of formatting,\n it generates a [fprintf] function that takes as arguments a [ppf]\n formatter and a printing format to print the rest of arguments\n according to the format.\n Regular [fprintf]-like functions of this module are obtained via partial\n applications of [fprintf_out]. ' Comment '*)' Comment '\n' Text 'let' Keyword ' ' Text 'mkprintf' Name ' ' Text 'str' Name ' ' Text 'get_out' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'kprintf' Name ' ' Text 'k' Name ' ' Text 'fmt' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'fmt' Name ' ' Text '=' Operator ' ' Text 'format_to_string' Name ' ' Text 'fmt' Name ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'len' Name ' ' Text '=' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'length' Name ' ' Text 'fmt' Name ' ' Text 'in' Keyword '\n\n ' Text 'let' Keyword ' ' Text 'kpr' Name ' ' Text 'fmt' Name ' ' Text 'v' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'ppf' Name ' ' Text '=' Operator ' ' Text 'get_out' Name ' ' Text 'fmt' Name ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'print_as' Name ' ' Text '=' Operator ' ' Text 'ref' Name ' ' Text 'None' Name.Class ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'pp_print_as_char' Name ' ' Text 'c' Name ' ' Text '=' Operator '\n ' Text 'match' Keyword ' ' Text '!' Operator 'print_as' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'None' Name.Class ' ' Text '->' Operator ' ' Text 'pp_print_char' Name ' ' Text 'ppf' Name ' ' Text 'c' Name '\n ' Text '|' Operator ' ' Text 'Some' Name.Class ' ' Text 'size' Name ' ' Text '->' Operator '\n ' Text 'pp_print_as_size' Name ' ' Text 'ppf' Name ' ' Text 'size' Name ' ' Text '(' Operator 'String' Name.Namespace '.' Punctuation 'make' Name ' ' Text '1' Literal.Number.Integer ' ' Text 'c' Name ')' Operator ';' Operator '\n ' Text 'print_as' Name ' ' Text ':=' Operator ' ' Text 'None' Name.Class '\n ' Text 'and' Operator.Word ' ' Text 'pp_print_as_string' Name ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'match' Keyword ' ' Text '!' Operator 'print_as' Name ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text 'None' Name.Class ' ' Text '->' Operator ' ' Text 'pp_print_string' Name ' ' Text 'ppf' Name ' ' Text 's' Name '\n ' Text '|' Operator ' ' Text 'Some' Name.Class ' ' Text 'size' Name ' ' Text '->' Operator '\n ' Text 'pp_print_as_size' Name ' ' Text 'ppf' Name ' ' Text 'size' Name ' ' Text 's' Name ';' Operator '\n ' Text 'print_as' Name ' ' Text ':=' Operator ' ' Text 'None' Name.Class ' ' Text 'in' Keyword '\n\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'Obj' Name.Namespace '.' Punctuation 'magic' Name ' ' Text '(' Operator 'k' Name ' ' Text 'ppf' Name ')' Operator ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'%'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'Printf' Name.Namespace '.' Punctuation 'scan_format' Name ' ' Text 'fmt' Name ' ' Text 'v' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'cont_s' Name ' ' Text 'cont_a' Name ' ' Text 'cont_t' Name ' ' Text 'cont_f' Name ' ' Text 'cont_m' Name '\n ' Text '|' Operator ' ' Text "'@'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'succ' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'invalid_format' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'else' Keyword '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'['" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'do_pp_open_box' Name ' ' Text 'ppf' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "']'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_close_box' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'{'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'do_pp_open_tag' Name ' ' Text 'ppf' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'}'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_close_tag' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "' '" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_print_space' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "','" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_print_cut' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'?'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_print_flush' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'.'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_print_newline' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'\\n'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'pp_force_newline' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "';'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'do_pp_break' Name ' ' Text 'ppf' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'<'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'got_size' Name ' ' Text 'size' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'print_as' Name ' ' Text ':=' Operator ' ' Text 'Some' Name.Class ' ' Text 'size' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'skip_gt' Name ' ' Text 'i' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'get_int' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator ' ' Text 'got_size' Name '\n ' Text '|' Operator ' ' Text "'@'" Literal.String.Char ' ' Text 'as' Keyword ' ' Text 'c' Name ' ' Text '->' Operator '\n ' Text 'pp_print_as_char' Name ' ' Text 'c' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator ' ' Text 'invalid_format' Name ' ' Text 'fmt' Name ' ' Text 'i' Name '\n ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator '\n ' Text 'pp_print_as_char' Name ' ' Text 'c' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n\n ' Text 'and' Operator.Word ' ' Text 'cont_s' Name ' ' Text 'n' Name ' ' Text 's' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'pp_print_as_string' Name ' ' Text 's' Name ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_a' Name ' ' Text 'n' Name ' ' Text 'printer' Name ' ' Text 'arg' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'str' Name ' ' Text 'then' Keyword '\n ' Text 'pp_print_as_string' Name ' ' Text '(' Operator '(' Operator 'Obj' Name.Namespace '.' Punctuation 'magic' Name ' ' Text 'printer' Name ' ' Text ':' Operator ' ' Text 'unit' Keyword.Type ' ' Text '->' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ')' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text 'arg' Name ')' Operator '\n ' Text 'else' Keyword '\n ' Text 'printer' Name ' ' Text 'ppf' Name ' ' Text 'arg' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_t' Name ' ' Text 'n' Name ' ' Text 'printer' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'str' Name ' ' Text 'then' Keyword '\n ' Text 'pp_print_as_string' Name ' ' Text '(' Operator '(' Operator 'Obj' Name.Namespace '.' Punctuation 'magic' Name ' ' Text 'printer' Name ' ' Text ':' Operator ' ' Text 'unit' Keyword.Type ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ')' Operator ' ' Text '()' Name.Builtin.Pseudo ')' Operator '\n ' Text 'else' Keyword '\n ' Text 'printer' Name ' ' Text 'ppf' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_f' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'pp_print_flush' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'cont_m' Name ' ' Text 'n' Name ' ' Text 'sfmt' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'kprintf' Name ' ' Text '(' Operator 'Obj' Name.Namespace '.' Punctuation 'magic' Name ' ' Text '(' Operator 'fun' Keyword ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name ')' Operator ')' Operator ' ' Text 'sfmt' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'get_int' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'c' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "' '" Literal.String.Char ' ' Text '->' Operator ' ' Text 'get_int' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator ' ' Text 'c' Name '\n ' Text '|' Operator ' ' Text "'%'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'cont_s' Name ' ' Text 'n' Name ' ' Text 's' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'c' Name ' ' Text '(' Operator 'format_int_of_string' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 's' Name ')' Operator ' ' Text 'n' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_a' Name ' ' Text 'n' Name ' ' Text 'printer' Name ' ' Text 'arg' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_t' Name ' ' Text 'n' Name ' ' Text 'printer' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_f' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_m' Name ' ' Text 'n' Name ' ' Text 'sfmt' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n ' Text 'Printf' Name.Namespace '.' Punctuation 'scan_format' Name ' ' Text 'fmt' Name ' ' Text 'v' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'cont_s' Name ' ' Text 'cont_a' Name ' ' Text 'cont_t' Name ' ' Text 'cont_f' Name ' ' Text 'cont_m' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'get' Name ' ' Text 'j' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'j' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'invalid_integer' Name ' ' Text 'fmt' Name ' ' Text 'j' Name ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'j' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'0'" Literal.String.Char ' ' Text '..' Operator ' ' Text "'9'" Literal.String.Char ' ' Text '|' Operator ' ' Text "'-'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'get' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'j' Name ')' Operator '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'size' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'j' Name ' ' Text '=' Operator ' ' Text 'i' Name ' ' Text 'then' Keyword ' ' Text 'size_of_int' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'else' Keyword '\n ' Text 'format_int_of_string' Name ' ' Text 'fmt' Name ' ' Text 'j' Name ' ' Text '(' Operator 'String' Name.Namespace '.' Punctuation 'sub' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '(' Operator 'j' Name ' ' Text '-' Operator ' ' Text 'i' Name ')' Operator ')' Operator ' ' Text 'in' Keyword '\n ' Text 'c' Name ' ' Text 'size' Name ' ' Text 'n' Name ' ' Text 'j' Name ' ' Text 'in' Keyword '\n ' Text 'get' Name ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'skip_gt' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'invalid_format' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "' '" Literal.String.Char ' ' Text '->' Operator ' ' Text 'skip_gt' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator '\n ' Text '|' Operator ' ' Text "'>'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'succ' Name ' ' Text 'i' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'invalid_format' Name ' ' Text 'fmt' Name ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'get_box_kind' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'Pp_box' Name.Class ',' Operator ' ' Text 'i' Name ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'h'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'succ' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'Pp_hbox' Name.Class ',' Operator ' ' Text 'i' Name ' ' Text 'else' Keyword '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'o'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'succ' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'format_invalid_arg' Name ' ' Text '"' Literal.String.Double 'bad box format' Literal.String.Double '"' Literal.String.Double ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'else' Keyword '\n ' Text 'begin' Keyword ' ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'v'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'Pp_hovbox' Name.Class ',' Operator ' ' Text 'succ' Name ' ' Text 'i' Name '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator '\n ' Text 'format_invalid_arg' Name '\n ' Text '(' Operator '"' Literal.String.Double 'bad box name ho' Literal.String.Double '"' Literal.String.Double ' ' Text '^' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'make' Name ' ' Text '1' Literal.Number.Integer ' ' Text 'c' Name ')' Operator ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text "'v'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'Pp_hvbox' Name.Class ',' Operator ' ' Text 'succ' Name ' ' Text 'i' Name '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator ' ' Text 'Pp_hbox' Name.Class ',' Operator ' ' Text 'i' Name '\n ' Text 'end' Keyword '\n ' Text '|' Operator ' ' Text "'b'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'Pp_box' Name.Class ',' Operator ' ' Text 'succ' Name ' ' Text 'i' Name '\n ' Text '|' Operator ' ' Text "'v'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'Pp_vbox' Name.Class ',' Operator ' ' Text 'succ' Name ' ' Text 'i' Name '\n ' Text '|' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'Pp_box' Name.Class ',' Operator ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'get_tag_name' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'c' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'get' Name ' ' Text 'accu' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'j' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'j' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name '\n ' Text 'then' Keyword ' ' Text 'c' Name ' ' Text '(' Operator 'implode_rev' Name ' ' Text '(' Operator 'String' Name.Namespace '.' Punctuation 'sub' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '(' Operator 'j' Name ' ' Text '-' Operator ' ' Text 'i' Name ')' Operator ')' Operator ' ' Text 'accu' Name ')' Operator ' ' Text 'n' Name ' ' Text 'j' Name ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'j' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'>'" Literal.String.Char ' ' Text '->' Operator ' ' Text 'c' Name ' ' Text '(' Operator 'implode_rev' Name ' ' Text '(' Operator 'String' Name.Namespace '.' Punctuation 'sub' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '(' Operator 'j' Name ' ' Text '-' Operator ' ' Text 'i' Name ')' Operator ')' Operator ' ' Text 'accu' Name ')' Operator ' ' Text 'n' Name ' ' Text 'j' Name '\n ' Text '|' Operator ' ' Text "'%'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 's0' Name ' ' Text '=' Operator ' ' Text 'String' Name.Namespace '.' Punctuation 'sub' Name ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text '(' Operator 'j' Name ' ' Text '-' Operator ' ' Text 'i' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'cont_s' Name ' ' Text 'n' Name ' ' Text 's' Name ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'get' Name ' ' Text '(' Operator 's' Name ' ' Text '::' Operator ' ' Text 's0' Name ' ' Text '::' Operator ' ' Text 'accu' Name ')' Operator ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_a' Name ' ' Text 'n' Name ' ' Text 'printer' Name ' ' Text 'arg' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'str' Name '\n ' Text 'then' Keyword ' ' Text '(' Operator 'Obj' Name.Namespace '.' Punctuation 'magic' Name ' ' Text 'printer' Name ' ' Text ':' Operator ' ' Text 'unit' Keyword.Type ' ' Text '->' Operator ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ')' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text 'arg' Name '\n ' Text 'else' Keyword ' ' Text 'exstring' Name ' ' Text 'printer' Name ' ' Text 'arg' Name ' ' Text 'in' Keyword '\n ' Text 'get' Name ' ' Text '(' Operator 's' Name ' ' Text '::' Operator ' ' Text 's0' Name ' ' Text '::' Operator ' ' Text 'accu' Name ')' Operator ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_t' Name ' ' Text 'n' Name ' ' Text 'printer' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 's' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'str' Name '\n ' Text 'then' Keyword ' ' Text '(' Operator 'Obj' Name.Namespace '.' Punctuation 'magic' Name ' ' Text 'printer' Name ' ' Text ':' Operator ' ' Text 'unit' Keyword.Type ' ' Text '->' Operator ' ' Text 'string' Keyword.Type ')' Operator ' ' Text '()' Name.Builtin.Pseudo '\n ' Text 'else' Keyword ' ' Text 'exstring' Name ' ' Text '(' Operator 'fun' Keyword ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ' ' Text '->' Operator ' ' Text 'printer' Name ' ' Text 'ppf' Name ')' Operator ' ' Text '()' Name.Builtin.Pseudo ' ' Text 'in' Keyword '\n ' Text 'get' Name ' ' Text '(' Operator 's' Name ' ' Text '::' Operator ' ' Text 's0' Name ' ' Text '::' Operator ' ' Text 'accu' Name ')' Operator ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_f' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'format_invalid_arg' Name ' ' Text '"' Literal.String.Double 'bad tag name specification' Literal.String.Double '"' Literal.String.Double ' ' Text 'fmt' Name ' ' Text 'i' Name '\n ' Text 'and' Operator.Word ' ' Text 'cont_m' Name ' ' Text 'n' Name ' ' Text 'sfmt' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'format_invalid_arg' Name ' ' Text '"' Literal.String.Double 'bad tag name specification' Literal.String.Double '"' Literal.String.Double ' ' Text 'fmt' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n ' Text 'Printf' Name.Namespace '.' Punctuation 'scan_format' Name ' ' Text 'fmt' Name ' ' Text 'v' Name ' ' Text 'n' Name ' ' Text 'j' Name ' ' Text 'cont_s' Name ' ' Text 'cont_a' Name ' ' Text 'cont_t' Name ' ' Text 'cont_f' Name ' ' Text 'cont_m' Name '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator ' ' Text 'get' Name ' ' Text 'accu' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'j' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'get' Name ' ' Text '[]' Name.Builtin.Pseudo ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'do_pp_break' Name ' ' Text 'ppf' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'begin' Keyword ' ' Text 'pp_print_space' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'end' Keyword ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'<'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'rec' Keyword ' ' Text 'got_nspaces' Name ' ' Text 'nspaces' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'get_int' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '(' Operator 'got_offset' Name ' ' Text 'nspaces' Name ')' Operator '\n ' Text 'and' Operator.Word ' ' Text 'got_offset' Name ' ' Text 'nspaces' Name ' ' Text 'offset' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'pp_print_break' Name ' ' Text 'ppf' Name ' ' Text '(' Operator 'int_of_size' Name ' ' Text 'nspaces' Name ')' Operator ' ' Text '(' Operator 'int_of_size' Name ' ' Text 'offset' Name ')' Operator ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'skip_gt' Name ' ' Text 'i' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'get_int' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator ' ' Text 'got_nspaces' Name '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator ' ' Text 'pp_print_space' Name ' ' Text 'ppf' Name ' ' Text '()' Name.Builtin.Pseudo ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'do_pp_open_box' Name ' ' Text 'ppf' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'begin' Keyword ' ' Text 'pp_open_box_gen' Name ' ' Text 'ppf' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'Pp_box' Name.Class ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'end' Keyword ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'<'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'kind' Name ',' Operator ' ' Text 'i' Name ' ' Text '=' Operator ' ' Text 'get_box_kind' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'got_size' Name ' ' Text 'size' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'pp_open_box_gen' Name ' ' Text 'ppf' Name ' ' Text '(' Operator 'int_of_size' Name ' ' Text 'size' Name ')' Operator ' ' Text 'kind' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'skip_gt' Name ' ' Text 'i' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'get_int' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'got_size' Name '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator ' ' Text 'pp_open_box_gen' Name ' ' Text 'ppf' Name ' ' Text '0' Literal.Number.Integer ' ' Text 'Pp_box' Name.Class ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name '\n\n ' Text 'and' Operator.Word ' ' Text 'do_pp_open_tag' Name ' ' Text 'ppf' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '>' Operator '=' Operator ' ' Text 'len' Name ' ' Text 'then' Keyword ' ' Text 'begin' Keyword ' ' Text 'pp_open_tag' Name ' ' Text 'ppf' Name ' ' Text '"' Literal.String.Double '"' Literal.String.Double ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'end' Keyword ' ' Text 'else' Keyword '\n ' Text 'match' Keyword ' ' Text 'fmt' Name '.' Operator '[' Operator 'i' Name ']' Operator ' ' Text 'with' Keyword '\n ' Text '|' Operator ' ' Text "'<'" Literal.String.Char ' ' Text '->' Operator '\n ' Text 'let' Keyword ' ' Text 'got_name' Name ' ' Text 'tag_name' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text '=' Operator '\n ' Text 'pp_open_tag' Name ' ' Text 'ppf' Name ' ' Text 'tag_name' Name ';' Operator '\n ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text '(' Operator 'skip_gt' Name ' ' Text 'i' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'get_tag_name' Name ' ' Text 'n' Name ' ' Text '(' Operator 'succ' Name ' ' Text 'i' Name ')' Operator ' ' Text 'got_name' Name '\n ' Text '|' Operator ' ' Text 'c' Name ' ' Text '->' Operator ' ' Text 'pp_open_tag' Name ' ' Text 'ppf' Name ' ' Text '"' Literal.String.Double '"' Literal.String.Double ';' Operator ' ' Text 'doprn' Name ' ' Text 'n' Name ' ' Text 'i' Name ' ' Text 'in' Keyword '\n\n ' Text 'doprn' Name ' ' Text '(' Operator 'Printf' Name.Namespace '.' Punctuation 'index_of_int' Name ' ' Text '0' Literal.Number.Integer ')' Operator ' ' Text '0' Literal.Number.Integer ' ' Text 'in' Keyword '\n\n ' Text 'Printf' Name.Namespace '.' Punctuation 'kapr' Name ' ' Text 'kpr' Name ' ' Text 'fmt' Name ' ' Text 'in' Keyword '\n\n ' Text 'kprintf' Name ';;' Operator '\n\n' Text '(*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '\n\n Defining [fprintf] and various flavors of [fprintf].\n\n ' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*' Comment '*)' Comment '\n\n' Text 'let' Keyword ' ' Text 'kfprintf' Name ' ' Text 'k' Name ' ' Text 'ppf' Name ' ' Text '=' Operator ' ' Text 'mkprintf' Name ' ' Text 'false' Name.Builtin.Pseudo ' ' Text '(' Operator 'fun' Keyword ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'ppf' Name ')' Operator ' ' Text 'k' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'fprintf' Name ' ' Text 'ppf' Name ' ' Text '=' Operator ' ' Text 'kfprintf' Name ' ' Text 'ignore' Name ' ' Text 'ppf' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'printf' Name ' ' Text 'fmt' Name ' ' Text '=' Operator ' ' Text 'fprintf' Name ' ' Text 'std_formatter' Name ' ' Text 'fmt' Name ';;' Operator '\n' Text 'let' Keyword ' ' Text 'eprintf' Name ' ' Text 'fmt' Name ' ' Text '=' Operator ' ' Text 'fprintf' Name ' ' Text 'err_formatter' Name ' ' Text 'fmt' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'kbprintf' Name ' ' Text 'k' Name ' ' Text 'b' Name ' ' Text '=' Operator '\n ' Text 'mkprintf' Name ' ' Text 'false' Name.Builtin.Pseudo ' ' Text '(' Operator 'fun' Keyword ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'formatter_of_buffer' Name ' ' Text 'b' Name ')' Operator ' ' Text 'k' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'bprintf' Name ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'kbprintf' Name ' ' Text 'ignore' Name ' ' Text 'b' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'ksprintf' Name ' ' Text 'k' Name ' ' Text '=' Operator '\n ' Text 'let' Keyword ' ' Text 'b' Name ' ' Text '=' Operator ' ' Text 'Buffer' Name.Namespace '.' Punctuation 'create' Name ' ' Text '512' Literal.Number.Integer ' ' Text 'in' Keyword '\n ' Text 'let' Keyword ' ' Text 'k' Name ' ' Text 'ppf' Name ' ' Text '=' Operator ' ' Text 'k' Name ' ' Text '(' Operator 'string_out' Name ' ' Text 'b' Name ' ' Text 'ppf' Name ')' Operator ' ' Text 'in' Keyword '\n ' Text 'mkprintf' Name ' ' Text 'true' Name.Builtin.Pseudo ' ' Text '(' Operator 'fun' Keyword ' ' Text '_' Operator ' ' Text '->' Operator ' ' Text 'formatter_of_buffer' Name ' ' Text 'b' Name ')' Operator ' ' Text 'k' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'kprintf' Name ' ' Text '=' Operator ' ' Text 'ksprintf' Name ';;' Operator '\n\n' Text 'let' Keyword ' ' Text 'sprintf' Name ' ' Text 'fmt' Name ' ' Text '=' Operator ' ' Text 'ksprintf' Name ' ' Text '(' Operator 'fun' Keyword ' ' Text 's' Name ' ' Text '->' Operator ' ' Text 's' Name ')' Operator ' ' Text 'fmt' Name ';;' Operator '\n\n' Text 'at_exit' Name ' ' Text 'print_flush' Name ';;' Operator '\n' Text