wxSnippets Logo   wxWidgets Code
  S N I P P E T S
linkparser.h
#ifndef __LINKPARSER_H
#define __LINKPARSER_H

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif

#include <wx/html/htmlpars.h>

enum htmlParserOption{
    ParseOnlyImages,
    ParseOnlyPages,
    ParseBoth
};
class LinkParser : public wxHtmlParser
{
    wxArrayString stringArray;
    wxString m_src;   
public:
    LinkParser(const wxString& src, htmlParserOption option = ParseBoth);
    wxArrayString GetLinks();
    wxArrayString GetLinks(wxString hostUrl);
    void AddString(wxString txt);
    wxObject* GetProduct(){return NULL;}
    void AddText(const wxChar* txt);

};

class LinkTagHandler : public wxHtmlTagHandler
{   LinkParser* m_Parser;
public:
    LinkTagHandler();
    LinkTagHandler(LinkParser* p);
    wxString GetSupportedTags();
    bool HandleTag(const wxHtmlTag& tag);
};

class ImageTagHandler : public wxHtmlTagHandler
{   LinkParser* m_Parser;
public:
    ImageTagHandler();
    ImageTagHandler(LinkParser* p);
    wxString GetSupportedTags();
    bool HandleTag(const wxHtmlTag& tag);
};


#endif
linkparser.cpp
#include "LinkParser.h"
#include "borfunctions.h"

LinkTagHandler::LinkTagHandler()
{
    m_Parser = NULL;
}

LinkTagHandler::LinkTagHandler(LinkParser *p)
{
    m_Parser = p;
}

wxString LinkTagHandler::GetSupportedTags()
{
    return "A";
}

bool LinkTagHandler::HandleTag(const wxHtmlTag& tag)
{
    if (tag.HasParam( wxT("HREF") ))        
    {  
        wxString href(tag.GetParam( wxT("HREF") ));
        m_Parser->AddString(href);
        ParseInner(tag);
        return true;
    }
    else
        return false;
}
///////////////////////////////////////
ImageTagHandler::ImageTagHandler()
{
    m_Parser = NULL;
}

ImageTagHandler::ImageTagHandler(LinkParser *p)
{
    m_Parser = p;
}

wxString ImageTagHandler::GetSupportedTags()
{
    return "IMG";
}

bool ImageTagHandler::HandleTag(const wxHtmlTag& tag)
{
    if (tag.HasParam( wxT("SRC") ))        
    {  
        wxString href(tag.GetParam( wxT("SRC") ));
        m_Parser->AddString(href);
        ParseInner(tag);
        return true;
    }
    else
        return false;
}
///////////////////////////////////////////////////////////////////////////////
LinkParser::LinkParser(const wxString& url, htmlParserOption option)
:m_src(url)
{
    bool ImgOk = true;
    bool PageOk = true ;
    if (option == ParseBoth)
    {
        ImgOk = true;
        PageOk = true ;
    }
    if (option == ParseOnlyImages)
    {
        ImgOk = true;
        PageOk = false ;
    }
   
    if (option == ParseOnlyPages)
    {
        ImgOk = false;
        PageOk = true ;
    }

    if (PageOk == true)
        AddTagHandler( new LinkTagHandler(this) );

    if (ImgOk == true)   
        AddTagHandler( new ImageTagHandler(this) );
}

void LinkParser::AddString(wxString txt)
{
    stringArray.Add(txt);
}

void LinkParser::AddText(const wxChar* txt)
{
}

wxArrayString LinkParser::GetLinks(wxString hostUrl)
{
    
    Parse(m_src);
    wxString newItem,hostStr;   
    //hostStr = ;
    wxArrayString resultArrayString;
    for (int i =0 ; i < stringArray.GetCount(); i++)
    {
        newItem = stringArray.Item(i);
        resultArrayString.Add(newItem);
    }

    return resultArrayString;
}

wxArrayString LinkParser::GetLinks(void)
{
    Parse(m_src);  
    return stringArray;
}






No comments are included for this article. Submit a comment with your feedback/suggestions.

Click to View Printer Friendly Version