internal void SetDefaultNamespaceOnSelector(nsCSSSelector aSelector) { if (mNameSpaceMap != null) { aSelector.SetNameSpace(mNameSpaceMap.FindNameSpaceID(null)); } else { aSelector.SetNameSpace(nsNameSpace.Unknown); // wildcard } }
// // Parse a type element selector or a universal selector // namespace|type or namespace|* or *|* or * // internal nsSelectorParsingStatus ParseTypeOrUniversalSelector(ref int32_t aDataMask, nsCSSSelector aSelector, bool aIsNegated) { string buffer; if (mToken.IsSymbol('*')) { // universal element selector, or universal namespace if (ExpectSymbol('|', false)) { // was namespace aDataMask |= SEL_MASK_NSPACE; aSelector.SetNameSpace(nsNameSpace.Unknown); // namespace wildcard if (! GetToken(false)) { { if (!mSuppressErrors) mReporter.ReportUnexpected("PETypeSelEOF"); }; return nsSelectorParsingStatus.Error; } if (nsCSSTokenType.Ident == mToken.mType) { // element name aDataMask |= SEL_MASK_ELEM; aSelector.SetTag(mToken.mIdentStr); } else if (mToken.IsSymbol('*')) { // universal selector aDataMask |= SEL_MASK_ELEM; // don't set tag } else { { if (!mSuppressErrors) mReporter.ReportUnexpected("PETypeSelNotType", mToken); }; UngetToken(); return nsSelectorParsingStatus.Error; } } else { // was universal element selector SetDefaultNamespaceOnSelector(aSelector); aDataMask |= SEL_MASK_ELEM; // don't set any tag in the selector } if (! GetToken(false)) { // premature eof is ok (here!) return nsSelectorParsingStatus.Done; } } else if (nsCSSTokenType.Ident == mToken.mType) { // element name or namespace name buffer = mToken.mIdentStr; // hang on to ident if (ExpectSymbol('|', false)) { // was namespace aDataMask |= SEL_MASK_NSPACE; int32_t nameSpaceID = GetNamespaceIdForPrefix(buffer); if (nameSpaceID == nsNameSpace.Unknown) { return nsSelectorParsingStatus.Error; } aSelector.SetNameSpace(nameSpaceID); if (! GetToken(false)) { { if (!mSuppressErrors) mReporter.ReportUnexpected("PETypeSelEOF"); }; return nsSelectorParsingStatus.Error; } if (nsCSSTokenType.Ident == mToken.mType) { // element name aDataMask |= SEL_MASK_ELEM; aSelector.SetTag(mToken.mIdentStr); } else if (mToken.IsSymbol('*')) { // universal selector aDataMask |= SEL_MASK_ELEM; // don't set tag } else { { if (!mSuppressErrors) mReporter.ReportUnexpected("PETypeSelNotType", mToken); }; UngetToken(); return nsSelectorParsingStatus.Error; } } else { // was element name SetDefaultNamespaceOnSelector(aSelector); aSelector.SetTag(buffer); aDataMask |= SEL_MASK_ELEM; } if (! GetToken(false)) { // premature eof is ok (here!) return nsSelectorParsingStatus.Done; } } else if (mToken.IsSymbol('|')) { // No namespace aDataMask |= SEL_MASK_NSPACE; aSelector.SetNameSpace(nsNameSpace.None); // explicit NO namespace // get mandatory tag if (! GetToken(false)) { { if (!mSuppressErrors) mReporter.ReportUnexpected("PETypeSelEOF"); }; return nsSelectorParsingStatus.Error; } if (nsCSSTokenType.Ident == mToken.mType) { // element name aDataMask |= SEL_MASK_ELEM; aSelector.SetTag(mToken.mIdentStr); } else if (mToken.IsSymbol('*')) { // universal selector aDataMask |= SEL_MASK_ELEM; // don't set tag } else { { if (!mSuppressErrors) mReporter.ReportUnexpected("PETypeSelNotType", mToken); }; UngetToken(); return nsSelectorParsingStatus.Error; } if (! GetToken(false)) { // premature eof is ok (here!) return nsSelectorParsingStatus.Done; } } else { SetDefaultNamespaceOnSelector(aSelector); } if (aIsNegated) { // restore last token read in case of a negated type selector UngetToken(); } return nsSelectorParsingStatus.Continue; }