anchor.diff:                            end
   		  end, S).
   	        
  -
   get_paper_ribbon_width(Form) ->    
  -    case refac_syntax:type(Form) of
  -	attribute -> {?PAPER, ?RIBBON};
  -	_ ->
  -	    Fun = fun(T,Acc) -> 
  -			   {S, E} = refac_util:get_range(T),
  -			   [S,E]++ Acc
  -		   end,
  -	     AllRanges =refac_syntax_lib:fold(Fun, [], Form),
  -	     case AllRanges of 
  -		 [] -> {?PAPER, ?RIBBON};
  -		 _ ->  {Start,End} = refac_util:get_range(Form),
  -		       GroupedRanges = group_by(1, (lists:filter(fun(Loc) ->
  -									 (Loc>= Start) and (Loc=<End) end, AllRanges))),
  -		       MinMaxCols=lists:map(fun(Rs) ->Cols = lists:map(fun({_Ln, Col}) -> Col end, Rs),
  -						      case Cols of 
  -							  [] -> {1, 80};
  -							  _ -> {lists:min(Cols),lists:max(Cols)}
  -						      end
  -					    end,  GroupedRanges),
  -		       Paper = lists:max(lists:map(fun({_Min, Max}) ->
  -							   Max end, MinMaxCols)),
  -		       Ribbon = lists:max(lists:map(fun({Min, Max}) ->
  -							    Max-Min+1 end, MinMaxCols)),
  -		       Paper1 = case Paper < ?PAPER of
  -				    true -> ?PAPER;
  -				    _ -> Paper
  -				end,
  -		       Ribbon1 = case Ribbon < ?RIBBON of 
  -				     true -> ?RIBBON;
  -				     _  -> Ribbon
  -				 end,	
  -		       {Paper1+5, Ribbon1+5}  %% adjustion to take the ending tokens such as brackets/commas into account.
  -	     end
  +     case refac_syntax:type(Form) of
  + 	attribute -> {?PAPER, ?RIBBON};
  + 	_ ->
  + 	    Fun = fun(T,Acc) -> 
  + 			   {S, E} = refac_util:get_range(T),
  + 			   [S,E]++ Acc
  + 		   end,
  + 	     AllRanges =refac_syntax_lib:fold(Fun, [], Form),
  + 	     case AllRanges of 
  + 		 [] -> {?PAPER, ?RIBBON};
  + 		 _ ->  {Start,End} = refac_util:get_range(Form),
  + 		       GroupedRanges = group_by(1, (lists:filter(fun(Loc) ->
  + 									 (Loc>= Start) and (Loc=<End) end, AllRanges))),
  + 		       MinMaxCols=lists:map(fun(Rs) ->Cols = lists:map(fun({_Ln, Col}) -> Col end, Rs),
  + 						      case Cols of 
  + 							  [] -> {1, 80};
  + 							  _ -> {lists:min(Cols),lists:max(Cols)}
  + 						      end
  + 					    end,  GroupedRanges),
  + 		       Paper = lists:max(lists:map(fun({_Min, Max}) ->
  + 							   Max end, MinMaxCols)),
  + 		       Ribbon = lists:max(lists:map(fun({Min, Max}) ->
  + 							    Max-Min+1 end, MinMaxCols)),
  + 		       Paper1 = case Paper < ?PAPER of
  + 				    true -> ?PAPER;
  + 				    _ -> Paper
  + 				end,
  + 		       Ribbon1 = case Ribbon < ?RIBBON of 
  + 				     true -> ?RIBBON;
  + 				     _  -> Ribbon
  + 				 end,	
  + 		       {Paper1+5, Ribbon1+5}  %% adjustion to take the ending tokens such as brackets/commas into account.
  + 	     end
       end.
   
   		
  
positive.code: 	    text(erl_syntax:char_literal(Node));
  	
  	string ->
  	    lay_string(erl_syntax:string_literal(Node), Ctxt);
  
  	nil ->
  	    text("[]");
  
  
negative.code:     beside(lay(S, Ctxt), beside(text("."),
  				lay_qualified_name_1(Ss, Ctxt))).
  
  
  
  %% lay_string/1 defined by Huiqing Li;
  lay_string([]) -> empty();
  lay_string([{string, _, Str}]) ->
      text(io_lib:write_string(Str));
  lay_string([{string, _, Str}|Ts]) ->
      case Ts of 
  	[] -> 
  	    text(io_lib:write_string(Str));
  	_ -> above(text(io_lib:write_string(Str)), lay_string(Ts))
      end.
      
  
  lay_string(S, Ctxt) ->
      %% S includes leading/trailing double-quote characters. The segment
      %% width is 2/3 of the ribbon width - this seems to work well.
  