void GeckoMediaPluginServiceParent::LoadFromEnvironment() { MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread); const char* env = PR_GetEnv("MOZ_GMP_PATH"); if (!env || !*env) { return; } nsString allpaths; if (NS_WARN_IF(NS_FAILED(NS_CopyNativeToUnicode(nsDependentCString(env), allpaths)))) { return; } uint32_t pos = 0; while (pos < allpaths.Length()) { // Loop over multiple path entries separated by colons (*nix) or // semicolons (Windows) int32_t next = allpaths.FindChar(XPCOM_ENV_PATH_SEPARATOR[0], pos); if (next == -1) { AddOnGMPThread(nsDependentSubstring(allpaths, pos)); break; } else { AddOnGMPThread(nsDependentSubstring(allpaths, pos, next - pos)); pos = next + 1; } } mScannedPluginOnDisk = true; }
void nsMediaFragmentURIParser::Parse(nsACString& aRef) { // Create an array of possibly-invalid media fragments. nsTArray< std::pair<nsCString, nsCString> > fragments; nsCCharSeparatedTokenizer tokenizer(aRef, '&'); while (tokenizer.hasMoreTokens()) { const nsCSubstring& nv = tokenizer.nextToken(); int32_t index = nv.FindChar('='); if (index >= 0) { nsAutoCString name; nsAutoCString value; NS_UnescapeURL(StringHead(nv, index), esc_Ref | esc_AlwaysCopy, name); NS_UnescapeURL(Substring(nv, index + 1, nv.Length()), esc_Ref | esc_AlwaysCopy, value); fragments.AppendElement(make_pair(name, value)); } } // Parse the media fragment values. bool gotTemporal = false, gotSpatial = false; for (int i = fragments.Length() - 1 ; i >= 0 ; --i) { if (gotTemporal && gotSpatial) { // We've got one of each possible type. No need to look at the rest. break; } else if (!gotTemporal && fragments[i].first.EqualsLiteral("t")) { nsAutoString value = NS_ConvertUTF8toUTF16(fragments[i].second); gotTemporal = ParseNPT(nsDependentSubstring(value, 0)); } else if (!gotSpatial && fragments[i].first.EqualsLiteral("xywh")) { nsAutoString value = NS_ConvertUTF8toUTF16(fragments[i].second); gotSpatial = ParseXYWH(nsDependentSubstring(value, 0)); } } }
nsIAtom* nsHtml5Portability::newLocalNameFromBuffer(PRUnichar* buf, int32_t offset, int32_t length, nsHtml5AtomTable* interner) { NS_ASSERTION(!offset, "The offset should always be zero here."); NS_ASSERTION(interner, "Didn't get an atom service."); return interner->GetAtom(nsDependentSubstring(buf, buf + length)); }
// static nsresult XMLUtils::splitExpatName(const PRUnichar *aExpatName, nsIAtom **aPrefix, nsIAtom **aLocalName, PRInt32* aNameSpaceID) { /** * Expat can send the following: * localName * namespaceURI<separator>localName * namespaceURI<separator>localName<separator>prefix */ const PRUnichar *uriEnd = nsnull; const PRUnichar *nameEnd = nsnull; const PRUnichar *pos; for (pos = aExpatName; *pos; ++pos) { if (*pos == kExpatSeparatorChar) { if (uriEnd) { nameEnd = pos; } else { uriEnd = pos; } } } const PRUnichar *nameStart; if (uriEnd) { *aNameSpaceID = txNamespaceManager::getNamespaceID(nsDependentSubstring(aExpatName, uriEnd)); if (*aNameSpaceID == kNameSpaceID_Unknown) { return NS_ERROR_FAILURE; } nameStart = (uriEnd + 1); if (nameEnd) { const PRUnichar *prefixStart = nameEnd + 1; *aPrefix = NS_NewAtom(NS_ConvertUTF16toUTF8(prefixStart, pos - prefixStart)); if (!*aPrefix) { return NS_ERROR_OUT_OF_MEMORY; } } else { nameEnd = pos; *aPrefix = nsnull; } } else { *aNameSpaceID = kNameSpaceID_None; nameStart = aExpatName; nameEnd = pos; *aPrefix = nsnull; } *aLocalName = NS_NewAtom(NS_ConvertUTF16toUTF8(nameStart, nameEnd - nameStart)); return *aLocalName ? NS_OK : NS_ERROR_OUT_OF_MEMORY; }
nsDependentSubstring nsCSSScanner::GetCurrentLine() const { uint32_t end = mTokenOffset; while (end < mCount && !IsVertSpace(mBuffer[end])) { end++; } return nsDependentSubstring(mBuffer + mTokenLineOffset, mBuffer + end); }
/* static */ const nsDependentSubstring nsMathMLOperators::TransformVariantChar(const PRUnichar& aChar, eMATHVARIANT aVariant) { if (!gInitialized) { InitGlobals(); } if (gInvariantCharArray) { nsString list = gInvariantCharArray->ElementAt(aVariant); PRInt32 index = list.FindChar(aChar); // BMP characters are at offset 3*j if (index != kNotFound && index % 3 == 0 && list.Length() - index >= 2 ) { // The style-invariant character is the next character // (and list should contain padding if the next character is in the BMP). ++index; PRUint32 len = NS_IS_HIGH_SURROGATE(list.CharAt(index)) ? 2 : 1; return nsDependentSubstring(list, index, len); } } return nsDependentSubstring(&aChar, &aChar + 1); }
const nsDependentSubstring IDRefsIterator::NextID() { for (; mCurrIdx < mIDs.Length(); mCurrIdx++) { if (!NS_IsAsciiWhitespace(mIDs[mCurrIdx])) break; } if (mCurrIdx >= mIDs.Length()) return nsDependentSubstring(); nsAString::index_type idStartIdx = mCurrIdx; while (++mCurrIdx < mIDs.Length()) { if (NS_IsAsciiWhitespace(mIDs[mCurrIdx])) break; } return Substring(mIDs, idStartIdx, mCurrIdx++ - idStartIdx); }
// static void TextEditRules::HandleNewLines(nsString& aString, int32_t aNewlineHandling) { if (aNewlineHandling < 0) { int32_t caretStyle; TextEditor::GetDefaultEditorPrefs(aNewlineHandling, caretStyle); } switch(aNewlineHandling) { case nsIPlaintextEditor::eNewlinesReplaceWithSpaces: // Strip trailing newlines first so we don't wind up with trailing spaces aString.Trim(CRLF, false, true); aString.ReplaceChar(CRLF, ' '); break; case nsIPlaintextEditor::eNewlinesStrip: aString.StripCRLF(); break; case nsIPlaintextEditor::eNewlinesPasteToFirst: default: { int32_t firstCRLF = aString.FindCharInSet(CRLF); // we get first *non-empty* line. int32_t offset = 0; while (firstCRLF == offset) { offset++; firstCRLF = aString.FindCharInSet(CRLF, offset); } if (firstCRLF > 0) { aString.Truncate(firstCRLF); } if (offset > 0) { aString.Cut(0, offset); } break; } case nsIPlaintextEditor::eNewlinesReplaceWithCommas: aString.Trim(CRLF, true, true); aString.ReplaceChar(CRLF, ','); break; case nsIPlaintextEditor::eNewlinesStripSurroundingWhitespace: { nsAutoString result; uint32_t offset = 0; while (offset < aString.Length()) { int32_t nextCRLF = aString.FindCharInSet(CRLF, offset); if (nextCRLF < 0) { result.Append(nsDependentSubstring(aString, offset)); break; } uint32_t wsBegin = nextCRLF; // look backwards for the first non-whitespace char while (wsBegin > offset && NS_IS_SPACE(aString[wsBegin - 1])) { --wsBegin; } result.Append(nsDependentSubstring(aString, offset, wsBegin - offset)); offset = nextCRLF + 1; while (offset < aString.Length() && NS_IS_SPACE(aString[offset])) { ++offset; } } aString = result; break; } case nsIPlaintextEditor::eNewlinesPasteIntact: // even if we're pasting newlines, don't paste leading/trailing ones aString.Trim(CRLF, true, true); break; } }
bool nsHtml5Portability::localEqualsBuffer(nsIAtom* local, PRUnichar* buf, int32_t offset, int32_t length) { return local->Equals(nsDependentSubstring(buf + offset, buf + offset + length)); }
bool nsTextAddress::GetField(const nsAString &aLine, int32_t index, nsString &field, char16_t delim) { bool result = false; int32_t pos = 0; int32_t maxLen = aLine.Length(); char16_t tab = char16_t('\t'); char16_t doubleQuote = char16_t('"'); field.Truncate(); if (delim == tab) tab = 0; while (index && (pos < maxLen)) { while (((aLine[pos] == char16_t(' ')) || (aLine[pos] == tab)) && (pos < maxLen)) { pos++; } if (pos >= maxLen) break; if (aLine[pos] == doubleQuote) { do { pos++; if (((pos + 1) < maxLen) && (aLine[pos] == doubleQuote) && (aLine[pos + 1] == doubleQuote)) { pos += 2; } } while ((pos < maxLen) && (aLine[pos] != doubleQuote)); if (pos < maxLen) pos++; } if (pos >= maxLen) break; while ((pos < maxLen) && (aLine[pos] != delim)) pos++; if (pos >= maxLen) break; index--; pos++; } if (pos >= maxLen) return result; result = true; while ((pos < maxLen) && ((aLine[pos] == ' ') || (aLine[pos] == tab))) pos++; int32_t fLen = 0; int32_t startPos = pos; bool quoted = false; if (aLine[pos] == '"') { startPos++; fLen = -1; do { pos++; fLen++; if (((pos + 1) < maxLen) && (aLine[pos] == doubleQuote) && (aLine[pos + 1] == doubleQuote)) { quoted = true; pos += 2; fLen += 2; } } while ((pos < maxLen) && (aLine[pos] != doubleQuote)); } else { while ((pos < maxLen) && (aLine[pos] != delim)) { pos++; fLen++; } } if (!fLen) { return result; } field.Append(nsDependentSubstring(aLine, startPos, fLen)); field.Trim(kWhitespace); if (quoted) { int32_t offset = field.Find("\"\""); while (offset != -1) { field.Cut(offset, 1); offset = MsgFind(field, "\"\"", false, offset + 1); } } return result; }