anchor.diff:     
   is_meta_atom_name(AtomName) ->
       AtomName1 = atom_to_list(AtomName),
  -    is_fun_name(AtomName1) andalso
  +    wrangler_misc:is_fun_name(AtomName1) andalso
       lists:prefix("@", lists:reverse(AtomName1)).
   
   
  
positive.code: %%@spec is_var_name(string())-> boolean()
  -spec(is_var_name(Name:: string())-> boolean()).
  is_var_name(Name) ->
      case Name of
        [] -> false;
        [H] -> is_upper(H) and (H =/= 95);
        [H| T] -> (is_upper(H) or (H == 95)) and is_var_name_tail(T)
      end.
  
  %%@doc Returns `true' if a string is lexically a legal function name,
  %%      otherwise `false'.
  %%@spec is_fun_name(string())-> boolean()
  -spec(is_fun_name(string())-> boolean()).
  is_fun_name(Name) ->
      case Name of
        [H| T] -> is_lower(H) and is_var_name_tail(T);
        [] -> false
      end.
  
  is_var_name_tail(Name) ->
      case Name of
        [H| T] ->
  	  (is_upper(H) or is_lower(H) or 
  	   is_digit(H) or (H == 64) or (H == 95)) and
  	    is_var_name_tail(T);
        [] -> true
      end.
  
  is_upper(L) -> (L >= 65) and (90 >= L).
  
  is_lower(L) -> (L >= 97) and (122 >= L).
  
  is_digit(L) -> (L >= 48) and (57 >= L).
  
  
  %% =====================================================================
  %%@doc Returns all the variables, including both variable name and 
  
negative.code: 
  %%@private
  quote(Str) ->    
      wrangler_misc:parse_annotate_expr(Str).
  
  
  %%=================================================================
  