00001
00002
00003
00004
00005
00006 #if !defined(AFX_FSHTMLPARSER_H__AE1402E9_034A_41A0_8BD2_74430D5938AB__INCLUDED_)
00007 #define AFX_FSHTMLPARSER_H__AE1402E9_034A_41A0_8BD2_74430D5938AB__INCLUDED_
00008
00009 #if _MSC_VER > 1000
00010 #pragma once
00011 #endif
00012
00013 #include <windows.h>
00014 #include <fsString.h>
00015 #include "../list.h"
00016
00017 enum fsLinkRelType
00018 {
00019 LRT_STYLESHEET,
00020 LRT_UNKNOWN
00021 };
00022
00023 enum fsMetaHttpEquivType
00024 {
00025 MHET_REFRESH,
00026 MHET_UNKNOWN,
00027 };
00028
00029 class fsHTMLParser
00030 {
00031 public:
00032 void ReplaceFrameUrl(int iIndex, LPCSTR pszNewUrl);
00033 LPCSTR GetFrameUrl (int iIndex);
00034 int GetFrameUrlCount();
00035 void RemoveBaseTag();
00036 LPCSTR Get_BaseURL();
00037
00038 void ParseHTML (LPSTR pszHTML);
00039
00040 void SetKillDupes (BOOL bKill);
00041
00042
00043 void ReplaceLinkUrl(int iIndex, LPCSTR pszNewUrl);
00044
00045 fsLinkRelType GetLinkUrlRelType (int iIndex);
00046
00047 LPCSTR GetLinkUrl (int iIndex);
00048
00049 int GetLinkUrlCount();
00050
00051 void ReplaceImage (int iIndex, LPCSTR pszNewImg);
00052
00053 void ReplaceUrl (int iIndex, LPCSTR pszNewUrl);
00054
00055 int GetImageLinkTo (int iImage);
00056
00057 LPCSTR GetImage (int iIndex);
00058
00059 int GetImageCount();
00060
00061 int GetUrlCount();
00062
00063 LPCSTR GetUrl (int iIndex);
00064
00065 UINT GetHTMLLength ();
00066
00067 fsHTMLParser();
00068 virtual ~fsHTMLParser();
00069
00070 protected:
00071 LPCSTR ParseTag_Frame_Src(LPCSTR pszTag, LPCSTR pszAddUrlEnds = NULL);
00072 static LPCSTR ParseTag_Frame (LPCSTR pszTag, fsHTMLParser* pThis);
00073 LPCSTR ParseTag_Base_Href(LPCSTR pszTag, LPCSTR pszAddUrlEnds = NULL);
00074 static LPCSTR ParseTag_Base (LPCSTR pszTag, fsHTMLParser *pThis);
00075
00076
00077
00078 LPCSTR ParseTag (LPCSTR pszTag);
00079 LPCSTR ParseTag_Meta_Content (LPCSTR pszTag, fsMetaHttpEquivType mhet);
00080 LPCSTR ParseTag_Meta_HttpEquiv (LPCSTR pszTag, fsMetaHttpEquivType* mhet);
00081 static LPCSTR ParseTag_Meta (LPCSTR pszTag, fsHTMLParser *pThis);
00082 LPCSTR ParseTag_Link_Href (LPCSTR pszTag);
00083 LPCSTR ParseTag_Link_Rel (LPCSTR pszTag, fsLinkRelType *lrt);
00084 static LPCSTR ParseTag_Link (LPCSTR pszTag, fsHTMLParser* parser);
00085 LPCSTR ParseTag_Img_Src (LPCSTR pszTag);
00086 LPCSTR ParseTag_A_Href (LPCSTR pszTag, LPCSTR pszAddUrlEnds = NULL);
00087 LPCSTR ParseTag_Unknown (LPCSTR pszTag);
00088 static LPCSTR ParseTag_Img (LPCSTR pszTag, fsHTMLParser *pThis);
00089 static LPCSTR ParseTag_A (LPCSTR pszTag, fsHTMLParser *pThis);
00090
00091
00092
00093 void CorrectRegions (int nStart, int nHole);
00094
00095
00096 struct fsTextRegion
00097 {
00098 int nStart;
00099 int nEnd;
00100 };
00101
00102
00103
00104 int ReplaceString (LPCSTR pszNewVal, fsTextRegion &rgn);
00105
00106
00107 void ParseHTML ();
00108
00109
00110
00111
00112
00113 LPCSTR Parse_HTMLGiving (LPCSTR pszGiving, LPSTR* ppszValue, LPCSTR pszAddEnds = NULL);
00114
00115 LPSTR m_pszHTML;
00116 fs::list <fsString> m_vUrls, m_vImgs, m_vLinkUrls, m_vFrameUrls;
00117 fs::list <fsTextRegion> m_vUrlsRgns, m_vImgsRgns, m_vLinkUrlsRgns, m_vFrameRgns;
00118 fs::list <fsLinkRelType> m_vLRTs;
00119 fs::list <int> m_vImgsLinksTo;
00120 int m_htmlLen;
00121 BOOL m_bKillDupes;
00122 fsString m_strBaseURL;
00123 fsTextRegion m_BaseURLPosition;
00124 private:
00125 int m_iTagAOpened;
00126
00127 };
00128
00129 #endif