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

📄 hfiletodoc.cpp

📁 文档生成工具 XML例子
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	::CoUninitialize();
	return strClassName;
}

CUIntArray* CHFileToDoc::DispartClass(CString &strClassBlock)
{
	CUIntArray *keyarray = new CUIntArray();
	CUIntArray *keysortarray = new CUIntArray();
	int post = 0;
	while( post > -1)
	{
		post = strClassBlock.Find("public", post);
		if(post > -1)
		{
			keyarray->Add((UINT)post);
			post ++;
		}
	}

	post = 0;
	while( post > -1)
	{
		post = strClassBlock.Find("protected", post);
		if(post > -1)
		{
			keyarray->Add((UINT)post);
			post ++;
		}
	}

	post = 0;
	while( post > -1)
	{
		post = strClassBlock.Find("private", post);
		if(post > -1)
		{
			keyarray->Add((UINT)post);
			post ++;
		}
	}
	///////////////////////////////////////////////////
	UINT MIN;
	int index;	
	while(keyarray->GetSize() != 0)
	{
		index = 0;
		MIN = keyarray->GetAt(0);
		for(int i=0 ; i<keyarray->GetSize(); i++)
		{
			if(keyarray->GetAt(i) < MIN)
			{
				MIN = keyarray->GetAt(i);
				index = i ;
			}
		}
		keyarray->RemoveAt(index, 1);
		keysortarray->Add(MIN);
	}
	delete keyarray;
	return keysortarray;
}

BOOL CHFileToDoc::OutSect(CString &strSect, CString strClassName)
{	
	int start = 0;
	int end = 0;
	CString childStr;
	enum VisitType visit;
	if(strSect.Find("public") > -1)
	{
		visit = v_public;
	}
	if(strSect.Find("protected") > -1)
	{
		visit = v_protected;
	}
	if(strSect.Find("private") > -1)
	{
		visit = v_private;
	}

	start = strSect.Find(" ");
	while(end > -1)
	{
		end = strSect.Find(";", start);
		if (end > -1)
		{
			childStr = strSect.Mid(start, end-start);
			char* buff,*newbuff;
			buff = new char[childStr.GetLength()+1];
			strcpy(buff, childStr);
			newbuff = TrimBuff(buff);
			if(GetType(childStr) == 1)
			{
				OutFunctionInfo(newbuff, strClassName, visit);
			}
			else
			{
				if(GetType(childStr) == 2)
				OutPropertyInfo(newbuff, strClassName, visit);	
			}
			start = end + 1;
		}		
	}
	return true;
}

int CHFileToDoc::GetType(CString str)
{
	if (str.Find("(" ,0) > -1)
	{
		return 1;
	}
	else
	{
		if (str.Find("enum" ,0) > -1)
		{
			return 3;
		}
		else
		{
			return 2;
		}
	}
}

BOOL CHFileToDoc::OutFunctionInfo(CString strDeclare, CString strClassName,enum VisitType visit)
{
	char pszOutFilePath[160];
	memset(pszOutFilePath, 0, sizeof(pszOutFilePath));
	sprintf(pszOutFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	BOOL breturn = true;

	CString strvisit,strname;

	char buff[512],*pData;
	memset(buff, 0, sizeof(buff));
	sprintf(buff, "%s", strDeclare);
	int start = 0;
	int end = 0;
	end = strDeclare.Find("(");
	start = end-1;
	pData = &buff[end-1];
	while((*pData == ' ')||(*pData == '\t'))
	{
		pData--;
		start--;
	}
	while(((*pData != ' ')&&(*pData != '\t'))&&(start > 0))
	{
		pData--;
		start--;
	}
	strname = strDeclare.Mid(start+1, end - start -1);
	

	if(visit == v_public)
	{
		strvisit = PUBLICFUNCTION;
	}
	if(visit == v_protected)
	{
		strvisit = PROTECTEDFUNCTION;
	}
	if(visit == v_private)
	{
		strvisit = PRIVATEFUNCTION;
	}

	USES_CONVERSION;
	HRESULT hr = NULL;
	hr = ::CoInitialize(NULL);
	if(FAILED(hr))
	{
		MessageBox(0,"error!", 0,0);
		return false;
	}
	{
		IXMLDOMDocumentPtr pXmlDoc;
		IXMLDOMNodePtr pXmlNode;
		IXMLDOMNodeListPtr pXmlNodeList;
		
		try
		{	
			hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
			if(FAILED(hr))
			{
				MessageBox(0,"error!",0,0);
				breturn = false;
			}
			else
			{
				pXmlDoc->load(_bstr_t(pszOutFilePath));
				pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Functions"));
				pXmlNode = pXmlNodeList->nextNode();
		
				IXMLDOMElementPtr pXmlElem = pXmlDoc->createElement(_bstr_t("function"));
				pXmlNode->appendChild(pXmlElem);
				pXmlElem->setAttribute(_bstr_t("name"), _bstr_t(strname));
				pXmlElem->setAttribute(_bstr_t("visit"), _bstr_t(strvisit));
				
				pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Functions/function"));
				long length = pXmlNodeList->Getlength();
				pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Propertys/property"));
				length += pXmlNodeList->Getlength();

				CString strID;
				strID.Format("%d", length);
				pXmlElem->setAttribute(_bstr_t("ID"), _bstr_t(strID));

				IXMLDOMElementPtr pXmlElemDeclare = pXmlDoc->createElement(_bstr_t("fdeclare"));
				pXmlElemDeclare->Puttext(_bstr_t(strDeclare));
				pXmlElem->appendChild(pXmlElemDeclare);
				
				IXMLDOMElementPtr pXmlElemReturn = pXmlDoc->createElement(_bstr_t("freturndesc"));
				pXmlElem->appendChild(pXmlElemReturn);
				IXMLDOMElementPtr pXmlElemParam = pXmlDoc->createElement(_bstr_t("fparamdesc"));
				pXmlElem->appendChild(pXmlElemParam);
				IXMLDOMElementPtr pXmlElemExample = pXmlDoc->createElement(_bstr_t("fexample"));
				pXmlElem->appendChild(pXmlElemExample);
				IXMLDOMElementPtr pXmlElemRemark = pXmlDoc->createElement(_bstr_t("fremark"));
				pXmlElem->appendChild(pXmlElemRemark);

				pXmlDoc->save(_bstr_t(pszOutFilePath));
			}
		}
		catch(_com_error& e)
		{
			MessageBox(0, W2A(e.Description()),0,0);
		}
	}
	::CoUninitialize();
	return breturn;
}

BOOL CHFileToDoc::OutPropertyInfo(CString strDeclare, CString strClassName, enum VisitType visit)
{
	char pszOutFilePath[160];
	memset(pszOutFilePath, 0, sizeof(pszOutFilePath));
	sprintf(pszOutFilePath,"%s\\%s%s", theApp.m_strLocPath, strClassName, FILEEXT);
	BOOL breturn = true;

	CString strvisit,strname;

	char buff[512],*pData;
	memset(buff, 0, sizeof(buff));
	sprintf(buff, "%s", strDeclare);
	int end = strlen(buff);
	pData = &buff[end];

	while((*pData <= ' ')||(*pData >= '~'))
	{
		pData--;
	}
	while(((*pData != ' ')&&(*pData != '\t'))&&(pData != buff))
	{
		pData--;
	}
	strname.Format("%s", pData);
	

	if(visit == v_public)
	{
		strvisit = PUBLICPROPERTY;
	}
	if(visit == v_protected)
	{
		strvisit = PROTECTEDPROPERTY;
	}
	if(visit == v_private)
	{
		strvisit = PRIVATEPROPERTY;
	}

	USES_CONVERSION;
	HRESULT hr = NULL;
	hr = ::CoInitialize(NULL);
	if(FAILED(hr))
	{
		MessageBox(0,"error!", 0,0);
		return false;
	}
	{
		IXMLDOMDocumentPtr pXmlDoc;
		IXMLDOMNodePtr pXmlNode;
		IXMLDOMNodeListPtr pXmlNodeList;
		
		try
		{	
			hr = pXmlDoc.CreateInstance(__uuidof(DOMDocument));
			if(FAILED(hr))
			{
				MessageBox(0,"error!",0,0);
				breturn = false;
			}
			else
			{
				pXmlDoc->load(_bstr_t(pszOutFilePath));
				pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Propertys"));
				pXmlNode = pXmlNodeList->nextNode();
		
				IXMLDOMElementPtr pXmlElem = pXmlDoc->createElement(_bstr_t("property"));
				pXmlNode->appendChild(pXmlElem);
				pXmlElem->setAttribute(_bstr_t("name"), _bstr_t(strname));
				pXmlElem->setAttribute(_bstr_t("visit"), _bstr_t(strvisit));
				pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Propertys/property"));
				long length = pXmlNodeList->Getlength();
				pXmlNodeList = pXmlDoc->selectNodes(_bstr_t("Classes/class/Functions/function"));
				length += pXmlNodeList->Getlength();
				CString strID;
				strID.Format("%d", length);
				pXmlElem->setAttribute(_bstr_t("ID"), _bstr_t(strID));

				IXMLDOMElementPtr pXmlElemDeclare = pXmlDoc->createElement(_bstr_t("pdeclare"));
				pXmlElemDeclare->Puttext(_bstr_t(strDeclare));
				pXmlElem->appendChild(pXmlElemDeclare);
				
				IXMLDOMElementPtr pXmlElemType = pXmlDoc->createElement(_bstr_t("ptypedesc"));
				pXmlElem->appendChild(pXmlElemType);
				IXMLDOMElementPtr pXmlElemExample = pXmlDoc->createElement(_bstr_t("pexample"));
				pXmlElem->appendChild(pXmlElemExample);
				IXMLDOMElementPtr pXmlElemRemark = pXmlDoc->createElement(_bstr_t("premark"));
				pXmlElem->appendChild(pXmlElemRemark);
				pXmlDoc->save(_bstr_t(pszOutFilePath));
			}
		}
		catch(_com_error& e)
		{
			MessageBox(0, W2A(e.Description()),0,0);
		}
	}
	::CoUninitialize();
	return breturn;
}


CString CHFileToDoc::CreateTemplate()
{
	return "<?xml version=\"1.0\"?><Classes><class><name></name><declare></declare><classdesc></classdesc><Functions></Functions><Propertys></Propertys></class></Classes>";
}

⌨️ 快捷键说明

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