亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tinyxmlparser.cpp

?? tinyxml project for Visual Studio 2008. A small xml parser, the result is lib file for embedded ARM
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*www.sourceforge.net/projects/tinyxmlOriginal code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use thissoftware in a product, an acknowledgment in the product documentationwould be appreciated but is not required.2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.3. This notice may not be removed or altered from any source distribution.*/#include <ctype.h>#include <stddef.h>#include "tinyxml.h"//#define DEBUG_PARSER#if defined( DEBUG_PARSER )#	if defined( DEBUG ) && defined( _MSC_VER )#		include <windows.h>#		define TIXML_LOG OutputDebugString#	else#		define TIXML_LOG printf#	endif#endif// Note tha "PutString" hardcodes the same list. This// is less flexible than it appears. Changing the entries// or order will break putstring.	TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = {	{ "&amp;",  5, '&' },	{ "&lt;",   4, '<' },	{ "&gt;",   4, '>' },	{ "&quot;", 6, '\"' },	{ "&apos;", 6, '\'' }};// Bunch of unicode info at://		http://www.unicode.org/faq/utf_bom.html// Including the basic of this table, which determines the #bytes in the// sequence from the lead byte. 1 placed for invalid sequences --// although the result will be junk, pass it through as much as possible.// Beware of the non-characters in UTF-8:	//				ef bb bf (Microsoft "lead bytes")//				ef bf be//				ef bf bf const unsigned char TIXML_UTF_LEAD_0 = 0xefU;const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;const int TiXmlBase::utf8ByteTable[256] = {	//	0	1	2	3	4	5	6	7	8	9	a	b	c	d	e	f		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x00		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x10		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x20		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x30		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x40		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x50		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x60		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x70	End of ASCII range		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x80 0x80 to 0xc1 invalid		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0x90 		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0xa0 		1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	// 0xb0 		1,	1,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	// 0xc0 0xc2 to 0xdf 2 byte		2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	2,	// 0xd0		3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	3,	// 0xe0 0xe0 to 0xef 3 byte		4,	4,	4,	4,	4,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1,	1	// 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid};void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ){	const unsigned long BYTE_MASK = 0xBF;	const unsigned long BYTE_MARK = 0x80;	const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };	if (input < 0x80) 		*length = 1;	else if ( input < 0x800 )		*length = 2;	else if ( input < 0x10000 )		*length = 3;	else if ( input < 0x200000 )		*length = 4;	else		{ *length = 0; return; }	// This code won't covert this correctly anyway.	output += *length;	// Scary scary fall throughs.	switch (*length) 	{		case 4:			--output; 			*output = (char)((input | BYTE_MARK) & BYTE_MASK); 			input >>= 6;		case 3:			--output; 			*output = (char)((input | BYTE_MARK) & BYTE_MASK); 			input >>= 6;		case 2:			--output; 			*output = (char)((input | BYTE_MARK) & BYTE_MASK); 			input >>= 6;		case 1:			--output; 			*output = (char)(input | FIRST_BYTE_MARK[*length]);	}}/*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ){	// This will only work for low-ascii, everything else is assumed to be a valid	// letter. I'm not sure this is the best approach, but it is quite tricky trying	// to figure out alhabetical vs. not across encoding. So take a very 	// conservative approach.//	if ( encoding == TIXML_ENCODING_UTF8 )//	{		if ( anyByte < 127 )			return isalpha( anyByte );		else			return 1;	// What else to do? The unicode set is huge...get the english ones right.//	}//	else//	{//		return isalpha( anyByte );//	}}/*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ){	// This will only work for low-ascii, everything else is assumed to be a valid	// letter. I'm not sure this is the best approach, but it is quite tricky trying	// to figure out alhabetical vs. not across encoding. So take a very 	// conservative approach.//	if ( encoding == TIXML_ENCODING_UTF8 )//	{		if ( anyByte < 127 )			return isalnum( anyByte );		else			return 1;	// What else to do? The unicode set is huge...get the english ones right.//	}//	else//	{//		return isalnum( anyByte );//	}}class TiXmlParsingData{	friend class TiXmlDocument;  public:	void Stamp( const char* now, TiXmlEncoding encoding );	const TiXmlCursor& Cursor()	{ return cursor; }  private:	// Only used by the document!	TiXmlParsingData( const char* start, int _tabsize, int row, int col )	{		assert( start );		stamp = start;		tabsize = _tabsize;		cursor.row = row;		cursor.col = col;	}	TiXmlCursor		cursor;	const char*		stamp;	int				tabsize;};void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ){	assert( now );	// Do nothing if the tabsize is 0.	if ( tabsize < 1 )	{		return;	}	// Get the current row, column.	int row = cursor.row;	int col = cursor.col;	const char* p = stamp;	assert( p );	while ( p < now )	{		// Treat p as unsigned, so we have a happy compiler.		const unsigned char* pU = (const unsigned char*)p;		// Code contributed by Fletcher Dunn: (modified by lee)		switch (*pU) {			case 0:				// We *should* never get here, but in case we do, don't				// advance past the terminating null character, ever				return;			case '\r':				// bump down to the next line				++row;				col = 0;								// Eat the character				++p;				// Check for \r\n sequence, and treat this as a single character				if (*p == '\n') {					++p;				}				break;			case '\n':				// bump down to the next line				++row;				col = 0;				// Eat the character				++p;				// Check for \n\r sequence, and treat this as a single				// character.  (Yes, this bizarre thing does occur still				// on some arcane platforms...)				if (*p == '\r') {					++p;				}				break;			case '\t':				// Eat the character				++p;				// Skip to next tab stop				col = (col / tabsize + 1) * tabsize;				break;			case TIXML_UTF_LEAD_0:				if ( encoding == TIXML_ENCODING_UTF8 )				{					if ( *(p+1) && *(p+2) )					{						// In these cases, don't advance the column. These are						// 0-width spaces.						if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 )							p += 3;							else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU )							p += 3;							else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU )							p += 3;							else							{ p +=3; ++col; }	// A normal character.					}				}				else				{					++p;					++col;				}				break;			default:				if ( encoding == TIXML_ENCODING_UTF8 )				{					// Eat the 1 to 4 byte utf8 character.					int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)];					if ( step == 0 )						step = 1;		// Error case from bad encoding, but handle gracefully.					p += step;					// Just advance one column, of course.					++col;				}				else				{					++p;					++col;				}				break;		}	}	cursor.row = row;	cursor.col = col;	assert( cursor.row >= -1 );	assert( cursor.col >= -1 );	stamp = p;	assert( stamp );}const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ){	if ( !p || !*p )	{		return 0;	}	if ( encoding == TIXML_ENCODING_UTF8 )	{		while ( *p )		{			const unsigned char* pU = (const unsigned char*)p;						// Skip the stupid Microsoft UTF-8 Byte order marks			if (	*(pU+0)==TIXML_UTF_LEAD_0				 && *(pU+1)==TIXML_UTF_LEAD_1 				 && *(pU+2)==TIXML_UTF_LEAD_2 )			{				p += 3;				continue;			}			else if(*(pU+0)==TIXML_UTF_LEAD_0				 && *(pU+1)==0xbfU				 && *(pU+2)==0xbeU )			{				p += 3;				continue;			}			else if(*(pU+0)==TIXML_UTF_LEAD_0				 && *(pU+1)==0xbfU				 && *(pU+2)==0xbfU )			{				p += 3;				continue;			}			if ( IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' )		// Still using old rules for white space.				++p;			else				break;		}	}	else	{		while ( *p && IsWhiteSpace( *p ) || *p == '\n' || *p =='\r' )			++p;	}	return p;}#ifdef TIXML_USE_STL/*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ){	for( ;; )	{		if ( !in->good() ) return false;		int c = in->peek();		// At this scope, we can't get to a document. So fail silently.		if ( !IsWhiteSpace( c ) || c <= 0 )			return true;		*tag += (char) in->get();	}}/*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ){	//assert( character > 0 && character < 128 );	// else it won't work in utf-8	while ( in->good() )	{		int c = in->peek();		if ( c == character )			return true;		if ( c <= 0 )		// Silent failure: can't get document at this scope			return false;		in->get();		*tag += (char) c;	}	return false;}#endif// One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The// "assign" optimization removes over 10% of the execution time.//const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ){	// Oddly, not supported on some comilers,	//name->clear();	// So use this:	*name = "";	assert( p );	// Names start with letters or underscores.	// Of course, in unicode, tinyxml has no idea what a letter *is*. The	// algorithm is generous.	//	// After that, they can be letters, underscores, numbers,	// hyphens, or colons. (Colons are valid ony for namespaces,	// but tinyxml can't tell namespaces from names.)	if (    p && *p 		 && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) )	{		const char* start = p;		while(		p && *p				&&	(		IsAlphaNum( (unsigned char ) *p, encoding ) 						 || *p == '_'						 || *p == '-'						 || *p == '.'						 || *p == ':' ) )		{			//(*name) += *p; // expensive			++p;		}		if ( p-start > 0 ) {			name->assign( start, p-start );		}		return p;	}	return 0;}const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ){	// Presume an entity, and pull it out.    TIXML_STRING ent;	int i;	*length = 0;	if ( *(p+1) && *(p+1) == '#' && *(p+2) )	{		unsigned long ucs = 0;		ptrdiff_t delta = 0;		unsigned mult = 1;		if ( *(p+2) == 'x' )		{			// Hexadecimal.			if ( !*(p+3) ) return 0;			const char* q = p+3;			q = strchr( q, ';' );			if ( !q || !*q ) return 0;			delta = q-p;			--q;			while ( *q != 'x' )			{				if ( *q >= '0' && *q <= '9' )					ucs += mult * (*q - '0');				else if ( *q >= 'a' && *q <= 'f' )					ucs += mult * (*q - 'a' + 10);				else if ( *q >= 'A' && *q <= 'F' )					ucs += mult * (*q - 'A' + 10 );				else 					return 0;				mult *= 16;				--q;			}		}		else		{			// Decimal.			if ( !*(p+2) ) return 0;			const char* q = p+2;			q = strchr( q, ';' );			if ( !q || !*q ) return 0;			delta = q-p;			--q;			while ( *q != '#' )			{				if ( *q >= '0' && *q <= '9' )					ucs += mult * (*q - '0');				else 					return 0;				mult *= 10;				--q;			}		}		if ( encoding == TIXML_ENCODING_UTF8 )		{			// convert the UCS to UTF-8			ConvertUTF32ToUTF8( ucs, value, length );		}		else		{			*value = (char)ucs;			*length = 1;		}		return p + delta + 1;	}	// Now try to match it.	for( i=0; i<NUM_ENTITY; ++i )	{		if ( strncmp( entity[i].str, p, entity[i].strLength ) == 0 )		{			assert( strlen( entity[i].str ) == entity[i].strLength );			*value = entity[i].chr;			*length = 1;			return ( p + entity[i].strLength );		}	}	// So it wasn't an entity, its unrecognized, or something like that.	*value = *p;	// Don't put back the last one, since we return it!	//*length = 1;	// Leave unrecognized entities - this doesn't really work.					// Just writes strange XML.	return p+1;}bool TiXmlBase::StringEqual( const char* p,							 const char* tag,							 bool ignoreCase,

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国内精品| 在线成人高清不卡| 欧美激情在线一区二区| 国产一区视频网站| 国产网红主播福利一区二区| 成人性生交大片免费看中文| 国产精品丝袜一区| 色婷婷av一区二区三区软件| 亚洲日本在线天堂| 欧美日韩国产电影| 精品中文字幕一区二区小辣椒| 亚洲精品在线电影| 国产成人免费视频网站| 亚洲人成在线播放网站岛国| 欧美性猛交xxxx黑人交| 麻豆精品一区二区综合av| 欧美精品一区二区三区视频 | 国产片一区二区三区| 国产激情一区二区三区四区| 最新久久zyz资源站| 欧美午夜精品久久久久久孕妇| 奇米一区二区三区av| 久久久精品一品道一区| www.色精品| 日韩精品免费视频人成| 久久久不卡网国产精品一区| 色老头久久综合| 免费成人结看片| 中文字幕一区免费在线观看| 欧美理论在线播放| 国产suv精品一区二区6| 一个色妞综合视频在线观看| 日韩欧美一区二区三区在线| caoporen国产精品视频| 婷婷夜色潮精品综合在线| 久久久电影一区二区三区| 欧美天堂亚洲电影院在线播放| 国产在线视频一区二区| 一区二区三区在线高清| 日韩精品一区二| 在线免费一区三区| 国产成人综合在线观看| 亚洲成av人片一区二区梦乃| 欧美韩国日本不卡| 91精品国产高清一区二区三区蜜臀| 成人自拍视频在线观看| 视频一区在线视频| 亚洲视频在线一区二区| 久久综合给合久久狠狠狠97色69| 在线一区二区观看| 成人成人成人在线视频| 麻豆91在线看| 一区二区三区欧美视频| 国产精品女上位| 2022国产精品视频| 制服丝袜中文字幕一区| 91免费在线看| 波多野结衣中文字幕一区二区三区| 裸体健美xxxx欧美裸体表演| 亚洲高清久久久| 国产精品青草久久| 亚洲国产经典视频| 久久亚洲二区三区| 亚洲精品一区二区三区在线观看 | 色一情一乱一乱一91av| 国产一区二区视频在线| 麻豆精品视频在线观看视频| 一区二区三区蜜桃| 综合网在线视频| 国产精品久久一级| 中文字幕精品一区| 国产精品视频在线看| 欧美成人a视频| 日韩一级片在线播放| 7777女厕盗摄久久久| 欧美一区二区视频观看视频| 欧美猛男超大videosgay| 欧美日韩视频在线一区二区| 日本乱人伦aⅴ精品| 色综合天天做天天爱| 色综合久久中文字幕| 99精品在线免费| 99久久夜色精品国产网站| av在线这里只有精品| 91免费观看在线| 色呦呦国产精品| 欧美最新大片在线看| 欧美色图激情小说| 欧美高清视频不卡网| 制服丝袜亚洲精品中文字幕| 欧美一区二区三区喷汁尤物| 91精品国产品国语在线不卡| 精品国产凹凸成av人网站| 久久婷婷色综合| 亚洲国产激情av| 一区二区久久久久| 婷婷国产在线综合| 麻豆国产一区二区| 国产精品456露脸| aaa亚洲精品| 欧美婷婷六月丁香综合色| 欧美精选在线播放| 精品剧情v国产在线观看在线| 久久亚洲欧美国产精品乐播| 中文字幕一区二区在线播放| 亚洲综合色成人| 青青草97国产精品免费观看无弹窗版 | 色噜噜久久综合| 欧美日韩国产首页| 欧美一级久久久| 欧美激情中文字幕| 亚洲成人777| 国产精品一区二区无线| 91在线丨porny丨国产| 欧美人与禽zozo性伦| 久久女同精品一区二区| 亚洲视频狠狠干| 香蕉成人啪国产精品视频综合网| 久久国产精品99久久久久久老狼 | 精品国产成人系列| 亚洲啪啪综合av一区二区三区| 午夜国产精品影院在线观看| 久久 天天综合| 一本到一区二区三区| 久久女同性恋中文字幕| 亚洲国产日日夜夜| 国产激情视频一区二区在线观看| 91久久精品国产91性色tv| 欧美不卡123| 亚洲亚洲人成综合网络| 国产一区二区美女诱惑| 欧美亚一区二区| 国产亚洲精品aa| 日本中文字幕不卡| 色老汉一区二区三区| 欧美国产一区二区| 日韩福利电影在线| 97成人超碰视| 久久久精品日韩欧美| 麻豆精品一区二区av白丝在线| 色av综合在线| 国产精品亲子伦对白| 国产资源在线一区| 在线观看91精品国产麻豆| 亚洲婷婷在线视频| 国产91精品免费| 欧美精品一区二区三区在线播放| 亚洲影视在线播放| 成人sese在线| 久久久久久久久久久久久久久99 | 国产高清精品久久久久| 在线电影欧美成精品| 一区二区久久久| 色综合一区二区| 专区另类欧美日韩| 风间由美性色一区二区三区| 精品国产百合女同互慰| 久久av老司机精品网站导航| 欧美久久高跟鞋激| 天堂精品中文字幕在线| 欧美性色黄大片| 一区二区在线免费观看| 99热精品一区二区| 国产精品久久久久国产精品日日| 国产精品资源网站| 久久精品人人做人人综合| 精品在线观看免费| 欧美成va人片在线观看| 九九视频精品免费| 精品毛片乱码1区2区3区| 老汉av免费一区二区三区| 欧美一区二区三区小说| 日韩电影在线看| 日韩欧美亚洲国产另类| 美女被吸乳得到大胸91| 日韩欧美黄色影院| 激情欧美一区二区| 久久久不卡网国产精品二区| 成人丝袜高跟foot| 亚洲视频在线观看一区| 色婷婷精品大在线视频| 亚洲高清三级视频| 欧美一区二区三区日韩视频| 精品一区二区三区视频| 久久久久久久久岛国免费| 国产69精品久久久久毛片| 专区另类欧美日韩| 欧美日韩中文精品| 蜜桃视频免费观看一区| 亚洲精品在线三区| 99精品一区二区三区| 视频一区二区三区入口| 日韩亚洲电影在线| 岛国av在线一区| 亚洲精品国产一区二区精华液 | 久久精品久久精品| 日本一区二区三区免费乱视频| 99久久精品国产精品久久| 亚洲精品综合在线| 欧美一级国产精品|