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 <stdio.h>
  36. #include "hxtypes.h"
  37. #include "hxcom.h"
  38. #include "hxcomm.h"
  39. #include "hxerror.h"
  40. #include "hxxres.h"
  41. #include "hxxrsmg.h"
  42. #include "hxwintyp.h"
  43. #include "hxslist.h"
  44. #include "hxstring.h"
  45. #include "hxstack.h"
  46. #include "hxstrutl.h"
  47. #include "xmlres.h"
  48. #include "smilres.h"
  49. #include "xmlreslt.h"
  50. #include "hxxml.h"
  51. #include "hxxmlprs.h"
  52. #include "sm1parse.h"
  53. #include "sm1error.h"
  54. #ifdef _WINDOWS
  55. extern HINSTANCE g_hInstance;
  56. #endif
  57. const int MAX_ERROR_STRING = 1024;
  58. CSmil1ErrorHandler::CSmil1ErrorHandler(IUnknown* pContext):
  59.     m_pContext(pContext)
  60. {
  61.     if(m_pContext)
  62.     {
  63. m_pContext->AddRef();
  64.     }
  65. }
  66. CSmil1ErrorHandler::~CSmil1ErrorHandler()
  67. {
  68.     HX_RELEASE(m_pContext);
  69. }
  70. void
  71. CSmil1ErrorHandler::Report(const char* pErrorText)
  72. {
  73.     IHXErrorMessages* pErrorMessage = 0;
  74.     if(m_pContext &&
  75. pErrorText &&
  76. HXR_OK == m_pContext->QueryInterface(
  77. IID_IHXErrorMessages, (void**)&pErrorMessage))
  78.     {
  79. pErrorMessage->Report(HXLOG_ERR, HXR_BAD_FORMAT,
  80.     0, pErrorText, NULL);
  81.         HX_RELEASE(pErrorMessage);
  82.     }
  83. }
  84. HX_RESULT
  85. CSmil1ErrorHandler::GetErrorString(UINT32 ulErrorStringID,
  86.   char* pErrorStringBuffer)
  87. {
  88.     HX_RESULT rc = HXR_FAIL;
  89.     const char* pErrorString = NULL;
  90.     IHXExternalResourceManager* pResMgr = NULL;
  91.     if(HXR_OK == m_pContext->QueryInterface(IID_IHXExternalResourceManager,
  92.     (void**)&pResMgr))
  93.     {
  94. IHXExternalResourceReader* pResRdr = NULL;
  95. if(HXR_OK == pResMgr->CreateExternalResourceReader(
  96.      CORE_RESOURCE_SHORT_NAME, pResRdr))
  97. {
  98. #ifdef _WINDOWS
  99.     char szDLLPath[1024]; /* Flawfinder: ignore */
  100.     GetModuleFileName((HMODULE)g_hInstance, szDLLPath, sizeof(szDLLPath));
  101.     pResRdr->SetDefaultResourceFile(szDLLPath);
  102. #endif
  103.     IHXXResource* pRes = pResRdr->GetResource(HX_RT_STRING,
  104. ulErrorStringID);
  105.     if(pRes)
  106.     {
  107. strcpy(pErrorStringBuffer, (const char*)pRes->ResourceData()); /* Flawfinder: ignore */
  108. rc = HXR_OK;
  109.     }
  110.     HX_RELEASE(pRes);
  111.     HX_RELEASE(pResRdr);
  112. }
  113. HX_RELEASE(pResMgr);
  114.     }
  115.     return rc;
  116. }
  117. //     CSmil1XMLSyntaxErrorHandler methods
  118. static const struct
  119. {
  120.     UINT32     m_ulErrorTag;
  121.     UINT32     m_ulErrorStringID;
  122. } XMLSyntaxErrorStringTable[] =
  123. {
  124.     { HXR_XML_GENERALERROR,     IDS_ERR_XML_GENERALERROR },
  125.     { HXR_XML_BADENDTAG,     IDS_ERR_XML_BADENDTAG },
  126.     { HXR_XML_NOCLOSE,     IDS_ERR_XML_NOCLOSE },
  127.     { HXR_XML_BADATTRIBUTE,     IDS_ERR_XML_BADATTRIBUTE },
  128.     { HXR_XML_NOVALUE,     IDS_ERR_XML_MISSINGQUOTE },
  129.     { HXR_XML_MISSINGQUOTE,     IDS_ERR_XML_MISSINGQUOTE },
  130.     { HXR_XML_NOTAGTYPE,     IDS_ERR_XML_NOTAGTYPE },
  131.     { HXR_XML_ILLEGALID,     IDS_ERR_XML_ILLEGALID },
  132.     { HXR_XML_DUPATTRIBUTE,     IDS_ERR_XML_DUPATTRIBUTE },
  133.     { HXR_XML_COMMENT_B4_PROCINST,     IDS_ERR_XML_COMMENT_B4_PROCINST },
  134.     { HXR_XML_SYNTAX,     IDS_ERR_XML_SYNTAX },
  135.     { HXR_XML_NO_ELEMENTS,     IDS_ERR_XML_NO_ELEMENTS },
  136. // removed INVALID_TOKEN, replaced with specific errors below
  137. //    { HXR_XML_INVALID_TOKEN,     IDS_ERR_XML_INVALID_TOKEN },
  138.     { HXR_XML_UNCLOSED_TOKEN,     IDS_ERR_XML_UNCLOSED_TOKEN  },
  139.     { HXR_XML_PARTIAL_CHAR,     IDS_ERR_XML_PARTIAL_CHAR },
  140.     { HXR_XML_TAG_MISMATCH,     IDS_ERR_XML_TAG_MISMATCH },
  141. // use DUPATTRIBUTE instead
  142. //    { HXR_XML_DUPLICATE_ATTRIBUTE,     IDS_ERR_XML_DUPLICATE_ATTRIBUTE },
  143.     { HXR_XML_JUNK_AFTER_DOC_ELEMENT,     IDS_ERR_XML_JUNK_AFTER_DOC_ELEMENT },
  144.     { HXR_XML_PARAM_ENTITY_REF,     IDS_ERR_XML_PARAM_ENTITY_REF },
  145.     { HXR_XML_UNDEFINED_ENTITY,     IDS_ERR_XML_UNDEFINED_ENTITY },
  146.     { HXR_XML_RECURSIVE_ENTITY_REF,     IDS_ERR_XML_RECURSIVE_ENTITY_REF },
  147.     { HXR_XML_ASYNC_ENTITY,     IDS_ERR_XML_ASYNC_ENTITY },
  148.     { HXR_XML_BAD_CHAR_REF,     IDS_ERR_XML_BAD_CHAR_REF },
  149.     { HXR_XML_BINARY_ENTITY_REF,     IDS_ERR_XML_BINARY_ENTITY_REF },
  150.     { PNR_XML_ATTRIBUTE_EXTEHXAL_ENTITY_REF, IDS_ERR_XML_ATTRIBUTE_EXTERNAL_ENTITY_REF },
  151.     { HXR_XML_MISPLACED_XML_PI,     IDS_ERR_XML_MISPLACED_XML_PI },
  152.     { HXR_XML_UNKNOWN_ENCODING,     IDS_ERR_XML_UNKNOWN_ENCODING },
  153.     { HXR_XML_INCORRECT_ENCODING,     IDS_ERR_XML_INCORRECT_ENCODING },
  154.     { HXR_XML_UNCLOSED_CDATA_SECTION,     IDS_ERR_XML_UNCLOSED_CDATA_SECTION },
  155.     { PNR_XML_EXTEHXAL_ENTITY_HANDLING, IDS_ERR_XML_EXTERNAL_ENTITY_HANDLING },
  156.     { HXR_XML_NOT_STANDALONE,     IDS_ERR_XML_NOT_STANDALONE },
  157.     { HXR_XML_INVALID_NAME,     IDS_ERR_XML_INVALID_NAME },
  158.     { HXR_XML_INVALID_CHAR_IN_DOC,     IDS_ERR_XML_INVALID_CHAR_IN_DOC },
  159.     { HXR_XML_TWO_DASHES_NOT_ALLOWED_IN_COMMENT, IDS_ERR_XML_TWO_DASHES_NOT_ALLOWED_IN_COMMENT },
  160.     { HXR_XML_INVALID_DECL,     IDS_ERR_XML_INVALID_DECL },
  161.     { HXR_XML_INVALID_PI,     IDS_ERR_XML_INVALID_PI },
  162.     { HXR_XML_INVALID_PI_TARGET,     IDS_ERR_XML_INVALID_PI_TARGET },
  163.     { HXR_XML_INVALID_CDATA,     IDS_ERR_XML_INVALID_CDATA },
  164.     { HXR_XML_NO_CLOSING_GT,     IDS_ERR_XML_NO_CLOSING_GT },
  165.     { HXR_XML_INVALID_HEX_CHAR_REF,     IDS_ERR_XML_INVALID_HEX_CHAR_REF },
  166.     { HXR_XML_INVALID_CHAR_REF,     IDS_ERR_XML_INVALID_CHAR_REF },
  167.     { HXR_XML_INVALID_REF,     IDS_ERR_XML_INVALID_REF },
  168.     { HXR_XML_MISSING_EQUALS,     IDS_ERR_XML_MISSING_EQUALS },
  169. // use MISSINGQUOTE instead
  170. //    { HXR_XML_MISSING_QUOT_APOS,     IDS_ERR_XML_MISSING_QUOT_APOS },
  171.     { HXR_XML_MISSING_REQ_SPACE,     IDS_ERR_XML_MISSING_REQ_SPACE },
  172.     { HXR_XML_LT_NOT_ALLOWED,     IDS_ERR_XML_LT_NOT_ALLOWED },
  173.     { HXR_XML_EXPECTED_GT,     IDS_ERR_XML_EXPECTED_GT },
  174.     { HXR_XML_INVALID_GT_AFFT_2_RSQB_IN_CONTENT, IDS_ERR_XML_INVALID_GT_AFFT_2_RSQB_IN_CONTENT },
  175.     { HXR_XML_INVALID_COMMENT,     IDS_ERR_XML_INVALID_COMMENT }
  176. };
  177. CSmil1XMLSyntaxErrorHandler::CSmil1XMLSyntaxErrorHandler(IUnknown* pContext):
  178.     CSmil1ErrorHandler(pContext)
  179. {
  180. }
  181. CSmil1XMLSyntaxErrorHandler::~CSmil1XMLSyntaxErrorHandler()
  182. {
  183. }
  184. void
  185. CSmil1XMLSyntaxErrorHandler::GetReportString(UINT32 ulErrorID,
  186.     char* pErrorString)
  187. {
  188.     UINT32 ulErrorStringID = XMLSyntaxErrorStringTable[0].m_ulErrorStringID;
  189.     for (int i = 0; 
  190. i < sizeof(XMLSyntaxErrorStringTable) / 
  191.     sizeof(XMLSyntaxErrorStringTable[0]); 
  192. ++i)
  193.     {
  194. if(XMLSyntaxErrorStringTable[i].m_ulErrorTag == ulErrorID)
  195. {
  196.     ulErrorStringID = XMLSyntaxErrorStringTable[i].m_ulErrorStringID;
  197.     break;
  198. }
  199.     }
  200.     if (GetErrorString(ulErrorStringID, pErrorString) != HXR_OK)
  201.     {
  202. strcpy(pErrorString, "Error Strings can not be loaded %d: %sn"); /* Flawfinder: ignore */
  203.     }
  204. }
  205. void
  206. CSmil1XMLSyntaxErrorHandler::ReportError(UINT32 ulErrorID,
  207. const char* pErrorText,
  208. UINT32 ulLineNumber)
  209. {
  210.     UINT32 ulErrorStringID = XMLSyntaxErrorStringTable[0].m_ulErrorStringID;
  211.     for (int i = 0; 
  212. i < sizeof(XMLSyntaxErrorStringTable) / 
  213.     sizeof(XMLSyntaxErrorStringTable[0]); 
  214. ++i)
  215.     {
  216. if(XMLSyntaxErrorStringTable[i].m_ulErrorTag == ulErrorID)
  217. {
  218.     ulErrorStringID = XMLSyntaxErrorStringTable[i].m_ulErrorStringID;
  219.     break;
  220. }
  221.     }
  222.     char szErrorString[MAX_ERROR_STRING]; /* Flawfinder: ignore */
  223.     if(HXR_OK == GetErrorString(ulErrorStringID,
  224. szErrorString))
  225.     {
  226. CHXString errorText;
  227. errorText.Format(szErrorString, ulLineNumber, pErrorText);
  228. Report(errorText);
  229.     }
  230. }
  231. //  CSmil1SMILSyntaxErrorHandler methods
  232. static const struct
  233. {
  234.     SMILErrorTag    m_ulErrorTag;
  235.     UINT32     m_ulErrorStringID;
  236. } SMILSyntaxErrorStringTable[] =
  237. {
  238.     { SMILErrorGeneralError,     IDS_ERR_SMIL_GENERALERROR },
  239.     { SMILErrorBadXML,     IDS_ERR_SMIL_BADXML },
  240.     { SMILErrorNotSMIL,     IDS_ERR_SMIL_NOTSMIL },
  241.     { SMILErrorDuplicateID,     IDS_ERR_SMIL_DUPLICATEID },
  242.     { SMILErrorNonexistentID,     IDS_ERR_SMIL_NONEXISTENTID },
  243.     { SMILErrorNoBodyTag,     IDS_ERR_SMIL_NOBODYTAG },
  244.     { SMILErrorNoBodyElements,     IDS_ERR_SMIL_NOBODYELEMENTS },
  245.     { SMILErrorUnrecognizedTag,     IDS_ERR_SMIL_UNRECOGNIZEDTAG },
  246.     { SMILErrorUnrecognizedAttribute,     IDS_ERR_SMIL_UNRECOGNIZEDATTRIBUTE },
  247.     { SMILErrorUnexpectedTag,     IDS_ERR_SMIL_UNEXPECTEDTAG },
  248.     { SMILErrorBadDuration,     IDS_ERR_SMIL_BADDURATION },
  249.     { SMILErrorBadAttribute,     IDS_ERR_SMIL_BADATTRIBUTE },
  250.     { SMILErrorBadFragment,     IDS_ERR_SMIL_BADFRAGMENT },
  251.     { SMILErrorRequiredAttributeMissing,    IDS_ERR_SMIL_REQUIREDATTRIBUTEMISSING },
  252.     { SMILErrorSyncAttributeMissing,     IDS_ERR_SMIL_SYNCATTRIBUTEOUTOFSCOPE },
  253.     { SMILErrorUnexpectedContent,     IDS_ERR_SMIL_UNEXPECTEDCONTENT },
  254.     { SMILErrorSMIL10Document,     IDS_ERR_SMIL_SMIL10DOCUMENT },
  255.     { SMILErrorIndefiniteNotSupported,     IDS_ERR_SMIL_INDEFINITENOTSUPPORTED },
  256.     { SMILErrorMetaDatatype,     IDS_ERR_SMIL_METADATATYPE },
  257.     { SMILErrorRootLayoutHeightWidthRequired,    IDS_ERR_SMIL_ROOTHEIGHTWIDTHREQUIRED },
  258.     { SMILErrorBadID,     IDS_ERR_SMIL_BADID },
  259.     { SMILErrorNoSources,     IDS_ERR_SMIL_NOSOURCES }
  260. };
  261. CSmil1SMILSyntaxErrorHandler::CSmil1SMILSyntaxErrorHandler(IUnknown* pContext):
  262.     CSmil1ErrorHandler(pContext)
  263. {
  264. }
  265. CSmil1SMILSyntaxErrorHandler::~CSmil1SMILSyntaxErrorHandler()
  266. {
  267. }
  268. void
  269. CSmil1SMILSyntaxErrorHandler::GetReportString(SMILErrorTag tag,
  270.     char* pErrorString)
  271. {
  272.     UINT32 ulErrorStringID = SMILSyntaxErrorStringTable[0].m_ulErrorStringID;
  273.     for (int i = 0; 
  274. i < sizeof(SMILSyntaxErrorStringTable) / 
  275.     sizeof(SMILSyntaxErrorStringTable[0]); 
  276. ++i)
  277.     {
  278. if(SMILSyntaxErrorStringTable[i].m_ulErrorTag == tag)
  279. {
  280.     ulErrorStringID = SMILSyntaxErrorStringTable[i].m_ulErrorStringID;
  281.     break;
  282. }
  283.     }
  284.     
  285.     if (GetErrorString(ulErrorStringID, pErrorString) != HXR_OK)
  286.     {
  287. strcpy(pErrorString, "Error Strings can not be loaded %d: %sn"); /* Flawfinder: ignore */
  288.     }
  289. }
  290. void
  291. CSmil1SMILSyntaxErrorHandler::ReportError(SMILErrorTag tag,
  292. const char* pErrorText,
  293. UINT32 ulLineNumber)
  294. {
  295.     UINT32 ulErrorStringID = SMILSyntaxErrorStringTable[0].m_ulErrorStringID;
  296.     for (int i = 0; 
  297. i < sizeof(SMILSyntaxErrorStringTable) / 
  298.     sizeof(SMILSyntaxErrorStringTable[0]); 
  299. ++i)
  300.     {
  301. if(SMILSyntaxErrorStringTable[i].m_ulErrorTag == tag)
  302. {
  303.     ulErrorStringID = SMILSyntaxErrorStringTable[i].m_ulErrorStringID;
  304.     break;
  305. }
  306.     }
  307.     char szErrorString[MAX_ERROR_STRING]; /* Flawfinder: ignore */
  308.     if(HXR_OK == GetErrorString(ulErrorStringID,
  309. szErrorString))
  310.     {
  311. CHXString errorText;
  312. errorText.Format(szErrorString, ulLineNumber, pErrorText);
  313. Report(errorText);
  314.     }
  315. }