亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? html.cpp

?? 一套linux下的C++開發庫
?? CPP
字號:
/***************************************************************************                          html.cpp  -  description                             -------------------    begin                : Fri Jul 20 2001    copyright            : (C) 2001 by Mark    email                : alben@yeah.net ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/#include <fstream.h>#include <stdio.h>#include "html.h"// ex: <$test$><$/test$>static const char s_sPartStartTag[] = "<$";static const char s_sPartEndTag[] = "$>";static const char s_chPartTailTag = '/';// ex: <%test%>static const char s_sReplaceStartTag[] = "<%";static const char s_sReplaceEndTag[] = "%>";const string CHtmlDocument::top = "";void CReplacePart::ParsePart(const string& strHtml){	int iPos = 0;	while (true)	{		if (!FindTextElement(strHtml, iPos))	//end of html			return;					FindTagElement(strHtml, iPos);	}}bool CReplacePart::FindTextElement(const string& strHtml, int& iPos){	int iTagPos;	if ((iTagPos = strHtml.find(s_sReplaceStartTag, iPos)) == string::npos)	{		m_stPart.push_back(CReplaceElement(CReplaceElement::TEXT, strHtml.substr(iPos)));		return false;	}	m_stPart.push_back(CReplaceElement(CReplaceElement::TEXT, strHtml.substr(iPos, iTagPos-iPos)));	iPos = iTagPos;	return true;}bool CReplacePart::FindTagElement(const string& strHtml, int& iPos){	string strTagName;	GetReplaceTagName(strTagName, strHtml, iPos);	m_stPart.push_back(CReplaceElement(CReplaceElement::TAG, strTagName));	return true;}void CReplacePart::GetReplaceTagName(string& strTagName, const string& strHtml, int& iPos){	iPos += strlen(s_sReplaceStartTag);	int iTagPos = strHtml.find(s_sReplaceEndTag, iPos);	if (iTagPos == string::npos)	{		string strException("can not find ");		strException += s_sReplaceEndTag;		strException += ".";		throw CHtmlException(strException.c_str(), __FILE__, __LINE__);	}		if (iTagPos == iPos)		throw CHtmlException("replace tag name is empty.", __FILE__, __LINE__);		strTagName = strHtml.substr(iPos, iTagPos-iPos);	iPos = iTagPos + strlen(s_sReplaceEndTag);}void CReplacePart::Replace(ostream& os, CReplaceMap& stReplaceMap){	for (int i = 0; i < m_stPart.size(); i++)	{		if (m_stPart[i].m_iType == CReplaceElement::TEXT)		{			os << m_stPart[i].m_strContent;			continue;		}				if (m_stPart[i].m_iType == CReplaceElement::TAG)			os << stReplaceMap[m_stPart[i].m_strContent];	}}CHtmlDocument::CHtmlDocument(const char* sHtmlFilePath){	Open(sHtmlFilePath);}void CHtmlDocument::Open(const char* sHtmlFilePath){	ifstream file(sHtmlFilePath, ios::in | ios::nocreate);	if (file.fail())		throw CFileException("open html file fail.", __FILE__, __LINE__);			file.seekg(0, ios::end);	streampos sp = file.tellg();	if (file.fail())		throw CFileException("get html file length fail.", __FILE__, __LINE__);		char* achHtml = new char[sp];	if (achHtml == NULL)		throw CMemException("out of memory.", __FILE__, __LINE__);	file.seekg(0, ios::beg);	file.read(achHtml, sp);	if (file.fail())	{		delete [] achHtml;		throw CFileException("read html file fail.", __FILE__, __LINE__);	}			string strHtml;	strHtml.append(achHtml, sp);	delete achHtml;	ParseHtml(strHtml);}CHtmlDocument::~CHtmlDocument(){}	void CHtmlDocument::ParseHtml(const string& strHtml){	int iPos = 0;	string strTagName = CHtmlDocument::top;	while (true)	{		if (!FindTextPart(strTagName, strHtml, iPos))	//end of html			return;					FindReplacePart(strTagName, strHtml, iPos);	}}bool CHtmlDocument::FindTextPart(const string& strTagName, const string& strHtml, int& iPos){	int iTagPos;	if ((iTagPos = strHtml.find(s_sPartStartTag, iPos)) == string::npos)	{		m_stTextParts[strTagName] = strHtml.substr(iPos);		return false;	}	m_stTextParts[strTagName] = strHtml.substr(iPos, iTagPos-iPos);	iPos = iTagPos;	return true;}bool CHtmlDocument::FindReplacePart(string& strTagName, const string& strHtml, int& iPos){	string strReplacePart;	GetPartTagName(strTagName, strHtml, iPos);	GetPartString(strReplacePart, strTagName, strHtml, iPos);	m_stReplaceParts[strTagName] = CReplacePart(strReplacePart);	return true;}void CHtmlDocument::GetPartTagName(string& strTagName, const string& strHtml, int& iPos){	iPos += strlen(s_sPartStartTag);	int iTagPos = strHtml.find(s_sPartEndTag, iPos);	if (iTagPos == string::npos)	{		string strException("can not find ");		strException += s_sPartEndTag;		strException += ".";		throw CHtmlException(strException.c_str(), __FILE__, __LINE__);	}		if (iTagPos == iPos)		throw CHtmlException("part tag name is empty.", __FILE__, __LINE__);		strTagName = strHtml.substr(iPos, iTagPos-iPos);	iPos = iTagPos + strlen(s_sPartEndTag);}void CHtmlDocument::GetPartString(string& strReplacePart, const string& strTagName, const string& strHtml, int& iPos){	string strTag = s_sPartStartTag;	strTag += s_chPartTailTag;	strTag += strTagName;	strTag += s_sPartEndTag;	int iTagPos = strHtml.find(strTag.c_str(), iPos);	if (iTagPos == string::npos)	{		string strException("can not find ");		strException += strTag;		strException += ".";		throw CHtmlException(strException.c_str(), __FILE__, __LINE__);		}		strReplacePart = strHtml.substr(iPos, iTagPos-iPos);	iPos = iTagPos + strTag.length();}void CHtmlDocument::Replace(ostream& os, const char* strTagName, ...){	va_list ap;	va_start(ap, strTagName);	char *pchName, *pchValue;	CReplaceMap stReplaceMap;	while ((pchName = va_arg(ap, char*)))	{		pchValue = va_arg(ap, char*);		stReplaceMap[pchName] = pchValue;	}		va_end(ap);	Replace(os, strTagName, stReplaceMap);}void CHtmlDocument::ReplaceF(ostream& os, const char* strTagName, ...){	va_list ap;	va_start(ap, strTagName);	char *pchName, *pchValue;	int iValue;	long lValue;	double dValue;	int iFormat;	CReplaceMap stReplaceMap;	char sTmp[64];	while ((pchName = va_arg(ap, char*)))	{		iFormat = va_arg(ap, int);		switch (iFormat)		{			case STRING:				pchValue = va_arg(ap, char*);				stReplaceMap[pchName] = pchValue;				break;							case INT:				iValue = va_arg(ap, int);				sprintf(sTmp, "%d", iValue);				stReplaceMap[pchName] = sTmp;				break;							case LONG:				lValue = va_arg(ap, long);				sprintf(sTmp, "%ld", lValue);				stReplaceMap[pchName] = sTmp;				break;							case DOUBLE:				dValue = va_arg(ap, double);				sprintf(sTmp, "%f", dValue);				stReplaceMap[pchName] = sTmp;				break;		}			}		va_end(ap);	Replace(os, strTagName, stReplaceMap);}string& UrlEncode(const string& strSrc, string& strDest){	for (int i = 0; i < strSrc.length(); i++)	{		switch (strSrc[i])		{			case '&':				strDest += "%26";				break;							case '=':				strDest += "%3D";				break;							case '%':				strDest += "%25";				break;							case '+':				strDest += "%2B";				break;							case '?':				strDest += "%3F";				break;			case ' ':				strDest += "+";				break;															default:				strDest += strSrc[i];				break;		}	}		return strDest;}string& UrlDecode(const string& strSrc, string& strDest){	char sTmp[3];	sTmp[2] = 0;	unsigned int uiTmp;	int i = 0;	while (i < strSrc.length())	{		switch (strSrc[i])		{			case '+':				strDest += ' ';				i++;				break;						case '%':				if (i+2 >= strSrc.length())					throw CHtmlException("source url error.", __FILE__, __LINE__);				sTmp[0] = strSrc[i+1];				sTmp[1] = strSrc[i+2];				sscanf(sTmp, "%x", &uiTmp);				strDest += (char)uiTmp;				i += 3;				break;							default:				strDest += strSrc[i];				i++;				break;		}	}		return strDest;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日一区二区三区| 欧美在线观看视频一区二区 | 国产成人自拍在线| 91欧美一区二区| 亚洲自拍都市欧美小说| 日韩激情一区二区| 91麻豆国产自产在线观看| 亚洲黄色小说网站| 日本vs亚洲vs韩国一区三区二区 | 国产91精品一区二区麻豆网站 | 亚洲成人激情综合网| 欧美日韩一区二区欧美激情| 午夜国产精品影院在线观看| 精品成人佐山爱一区二区| 国产精品一区二区三区乱码| 国产精品午夜电影| 欧美日韩亚洲综合一区| 久久精品国产99国产| 中文字幕在线不卡一区二区三区| 美女一区二区三区| 国产情人综合久久777777| 91免费看`日韩一区二区| 精品乱人伦小说| www.66久久| 奇米色一区二区| 国产精品久久久久久一区二区三区 | 亚洲福利一区二区三区| 中文字幕亚洲成人| 一道本成人在线| 国产精品久久久久婷婷二区次| 黄色成人免费在线| 亚洲欧美日韩久久精品| 欧美一二三四区在线| av网站一区二区三区| 日本一不卡视频| 国产精品白丝在线| 欧美成人乱码一区二区三区| 美女任你摸久久| 欧美一区二视频| av电影在线观看一区| 狠狠色丁香久久婷婷综合丁香| 欧美成人aa大片| 欧美在线免费观看视频| 国产高清视频一区| 国产精品污www在线观看| 精品视频在线免费看| 不卡的av中国片| 蓝色福利精品导航| 亚洲成av人片观看| 欧美一卡二卡在线| 麻豆91免费看| 亚洲国产乱码最新视频| 欧美理论电影在线| yourporn久久国产精品| 国产福利一区在线观看| 成人欧美一区二区三区黑人麻豆| 国产99久久久国产精品| 免费观看30秒视频久久| 亚洲动漫第一页| 亚洲人成精品久久久久久| 国产欧美一区二区精品久导航 | 亚洲午夜久久久久久久久电影网| 欧美色欧美亚洲另类二区| 风间由美一区二区三区在线观看 | 一区二区三区四区亚洲| 欧美激情资源网| 国产无人区一区二区三区| 精品久久国产97色综合| 日韩一级成人av| 91精品国产麻豆| 粉嫩av一区二区三区在线播放 | 91在线观看视频| av在线免费不卡| av网站免费线看精品| 日产国产欧美视频一区精品| 午夜久久久久久| 丝袜美腿亚洲一区二区图片| 国产视频视频一区| 久久久久久99精品| 51午夜精品国产| 国产成人免费网站| 懂色一区二区三区免费观看| 粉嫩蜜臀av国产精品网站| av中文字幕亚洲| 91久久奴性调教| 欧美日韩亚洲综合在线 | 久久精品国产亚洲aⅴ | 日韩精品在线网站| 日韩欧美的一区| 久久色.com| 国产精品每日更新在线播放网址| 欧美人妇做爰xxxⅹ性高电影| 国产成人av电影在线播放| 丰满亚洲少妇av| 色先锋资源久久综合| 国产一区二区不卡老阿姨| 国产不卡视频在线播放| av日韩在线网站| 欧美日韩国产在线观看| 日韩欧美电影一二三| 中文一区二区完整视频在线观看 | 久久一夜天堂av一区二区三区 | 看片网站欧美日韩| 国产成人免费高清| 久久成人精品无人区| 国产精品99久久久久久似苏梦涵 | 在线观看国产精品网站| 在线成人免费观看| 久久嫩草精品久久久精品一| 国产精品网站在线观看| 亚洲一区在线电影| 久久99久久99小草精品免视看| 亚洲不卡一区二区三区| 免费成人在线观看| caoporn国产精品| 日韩欧美在线123| 亚洲视频在线一区二区| 日韩av网站免费在线| 99热在这里有精品免费| 欧美一级生活片| 国产精品第五页| 极品美女销魂一区二区三区免费| 蜜桃一区二区三区在线观看| 波多野结衣视频一区| 欧美一区二区三区不卡| 日韩一区二区电影网| |精品福利一区二区三区| 中文字幕在线不卡一区二区三区 | 久久亚洲精品小早川怜子| 中文字幕一区二区三中文字幕| 中文字幕乱码久久午夜不卡| 国产亚洲综合在线| 日韩精品午夜视频| 99热在这里有精品免费| 久久综合色天天久久综合图片| 久久综合久久99| 午夜精品久久久久久久久久久 | 欧美日韩一区视频| 国产精品久久久爽爽爽麻豆色哟哟 | 国产成人精品午夜视频免费| 欧美另类久久久品| 亚洲男人的天堂网| 成人av网站在线观看| 久久一二三国产| 麻豆91小视频| 欧美一区二区三区的| 午夜精品影院在线观看| 欧美影院一区二区三区| 8v天堂国产在线一区二区| 亚洲精品美国一| 91视频一区二区| 国产精品久久久久7777按摩 | 色综合一区二区| 欧美日韩国产影片| 亚洲中国最大av网站| 9l国产精品久久久久麻豆| 国产亚洲1区2区3区| 精品一区二区久久久| 99久久久无码国产精品| 中文字幕欧美国产| 成人在线视频一区二区| 欧美激情一区三区| 国产.欧美.日韩| 国产精品三级在线观看| 成人黄色av电影| 一区二区中文字幕在线| av中文字幕在线不卡| 亚洲欧美福利一区二区| 色综合天天性综合| 精品欧美一区二区三区精品久久| 国产精品久久三区| 91在线观看视频| 亚洲综合一区在线| 欧美色区777第一页| 轻轻草成人在线| 久久蜜桃香蕉精品一区二区三区| 亚洲免费观看高清完整版在线观看| 秋霞成人午夜伦在线观看| 日韩一区二区三区av| 精品一区二区三区视频在线观看| 91国内精品野花午夜精品| 26uuu成人网一区二区三区| 亚洲尤物在线视频观看| 欧美日韩夫妻久久| 日本va欧美va瓶| 欧美精品一区二区久久婷婷| 国产suv一区二区三区88区| 亚洲三级小视频| 在线电影国产精品| 国产电影一区在线| 亚洲精品ww久久久久久p站| 欧美精品在线观看一区二区| 国产精品久久久久久久久快鸭| 久久国产精品无码网站| 国产午夜精品一区二区三区嫩草 | 欧美日韩国产小视频在线观看| 中文字幕亚洲一区二区av在线 | 国产精品毛片久久久久久 | 亚洲午夜久久久久久久久电影院| 成人福利视频网站|