⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlparser.cpp

📁 ecos实时嵌入式操作系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{    return Matches(wxT("</"));}bool wxSimpleHtmlParser::IsComment(){    return Matches(wxT("<!--"));}bool wxSimpleHtmlParser::IsDirective(){    return Matches(wxT("<!"));}bool wxSimpleHtmlParser::IsString(){    return (GetChar(m_pos) == (int) '"') ;}bool wxSimpleHtmlParser::IsWord(){    return (IsAlpha(GetChar(m_pos)));}bool wxSimpleHtmlParser::IsTagStartBracket(int ch){    return (ch == wxT('<'));}bool wxSimpleHtmlParser::IsTagEndBracket(int ch){    return (ch == wxT('>'));}bool wxSimpleHtmlParser::IsWhitespace(int ch){    return ((ch == 13) || (ch == 10) || (ch == 32) || (ch == (int) '\t')) ;}bool wxSimpleHtmlParser::IsAlpha(int ch){    return (wxIsalpha((wxChar) ch) != 0);}bool wxSimpleHtmlParser::IsWordChar(int ch){    return (wxIsalpha((wxChar) ch) != 0 || ch == wxT('-') || ch == wxT('_') || IsNumeric(ch));}bool wxSimpleHtmlParser::IsNumeric(int ch){    return (wxIsdigit((wxChar) ch) != 0 || ch == wxT('-') || ch == wxT('.')) ;}// Matches this string (case insensitive)bool wxSimpleHtmlParser::Matches(const wxString& tok, bool eatIt){    wxString text(m_text.Mid(m_pos, tok.Length()));    bool success = (text.CmpNoCase(tok) == 0) ;    if (success && eatIt)    {        m_pos += tok.Length();    }    return success;}// Safe way of getting a characterint wxSimpleHtmlParser::GetChar(size_t i) const{    if (i >= m_length)        return -1;    return m_text[i];}void wxSimpleHtmlParser::Clear(){    if (m_topLevel)        delete m_topLevel;    m_topLevel = NULL;    m_text = wxEmptyString;    m_pos = 0;    m_length = 0;}// Write this filevoid wxSimpleHtmlParser::Write(wxOutputStream& stream){    if (m_topLevel)        m_topLevel->Write(stream);}bool wxSimpleHtmlParser::WriteFile(wxString& filename){    wxFileOutputStream fstream(filename);    if (fstream.Ok())    {        Write(fstream);        return TRUE;    }    else        return FALSE;}/* * wxSimpleHtmlTag * Representation of a tag or chunk of text */wxSimpleHtmlTag::wxSimpleHtmlTag(const wxString& tagName, int tagType){    m_name = tagName;    m_type = tagType;    m_attributes = NULL;    m_children = NULL;    m_parent = NULL;    m_next = NULL;}wxSimpleHtmlTag::~wxSimpleHtmlTag(){    ClearAttributes();    ClearChildren();}//// Operationsvoid wxSimpleHtmlTag::ClearAttributes(){    if (m_attributes)    {        wxSimpleHtmlAttribute* attr = m_attributes;        while (attr)        {            wxSimpleHtmlAttribute* next = attr->m_next;            attr->m_next = NULL;            delete attr;            attr = next;        }        m_attributes = NULL;    }}wxSimpleHtmlAttribute* wxSimpleHtmlTag::FindAttribute(const wxString& name) const{    wxSimpleHtmlAttribute* attr = m_attributes;    while (attr)    {        if (attr->GetName().CmpNoCase(name) == 0)        {            return attr;        }        attr = attr->m_next;    }    return NULL;}void wxSimpleHtmlTag::AppendAttribute(const wxString& name, const wxString& value){    wxSimpleHtmlAttribute* attr = new wxSimpleHtmlAttribute(name, value);    if (m_attributes)    {        // Find tail        wxSimpleHtmlAttribute* last = m_attributes;        while (last->m_next)            last = last->m_next;        last->m_next = attr;    }    else        m_attributes = attr;}void wxSimpleHtmlTag::ClearChildren(){    if (m_children)    {        wxSimpleHtmlTag* child = m_children;        while (child)        {            wxSimpleHtmlTag* next = child->m_next;            child->m_next = NULL;            delete child;            child = next;        }        m_children = NULL;    }}void wxSimpleHtmlTag::AppendTag(wxSimpleHtmlTag* tag){    if (m_children)    {        // Find tail        wxSimpleHtmlTag* last = m_children;        while (last->m_next)            last = last->m_next;        last->m_next = tag;        tag->m_parent = this;    }    else        m_children = tag;}// Gets the text from this tag and its descendantswxString wxSimpleHtmlTag::GetTagText(){    wxString text;    if (m_children)    {        wxSimpleHtmlTag* tag = m_children;        while (tag)        {            text += tag->GetTagText();            tag = tag->m_next;        }        return text;    }    else if (GetType() == wxSimpleHtmlTag_Text)        return GetText();    else        return wxEmptyString;}int wxSimpleHtmlTag::GetAttributeCount() const{    int count = 0;    wxSimpleHtmlAttribute* attr = m_attributes;    while (attr)    {        count ++;        attr = attr->m_next;    }    return count;}wxSimpleHtmlAttribute* wxSimpleHtmlTag::GetAttribute(int i) const{    int count = 0;    wxSimpleHtmlAttribute* attr = m_attributes;    while (attr)    {        if (count == i)            return attr;        count ++;        attr = attr->m_next;    }    return NULL;}int wxSimpleHtmlTag::GetChildCount() const{    int count = 0;    wxSimpleHtmlTag* tag = m_children;    while (tag)    {        count ++;        tag = tag->m_next;    }    return count;}bool wxSimpleHtmlTag::HasAttribute(const wxString& name, const wxString& value) const{    wxSimpleHtmlAttribute* attr = FindAttribute(name);    return (attr && (attr->GetValue().CmpNoCase(value) == 0)) ;}bool wxSimpleHtmlTag::HasAttribute(const wxString& name) const{    return FindAttribute(name) != NULL ;}bool wxSimpleHtmlTag::GetAttributeValue(wxString& value, const wxString& attrName){    wxSimpleHtmlAttribute* attr = FindAttribute(attrName);    if (attr)    {        value = attr->GetValue();        return TRUE;    }    else        return FALSE;}// Search forward from this tag until we find a tag with this name & attribute wxSimpleHtmlTag* wxSimpleHtmlTag::FindTag(const wxString& tagName, const wxString& attrName){    wxSimpleHtmlTag* tag = m_next;    while (tag)    {        if (tag->NameIs(tagName) && tag->FindAttribute(attrName))            return tag;        tag = tag->m_next;    }    return NULL;}bool wxSimpleHtmlTag::FindTextUntilTagClose(wxString& text, const wxString& tagName){    wxSimpleHtmlTag* tag = this;    while (tag)    {        if (tag->GetType() == wxSimpleHtmlTag_Close && tag->NameIs(tagName))            return TRUE;        if (tag->GetType() == wxSimpleHtmlTag_Text)            text += tag->GetText();        tag = tag->m_next;    }    return TRUE;}wxSimpleHtmlTag* wxSimpleHtmlTag::GetChild(int i) const{    int count = 0;    wxSimpleHtmlTag* tag = m_children;    while (tag)    {        if (count == i)            return tag;        count ++;        tag = tag->m_next;    }    return NULL;}void wxSimpleHtmlTag::Write(wxOutputStream& stream){    switch (GetType())    {    case wxSimpleHtmlTag_Text:        {            stream << m_text;            break;        }    case wxSimpleHtmlTag_Open:        {            stream << "<" << m_name;            if (GetAttributeCount() > 0)                stream << " ";            int i;            for (i = 0; i < GetAttributeCount(); i++)            {                wxSimpleHtmlAttribute* attr = GetAttribute(i);                attr->Write(stream);                if (i < GetAttributeCount() - 1)                    stream << " ";            }            stream << ">\n";            break;        }    case wxSimpleHtmlTag_Directive:        {            stream << "<!" << m_name << " ";            int i;            for (i = 0; i < GetAttributeCount(); i++)            {                wxSimpleHtmlAttribute* attr = GetAttribute(i);                attr->Write(stream);                if (i < GetAttributeCount() - 1)                    stream << " ";            }            stream << ">\n";            break;        }    case wxSimpleHtmlTag_Close:        {            stream << "</" << m_name << ">\n";            break;        }    default:        {            break;        }    }    wxSimpleHtmlTag* tag = m_children;    while (tag)    {        tag->Write(stream);        tag = tag->m_next;    }}void wxSimpleHtmlAttribute::Write(wxOutputStream& stream){    if (m_value.IsEmpty())        stream << m_name;    else    {        stream << m_name;        stream << "=\"";        stream << m_value;        stream << "\"";    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -