anchor.diff:  
   %%% the lexer first lexes the input
   %%% make_lines does 2 passes:
  -%%% * it chops the lexed strings into lines which it represents as a list of lists
  +%%% * it chops the lexed strings into lines which it represents as a
  +%%%   list of lists
   %%% * it then types the lines into the following:
   %%% * normal lines
   %%% * reference style links
  
positive.code: %%%   - code blocks
  %%%   - horizontal rules
  %%% the parser then does its magic interpolating the references as appropriate
  conv(String) -> Lex = lex(String),
                  io:format("Lex is ~p~n", [Lex]),
                  UntypedLines = make_lines(Lex),
                  io:format("UntypedLines are ~p~n", [UntypedLines]),
                  TypedLines = type_lines(UntypedLines),
                  io:format("TypedLines are ~p~n", [TypedLines]),
                  parse(TypedLines).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%%
  
negative.code: %% NOTE 2: the asterix version also might generate a horizontal rule
  %%         which is why it jumps to type_star2 <-- note the 2!!
  t_l1([[{{md, star}, _}, {{ws, _}, _} | _T1] = H | T], A1, A2, A3) ->
      t_l1(T, A1, A2, [{type_star2(H), H} | A3]);
  t_l1([[{{md, plus}, _}, {{ws, _}, _} = W | T1] = H | T], A1, A2, A3) ->
      t_l1(T, A1, A2, [{{ul, make_list_str([W | T1])}, H} | A3]);
  
  %% types ordered lists...
  t_l1([[{num, _} | _T] = H | T], A1, A2, A3) ->
  