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; }