void txDriver::createErrorString() { XML_Error errCode = XML_GetErrorCode(mExpatParser); mErrorString.AppendWithConversion(XML_ErrorString(errCode)); mErrorString.AppendLiteral(" at line "); mErrorString.AppendInt(XML_GetCurrentLineNumber(mExpatParser)); mErrorString.AppendLiteral(" in "); mErrorString.Append((const PRUnichar*)XML_GetBase(mExpatParser)); }
static int getbase (lua_State *L) { lxp_userdata *xpu = checkparser(L, 1); lua_pushstring(L, XML_GetBase(xpu->parser)); return 1; }
nsresult nsExpatDriver::HandleError() { PRInt32 code = XML_GetErrorCode(mExpatParser); NS_ASSERTION(code > XML_ERROR_NONE, "unexpected XML error code"); // Map Expat error code to an error string // XXX Deal with error returns. nsAutoString description; nsParserMsgUtils::GetLocalizedStringByID(XMLPARSER_PROPERTIES, code, description); if (code == XML_ERROR_TAG_MISMATCH) { /** * Expat can send the following: * localName * namespaceURI<separator>localName * namespaceURI<separator>localName<separator>prefix * * and we use 0xFFFF for the <separator>. * */ const PRUnichar *mismatch = MOZ_XML_GetMismatchedTag(mExpatParser); const PRUnichar *uriEnd = nsnull; const PRUnichar *nameEnd = nsnull; const PRUnichar *pos; for (pos = mismatch; *pos; ++pos) { if (*pos == kExpatSeparatorChar) { if (uriEnd) { nameEnd = pos; } else { uriEnd = pos; } } } nsAutoString tagName; if (uriEnd && nameEnd) { // We have a prefix. tagName.Append(nameEnd + 1, pos - nameEnd - 1); tagName.Append(PRUnichar(':')); } const PRUnichar *nameStart = uriEnd ? uriEnd + 1 : mismatch; tagName.Append(nameStart, (nameEnd ? nameEnd : pos) - nameStart); nsAutoString msg; nsParserMsgUtils::GetLocalizedStringByName(XMLPARSER_PROPERTIES, "Expected", msg); // . Expected: </%S>. PRUnichar *message = nsTextFormatter::smprintf(msg.get(), tagName.get()); if (!message) { return NS_ERROR_OUT_OF_MEMORY; } description.Append(message); nsTextFormatter::smprintf_free(message); } // Adjust the column number so that it is one based rather than zero based. PRUint32 colNumber = XML_GetCurrentColumnNumber(mExpatParser) + 1; PRUint32 lineNumber = XML_GetCurrentLineNumber(mExpatParser); nsAutoString errorText; CreateErrorText(description.get(), XML_GetBase(mExpatParser), lineNumber, colNumber, errorText); NS_ASSERTION(mSink, "no sink?"); nsAutoString sourceText(mLastLine); AppendErrorPointer(colNumber, mLastLine.get(), sourceText); // Try to create and initialize the script error. nsCOMPtr<nsIScriptError> serr(do_CreateInstance(NS_SCRIPTERROR_CONTRACTID)); nsresult rv = NS_ERROR_FAILURE; if (serr) { nsCOMPtr<nsIScriptError2> serr2(do_QueryInterface(serr)); rv = serr2->InitWithWindowID(description.get(), mURISpec.get(), mLastLine.get(), lineNumber, colNumber, nsIScriptError::errorFlag, "malformed-xml", mInnerWindowID); } // If it didn't initialize, we can't do any logging. PRBool shouldReportError = NS_SUCCEEDED(rv); if (mSink && shouldReportError) { rv = mSink->ReportError(errorText.get(), sourceText.get(), serr, &shouldReportError); if (NS_FAILED(rv)) { shouldReportError = PR_TRUE; } } if (shouldReportError) { nsCOMPtr<nsIConsoleService> cs (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); if (cs) { cs->LogMessage(serr); } } return NS_ERROR_HTMLPARSER_STOPPARSING; }
const XML_Char * _Expat_XML_GetBase(struct ExpatIFace * Self, XML_Parser parser) { return XML_GetBase(parser); }
BBString * bmx_expat_XML_GetBase(XML_Parser parser) { return bbStringFromCString(XML_GetBase(parser)); }