📄 hfiletodoc.cpp
字号:
::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 + -