下面展示一些 内联代码片
。
头文件增加三行定义:
``` MCD_STR GetIndentDoc(); //自动缩进功能,格式对其
bool SaveIndent( MCD_CSTR_FILENAME szFileName );
MCD_STR m_strFrontHeadTitle;//保存头文件如果有
cpp
MCD_STR CMarkup::GetIndentDoc()
{
int iStack[64];
iStack[0] = ELEM(0).iElemChild;
if (!iStack[0])
return MCD_T("");
MCD_STR strIndentDoc, strFront, strEndTag,strFrontHeadTitle;
bool bFront = true;
int nLevel = 0;
while (nLevel >= 0)
{
ElemPos *pElem = &ELEM(iStack[nLevel]);
for (int i = 0; i < nLevel; i++)
strIndentDoc += x_INDENT;
int nStartTagContentLen = pElem->nLength - pElem->nEndTagLen;
if (bFront)
{
int nChildsLen = pElem->iElemChild ? pElem->StartAfter() - pElem->nEndTagLen - ELEM(pElem->iElemChild).nStart : 0;
strFrontHeadTitle =m_strFrontHeadTitle+_T(" ");
strFront = MCD_STRMID(m_strDoc, pElem->nStart, nStartTagContentLen - nChildsLen);
`
if (nLevel==0)
{
strFrontHeadTitle+=strFront;
strFront=strFrontHeadTitle;
}
//strFront.TrimRight(_T("\r\n ")); // for MFC
if (!MCD_STRISEMPTY(strFront))
strIndentDoc += strFront;
} if (bFront && pElem->iElemChild)
{
//strIndentDoc += MCD_T("\r\n");
iStack[++nLevel] = pElem->iElemChild;
}
else
{
if (pElem->nEndTagLen)
{
strEndTag = MCD_STRMID(m_strDoc, pElem->nStart + nStartTagContentLen, pElem->nEndTagLen);
//strEndTag.TrimRight(_T("\r\n ")); // for MFC
strIndentDoc += strEndTag;
} strIndentDoc += MCD_T("\r\n");
if (pElem->iElemNext)
{
iStack[nLevel] = pElem->iElemNext;
bFront = true;
}
else
{
--nLevel;
bFront = false;
}
}
}
return strIndentDoc;
}
bool CMarkup::SaveIndent( MCD_CSTR_FILENAME szFileName )
{
if ( m_nDocFlags & (MDF_READFILE|MDF_WRITEFILE) )
return false;
return WriteTextFile( szFileName, GetIndentDoc(), &m_strResult, &m_nDocFlags );
}
``