Beispiel #1
0
void CFX_SAXReader::ParseMaybeClose() {
  if (m_CurByte == '>') {
    if (m_pCurItem->m_eNode == FX_SAXNODE_Instruction) {
      m_iNameLength = m_iDataPos;
      m_iDataPos = 0;
      if (m_pHandler) {
        NotifyTargetData();
      }
    }
    ParseTagClose();
    m_eMode = FX_SAXMODE_Text;
  } else if (m_ePrevMode == FX_SAXMODE_TagName) {
    AppendData('/');
    m_eMode = FX_SAXMODE_TagName;
    m_ePrevMode = FX_SAXMODE_Text;
    ParseTagName();
  } else if (m_ePrevMode == FX_SAXMODE_TagAttributeName) {
    AppendName('/');
    m_eMode = FX_SAXMODE_TagAttributeName;
    m_ePrevMode = FX_SAXMODE_Text;
    ParseTagAttributeName();
  } else if (m_ePrevMode == FX_SAXMODE_TargetData) {
    AppendName('?');
    m_eMode = FX_SAXMODE_TargetData;
    m_ePrevMode = FX_SAXMODE_Text;
    ParseTargetData();
  }
}
// Main recursive parsing function
bool wxSimpleHtmlParser::ParseHtml(wxSimpleHtmlTag* parent)
{
    while (!Eof())
    {
        EatWhitespace();
        if (IsComment())
        {
            ParseComment();
        }
        else if (IsDirective())
        {
            wxSimpleHtmlTag* tag = ParseDirective();
            if (tag)
                parent->AppendTag(tag);
        }
        else if (IsTagClose())
        {
            wxSimpleHtmlTag* tag = ParseTagClose();
            if (tag)
                parent->AppendTag(tag);
        }
        else if (IsTagStartBracket(GetChar(m_pos)))
        {
            wxSimpleHtmlTag* tag = ParseTagHeader();
            if (tag)
                parent->AppendTag(tag);
        }
        else
        {
            // Just a text string
            wxString text;
            ParseText(text);

            wxSimpleHtmlTag* tag = new wxSimpleHtmlTag(wxT("TEXT"), wxSimpleHtmlTag_Text);
            tag->SetText(text);
            parent->AppendTag(tag);
        }
    }
    return TRUE;
}