anchor.diff:  indent_type('bc') -> 1;                %Binary comprehensions
   indent_type('match-spec') -> 0;
   indent_type(_) -> none.
  +
  +%% print1_map(Map, Depth, Indentation, LineLength).
  +%%  Print a map, one key value pair per line.
  +
  +print1_map(Map, D, I, L) ->
  +    [$#,$M,$(,print1_map_body(maps:to_list(Map), D, I+3, L-1),$)].
  +
  +print1_map_body([], _, _, _) -> [];
  +print1_map_body([KV|KVs], D, I, L) ->
  +    [print1_map_assoc(KV, D, I, L)|print1_map_rest(KVs, D-1, I, L)].
  +
  +print1_map_rest([], _, _, _) -> [];
  +print1_map_rest(_, 0, _, _) -> "...";
  +print1_map_rest([KV|KVs], D, I, L) ->
  +    Massoc = print1_map_assoc(KV, D, I, L),
  +    [$\n,blanks(I, []),Massoc|print1_map_rest(KVs, D-1, I, L)].
  +
  +print1_map_assoc({K,V}, D, I, L) ->
  +    Kcs = print1(K, D-1, I, 99999),             %Print without line breaks
  +    Kl = flatlength(Kcs),
  +    Vcs = print1(V, D-1, I, 99999),             %Print without line breaks
  +    Vl = flatlength(Vcs),
  +    %% Test whether we can use the one line versiosn and how.
  +    if I + Kl + 1 + Vl =< L -> [Kcs,$\s,Vcs];
  +       (I + Kl =< L) and (I + Vl =< L) ->
  +            [Kcs,$\n,blanks(I, [])|Vcs];
  +       I + Kl =< L ->
  +            [Kcs,$\n,blanks(I, [])|print1(V, D-1, I, L)];
  +       I + Vl =< L ->
  +            [print1(K, D-1, I, L),$\n,blanks(I, [])|Vcs];
  +       true ->
  +            [print1(K, D-1, I, L),$\n,blanks(I, [])|print1(V, D-1, I, L)]
  +    end.
  
positive.code: print1_tail_max([], _, _, _, Acc) -> {yes,reverse(Acc)};
  print1_tail_max(_, 0, _, _, Acc) -> {yes,reverse(Acc, [" ..."])};
  print1_tail_max([Car|Cdr], D, I, L, Acc) ->
      Cs = print1(Car, D, 0, 99999),          %Never break the line
      print1_tail_max(Cdr, D-1, I + flatlength(Cs) + 1, L, [Cs," "|Acc]);
  print1_tail_max(S, D, I, L, Acc) ->
      Cs = print1(S, D, 0, 99999),            %Never break the line
      print1_tail_max([], D-1, I + flatlength(Cs) + 3, L, [Cs," . "|Acc]).
  
  %% print1_list(List, Depth, Indentation, LineLength)
  
negative.code: print1([Car|_]=List, D, I, L) ->
      %% Handle printable lists specially.
      case io_lib:printable_list(List) of
      true -> lfe_io:print1_string(List, $");     %"
      false ->
          case print1_list_max(List, D-1, I+1, L-1) of
              {yes,Print} -> ["(",Print,")"];
              no ->
                  %% Customise printing of lists.
                  case indent_type(Car) of
                      none ->                     %Normal lists.
                          ["(",print1_list(List, D-1, I+1, L-1),")"];
                      defun ->                    %Special case for defuns
                          print1_defun(List, D, I, L);
                      N when is_integer(N) ->     %Special N first elements
                          print1_type(List, D, I, L, N)
                  end
              end
      end;
  print1([], _, _, _) -> "()";
  print1({}, _, _, _) -> "#()";
  print1(Tup, D, I, L) when is_tuple(Tup) ->
      Es = tuple_to_list(Tup),
      case print1_list_max(Es, D-1, I+2, L-1) of
          {yes,Print}  -> ["#(",Print,")"];
          no -> ["#(",print1_list(Es, D-1, I+2, L),")"]
      end;
  print1(Bit, _, _, _) when is_bitstring(Bit) ->
      ["#B(",lfe_io:print1_bits(Bit, 30),$)];     %First 30 bytes
  print1(Map, D, I, L) when is_map(Map) ->
      print1_map(Map, D, I, L);
  print1(Other, _, _, _) ->
      lfe_io:print1(Other).                       %Use standard LFE for rest
  
  