'(*'          Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           Comment
'*'           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
' '           Text
'^'           Operator
' '           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
