smlerror.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:12k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. // include
  36. #include "hxtypes.h"
  37. #include "hxcom.h"
  38. #include "hxerror.h"
  39. #include "hxxres.h"
  40. #include "hxxrsmg.h"
  41. #include "smiltype.h"
  42. // pncont
  43. #include "hxslist.h"
  44. // coreres
  45. #include "xmlres.h"
  46. #include "smilres.h"
  47. #include "xmlreslt.h"
  48. // rmasmil
  49. #include "smlerror.h"
  50. // pndebug
  51. #include "hxheap.h"
  52. #ifdef _DEBUG
  53. #undef HX_THIS_FILE
  54. static const char HX_THIS_FILE[] = __FILE__;
  55. #endif
  56. #ifdef _WINDOWS
  57. extern HINSTANCE g_hInstance;
  58. #endif
  59. const int MAX_ERROR_STRING = 1024;
  60. CSmilErrorHandler::CSmilErrorHandler(IUnknown* pContext):
  61.     m_pContext(pContext)
  62. {
  63.     if(m_pContext)
  64.     {
  65. m_pContext->AddRef();
  66.     }
  67. }
  68. CSmilErrorHandler::~CSmilErrorHandler()
  69. {
  70.     HX_RELEASE(m_pContext);
  71. }
  72. void
  73. CSmilErrorHandler::Report(const char* pErrorText)
  74. {
  75.     IHXErrorMessages* pErrorMessage = 0;
  76.     if(m_pContext &&
  77. pErrorText &&
  78. HXR_OK == m_pContext->QueryInterface(
  79. IID_IHXErrorMessages, (void**)&pErrorMessage))
  80.     {
  81. pErrorMessage->Report(HXLOG_ERR, HXR_BAD_FORMAT,
  82.     0, pErrorText, NULL);
  83.         HX_RELEASE(pErrorMessage);
  84.     }
  85. }
  86. HX_RESULT
  87. CSmilErrorHandler::GetErrorString(UINT32 ulErrorStringID,
  88.   char* pErrorStringBuffer)
  89. {
  90.     HX_RESULT rc = HXR_FAIL;
  91.     const char* pErrorString = NULL;
  92.     IHXExternalResourceManager* pResMgr = NULL;
  93.     if(HXR_OK == m_pContext->QueryInterface(IID_IHXExternalResourceManager,
  94.     (void**)&pResMgr))
  95.     {
  96. IHXExternalResourceReader* pResRdr = NULL;
  97. if(HXR_OK == pResMgr->CreateExternalResourceReader(
  98.      CORE_RESOURCE_SHORT_NAME, pResRdr))
  99. {
  100. #ifdef _WINDOWS
  101.     char szDLLPath[1024]; /* Flawfinder: ignore */
  102.     GetModuleFileName((HMODULE)g_hInstance, szDLLPath, sizeof(szDLLPath));
  103.     pResRdr->SetDefaultResourceFile(szDLLPath);
  104. #endif
  105.     IHXXResource* pRes = pResRdr->GetResource(HX_RT_STRING,
  106. ulErrorStringID);
  107.     if(pRes)
  108.     {
  109. strcpy(pErrorStringBuffer, (const char*)pRes->ResourceData()); /* Flawfinder: ignore */
  110. rc = HXR_OK;
  111.     }
  112.     HX_RELEASE(pRes);
  113.     HX_RELEASE(pResRdr);
  114. }
  115. HX_RELEASE(pResMgr);
  116.     }
  117.     return rc;
  118. }
  119. //     CSmilXMLSyntaxErrorHandler methods
  120. static const struct
  121. {
  122.     UINT32     m_ulErrorTag;
  123.     UINT32     m_ulErrorStringID;
  124. } XMLSyntaxErrorStringTable[] =
  125. {
  126.     { HXR_XML_GENERALERROR,     IDS_ERR_XML_GENERALERROR },
  127.     { HXR_XML_BADENDTAG,     IDS_ERR_XML_BADENDTAG },
  128.     { HXR_XML_NOCLOSE,     IDS_ERR_XML_NOCLOSE },
  129.     { HXR_XML_BADATTRIBUTE,     IDS_ERR_XML_BADATTRIBUTE },
  130.     { HXR_XML_NOVALUE,     IDS_ERR_XML_MISSINGQUOTE },
  131.     { HXR_XML_MISSINGQUOTE,     IDS_ERR_XML_MISSINGQUOTE },
  132.     { HXR_XML_NOTAGTYPE,     IDS_ERR_XML_NOTAGTYPE },
  133.     { HXR_XML_ILLEGALID,     IDS_ERR_XML_ILLEGALID },
  134.     { HXR_XML_DUPATTRIBUTE,     IDS_ERR_XML_DUPATTRIBUTE },
  135.     { HXR_XML_COMMENT_B4_PROCINST,     IDS_ERR_XML_COMMENT_B4_PROCINST },
  136.     { HXR_XML_SYNTAX,     IDS_ERR_XML_SYNTAX },
  137.     { HXR_XML_NO_ELEMENTS,     IDS_ERR_XML_NO_ELEMENTS },
  138. // removed INVALID_TOKEN, replaced with specific errors below
  139. //    { HXR_XML_INVALID_TOKEN,     IDS_ERR_XML_INVALID_TOKEN },
  140.     { HXR_XML_UNCLOSED_TOKEN,     IDS_ERR_XML_UNCLOSED_TOKEN  },
  141.     { HXR_XML_PARTIAL_CHAR,     IDS_ERR_XML_PARTIAL_CHAR },
  142.     { HXR_XML_TAG_MISMATCH,     IDS_ERR_XML_TAG_MISMATCH },
  143. // use DUPATTRIBUTE instead
  144. //    { HXR_XML_DUPLICATE_ATTRIBUTE,     IDS_ERR_XML_DUPLICATE_ATTRIBUTE },
  145.     { HXR_XML_JUNK_AFTER_DOC_ELEMENT,     IDS_ERR_XML_JUNK_AFTER_DOC_ELEMENT },
  146.     { HXR_XML_PARAM_ENTITY_REF,     IDS_ERR_XML_PARAM_ENTITY_REF },
  147.     { HXR_XML_UNDEFINED_ENTITY,     IDS_ERR_XML_UNDEFINED_ENTITY },
  148.     { HXR_XML_RECURSIVE_ENTITY_REF,     IDS_ERR_XML_RECURSIVE_ENTITY_REF },
  149.     { HXR_XML_ASYNC_ENTITY,     IDS_ERR_XML_ASYNC_ENTITY },
  150.     { HXR_XML_BAD_CHAR_REF,     IDS_ERR_XML_BAD_CHAR_REF },
  151.     { HXR_XML_BINARY_ENTITY_REF,     IDS_ERR_XML_BINARY_ENTITY_REF },
  152.     { PNR_XML_ATTRIBUTE_EXTEHXAL_ENTITY_REF, IDS_ERR_XML_ATTRIBUTE_EXTERNAL_ENTITY_REF },
  153.     { HXR_XML_MISPLACED_XML_PI,     IDS_ERR_XML_MISPLACED_XML_PI },
  154.     { HXR_XML_UNKNOWN_ENCODING,     IDS_ERR_XML_UNKNOWN_ENCODING },
  155.     { HXR_XML_INCORRECT_ENCODING,     IDS_ERR_XML_INCORRECT_ENCODING },
  156.     { HXR_XML_UNCLOSED_CDATA_SECTION,     IDS_ERR_XML_UNCLOSED_CDATA_SECTION },
  157.     { PNR_XML_EXTEHXAL_ENTITY_HANDLING, IDS_ERR_XML_EXTERNAL_ENTITY_HANDLING },
  158.     { HXR_XML_NOT_STANDALONE,     IDS_ERR_XML_NOT_STANDALONE },
  159.     { HXR_XML_INVALID_NAME,     IDS_ERR_XML_INVALID_NAME },
  160.     { HXR_XML_INVALID_CHAR_IN_DOC,     IDS_ERR_XML_INVALID_CHAR_IN_DOC },
  161.     { HXR_XML_TWO_DASHES_NOT_ALLOWED_IN_COMMENT, IDS_ERR_XML_TWO_DASHES_NOT_ALLOWED_IN_COMMENT },
  162.     { HXR_XML_INVALID_DECL,     IDS_ERR_XML_INVALID_DECL },
  163.     { HXR_XML_INVALID_PI,     IDS_ERR_XML_INVALID_PI },
  164.     { HXR_XML_INVALID_PI_TARGET,     IDS_ERR_XML_INVALID_PI_TARGET },
  165.     { HXR_XML_INVALID_CDATA,     IDS_ERR_XML_INVALID_CDATA },
  166.     { HXR_XML_NO_CLOSING_GT,     IDS_ERR_XML_NO_CLOSING_GT },
  167.     { HXR_XML_INVALID_HEX_CHAR_REF,     IDS_ERR_XML_INVALID_HEX_CHAR_REF },
  168.     { HXR_XML_INVALID_CHAR_REF,     IDS_ERR_XML_INVALID_CHAR_REF },
  169.     { HXR_XML_INVALID_REF,     IDS_ERR_XML_INVALID_REF },
  170.     { HXR_XML_MISSING_EQUALS,     IDS_ERR_XML_MISSING_EQUALS },
  171. // use MISSINGQUOTE instead
  172. //    { HXR_XML_MISSING_QUOT_APOS,     IDS_ERR_XML_MISSING_QUOT_APOS },
  173.     { HXR_XML_MISSING_REQ_SPACE,     IDS_ERR_XML_MISSING_REQ_SPACE },
  174.     { HXR_XML_LT_NOT_ALLOWED,     IDS_ERR_XML_LT_NOT_ALLOWED },
  175.     { HXR_XML_EXPECTED_GT,     IDS_ERR_XML_EXPECTED_GT },
  176.     { HXR_XML_INVALID_GT_AFFT_2_RSQB_IN_CONTENT, IDS_ERR_XML_INVALID_GT_AFFT_2_RSQB_IN_CONTENT },
  177.     { HXR_XML_INVALID_COMMENT,     IDS_ERR_XML_INVALID_COMMENT }
  178. };
  179. CSmilXMLSyntaxErrorHandler::CSmilXMLSyntaxErrorHandler(IUnknown* pContext):
  180.     CSmilErrorHandler(pContext)
  181. {
  182. }
  183. CSmilXMLSyntaxErrorHandler::~CSmilXMLSyntaxErrorHandler()
  184. {
  185. }
  186. void
  187. CSmilXMLSyntaxErrorHandler::GetReportString(UINT32 ulErrorID,
  188.     char* pErrorString)
  189. {
  190.     UINT32 ulErrorStringID = XMLSyntaxErrorStringTable[0].m_ulErrorStringID;
  191.     for (int i = 0; 
  192. i < sizeof(XMLSyntaxErrorStringTable) / 
  193.     sizeof(XMLSyntaxErrorStringTable[0]); 
  194. ++i)
  195.     {
  196. if(XMLSyntaxErrorStringTable[i].m_ulErrorTag == ulErrorID)
  197. {
  198.     ulErrorStringID = XMLSyntaxErrorStringTable[i].m_ulErrorStringID;
  199.     break;
  200. }
  201.     }
  202.     if (GetErrorString(ulErrorStringID, pErrorString) != HXR_OK)
  203.     {
  204. strcpy(pErrorString, "Error Strings can not be loaded %d: %sn"); /* Flawfinder: ignore */
  205.     }
  206. }
  207. void
  208. CSmilXMLSyntaxErrorHandler::ReportError(UINT32 ulErrorID,
  209. const char* pErrorText,
  210. UINT32 ulLineNumber)
  211. {
  212.     UINT32 ulErrorStringID = XMLSyntaxErrorStringTable[0].m_ulErrorStringID;
  213.     for (int i = 0; 
  214. i < sizeof(XMLSyntaxErrorStringTable) / 
  215.     sizeof(XMLSyntaxErrorStringTable[0]); 
  216. ++i)
  217.     {
  218. if(XMLSyntaxErrorStringTable[i].m_ulErrorTag == ulErrorID)
  219. {
  220.     ulErrorStringID = XMLSyntaxErrorStringTable[i].m_ulErrorStringID;
  221.     break;
  222. }
  223.     }
  224.     char szErrorString[MAX_ERROR_STRING]; /* Flawfinder: ignore */
  225.     if(HXR_OK == GetErrorString(ulErrorStringID,
  226. szErrorString))
  227.     {
  228. CHXString errorText;
  229. // /Checking for NULL pErrorText fixes PR 97290:
  230. errorText.Format(szErrorString, ulLineNumber, NULL==pErrorText?"(unknown)":pErrorText);
  231. Report(errorText);
  232.     }
  233. }
  234. //  CSmilSMILSyntaxErrorHandler methods
  235. static const struct
  236. {
  237.     SMILErrorTag    m_ulErrorTag;
  238.     UINT32     m_ulErrorStringID;
  239. } SMILSyntaxErrorStringTable[] =
  240. {
  241.     { SMILErrorGeneralError,     IDS_ERR_SMIL_GENERALERROR },
  242.     { SMILErrorBadXML,     IDS_ERR_SMIL_BADXML },
  243.     { SMILErrorNotSMIL,     IDS_ERR_SMIL_NOTSMIL },
  244.     { SMILErrorDuplicateID,     IDS_ERR_SMIL_DUPLICATEID },
  245.     { SMILErrorNonexistentID,     IDS_ERR_SMIL_NONEXISTENTID },
  246.     { SMILErrorNoBodyTag,     IDS_ERR_SMIL_NOBODYTAG },
  247.     { SMILErrorNoBodyElements,     IDS_ERR_SMIL_NOBODYELEMENTS },
  248.     { SMILErrorUnrecognizedTag,     IDS_ERR_SMIL_UNRECOGNIZEDTAG },
  249.     { SMILErrorUnrecognizedAttribute,     IDS_ERR_SMIL_UNRECOGNIZEDATTRIBUTE },
  250.     { SMILErrorUnexpectedTag,     IDS_ERR_SMIL_UNEXPECTEDTAG },
  251.     { SMILErrorBadDuration,     IDS_ERR_SMIL_BADDURATION },
  252.     { SMILErrorBadAttribute,     IDS_ERR_SMIL_BADATTRIBUTE },
  253.     { SMILErrorBadFragment,     IDS_ERR_SMIL_BADFRAGMENT },
  254.     { SMILErrorRequiredAttributeMissing,    IDS_ERR_SMIL_REQUIREDATTRIBUTEMISSING },
  255.     { SMILErrorSyncAttributeMissing,     IDS_ERR_SMIL_SYNCATTRIBUTEOUTOFSCOPE },
  256.     { SMILErrorUnexpectedContent,     IDS_ERR_SMIL_UNEXPECTEDCONTENT },
  257.     { SMILErrorSMIL10Document,     IDS_ERR_SMIL_SMIL10DOCUMENT },
  258.     { SMILErrorIndefiniteNotSupported,     IDS_ERR_SMIL_INDEFINITENOTSUPPORTED },
  259.     { SMILErrorMetaDatatype,     IDS_ERR_SMIL_METADATATYPE },
  260.     { SMILErrorRootLayoutHeightWidthRequired,    IDS_ERR_SMIL_ROOTHEIGHTWIDTHREQUIRED },
  261.     { SMILErrorBadID,     IDS_ERR_SMIL_BADID },
  262.     { SMILErrorNoSources,     IDS_ERR_SMIL_NOSOURCES }
  263. };
  264. CSmilSMILSyntaxErrorHandler::CSmilSMILSyntaxErrorHandler(IUnknown* pContext):
  265.     CSmilErrorHandler(pContext)
  266. {
  267. }
  268. CSmilSMILSyntaxErrorHandler::~CSmilSMILSyntaxErrorHandler()
  269. {
  270. }
  271. void
  272. CSmilSMILSyntaxErrorHandler::GetReportString(SMILErrorTag tag,
  273.     char* pErrorString)
  274. {
  275.     UINT32 ulErrorStringID = SMILSyntaxErrorStringTable[0].m_ulErrorStringID;
  276.     for (int i = 0; 
  277. i < sizeof(SMILSyntaxErrorStringTable) / 
  278.     sizeof(SMILSyntaxErrorStringTable[0]); 
  279. ++i)
  280.     {
  281. if(SMILSyntaxErrorStringTable[i].m_ulErrorTag == tag)
  282. {
  283.     ulErrorStringID = SMILSyntaxErrorStringTable[i].m_ulErrorStringID;
  284.     break;
  285. }
  286.     }
  287.     
  288.     if (GetErrorString(ulErrorStringID, pErrorString) != HXR_OK)
  289.     {
  290. strcpy(pErrorString, "Error Strings can not be loaded %d: %sn"); /* Flawfinder: ignore */
  291.     }
  292. }
  293. void
  294. CSmilSMILSyntaxErrorHandler::ReportError(SMILErrorTag tag,
  295. const char* pErrorText,
  296. UINT32 ulLineNumber)
  297. {
  298.     UINT32 ulErrorStringID = SMILSyntaxErrorStringTable[0].m_ulErrorStringID;
  299.     for (int i = 0; 
  300. i < sizeof(SMILSyntaxErrorStringTable) / 
  301.     sizeof(SMILSyntaxErrorStringTable[0]); 
  302. ++i)
  303.     {
  304. if(SMILSyntaxErrorStringTable[i].m_ulErrorTag == tag)
  305. {
  306.     ulErrorStringID = SMILSyntaxErrorStringTable[i].m_ulErrorStringID;
  307.     break;
  308. }
  309.     }
  310.     char szErrorString[MAX_ERROR_STRING]; /* Flawfinder: ignore */
  311.     if(HXR_OK == GetErrorString(ulErrorStringID,
  312. szErrorString))
  313.     {
  314. CHXString errorText;
  315. errorText.Format(szErrorString, ulLineNumber, pErrorText);
  316. Report(errorText);
  317.     }
  318. }