⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.c

📁 upnpdom main part of upnp
💻 C
📖 第 1 页 / 共 3 页
字号:
    				Parser_skipUntilString (&pEndContent, END_COMMENT);    			else    				bReadContent = 0;    			if (!(*pEndContent))    				bReadContent = 0;    		}    		TokenLength = pEndContent - pParser->CurrPtr;    	}	}	// Check for '>' token	else if (char_match (*(pParser->CurrPtr), GREATERTHAN))	{		// Equals found, so return it as a token		TokenLength = strlen(GREATERTHAN);		pParser->SavePtr=pParser->CurrPtr; // Saving this ptr for not ignoring the leading and trailing spaces.		pParser->TagVal=1;	}	// Check for Content e.g.  <tag>content</tag>	else if (pParser->TagVal)	{		pParser->TagVal=0;		pParser->CurrPtr=pParser->SavePtr+1;//SavePtr whould not have have already moved.		char *pEndContent = pParser->CurrPtr;		// Read content until a < is found that is not a comment <!--		short int bReadContent = 1;		while (bReadContent)		{			while (!char_match (*pEndContent, LESSTHAN) && *pEndContent)				pEndContent++;			if (!strncmp (pEndContent, BEGIN_COMMENT, strlen (BEGIN_COMMENT)))				Parser_skipUntilString (&pEndContent, END_COMMENT);			else				bReadContent = 0;			if (!(*pEndContent))				bReadContent = 0;		}		TokenLength = pEndContent - pParser->CurrPtr;	}    // Check for name tokens    else if (isnamech(toint(pParser->CurrPtr,&tlen),0)){        // Name found, so find out how long it is        int iIndex=tlen;        while (isnamech(toint(pParser->CurrPtr+iIndex,&tlen),1))            iIndex+=tlen;        TokenLength=iIndex;    };	// Copy the token to the return string    if (TokenLength > 0){		//if (!copy_token (TokenBuff, pParser->CurrPtr, TokenLength))        if (!Parser_copy_token (pParser, pParser->CurrPtr, TokenLength))            return 1;    }    else if (*(pParser->CurrPtr) == '\0') {        TokenLength = 0;        Parser_clearTokBuf(pParser);        return 0;    }	else	{		// return the unrecognized token for error information		TokenLength = 1;        //copy_token (TokenBuff, CurrPtr, TokenLength);        Parser_appendTokBuf_char(pParser, *(pParser->CurrPtr));        return 1;	}	pParser->CurrPtr = pParser->CurrPtr+TokenLength;	return 0;}//Will return a handle to the tree structure//The tree structure indicates to which parent the node belongs.int Parser_getNextNode(Parser *pParser, enum NODE_TYPE NodeType, char **NodeName, char **NodeValue, short int IsEnd,  short int IgnoreWhiteSpace){	while(*(pParser->CurrPtr)!='\0')	{		if(IgnoreWhiteSpace)			Parser_IgnoreWhiteSpaces(pParser);		if(Parser_getNextToken(pParser)!=0)		{			*NodeValue=NULL;			*NodeName=NULL;			NodeType=INVALID_NODE;			IsEnd=0;			return 1;		}		//if(!strcmp(TokenBuff, LESSTHAN))        if(!strcmp(Parser_getTokBuf(pParser), LESSTHAN))		{			if(IgnoreWhiteSpace)				Parser_IgnoreWhiteSpaces(pParser);			pParser->TagName=1;			if(Parser_getNextToken(pParser)!=0)			{				*NodeValue=NULL;				*NodeName=NULL;				NodeType=INVALID_NODE;				IsEnd=0;				return 1;			}			pParser->TagName=0;			//if(TokenBuff==NULL)			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);			//if(*TokenBuff=='\0')			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);            if (Parser_getTokBufLength(pParser) == 0)	    {		Handle_DOMException(FATAL_ERROR_DURING_PARSING);                //throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);	    }			//*NodeName=(char *)malloc(strlen(TokenBuff)+1);            *NodeName=(char *)malloc(Parser_getTokBufLength(pParser)+1);			//strcpy(*NodeName,TokenBuff);            strcpy(*NodeName,Parser_getTokBuf(pParser));			//strcpy(LastElement,TokenBuff);            Parser_setLastElem(pParser, Parser_getTokBuf(pParser));			*NodeValue=NULL;			NodeType=ELEMENT_NODE;			pParser->attrFound=1;			pParser->atLeastOneAttrFound=0;			IsEnd=0;		}		//else if(!strcmp(TokenBuff, GREATERTHAN))        else if(!strcmp(Parser_getTokBuf(pParser), GREATERTHAN))		{			pParser->attrFound=0;			if(pParser->atLeastOneAttrFound)//forget the greater than			{				pParser->atLeastOneAttrFound=0;				continue;			}			else				return 0;		}		//else if(!strcmp(TokenBuff, ENDTAG))        else if(!strcmp(Parser_getTokBuf(pParser), ENDTAG))		{			if(IgnoreWhiteSpace)				Parser_IgnoreWhiteSpaces(pParser);			if(Parser_getNextToken(pParser)!=0)			{				*NodeValue=NULL;				*NodeName=NULL;				NodeType=INVALID_NODE;				IsEnd=0;				return 1;			}			//if(TokenBuff==NULL)			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);			//if(*TokenBuff=='\0')			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);            if (Parser_getTokBufLength(pParser) == 0)	    {		Handle_DOMException(FATAL_ERROR_DURING_PARSING);                //throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);	    }			//*NodeName=(char *)malloc(strlen(TokenBuff)+1);            *NodeName=(char *)malloc(Parser_getTokBufLength(pParser)+1);			//strcpy(*NodeName,TokenBuff);            strcpy(*NodeName,Parser_getTokBuf(pParser));			*NodeValue=NULL;			NodeType=ELEMENT_NODE;			IsEnd=1;		}		//else if(!strcmp(TokenBuff, COMPLETETAG))        else if(!strcmp(Parser_getTokBuf(pParser), COMPLETETAG))		{			if(NodeType==ELEMENT_NODE || (NodeType==ATTRIBUTE_NODE))			{				IsEnd=0;				//rewindCurrentPtr(strlen(TokenBuff));                Parser_rewindCurrentPtr(pParser, Parser_getTokBufLength(pParser));				return 0;			}			//store the last element tag and return back as end element node			//*NodeName=(char *)malloc(strlen(LastElement)+1);            *NodeName=(char *)malloc(Parser_getLastElemLength(pParser)+1);			//strcpy(*NodeName,LastElement);            strcpy(*NodeName,Parser_getLastElem(pParser));			*NodeValue=NULL;			NodeType=ELEMENT_NODE;			pParser->attrFound=1;			pParser->atLeastOneAttrFound=0;			IsEnd=1;			return 0;		}		//else if(TokenBuff[0] == '\0')        else if (Parser_getTokBufLength(pParser) == 0)		{			IsEnd=0;			continue;		}		else if(!(pParser->attrFound))		{            //if (TokenBuff != NULL)			//{			//	if(*TokenBuff!='\0')			//	{			//		*NodeValue=(char *)malloc(strlen(TokenBuff)+1);			//		strcpy(*NodeValue,TokenBuff);			//	}    		//}            if (Parser_getTokBufLength(pParser) != 0){                *NodeValue=(char *)malloc(Parser_getTokBufLength(pParser)+1);                strcpy(*NodeValue,Parser_getTokBuf(pParser));            }			*NodeName=(char *)malloc(strlen("#text")+1);			strcpy(*NodeName,"#text");			NodeType=TEXT_NODE;			IsEnd=0;			return 0;		}		else		{			//if(TokenBuff==NULL)			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);			//if(*TokenBuff=='\0')			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);            if (Parser_getTokBufLength(pParser) == 0)		Handle_DOMException(FATAL_ERROR_DURING_PARSING);                //throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);			if(NodeType==ELEMENT_NODE)			{				//rewindCurrentPtr(strlen(TokenBuff)+1);                Parser_rewindCurrentPtr(pParser, Parser_getTokBufLength(pParser)+1);				return 0;			}			//*NodeName=(char *)malloc(strlen(TokenBuff)+1);            *NodeName=(char *)malloc(Parser_getTokBufLength(pParser)+1);			//strcpy(*NodeName,TokenBuff);            strcpy(*NodeName,Parser_getTokBuf(pParser));			if(IgnoreWhiteSpace) 				Parser_IgnoreWhiteSpaces(pParser); 			//gets rid of equals			if(Parser_getNextToken(pParser)!=0)			{				*NodeValue=NULL;				*NodeName=NULL;				NodeType=INVALID_NODE;				IsEnd=0;				return 1;			}			if(IgnoreWhiteSpace)				Parser_IgnoreWhiteSpaces(pParser); 			if(Parser_getNextToken(pParser)!=0)			{				*NodeValue=NULL;				*NodeName=NULL;				NodeType=INVALID_NODE;				IsEnd=0;				return 1;			}			//gets rid of beginning quotes						pParser->inAttrib=1;			if(Parser_getNextToken(pParser)!=0)			{				*NodeValue=NULL;				*NodeName=NULL;				NodeType=INVALID_NODE;				IsEnd=0;				return 1;			}			pParser->inAttrib=0;			//if(TokenBuff==NULL)			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);			//if(*TokenBuff=='\0')			//	throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);            if (Parser_getTokBufLength(pParser) == 0)		Handle_DOMException(FATAL_ERROR_DURING_PARSING);                //throw DOMException(DOMException::FATAL_ERROR_DURING_PARSING);			//*NodeValue=(char *)malloc(strlen(TokenBuff)+1);            *NodeValue=(char *)malloc(Parser_getTokBufLength(pParser)+1);			//strcpy(*NodeValue,TokenBuff);            strcpy(*NodeValue,Parser_getTokBuf(pParser));			// gets rid of ending quotes			if(Parser_getNextToken(pParser)!=0)			{				*NodeValue=NULL;				*NodeName=NULL;				NodeType=INVALID_NODE;				IsEnd=0;				return 1;			}			NodeType=ATTRIBUTE_NODE;			IsEnd=0;			pParser->atLeastOneAttrFound=1;			return 0;		}	}	return 0;}#endif							

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -