anchor.diff:      %% Flatten all text content from child elements.
       [{description, ?il2b(Data)}];
   '#element#'(Tag, Data, _Attrs, _Parents, _E)
  +        when Tag =:= h1;
  +             Tag =:= h2;
  +             Tag =:= h3 ->
  +    {fmt, debug(inline, header(Tag, Data))};
  +'#element#'(Tag, Data, _Attrs, _Parents, _E)
           when Tag =:= a;
                Tag =:= code;
  -             Tag =:= dd;
  -             Tag =:= dl;
  -             Tag =:= dt;
                Tag =:= em;
                Tag =:= h4;
                Tag =:= h5;
  -             Tag =:= h6;
  -             Tag =:= li;
  -             Tag =:= ol;
  -             Tag =:= tt;
  -             Tag =:= ul ->
  -    %% Discard.
  -    [];
  +             Tag =:= h6 ->
  +    debug('inline:before', Data),
  +    {inline, debug('inline:after', [ unwrap_inline(E) || E <- Data ])};
   '#element#'(Tag, Data, _Attrs, _Parents, _E) when
           Tag =:= p ->
  -     {fmt, debug(Tag, cleanup_lines(Data))};
  +    {fmt, debug(Tag, cleanup_lines(Data))};
   '#element#'(Tag, Data, _Attrs, _Parents, E) when
           Tag =:= pre ->
  -     {fmt, debug(Tag, Data)};
  -'#element#'(Tag, Data, _Attrs, _Parents, _E)
  -        when Tag =:= h1;
  -             Tag =:= h2;
  -             Tag =:= h3 ->
  -    header(Tag, Data);
  +    {fmt, debug(Tag, Data)};
   '#element#'(Tag, Data, _Attrs, _Parents, _E) ->
  -    [{Tag, Data}].
  +    debug(discarded, {Tag, Data}),
  +    [].
  +
  +unwrap_inline({inline, Elements}) when is_list(Elements) -> Elements;
  +unwrap_inline(IOList) when is_list(IOList) -> ?il2b(IOList);
  +unwrap_inline(BString) when is_binary(BString) -> BString.
   
   debug(Tag, Content) ->
       docsh_lib:debug(Tag, "~s: ~p~n", [Tag, Content]),
  
positive.code:     [{fmt, cleanup_lines(Data)} | Fmt];
  collect_loose_text([{fmt, Element} | T], [], Fmt) ->
      [{fmt, Element} | collect_loose_text(T, [], Fmt)];
  collect_loose_text([{fmt, Element} | T], Data, Fmt) ->
      Clean = cleanup_lines(?il2b(lists:reverse(Data))),
      case Clean of
  
negative.code:     Lines = string:tokens(String, "\n"),
      ?il2b(string:join([ string:strip(L) || L <- Lines ], "\n")).
  
  cleanup_lines(BString) when is_binary(BString) ->
      Lines = re:replace(BString, <<"\s*\n\s*">>, <<"\n">>, [global, {return, list}]),
      ?il2b(string:strip(lists:flatten(Lines), both, $\n));
  cleanup_lines(IOList) ->
      BString = ?il2b([ unwrap_inline(E) || E <- IOList ]),
      cleanup_lines(BString).
  
  fullDescription(Data, _Attrs, _Parents, _E) ->
      [{fmt, H} | T] = collect_loose_text(Data),
  