
pprint.pl -- Pretty Print Prolog terms
This module is a first start of what should become a full-featured
pretty printer for Prolog terms with many options and parameters.
Eventually, it should replace portray_clause/1 and various other
special-purpose predicates.
- To be done
- - This is just a quicky. We need proper handling of portray/1, avoid
printing very long terms multiple times, spacing (around operators),
etc.
- - Use a record for the option-processing.
- - The current approach is far too simple, often resulting in illegal
terms.
print_term(+Term, +Options) is det- Pretty print a Prolog term. The following options are processed:
- output(+Stream)
- Define the output stream. Default is
user_output
- right_margin(?Column)
- Width of a line. If the output is a tty and tty_size/2
can produce a size the default is the number of columns
minus 8. Otherwise the default is 72 characters. If the
Column is unbound it is unified with the computed value.
- left_margin(+Integer)
- Left margin for continuation lines. Default is the current
line position or
0
if that is not available.
- tab_width(+Integer)
- Distance between tab-stops. Default is 8 characters.
- indent_arguments(+Spec)
- Defines how arguments of compound terms are placed. Defined
values are:
false
Simply place them left to right (no line-breaks)
true
Place them vertically, aligned with the open bracket (not
implemented)
auto
(default)
As horizontal if line-width is not exceeded, vertical
otherwise. See also auto_indent_arguments(Int)
- An integer
Place them vertically aligned, <N> spaces to the right of
the beginning of the head.
- auto_indent_arguments(+Integer)
- Used by
indent_arguments(auto)
to decide whether to introduce
a newline after the `(` or not. If specified and > 0, this
provides the default integer for indent_arguments(Int)
. The
"hanging" mode is used if otherwise the indentation increment
is twice this value.
- operators(+Boolean)
- Deprecated. This is the inverse of the write_term/3 option
ignore_ops
. Default is to respect them. If either operators
or the ignore_ops
in write_options
is specified, both are
consistently set. If both are specified, the ignore_ops
options in the write_options
is respected.
- write_options(+List)
- List of options passed to write_term/3 for terms that are
not further processed. Default:
[ numbervars(true),
quoted(true),
portray(true)
]
- fullstop(Boolean)
- If
true
(default false
), add a full stop (.) to the output.
- nl(Boolean)
- If
true
(default false
), add a newline to the output.
prepare_term(+Term, -Template, -Cycles, -Constraints)[private]- Prepare a term, possibly holding cycles and constraints for
printing.
infix_list(+Term, ?Op, -List) is semidet[private]- True when List is a list of subterms of Term that are the result of
the nested infix operator Op. Deals both with
xfy
and yfx
operators.
pp_list_elements(+List, +Ctx, +Options) is det[private]- Print the elements of a possibly open list as a vertical list.
indent(+Out, +Indent, +Options)[private]- Newline and indent to the indicated column. Respects the option
tab_width
. Default is 8. If the tab-width equals zero,
indentation is emitted using spaces.
print_width(+Term, -W, +Options) is det[private]- Width required when printing `normally' left-to-right.
pprint(+Term, +Context, +Options)[private]- The bottom-line print-routine.
is_op1(+Name, -Type, -Priority, -ArgPriority, +Options) is semidet[private]- True if Name is an operator taking one argument of Type.
is_op2(+Name, -LeftPri, -Pri, -RightPri, +Options) is semidet[private]- True if Name is an operator taking two arguments of Type.
need_space(@Term1, @Term2, +LeftOptions, +RightOptions)[private]- True if a space is needed between Term1 and Term2 if they are
printed using the given option lists.
end_code_type(+Term, -Code, Options)[private]- True when code is the first/last character code that is emitted
by printing Term using Options.
primitive(+Term, -Class) is semidet[private]- True if Term is a primitive term, rendered using the CSS
class Class.
operator_module(-Module, +Options) is det[private]- Find the module for evaluating operators.
arg_options(+Options, -OptionsOut) is det[private]- Increment depth in Options.