CString GetTabString(int nStrLen, int nTabLen)
{
CString strRet;
int nTabCount = nStrLen/nTabLen;
int nSpaceNeed = nStrLen%nTabLen;
for(int i = 0; i < nTabCount; ++i)
{
strRet += "\t";
}
for(int i = 0; i < nSpaceNeed; ++i)
{
strRet += " ";
}
return strRet;
}
CString GetSpaceString(int nLen)
{
CString strRet;
for(int i = 0; i < nLen; ++i)
{
strRet += " ";
}
return strRet;
}
CString LeftTabToSpace(CString strLine, int nTabLen)
{
CString strRet = "";
TCHAR *pBuffer = strLine.GetBuffer();
while(*pBuffer)
{
if(*pBuffer == '\t')
{
strRet += GetSpaceString((strRet.GetLength() + nTabLen)/nTabLen*nTabLen - strRet.GetLength());
}
else if (*pBuffer == ' ')
{
strRet += *pBuffer;
}
else
{
strRet += pBuffer;
break;
}
++pBuffer;
}
return strRet;
}
int GetLeftSpaceCount(const CString& strLine)
{
for(int i = 0; i < strLine.GetLength(); ++i)
{
if (strLine[i] != ' ')
{
return i;
}
}
return strLine.GetLength();
}
CString LeftSpaceToTab(const CString& strLine, int nTabLen)
{
CString strRet;
int nLeftSpaceCount = GetLeftSpaceCount(strLine);
if (nLeftSpaceCount <= 0)
{
return strLine;
}
return GetTabString(nLeftSpaceCount, nTabLen) + strLine.Mid(nLeftSpaceCount, strLine.GetLength() - nLeftSpaceCount);
}
CString CommentCode(CString strCode, long lInsertIndex)
{
strCode.Replace("\r\n", "\n");
// 添加一个换行,方便循环遍历
strCode += "\n";
CString strRet;
TCHAR* pBuffer = strCode.GetBuffer();
CString strLine = "";
while(*pBuffer)
{
strLine += *pBuffer;
if (*pBuffer == '\n')
{
strLine = LeftTabToSpace(strLine, 4);
int nLeftSpaceCount = GetLeftSpaceCount(strLine);
if (lInsertIndex > nLeftSpaceCount)
{
strLine = GetSpaceString(lInsertIndex - nLeftSpaceCount) + strLine;
}
strLine.Insert(lInsertIndex, "// ");
strLine = LeftSpaceToTab(strLine, 4);
strRet += strLine;
strLine = "";
}
++pBuffer;
}
// 清除之前添加的换行
strRet.Delete(strRet.GetLength() - 1);
return strRet;
}