📄 wmlparse.c
字号:
}
}
/* 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 + -