anchor.diff:  list_titles (DocsRoot, Revs) ->
       case [list_rev(DocsRoot, Rev) || Rev <- Revs] of
           [] -> "(none)";
  -        Items  -> string:join(Items, " &nbsp; ")
  +        Items -> table_titles(Items)
       end.
   
   %%FIXME: escape htmlentities (and security in path names?)
  
positive.code: group_by_major (Above, [], Acc, Current, Top) ->
      Max = max(Current, Top),
      lists:foldl( fun ({{Header,Lines},NLines}, Columns) ->
                           Blanks = lists:duplicate(Max - NLines, ""),
                           [ [Header] ++ Lines ++ Blanks | Columns]
                   end , [], [{Above,Current}|Acc] ).
  
  tags_table (Dir, Columns) ->
      [Headers0|Body0] = transpose(Columns),
      Headers = [ case Header of
                      Major when is_integer(Major) ->
  
negative.code:             OthersTop = length(Others0)
      end,
      SemVers = lists:sort(CmpSemVers, lists:filtermap(fun get_semver/1, Tags)),
      table_tags(Dir, Others ++ group_by_major(SemVers, OthersTop)).
  
  group_by_major ([{SemVer,Rev}|TaggedSemVers], OthersTop) ->
      group_by_major({hd(SemVer),[Rev]}, TaggedSemVers, [], 1, OthersTop).
  