void nsCSSScanner::StopRecording(nsString& aBuffer) { NS_ASSERTION(mRecording, "haven't started recording"); mRecording = false; aBuffer.Append(mReadPointer + mRecordStartOffset, mOffset - mPushbackCount - mRecordStartOffset); }
void ReverseString(const nsString& aInput, nsString& aReversed) { aReversed.Truncate(0); for (PRInt32 i = aInput.Length() - 1; i >= 0; i--) { aReversed.Append(aInput[i]); } }
void nsCSSScanner::StopRecording(nsString& aBuffer) { MOZ_ASSERT(mRecording, "haven't started recording"); mRecording = false; aBuffer.Append(mBuffer + mRecordStartOffset, mOffset - mRecordStartOffset); }
/** * Gather up the characters in an identifier. The identfier was * started by "aChar" which will be appended to aIdent. The result * will be aIdent with all of the identifier characters appended * until the first non-identifier character is seen. The termination * character is unread for the future re-reading. * * Returns failure when the character sequence does not form an ident at * all, in which case the caller is responsible for pushing back or * otherwise handling aChar. (This occurs only when aChar is '\'.) */ bool nsCSSScanner::GatherIdent(PRInt32 aChar, nsString& aIdent) { if (aChar == '\\') { if (!ParseAndAppendEscape(aIdent, false)) { return false; } } else if (0 < aChar) { aIdent.Append(aChar); } for (;;) { // If nothing in pushback, first try to get as much as possible in one go if (!mPushbackCount && mOffset < mCount) { // See how much we can consume and append in one go PRUint32 n = mOffset; // Count number of Ident characters that can be processed while (n < mCount && IsIdent(mReadPointer[n])) { ++n; } // Add to the token what we have so far if (n > mOffset) { #ifdef CSS_REPORT_PARSE_ERRORS mColNumber += n - mOffset; #endif aIdent.Append(&mReadPointer[mOffset], n - mOffset); mOffset = n; } } aChar = Read(); if (aChar < 0) break; if (aChar == '\\') { if (!ParseAndAppendEscape(aIdent, false)) { Pushback(aChar); break; } } else if (IsIdent(aChar)) { aIdent.Append(PRUnichar(aChar)); } else { Pushback(aChar); break; } } return true; }
void txResultTreeFragment::stringValue(nsString& aResult) { if (!mBuffer) { return; } aResult.Append(mBuffer->mStringValue); }
/** * Gather up the characters in an identifier. The identfier was * started by "aChar" which will be appended to aIdent. The result * will be aIdent with all of the identifier characters appended * until the first non-identifier character is seen. The termination * character is unread for the future re-reading. * * Returns failure when the character sequence does not form an ident at * all, in which case the caller is responsible for pushing back or * otherwise handling aChar. (This occurs only when aChar is '\'.) */ bool nsCSSScanner::GatherIdent(int32_t aChar, nsString& aIdent) { if (aChar == '\\') { if (!ParseAndAppendEscape(aIdent, false)) { return false; } } else { MOZ_ASSERT(aChar > 0); aIdent.Append(aChar); } for (;;) { // If nothing in pushback, first try to get as much as possible in one go if (!mPushbackCount && mOffset < mCount) { // See how much we can consume and append in one go uint32_t n = mOffset; // Count number of Ident characters that can be processed while (n < mCount && IsIdent(mReadPointer[n])) { ++n; } // Add to the token what we have so far if (n > mOffset) { aIdent.Append(&mReadPointer[mOffset], n - mOffset); mOffset = n; } } aChar = Read(); if (aChar < 0) break; if (aChar == '\\') { if (!ParseAndAppendEscape(aIdent, false)) { Pushback(aChar); break; } } else if (IsIdent(aChar)) { aIdent.Append(PRUnichar(aChar)); } else { Pushback(aChar); break; } } MOZ_ASSERT(aIdent.Length() > 0); return true; }
bool mozTXTToHTMLConv::SmilyHit(const PRUnichar * aInString, PRInt32 aLength, bool col0, const char* tagTXT, const char* imageName, nsString& outputHTML, PRInt32& glyphTextLen) { if ( !aInString || !tagTXT || !imageName ) return false; PRInt32 tagLen = strlen(tagTXT); PRUint32 delim = (col0 ? 0 : 1) + tagLen; if ( (col0 || IsSpace(aInString[0])) && ( aLength <= PRInt32(delim) || IsSpace(aInString[delim]) || (aLength > PRInt32(delim + 1) && ( aInString[delim] == '.' || aInString[delim] == ',' || aInString[delim] == ';' || aInString[delim] == '8' || aInString[delim] == '>' || aInString[delim] == '!' || aInString[delim] == '?' ) && IsSpace(aInString[delim + 1])) ) && ItMatchesDelimited(aInString, aLength, NS_ConvertASCIItoUTF16(tagTXT).get(), tagLen, col0 ? LT_IGNORE : LT_DELIMITER, LT_IGNORE) // Note: tests at different pos for LT_IGNORE and LT_DELIMITER ) { if (!col0) { outputHTML.Truncate(); outputHTML.Append(PRUnichar(' ')); } outputHTML.AppendLiteral("<span class=\""); // <span class=" AppendASCIItoUTF16(imageName, outputHTML); // e.g. smiley-frown outputHTML.AppendLiteral("\" title=\""); // " title=" AppendASCIItoUTF16(tagTXT, outputHTML); // smiley tooltip outputHTML.AppendLiteral("\"><span>"); // "><span> AppendASCIItoUTF16(tagTXT, outputHTML); // original text outputHTML.AppendLiteral("</span></span>"); // </span></span> glyphTextLen = (col0 ? 0 : 1) + tagLen; return true; } return false; }
void mozTXTToHTMLConv::UnescapeStr(const PRUnichar * aInString, PRInt32 aStartPos, PRInt32 aLength, nsString& aOutString) { const PRUnichar * subString = nsnull; for (PRUint32 i = aStartPos; PRInt32(i) - aStartPos < aLength;) { PRInt32 remainingChars = i - aStartPos; if (aInString[i] == '&') { subString = &aInString[i]; if (!nsCRT::strncmp(subString, NS_LITERAL_STRING("<").get(), MinInt(4, aLength - remainingChars))) { aOutString.Append(PRUnichar('<')); i += 4; } else if (!nsCRT::strncmp(subString, NS_LITERAL_STRING(">").get(), MinInt(4, aLength - remainingChars))) { aOutString.Append(PRUnichar('>')); i += 4; } else if (!nsCRT::strncmp(subString, NS_LITERAL_STRING("&").get(), MinInt(5, aLength - remainingChars))) { aOutString.Append(PRUnichar('&')); i += 5; } else if (!nsCRT::strncmp(subString, NS_LITERAL_STRING(""").get(), MinInt(6, aLength - remainingChars))) { aOutString.Append(PRUnichar('"')); i += 6; } else { aOutString += aInString[i]; i++; } } else { aOutString += aInString[i]; i++; } } }
void mozTXTToHTMLConv::UnescapeStr(const char16_t * aInString, int32_t aStartPos, int32_t aLength, nsString& aOutString) { const char16_t * subString = nullptr; for (uint32_t i = aStartPos; int32_t(i) - aStartPos < aLength;) { int32_t remainingChars = i - aStartPos; if (aInString[i] == '&') { subString = &aInString[i]; if (!nsCRT::strncmp(subString, MOZ_UTF16("<"), std::min(4, aLength - remainingChars))) { aOutString.Append(char16_t('<')); i += 4; } else if (!nsCRT::strncmp(subString, MOZ_UTF16(">"), std::min(4, aLength - remainingChars))) { aOutString.Append(char16_t('>')); i += 4; } else if (!nsCRT::strncmp(subString, MOZ_UTF16("&"), std::min(5, aLength - remainingChars))) { aOutString.Append(char16_t('&')); i += 5; } else if (!nsCRT::strncmp(subString, MOZ_UTF16("""), std::min(6, aLength - remainingChars))) { aOutString.Append(char16_t('"')); i += 6; } else { aOutString += aInString[i]; i++; } } else { aOutString += aInString[i]; i++; } } }
void mozTXTToHTMLConv::CalculateURLBoundaries(const PRUnichar * aInString, PRInt32 aInStringLength, const PRUint32 pos, const PRUint32 whathasbeendone, const modetype check, const PRUint32 start, const PRUint32 end, nsString& txtURL, nsString& desc, PRInt32& replaceBefore, PRInt32& replaceAfter) { PRUint32 descstart = start; switch(check) { case RFC1738: { descstart = start - 5; desc.Append(&aInString[descstart], end - descstart + 2); // include "<URL:" and ">" replaceAfter = end - pos + 1; } break; case RFC2396E: { descstart = start - 1; desc.Append(&aInString[descstart], end - descstart + 2); // include brackets replaceAfter = end - pos + 1; } break; case freetext: case abbreviated: { descstart = start; desc.Append(&aInString[descstart], end - start + 1); // don't include brackets replaceAfter = end - pos; } break; default: break; } //switch EscapeStr(desc, false); txtURL.Append(&aInString[start], end - start + 1); txtURL.StripWhitespace(); // FIX ME nsAutoString temp2; ScanTXT(&aInString[descstart], pos - descstart, ~kURLs /*prevents loop*/ & whathasbeendone, temp2); replaceBefore = temp2.Length(); return; }
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)); }
void URL::GetProtocol(nsString& aProtocol, ErrorResult& aRv) const { nsCString protocol; if (NS_SUCCEEDED(mURI->GetScheme(protocol))) { aProtocol.Truncate(); } CopyASCIItoUTF16(protocol, aProtocol); aProtocol.Append(char16_t(':')); }
bool TextAttrsMgr::FontFamilyTextAttr::GetFontFamily(nsIFrame* aFrame, nsString& aFamily) { RefPtr<nsFontMetrics> fm = nsLayoutUtils::GetFontMetricsForFrame(aFrame, 1.0f); gfxFontGroup* fontGroup = fm->GetThebesFontGroup(); gfxFont* font = fontGroup->GetFirstValidFont(); gfxFontEntry* fontEntry = font->GetFontEntry(); aFamily.Append(NS_ConvertUTF8toUTF16(fontEntry->FamilyName())); return true; }
void URL::GetProtocol(nsString& aProtocol) const { nsCString protocol; if (NS_SUCCEEDED(mURI->GetScheme(protocol))) { aProtocol.Truncate(); } CopyASCIItoUTF16(protocol, aProtocol); aProtocol.Append(PRUnichar(':')); }
ENameValueFlag XULTreeGridRowAccessible::Name(nsString& aName) { aName.Truncate(); // XXX: the row name sholdn't be a concatenation of cell names (bug 664384). nsCOMPtr<nsITreeColumn> column = nsCoreUtils::GetFirstSensibleColumn(mTree); while (column) { if (!aName.IsEmpty()) aName.Append(' '); nsAutoString cellName; GetCellName(column, cellName); aName.Append(cellName); column = nsCoreUtils::GetNextSensibleColumn(column); } return eNameOK; }
void nsCParserStartNode::GetSource(nsString& aString) const { aString.Assign(PRUnichar('<')); const PRUnichar* theTagName = nsHTMLTags::GetStringValue(nsHTMLTag(mToken->GetTypeID())); if (theTagName) { aString.Append(theTagName); } PRInt32 index; PRInt32 size = mAttributes.GetSize(); for (index = 0 ; index < size; ++index) { CAttributeToken *theToken = static_cast<CAttributeToken*>(mAttributes.ObjectAt(index)); if (theToken) { theToken->AppendSourceTo(aString); aString.Append(PRUnichar(' ')); //this will get removed... } } aString.Append(PRUnichar('>')); }
static void ValueToString(JSContext *cx, jsval aJSValue, nsString& aString) { if (JSVAL_IS_VOID(aJSValue)) { aString.Assign(kUndefined, STRLEN_ARRAY(kUndefined)); } else if (JSVAL_IS_NULL(aJSValue)) { aString.Assign(kNull, STRLEN_ARRAY(kNull)); } else if (JSVAL_IS_INT(aJSValue)) { jsint i = JSVAL_TO_INT(aJSValue); char buf[20]; PR_snprintf(buf, sizeof(buf), "%d", i); aString.Assign(NS_ConvertASCIItoUTF16(buf)); } else if (JSVAL_IS_DOUBLE(aJSValue)) { jsdouble d = JSVAL_TO_DOUBLE(aJSValue); char buf[50]; PR_snprintf(buf, sizeof(buf), "%f", d); aString.Assign(NS_ConvertASCIItoUTF16(buf)); } else if (JSVAL_IS_BOOLEAN(aJSValue)) { JSBool b = JSVAL_TO_BOOLEAN(aJSValue); if (b) aString.Assign(kTrue, STRLEN_ARRAY(kTrue)); else aString.Assign(kFalse, STRLEN_ARRAY(kFalse)); } else if (JSVAL_IS_STRING(aJSValue)) { JSString *str = JSVAL_TO_STRING(aJSValue); size_t len; const jschar *chars = JS_GetStringCharsAndLength(cx, str, &len); NS_ASSERTION(chars, "out of memory"); if (chars) { NS_ASSERTION(sizeof(jschar) == sizeof(PRUnichar), "char size mismatch"); aString.Assign(reinterpret_cast<const PRUnichar*>(chars), len); } } else { JSObject *obj = JSVAL_TO_OBJECT(aJSValue); JSClass *clazz = JS_GetClass(cx, obj); aString.Assign(PRUnichar('[')); aString.Append(NS_ConvertASCIItoUTF16(clazz->name)); aString.Append(PRUnichar(']')); } }
nsresult nsFSTextPlain::AddNameValuePair(const nsAString& aName, const nsAString& aValue) { // XXX This won't work well with a name like "a=b" or "a\nb" but I suppose // text/plain doesn't care about that. Parsers aren't built for escaped // values so we'll have to live with it. mBody.Append(aName + NS_LITERAL_STRING("=") + aValue + NS_LITERAL_STRING(CRLF)); return NS_OK; }
void StyleInfo::FormatColor(const nscolor& aValue, nsString& aFormattedValue) { // Combine the string like rgb(R, G, B) from nscolor. aFormattedValue.AppendLiteral("rgb("); aFormattedValue.AppendInt(NS_GET_R(aValue)); aFormattedValue.AppendLiteral(", "); aFormattedValue.AppendInt(NS_GET_G(aValue)); aFormattedValue.AppendLiteral(", "); aFormattedValue.AppendInt(NS_GET_B(aValue)); aFormattedValue.Append(')'); }
void nsFrameUtil::Tag::ToString(nsString& aResult) { aResult.Truncate(); aResult.Append(PRUnichar('<')); if (type == close) { aResult.Append(PRUnichar('/')); } aResult.AppendASCII(name); if (0 != num) { PRInt32 i, n = num; for (i = 0; i < n; i++) { aResult.Append(PRUnichar(' ')); aResult.AppendASCII(attributes[i]); if (values[i]) { aResult.AppendLiteral("=\""); aResult.AppendASCII(values[i]); aResult.Append(PRUnichar('\"')); } } } if (type == openClose) { aResult.Append(PRUnichar('/')); } aResult.Append(PRUnichar('>')); }
static void AppendErrorTextCode(PRErrorCode errorCodeToReport, nsINSSComponent *component, nsString &returnedMessage) { const char *codeName = nsNSSErrors::getDefaultErrorStringName(errorCodeToReport); if (codeName) { nsCString error_id(codeName); ToLowerCase(error_id); NS_ConvertASCIItoUTF16 idU(error_id); const char16_t *params[1]; params[0] = idU.get(); nsString formattedString; nsresult rv; rv = component->PIPBundleFormatStringFromName("certErrorCodePrefix", params, 1, formattedString); if (NS_SUCCEEDED(rv)) { returnedMessage.Append(NS_LITERAL_STRING("\n")); returnedMessage.Append(formattedString); returnedMessage.Append(NS_LITERAL_STRING("\n")); } else { returnedMessage.Append(NS_LITERAL_STRING(" (")); returnedMessage.Append(idU); returnedMessage.Append(NS_LITERAL_STRING(")")); } } }
bool FontFace::GetFamilyName(nsString& aResult) { nsCSSValue value; GetDesc(eCSSFontDesc_Family, value); if (value.GetUnit() == eCSSUnit_String) { nsString familyname; value.GetStringValue(familyname); aResult.Append(familyname); } return !aResult.IsEmpty(); }
/** * Gather up the characters in an identifier. The identfier was * started by "aChar" which will be appended to aIdent. The result * will be aIdent with all of the identifier characters appended * until the first non-identifier character is seen. The termination * character is unread for the future re-reading. */ PRBool nsCSSScanner::GatherIdent(nsresult& aErrorCode, PRInt32 aChar, nsString& aIdent) { if (aChar == CSS_ESCAPE) { ParseAndAppendEscape(aErrorCode, aIdent); } else if (0 < aChar) { aIdent.Append(aChar); } for (;;) { aChar = Read(aErrorCode); if (aChar < 0) break; if (aChar == CSS_ESCAPE) { ParseAndAppendEscape(aErrorCode, aIdent); } else if ((aChar > 255) || ((gLexTable[aChar] & IS_IDENT) != 0)) { aIdent.Append(PRUnichar(aChar)); } else { Unread(); break; } } return PR_TRUE; }
int txXMLParser::ExternalEntityRef(const XML_Char *aContext, const XML_Char *aBase, const XML_Char *aSystemId, const XML_Char *aPublicId) { if (aPublicId) { // not supported, this is "http://some.site.net/foo.dtd" stuff return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } nsAutoString absUrl; URIUtils::resolveHref(nsDependentString((PRUnichar*)aSystemId), nsDependentString((PRUnichar*)aBase), absUrl); istream* extInput = URIUtils::getInputStream(absUrl, mErrorString); if (!extInput) { return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } XML_Parser parent = mExpatParser; mExpatParser = XML_ExternalEntityParserCreate(mExpatParser, aContext, nsnull); if (!mExpatParser) { mExpatParser = parent; delete extInput; return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } XML_SetBase(mExpatParser, absUrl.get()); const int bufSize = 1024; char buffer[bufSize]; int result; PRBool done; do { extInput->read(buffer, bufSize); done = extInput->eof(); if (!(result = XML_Parse(mExpatParser, buffer, extInput->gcount(), done))) { createErrorString(); mErrorString.Append(PRUnichar('\n')); done = MB_TRUE; } } while (!done); delete extInput; XML_ParserFree(mExpatParser); mExpatParser = parent; return result; }
ENameValueFlag HTMLListBulletAccessible::Name(nsString &aName) { aName.Truncate(); // Native anonymous content, ARIA can't be used. Get list bullet text. nsBlockFrame* blockFrame = do_QueryFrame(mContent->GetPrimaryFrame()); if (blockFrame) { blockFrame->GetBulletText(aName); // Append space otherwise bullets are jammed up against list text. aName.Append(' '); } return eNameOK; }
static nsresult AppendErrorTextMismatch(const nsString& host, nsIX509Cert* ix509, nsINSSComponent* component, bool wantsHtml, nsString& returnedMessage) { // Prepare a default "not valid for <hostname>" string in case anything // goes wrong (or in case the certificate is not valid for any hostnames). nsAutoString notValidForHostnameString; const char16_t* params[1]; params[0] = host.get(); nsresult rv = component->PIPBundleFormatStringFromName( "certErrorMismatch", params, 1, notValidForHostnameString); if (NS_FAILED(rv)) { return rv; } notValidForHostnameString.Append('\n'); UniqueCERTCertificate nssCert(ix509->GetCert()); if (!nssCert) { returnedMessage.Append(notValidForHostnameString); return NS_OK; } nsAutoString allNames; uint32_t nameCount = GetSubjectAltNames(nssCert.get(), allNames); if (nameCount == 0) { returnedMessage.Append(notValidForHostnameString); } else if (nameCount > 1) { nsString message; rv = component->GetPIPNSSBundleString("certErrorMismatchMultiple", message); if (NS_FAILED(rv)) { return rv; } returnedMessage.Append(message); returnedMessage.AppendLiteral("\n "); returnedMessage.Append(allNames); returnedMessage.AppendLiteral(" \n"); } else if (nameCount == 1) { params[0] = allNames.get(); const char* stringID = wantsHtml ? "certErrorMismatchSingle2" : "certErrorMismatchSinglePlain"; nsAutoString formattedString; rv = component->PIPBundleFormatStringFromName(stringID, params, 1, formattedString); if (NS_FAILED(rv)) { return rv; } returnedMessage.Append(formattedString); returnedMessage.Append('\n'); } return NS_OK; }
void nsEudoraWin32::GetAccountName( const char *pSection, nsString& str) { str.Truncate(); nsCString s(pSection); if (s.LowerCaseEqualsLiteral("settings")) { str.AssignLiteral("Eudora "); str.Append(NS_ConvertASCIItoUTF16(pSection)); } else { str.AssignASCII(pSection); if (StringBeginsWith(s, NS_LITERAL_CSTRING("persona-"), nsCaseInsensitiveCStringComparator())) CopyASCIItoUTF16(Substring(s, 8), str); } }
void nsOutlookMail::MakeAddressBookNameUnique(nsString& name, nsString& list) { nsString newName; int idx = 1; newName = name; while (!IsAddressBookNameUnique(newName, list)) { newName = name; newName.Append(PRUnichar(' ')); newName.AppendInt((int32_t) idx); idx++; } name = newName; list.AppendLiteral("["); list.Append(name); list.AppendLiteral("],"); }
/** * Consume a run of "text" beginning with the current read position, * consisting of characters in the class |aClass| (which must be a * suitable argument to IsOpenCharClass) plus escape sequences. * Append the text to |aText|, after decoding escape sequences. * * Returns true if at least one character was appended to |aText|, * false otherwise. */ bool nsCSSScanner::GatherText(uint8_t aClass, nsString& aText) { // This is all of the character classes currently used with // GatherText. If you have a need to use this function with a // different class, go ahead and add it. MOZ_ASSERT(aClass == IS_STRING || aClass == IS_IDCHAR || aClass == IS_URL_CHAR, "possibly-inappropriate character class"); uint32_t start = mOffset; bool inString = aClass == IS_STRING; for (;;) { // Consume runs of unescaped characters in one go. uint32_t n = mOffset; while (n < mCount && IsOpenCharClass(mBuffer[n], aClass)) { n++; } if (n > mOffset) { aText.Append(&mBuffer[mOffset], n - mOffset); mOffset = n; } if (n == mCount) { break; } int32_t ch = Peek(); MOZ_ASSERT(!IsOpenCharClass(ch, aClass), "should not have exited the inner loop"); if (ch != '\\') { break; } if (!GatherEscape(aText, inString)) { break; } } return mOffset > start; }
leakmonJSObjectInfo::AppendSelfToString(nsString& aString) { if (!JSVAL_IS_PRIMITIVE(mJSValue)) { char buf[30]; PR_snprintf(buf, sizeof(buf), " (%p", static_cast<void*>(JSVAL_TO_OBJECT(mJSValue))); aString.Append(NS_ConvertASCIItoUTF16(buf)); if (!mFileName.IsEmpty()) { aString.Append(PRUnichar(',')); aString.Append(PRUnichar(' ')); aString.Append(mFileName); PR_snprintf(buf, sizeof(buf), ", %d-%d", mLineStart, mLineEnd); aString.Append(NS_ConvertASCIItoUTF16(buf)); } aString.Append(PRUnichar(')')); } aString.Append(PRUnichar(' ')); aString.Append(PRUnichar('=')); aString.Append(PRUnichar(' ')); aString.Append(mString); }