Re[5]: Выбрать url из страницы
От: Socket Ниоткуда http://www.samborsky.com
Дата: 19.10.07 14:42
Оценка: 30 (1)
Здравствуйте, __SPIRIT__, Вы писали:

__S>Здравствуйте, c-smile, Вы писали:


__S>Не работает для


__S>
__S> str_istream si(
__S>    "<a href='http://terrainformatica.com/index.php?a=1&b=2'>link</a>");
__S>


Похоже что нужно сделать так:


    scanner::token_type scanner::scan_head()
    {
      wchar c = skip_whitespace();

      if(c == '>') { c_scan = &scanner::scan_body; return scan_body(); }
      if(c == '/')
      {
         wchar t = get_char();
         if(t == '>')   { c_scan = &scanner::scan_body; return TT_TAG_END; }
         else { push_back(t); return TT_ERROR; } // erroneous situtation - standalone '/'
      }

      attr_name_length = 0;
      value_length = 0;

      // attribute name...
      while(c != '=') 
      {
        if( c == 0) return TT_EOF;
        if( c == '>' ) { push_back(c); return TT_ATTR; } // attribute without value (HTML style)
        if( is_whitespace(c) )
        {
          c = skip_whitespace();
          if(c != '=') { push_back(c); return TT_ATTR; } // attribute without value (HTML style)
          else break;
        }
        if( c == '<') return TT_ERROR;
        append_attr_name(c);
        c = get_char();
      }

      c = skip_whitespace();
      // attribute value...
      
      if(c == '\"')
        while(c = get_char())
        {
            if(c == '\"') return TT_ATTR;
            //if(c == '&') c = scan_entity();
            append_value(c);
        }
      else if(c == '\'') // allowed in html
        while(c = get_char())
        {
            if(c == '\'') return TT_ATTR;
            //if(c == '&') c = scan_entity();
            append_value(c);
        }
      else  // scan token, allowed in html: e.g. align=center
          do
          {
              if( is_whitespace(c) ) return TT_ATTR;
              if( c == '>' ) { push_back(c); return TT_ATTR; }
              append_value(c);
          } while(c = get_char());

      return TT_ERROR;
    }


Но хочется конечно услышать мнение автора Fast and Compact HTML/XML Scanner/Tokenizer c_smile
http://www.samborsky.com — мой блог
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.