anchor.diff:              {["<<", Res, ">>"], Length+4}
       end;
   
  +%% bitstrings are binary's evil brother who doesn't end on an 8 bit boundary.
  +%% This makes printing them extremely annoying, so list_body/list_bodyc has
  +%% some magic for dealing with the output of bitstring_to_list, which returns
  +%% a list of integers (as expected) but with a trailing binary that represents
  +%% the remaining bits.
  +print(BitString, Max, Options) when is_bitstring(BitString) ->
  +    case byte_size(BitString) > Max of
  +        true ->
  +            BL = binary_to_list(BitString, 1, Max);
  +        _ ->
  +            BL = erlang:bitstring_to_list(BitString)
  +    end,
  +    {X, Len0} = list_body(BL, Max - 4, Options, false),
  +    {["<<", X, ">>"], Len0 + 4};
  +
   print(Float, _Max, _Options) when is_float(Float) ->
       %% use the same function io_lib:format uses to print floats
       %% float_to_list is way too verbose.
  
positive.code: 
  list_bodyc([], _Max, _Options, _Tuple) -> {[], 0};
  list_bodyc(_, Max, _Options, _Tuple) when Max < 5 -> {",...", 4};
  list_bodyc([H|T], Max, #print_options{depth=Depth} = Options, Tuple) -> 
      {List, Len} = print(H, Max, dec_depth(Options)),
      {Final, FLen} = list_bodyc(T, Max - Len - 1, Options, Tuple),
  
negative.code: list_body([], _Max, _Options, _Tuple) -> {[], 0};
  list_body(_, Max, _Options, _Tuple) when Max < 4 -> {"...", 3};
  list_body(_, _Max, #print_options{depth=0}, _Tuple) -> {"...", 3};
  list_body([B], _Max, _Options, _Tuple) when is_bitstring(B) ->
      Size = bit_size(B),
      <<Value:Size>> = B,
      ValueStr = integer_to_list(Value),
      SizeStr = integer_to_list(Size),
      {[ValueStr, $:, SizeStr], length(ValueStr) + length(SizeStr) +1};
  list_body([H|T], Max, Options, Tuple) -> 
      {List, Len} = print(H, Max, Options),
      {Final, FLen} = list_bodyc(T, Max - Len, Options, Tuple),
  