protected Link ParseLink()
        {
            //      Condition.Requires(NextToken.Type, "CurrentToken.Type").IsEqualTo(TokenType.Url);

            string url     = NextToken.Value;
            string rel     = null;
            string title   = null;
            string title_s = null;
            string type    = null;
            List <KeyValuePair <string, string> > extensions = new List <KeyValuePair <string, string> >();

            GetNextToken();

            while (NextToken.Type == TokenType.Semicolon)
            {
                try
                {
                    GetNextToken();
                    bool isExtended;
                    KeyValuePair <string, string> p = ParseParameter(out isExtended);

                    if (p.Key == "rel" && rel == null)
                    {
                        rel = p.Value;
                    }
                    else if (p.Key == "title" && title == null && !isExtended)
                    {
                        title = p.Value;
                    }
                    else if (p.Key == "title" && title_s == null && isExtended)
                    {
                        title_s = p.Value;
                    }
                    else if (p.Key == "type" && type == null)
                    {
                        type = p.Value;
                    }
                    else
                    {
                        extensions.Add(p);
                    }
                }
                catch (FormatException)
                {
                    while (NextToken.Type != TokenType.Semicolon && NextToken.Type != TokenType.Comma && NextToken.Type != TokenType.EOF)
                    {
                        try
                        {
                            GetNextToken();
                        }
                        catch (FormatException)
                        {
                        }
                    }
                }
            }

            Link link = _linkFactory.CreateLink(rel);

            link.Target   = new Uri(BaseUrl, url);
            link.Relation = rel;
            link.Title    = title_s ?? title;
            extensions.ForEach(x => link.SetLinkExtension(x.Key, x.Value));

            if (!String.IsNullOrEmpty(type))
            {
                link.Type = MediaTypeHeaderValue.Parse(type);
            }
            return(link);
        }