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

📄 simplesah.cpp

📁 myie2.4版本的源代码
💻 CPP
字号:
// SimpleSAH.cpp: implementation of the CSimpleSAH class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "myie.h"
#include "SimpleSAH.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSimpleSAH::CSimpleSAH()
{

}

CSimpleSAH::~CSimpleSAH()
{
	file.Close();
}

//tag should be lowercase
BOOL CSimpleSAH::GetNextTags(CStringList& astrTagNames)
{
	int i, j, k;
	BOOL found = FALSE;
	CString tagp;
	long len = strHTML.GetLength();

	try{
	while(!found)
	{
		if(!strCurTagBuf.IsEmpty())
		{
			if(m_bUpdate)
				file.WriteString(strCurTagBuf);
		}

		i = strHTML.Find('<', nStartPoint);
		if(i<0)
		{
			//end of file
			if(m_bUpdate)
			{	file.Write(strHTML.GetBuffer(8) + nStartPoint, len - nStartPoint);
				strHTML.ReleaseBuffer();
			}
			return FALSE;
		}
		else
		{
			if(m_bUpdate)
			{
				file.Write(strHTML.GetBuffer(8) + nStartPoint, i - nStartPoint);
				strHTML.ReleaseBuffer();
			}

		}
		if(strHTML.Mid(i+1, 2) == "!-") //is comment
		{
			j = strHTML.Find("-->", i);
			if(j<0)
			{
				//not a real comment, just some text
				if(m_bUpdate)
				{
					file.Write(strHTML.GetBuffer(8) + i, 3);
					strHTML.ReleaseBuffer();
				}

				nStartPoint = i + 3;
			}
			else
			{
				//is comment, output it
				if(m_bUpdate)
				{
					file.Write(strHTML.GetBuffer(8) + i, j - i+3);
					strHTML.ReleaseBuffer();
				}
	
				nStartPoint = j + 3;
			}
			strCurTagBuf.Empty();
		}
		else
		{		
			j = strHTML.Find('>', i);
			k = strHTML.Find('<', i);

			if(j<0)
			{
				//end of file
				if(m_bUpdate)
				{	file.Write(strHTML.GetBuffer(8) + i, len - i);
					strHTML.ReleaseBuffer();
				}
				return FALSE;
			}

			if(j>k)
			{
				//output
				if(m_bUpdate)
				{
					file.Write(strHTML.GetBuffer(8) + i, k-i);
					strHTML.ReleaseBuffer();
				}

				i = k;
			}
			strCurTagBuf = strHTML.Mid(i, j-i+1);
			nStartPoint = j+1;
			
			//if is the needed tag
			k=strCurTagBuf.FindOneOf(" >\r\n");
			if(k>0)
				tagp = strCurTagBuf.Mid(1, k-1);
			else
				tagp = strCurTagBuf.Mid(1, strCurTagBuf.GetLength()-2);
			tagp.MakeLower();
			if(astrTagNames.Find(tagp))
			{
				//find the tag;
				found = TRUE;
			}
		}
	}
	}catch(...)
	{

	}

	return found;
}

CString CSimpleSAH::GetAttribute(LPCSTR lpAttriName)
{
	CString tmp;
	CString tag(strCurTagBuf);
	tag.MakeLower();
	CString attri(lpAttriName);
	attri.MakeLower();

	try{

	CString s;
	int i=0, j=0;
	BOOL found = FALSE;
	while(!found)
	{
		i = tag.Find(attri, i);
		if(i<0)
			break;

		j = tag.Find('=', i);
		s = tag.Mid(i+attri.GetLength(), j-i-attri.GetLength());
		s.TrimLeft();
		if(s.IsEmpty())
		{
			found=TRUE;
			tmp = strCurTagBuf.Mid(j+1);
			if(tmp.GetAt(0) == '\"' || tmp.GetAt(0) == '\'') //quoted string
			{
				tmp = tmp.Right(tmp.GetLength()-1);
				i = tmp.FindOneOf("\'\"\r\n>");
			}
			else
				i = tmp.FindOneOf(" \r\n>\'\"");
			tmp = tmp.Left(i);
			tmp.TrimLeft();
			tmp.TrimRight();
		}
		i += attri.GetLength();
	}
	}
	catch(...)
	{
	}

	return tmp;
}

BOOL CSimpleSAH::SetAttribute(LPCSTR lpAttriName, LPCSTR lpNewVal)
{
	CString tmp;
	CString tag(strCurTagBuf);
	tag.MakeLower();
	CString attri(lpAttriName);
	attri.MakeLower();

	BOOL found = FALSE;
	try{

	CString s;
	int i=0, j=0;
	while(!found)
	{
		i = tag.Find(attri, i);
		if(i<0)
			break;

		j = tag.Find('=', i);
		s = tag.Mid(i+attri.GetLength(), j-i-attri.GetLength());
		s.TrimLeft();
		if(s.IsEmpty())
		{
			found=TRUE;
			tmp = strCurTagBuf.Mid(j+1); tmp.TrimLeft();
			tag = strCurTagBuf.Left(j+1); //XXX=
			tag += "\"";
			tag += lpNewVal;
			tag += "\"";  //XXX="VVV" 

			if(tmp.GetAt(0) == '\"' || tmp.GetAt(0) == '\'') //quated string
			{
				tmp = tmp.Right(tmp.GetLength()-1);
				i = tmp.FindOneOf("\'\"\r\n>");
				if(tmp.GetAt(i) == '\"' || tmp.GetAt(i) == '\'')
					i++;
			}
			else
				i = tmp.FindOneOf(" \r\n>\'\"");
			tag += strCurTagBuf.Right(tmp.GetLength() - i);
			strCurTagBuf = tag;
		}
		i += attri.GetLength();
	}
	}
	catch(...)
	{
	}

	return found;
}

BOOL CSimpleSAH::LoadHTML(LPCSTR filename, BOOL bUpdate)
{
	try{

	CString tmp;
	file.Open(filename, CFile::modeRead | CFile::shareDenyWrite);
	while(file.ReadString(tmp))
	{
		strHTML += tmp;
		strHTML += "\n";
	}
	file.Close();
	if(bUpdate)
		file.Open(filename, CFile::modeCreate | CFile::modeWrite);

	m_bUpdate = bUpdate;

	nStartPoint = 0;
	}catch(...)
	{
		return FALSE;
	}

	return TRUE;
}

void CSimpleSAH::Close()
{
	file.Close();
	strHTML.Empty();
	strCurTagBuf.Empty();
}

BOOL CSimpleSAH::AddText(CString& text)
{
	strHTML = text + strHTML;

	return TRUE;
}

⌨️ 快捷键说明

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