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

📄 wmlparse.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
		}
	}

	/* Check if all elements in the attribute value were used in the 
	   store function. If not all elements were user, return FALSE. 
	   This will result in a warning. Also, delete the unused element
	   to avoid memory leak. */
	if (*ppAttrVal!=NULL)
	{
		fResult=FALSE;
		XML_DeleteElementList(ppAttrVal,pDecStr);
	}	

	return fResult;
}


/*========================================================================
	WML_GetAttributeValue
==========================================================================*/
WCHAR* WML_GetAttributeValue (UINT16 iToken)
{
	CHAR* pchString=NULL;

	switch (iToken)
	{
	case ATTRVAL_com:
		pchString=".com/"; 
		break;
	case ATTRVAL_edu:
		pchString=".edu/"; 
		break;
	case ATTRVAL_net:
		pchString=".net/"; 
		break;
	case ATTRVAL_org:
		pchString=".org/"; 
		break;
	case ATTRVAL_accept:
		pchString="accept"; 
		break;
	case ATTRVAL_bottom:
		pchString="bottom"; 
		break;
	case ATTRVAL_clear:
		pchString="clear"; 
		break;
	case ATTRVAL_delete:
		pchString="delete"; 
		break;
	case ATTRVAL_help:
		pchString="help"; 
		break;
	case ATTRVAL_http:
		pchString="http://\0"; 
		break;
	case ATTRVAL_http_www:
		pchString="http://www."; 
		break;
	case ATTRVAL_https:
		pchString="https://\0"; 
		break;
	case ATTRVAL_https_www:
		pchString="https://www."; 
		break;
	case ATTRVAL_middle:
		pchString="middle"; 
		break;
	case ATTRVAL_nowrap:
		pchString="nowrap"; 
		break;
	case ATTRVAL_onpick:
		pchString="onpick"; 
		break;
	case ATTRVAL_onenterbackward:
		pchString="onenterbackward"; 
		break;
	case ATTRVAL_onenterforward:
		pchString="onenterforward"; 
		break;
	case ATTRVAL_ontimer:
		pchString="ontimer"; 
		break;
	case ATTRVAL_options:
		pchString="options"; 
		break;
	case ATTRVAL_password:
		pchString="password"; 
		break;
	case ATTRVAL_reset:
		pchString="reset"; 
		break;
	case ATTRVAL_text:
		pchString="text"; 
		break;
	case ATTRVAL_top:
		pchString="top"; 
		break;
	case ATTRVAL_unknown:
		pchString="unknown"; 
		break;
	case ATTRVAL_wrap:
		pchString="wrap"; 
		break;
	case ATTRVAL_www:
		pchString="www."; 
		break;
	}

	if (pchString!=NULL)
	{
		/* Copy string and return */
		return (w_cstr2wstr(pchString));
	}

	return NULL;
}


/*========================================================================
	WML_LiteralAttributeToToken
==========================================================================*/
UINT16 WML_LiteralAttributeToToken (WCHAR* pwchToken)
{
	UINT16 iToken=Type_Literal;
	INT16 iIndex=-1;

	/* Get index from string table */
	iIndex=FindStringBinarySearch (pwchToken,ppwchAttrTokens,STAT_NBROFATTR);

	if (iIndex>=0)
	{
		/* Found, find token at location (index) */
		iToken=piAttrBytes[iIndex];
	}

	return iToken;
}


/*========================================================================
	WML_LiteralTagToToken
==========================================================================*/
UINT16 WML_LiteralTagToToken (WCHAR* pwchToken)
{
	UINT16 iToken=Type_Literal;
	INT16 iIndex=-1;

	/* Get index from string table */
	iIndex=FindStringBinarySearch (pwchToken,ppwchTagTokens,STAT_NBROFTAGS);

	if (iIndex>=0)
	{
		/* Found, find token at location (index) */
		iToken=piTagBytes[iIndex];
	}

	return iToken;
}


/*========================================================================
	WML_CheckPublicID
==========================================================================*/
BOOL WML_CheckPublicID (pDECSTR pDecStr, WCHAR* pwchPId, UINT8* piPId)
{
	/* ASSERT: pDecStr!=NULL
	*/

	/* Use string */
	if (pwchPId!=NULL)
	{
		UINT32 iLength=0;

		/* WML 1.0 */
		const WCHAR pwchPublic_ID_1_0[]={'-','/','/','W','A','P','F','O','R','U','M',
								   '/','/','D','T','D',' ','W','M','L',' ','1',
								   '.','0','/','/','E','N',0};

		/* WML 1.1 */
		const WCHAR pwchPublic_ID_1_1[]={'-','/','/','W','A','P','F','O','R','U','M',
								   '/','/','D','T','D',' ','W','M','L',' ','1',
								   '.','1','/','/','E','N',0};

		/* WML 1.2 */
		const WCHAR pwchPublic_ID_1_2[]={'-','/','/','W','A','P','F','O','R','U','M',
								   '/','/','D','T','D',' ','W','M','L',' ','1',
								   '.','2','/','/','E','N',0};

		/* WML 1.3 */
		const WCHAR pwchPublic_ID_1_3[]={'-','/','/','W','A','P','F','O','R','U','M',
								   '/','/','D','T','D',' ','W','M','L',' ','1',
								   '.','3','/','/','E','N',0};

    #ifdef CONFIG_WTA
		/* wta-wml */
		const WCHAR pwchPublic_ID_WTA_WML_1_2[]={'-','/','/','W','A','P','F','O','R','U','M',
								   '/','/','D','T','D',' ','W','T','A','-','W',
								   'M','L',' ','1','.','2','/','/','E','N',0};
    #endif /* CONFIG_WTA */


		/* Get length of pwchPId string */
		iLength=(UINT32) (w_strlen(pwchPId));

		if (CompareWideStringNoCase (pwchPId,(WCHAR*)pwchPublic_ID_1_3,iLength))
		{
			/* WML 1.3 - OK */
			*piPId=WML_VERSION_1_3;
			return TRUE;
		}

    /* wta-wml - Only used if CONFIG_WTA enabled */
    #ifdef CONFIG_WTA
		else if (CompareWideStringNoCase (pwchPId,(WCHAR*)pwchPublic_ID_WTA_WML_1_2,iLength))
    {
      /* Use wml version 1.3 */
			*piPId=WML_VERSION_1_3;
			return TRUE;
    }
    #endif /* CONFIG_WTA */

		else if (CompareWideStringNoCase (pwchPId,(WCHAR*)pwchPublic_ID_1_2,iLength))
		{
			/* WML 1.2 - OK */
			*piPId=WML_VERSION_1_2;
			return TRUE;
		}
		else if (CompareWideStringNoCase (pwchPId,(WCHAR*)pwchPublic_ID_1_1,iLength))
		{
			/* WML 1.1 - OK */
			*piPId=WML_VERSION_1_1;
			return TRUE;
		}
		else if (CompareWideStringNoCase (pwchPId,(WCHAR*)pwchPublic_ID_1_0,iLength))
		{
			/* WML 1.0 - NOT OK */
			return FALSE;
		}

		/* Check content-type and level (0x14 is applictaion/vnd.wap.wmlc) */
		if (pDecStr->bContentType=='\x14')
		{
			/* Check level */
			if (pDecStr->iContentLevel=='\x12')
			{
				/* WML 1.2 - OK */
				*piPId=WML_VERSION_1_2;
				return TRUE;
			}
			else if (pDecStr->iContentLevel=='\x11')
			{
				/* WML 1.1 - OK */
				*piPId=WML_VERSION_1_1;
				return TRUE;
			}
			else if (pDecStr->iContentLevel=='\x10')
			{
				/* WML 1.0 - NOT OK */
				return FALSE;
			}
			else
			{
				/* WML 1.3 (or other) - OK */
				*piPId=WML_VERSION_1_3;
				return TRUE;
			}
		}	
	}

	/* Use integer */
	else
	{
		/* Public ID (wml 1.0) is 0x02 - SHOULD result in error. */
		/* Public ID (wml 1.1) is 0x04 */
		/* Public ID (wml 1.2) is 0x09 */
		/* Public ID (wml 1.3) is 0x0A */

		switch (*piPId)
		{

		/* Unknown */
		case '\x01':
			/* Check content-type and level (0x14 is applictation/vnd.wap.wmlc)*/
			if (pDecStr->bContentType=='\x14')
			{
				/* Check level */
				if (pDecStr->iContentLevel=='\x12')
				{
					/* WML 1.2 - OK */
					*piPId=WML_VERSION_1_2;
					return TRUE;
				}
				else if (pDecStr->iContentLevel=='\x11')
				{
					/* WML 1.1 - OK */
					*piPId=WML_VERSION_1_1;
					return TRUE;
				}
				else if (pDecStr->iContentLevel=='\x10')
				{
					/* WML 1.0 - NOT OK */
					return FALSE;
				}
				else
				{
					/* WML 1.3 (or other) - OK */
					*piPId=WML_VERSION_1_3;
					return TRUE;
				}
			}
			return FALSE;

		/* WML 1.0 - not supported */
		case '\x02':
			return FALSE;

		/* WML 1.1 */
		case '\x04':
			*piPId=WML_VERSION_1_1;
			return TRUE;

		/* WML 1.2 */
		case '\x09':
			*piPId=WML_VERSION_1_2;
			return TRUE;

		/* WML 1.3 */
		case '\x0A':
			*piPId=WML_VERSION_1_3;
			return TRUE;

    /* wta-wml - Only used if CONFIG_WTA enabled */
    #ifdef CONFIG_WTA
		case '\x0C':
      /* Use wml version 1.3 */
			*piPId=WML_VERSION_1_3;
			return TRUE;
    #endif /* CONFIG_WTA */
		}
	}

	/* Other - not supported */
	return FALSE;
}




/*========================================================================

	Other functions

=========================================================================*/

/*========================================================================
	WML_CheckIfOnlyWhiteSpace
==========================================================================*/
BOOL WML_CheckIfOnlyWhiteSpace (WCHAR* pwchText)
{
	WCHAR* pwchTemp=pwchText;

	if (pwchTemp!=NULL)
	{
		while (*pwchTemp!=0)
		{
			/* White spaces in wml */
			if (!((*pwchTemp==(WCHAR)'\x20')||(*pwchTemp==(WCHAR)'\x9')||
				(*pwchTemp==(WCHAR)'\xD')||(*pwchTemp==(WCHAR)'\xA')))
			{
				/* Not white space */
				return FALSE;
			}
			
			/* Next character */
			pwchTemp++;
		}
	}

	/* NULL -> return TRUE */
	return TRUE;
}

⌨️ 快捷键说明

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