CMarkup自动缩进

下面展示一些 内联代码片

头文件增加三行定义:
```	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 );
}
			  ``

创建一个新的XML文档,分析修改现存的XML文档,所有的这些都中可以从一个利用MFC或STL字符串所实现的一个简单类的方法中得到。关于CMarkup,你可以运行Zip文件右边的例子,如果你愿意,你可以通过看源码,几分钟把它加入到你自己的应用中。 特征 Cmarkup是依据EDOM的,这是这个简单XML分析的关键。EDOM是操作XML元素、属性和数据的简明方法集。当你不需要复杂的XML特性时,它避免你读大量的DOM和SAX文档。 如果你希望使用微软的MSXML,CMarkup工程中CmarkupMSXML类全面的演示了通过EDOM来使用MSXML,并且它是以C++ COM语法开始。 下载包(看上面zip文件的链接)中包含了测试对话框工程的源码、Cmarkup类的所有测试和示例、以及编译选项。关于用在商业用途中的详细说明请看文章底部的在Licensing中的注意事项。 下面列出了CMarkup的特征: 独立:不需要任何外部的XML组件。 小:编译到你的工程只是很小的一个类,并且对于文档只维持了一个字符串,以及一个总计小于字符串内存大小的索引数组。 快:分析器在相当快的建立索引数组。 简单:EDOM方法使创建、导航和修改XML无比的简单。 MSXML:CMarkupMSXML类用EDOM方法包装了微软的XML服务。MSXML编译选项用来演示这个类。 UNICODE(统一字符编码标准):对于WindowsNT和WindowsCE平台能够被编译成UNICODE,在WindowsNT UNICODE下,XML文档是流到UTF-8文件中,但是内部用宽字符。 UTF-8:对于UTF-8文件,这接受和返回UTF-8字符串(确保_MBCS没有被定义) MBCS:对于双字节数据(定义_MBCS),它不与UTF-8兼容. STL:CMarkupSTL类完全没有使用MFC,它的演示要使用STL编译选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值