anchor.diff:  %% "@bar"     = throw()
   %% "foo@@bar" = throw()
   %% "@"        = throw()
  -%% ""         = {""}          XXX is this ok ? nothing currently 
  +%% ""         = {""}          XXX is this ok ? nothing currently
   %%                            depends on this behaviour.
   %%--------------------------------------------------------------------
   split_fields(FieldStr, Sep) ->
  
positive.code: 	    ($_, Acc) -> Acc;
  	    ($+, Acc) -> Acc;
  	    ($`, Acc) -> Acc;
  	    ($', Acc) -> Acc;
  	    ($~, Acc) -> Acc;
  	    (Char, Acc) ->
  		Acc and is_alphanum(Char) 
  	end,	
      lists:foldl(F,true,Str).
      
  
  %%--------------------------------------------------------------------
  %% Function: is_hostname(Str)
  %%           Str = string(), the host string
  %% Descrip.: parse host string, throw a exception if it doesn't 
  %%           conform to the format specified in RFC3261 chapter 25.1 
  %%           p218
  %% Returns : Str | throw()
  %% Note    : this function only matches symbolic hostnames
  
negative.code:     split_fields(FieldStrRest, Sep, [Char | FirstSegmentAcc]).
  
  %%--------------------------------------------------------------------
  %% Function: parse_host(Host)
  %%           Host = string()
  %% the host rule alows for a varity of formats:
  %%
  %% hostname
  %% ipv4address
  %% ipv6reference
  %%
  %% Descrip.: return Host if it is wellformed, a exception is
  %%           thrown if the Host is malformed
  %% Returns : Host | throw() if parse fails
  %%           Host = string()
  