/** * Scan an Ident token. This also handles Function and URL tokens, * both of which begin indistinguishably from an identifier. It can * produce a Symbol token when an apparent identifier actually led * into an invalid escape sequence. */ bool nsCSSScanner::ScanIdent(nsCSSToken& aToken) { if (MOZ_UNLIKELY(!GatherText(IS_IDCHAR, aToken.mIdent))) { MOZ_ASSERT(Peek() == '\\', "unexpected IsIdentStart character that did not begin an ident"); aToken.mSymbol = Peek(); Advance(); return true; } if (MOZ_LIKELY(Peek() != '(')) { aToken.mType = eCSSToken_Ident; return true; } Advance(); aToken.mType = eCSSToken_Function; if (aToken.mIdent.LowerCaseEqualsLiteral("url")) { NextURL(aToken); } else if (aToken.mIdent.LowerCaseEqualsLiteral("var")) { mSeenVariableReference = true; } return true; }
PRBool nsCSSScanner::ParseIdent(PRInt32 aChar, nsCSSToken& aToken) { nsString& ident = aToken.mIdent; ident.SetLength(0); if (!GatherIdent(aChar, ident)) { return PR_FALSE; } nsCSSTokenType tokenType = eCSSToken_Ident; // look for functions (ie: "ident(") if (Peek() == PRUnichar('(')) { Read(); tokenType = eCSSToken_Function; if (ident.LowerCaseEqualsLiteral("url")) { NextURL(aToken); // ignore return value, since *we* read something return PR_TRUE; } } aToken.mType = tokenType; return PR_TRUE; }