anchor.diff:  %%	{error,{ErrorPos,?MODULE,What},EndPos}
   
   string(Cs) ->
  -    string(Cs, {1, 1}, ?DEFAULT_TABWIDTH).
  -
  -
  -string(Cs, {Line, Col}) -> string(Cs, {Line, Col}, ?DEFAULT_TABWIDTH).
  -
  -string(Cs, {Line, Col}, TabWidth)
  +    string(Cs, {1, 1}, ?DEFAULT_TABWIDTH, ?DEFAULT_FILEFORMAT).
  +
  +
  +string(Cs, {Line, Col}) -> string(Cs, {Line, Col}, ?DEFAULT_TABWIDTH, ?DEFAULT_FILEFORMAT).
  +
  +string(Cs, {Line, Col}, TabWidth, FileFormat)
       when is_list(Cs), is_integer(Line), is_integer(Col), is_integer(TabWidth) ->
       %     %% Debug replacement line for chopping string into 1-char segments
       %     scan([], [], [], Pos, Cs, []).
  -    scan(Cs, [], [], {Line, Col}, [], [],TabWidth).
  +    scan(Cs, [], [], {Line, Col}, [], [],TabWidth,FileFormat).
   
   
   %% tokens(Continuation, CharList, StartPos) ->
  
positive.code: name_char($@) -> true;
  name_char(_) -> false.
  
  scan_char([$\\ | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      sub_scan_escape(Cs, [fun scan_char_escape/7 | Stack], Toks, {Line, Col}, State, Errors, TabWidth);
  scan_char([$\n | Cs], Stack, Toks, {Line, Col}, State,  Errors, TabWidth) ->
      scan(Cs, Stack, [{char, {Line, Col}, $\n} | Toks], {Line + 1, Col}, State, Errors, TabWidth);
  scan_char([], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      more([], Stack, Toks, {Line, Col}, State, Errors, TabWidth, fun scan_char/7);
  scan_char(Cs, Stack, Toks, {Line, Col}, State,Errors, TabWidth) ->
      scan_char_escape(Cs, Stack, Toks, {Line, Col}, State, Errors, TabWidth).
  
  scan_char_escape([nl | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      scan(Cs, Stack, [{char, {Line, Col}, $\n} | Toks], {Line + 1, 1}, State, Errors, TabWidth);
  scan_char_escape([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      scan(Cs, Stack, [{char, {Line, Col}, C} | Toks],{Line, Col + 1}, State, Errors, TabWidth);
  scan_char_escape(Eof, _Stack, _Toks, {Line, Col}, State, Errors, TabWidth) ->
      done(Eof, [{char, {Line, Col}} | Errors], [], {Line, Col + 1}, State, TabWidth).
  
  scan_string([$" | Cs], Stack, Toks, {Line, Col}, State,  Errors, TabWidth) ->
      [StartPos, $" | S] = reverse(Stack),
      scan(Cs, [], [{string, StartPos, S} | Toks],{Line, Col+1}, State, Errors, TabWidth);
  
  scan_string([$\r | Cs], Stack, Toks, {Line, _Col}, State, Errors, TabWidth) ->
      case Cs of 
  	[$\n|Cs1] ->  scan_string(Cs1, [$\n, $\r | Stack], Toks, {Line + 1, 1},
  		State, Errors, TabWidth);
  	_ ->scan_string(Cs, [$\r | Stack], Toks, {Line + 1, 1},
  			State, Errors, TabWidth)
      end;	   
  scan_string([$\n | Cs], Stack, Toks, {Line, _Col}, State,  Errors, TabWidth) ->
      scan_string(Cs, [$\n | Stack], Toks, {Line + 1, 1}, State, Errors, TabWidth);
  scan_string([$\\ | Cs], Stack, Toks, {Line, Col}, State,  Errors, TabWidth) ->
      sub_scan_escape(Cs, [fun scan_string_escape/7 | Stack], Toks, {Line, Col+1}, State, Errors, TabWidth);
  scan_string([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) 
     when C==$\t ->
      scan_string(Cs, [C | Stack], Toks, {Line, Col+TabWidth}, State,Errors, TabWidth);
  scan_string([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      scan_string(Cs, [C | Stack], Toks, {Line, Col+1}, State,Errors, TabWidth);
  scan_string([], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      more([], Stack, Toks, {Line, Col}, State, Errors, TabWidth, fun scan_string/7);
  scan_string(Eof, Stack, _Toks, {Line, Col}, State, Errors, TabWidth) ->
      [StartPos, $" | S] = reverse(Stack),
      SS = string:substr(S, 1, 16),
      done(Eof, [{{string, $", SS}, StartPos} | Errors], [],
  	 {Line, Col}, State, TabWidth).
  
  scan_string_escape([nl | Cs], Stack, Toks, {Line, _Col}, State, Errors, TabWidth) ->
      scan_string(Cs, [$\n | Stack], Toks, {Line + 1, 1}, State, Errors, TabWidth);
  scan_string_escape([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      scan_string(Cs, [C, $\\| Stack], Toks, {Line, Col+1}, State, Errors, TabWidth);
  scan_string_escape(Eof, Stack, _Toks, {Line, Col},State, Errors, TabWidth) ->
      [StartPos, $" | S] = reverse(Stack),
      SS = string:substr(S, 1, 16),
      done(Eof, [{{string, $", SS}, StartPos} | Errors], [],
  	 {Line, Col + length(S) + 2}, State, TabWidth).
  
  scan_qatom([$' | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      [StartPos, $' | S] = reverse(Stack),
      case catch list_to_atom(S) of
        A when is_atom(A) ->
  	  scan(Cs, [], [{atom, StartPos, A} | Toks],{Line, Col + 1}, State, Errors, TabWidth);
        _ ->
  	  scan(Cs, [], Toks, {Line, Col}, State,[{{illegal, atom}, StartPos} | Errors], TabWidth)
      end;
  scan_qatom([$\r|Cs], Stack, Toks, {Line, _Col}, State, Errors, TabWidth) ->
      case Cs of 
  	[$\n|Cs1] -> scan_qatom(Cs1,[$\n, $\r|Stack], Toks, {Line+1, 1}, State, Errors, TabWidth);
  	_ -> scan_qatom(Cs,[$\r|Stack], Toks, {Line+1, 1}, State, Errors, TabWidth)
      end;
  scan_qatom([$\n | Cs], Stack, Toks, {Line, _Col}, State, Errors, TabWidth) ->
      scan_qatom(Cs, [$\n | Stack], Toks, {Line + 1, 1},State, Errors, TabWidth);
  scan_qatom([$\\ | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      sub_scan_escape([$\\|Cs], [fun scan_qatom_escape/7 | Stack], Toks, {Line, Col+1}, State, Errors, TabWidth);
  scan_qatom([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth)
    when C==$\t ->
      scan_qatom(Cs, [C | Stack], Toks, {Line, Col+TabWidth}, State,  Errors, TabWidth);
  scan_qatom([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      scan_qatom(Cs, [C | Stack], Toks, {Line, Col+1}, State,  Errors, TabWidth);
  scan_qatom([], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      more([], Stack, Toks, {Line, Col}, State, Errors,TabWidth, fun scan_qatom/7);
  scan_qatom(Eof, Stack, _Toks, {Line, Col}, State, Errors, TabWidth) ->
      [StartPos, $' | S] = reverse(Stack),
      SS = string:substr(S, 1, 16),
      done(Eof, [{{string, $', SS}, StartPos} | Errors], [],{Line, Col}, State, TabWidth).
  
  scan_qatom_escape([nl | Cs], Stack, Toks, {Line, _Col}, State, Errors, TabWidth) ->
      scan_qatom(Cs, [$\n | Stack], Toks, {Line + 1, 1}, State, Errors, TabWidth);
  scan_qatom_escape([C | Cs], Stack, Toks, {Line, Col}, State, Errors, TabWidth) ->
      scan_qatom(Cs, [C | Stack], Toks, {Line, Col+1}, State, Errors, TabWidth);
  scan_qatom_escape(Eof, Stack, _Toks, {Line, Col}, State,Errors, TabWidth) ->
      [StartPos, $' | S] = reverse(Stack),
      SS = string:substr(S, 1, 16),
      done(Eof, [{{string, $', SS}, StartPos} | Errors], [],
  	 {Line, Col}, State, TabWidth).
  
  %% Scan for a character escape sequence, in character literal or string.
  %% A string is a syntactical sugar list (e.g "abc")
  
negative.code: %%       CurrentPos,ContState,ErrorStack,ContFunArity5}
  
  %% definitely should sperate {Line, Col} and TabWidth;; HL.
  tokens([], Chars, {{Line, Col}, TabWidth, FileFormat}) ->
      tokens({[], [], [], {Line, Col}, io, [], TabWidth, FileFormat, fun scan/8}, Chars, {{Line, Col}, TabWidth, FileFormat});
  tokens({Cs, _Stack, _Toks, {Line, Col}, eof, TabWidth, FileFormat, _Fun}, eof, {_, TabWidth, FileFormat}) ->
      {done, {eof, {Line, Col}}, Cs};
  tokens({Cs, Stack, Toks, {Line, Col}, _State, Errors,TabWidth,FileFormat,Fun}, eof, {_, TabWidth, FileFormat}) ->
      Fun(Cs ++ eof, Stack, Toks, {Line, Col}, eof, Errors, TabWidth,FileFormat);
  tokens({Cs, Stack, Toks, {Line, Col}, State, Errors,TabWidth,FileFormat,Fun},Chars, {_, TabWidth,FileFormat}) ->
      Fun(Cs ++ Chars, Stack, Toks, {Line, Col}, State,Errors, TabWidth,FileFormat).
  
  %% Scan loop.
  %%
  