+ if (*pos != wxT('<'))
+ continue;
+
+ // possible tag start found:
+
+ // don't cache comment tags
+ if ( wxHtmlParser::SkipCommentTag(pos, end) )
+ continue;
+
+ // Remember the starting tag position.
+ wxString::const_iterator stpos = pos++;
+
+ // And look for the ending one.
+ int i;
+ for ( i = 0;
+ pos < end && i < (int)WXSIZEOF(tagBuffer) - 1 &&
+ *pos != wxT('>') && !wxIsspace(*pos);
+ ++i, ++pos )
+ {
+ tagBuffer[i] = (wxChar)wxToupper(*pos);
+ }
+ tagBuffer[i] = wxT('\0');
+
+ while (pos < end && *pos != wxT('>'))
+ ++pos;
+
+ if ( pos == end )
+ {
+ // We didn't find a closing bracket, this is not a valid tag after
+ // all. Notice that we need to roll back pos to avoid creating an
+ // invalid iterator when "++pos" is done in the loop statement.
+ --pos;
+
+ continue;
+ }
+
+ // We have a valid tag, add it to the cache.
+ size_t tg = Cache().size();
+ Cache().push_back(wxHtmlCacheItem());
+ Cache()[tg].Key = stpos;
+ Cache()[tg].Name = new wxChar[i+1];
+ memcpy(Cache()[tg].Name, tagBuffer, (i+1)*sizeof(wxChar));
+
+ if ((stpos+1) < end && *(stpos+1) == wxT('/')) // ending tag: