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