bool CSSTokenizer::nextCharsAreNumber() { UChar first = consume(); bool areNumber = nextCharsAreNumber(first); reconsume(first); return areNumber; }
CSSParserToken CSSTokenizer::plusOrFullStop(UChar cc) { if (nextCharsAreNumber(cc)) { reconsume(cc); return consumeNumericToken(); } return CSSParserToken(DelimiterToken, cc); }
MediaQueryToken MediaQueryTokenizer::hyphenMinus(UChar cc) { if (nextCharsAreNumber(cc)) { reconsume(cc); return consumeNumericToken(); } if (nextCharsAreIdentifier(cc)) { reconsume(cc); return consumeIdentLikeToken(); } return MediaQueryToken(DelimiterToken, cc); }
CSSParserToken CSSTokenizer::hyphenMinus(UChar cc) { if (nextCharsAreNumber(cc)) { reconsume(cc); return consumeNumericToken(); } if (m_input.peek(0) == '-' && m_input.peek(1) == '>') { consume(2); return CSSParserToken(CDCToken); } if (nextCharsAreIdentifier(cc)) { reconsume(cc); return consumeIdentLikeToken(); } return CSSParserToken(DelimiterToken, cc); }
// This method merges the following spec sections for efficiency // http://www.w3.org/TR/css3-syntax/#consume-a-number // http://www.w3.org/TR/css3-syntax/#convert-a-string-to-a-number MediaQueryToken MediaQueryTokenizer::consumeNumber() { ASSERT(nextCharsAreNumber()); NumericValueType type = IntegerValueType; double value = 0; unsigned offset = 0; int exponentSign = 1; unsigned fractionDigits; int sign = getSign(m_input, offset); unsigned long long integerPart = getInteger(m_input, offset); double fractionPart = getFraction(m_input, offset, fractionDigits); unsigned long long exponentPart = getExponent(m_input, offset, exponentSign); double exponent = pow(10, (float)exponentSign * (double)exponentPart); value = (double)sign * ((double)integerPart + fractionPart) * exponent; m_input.advance(offset); if (fractionDigits > 0) type = NumberValueType; return MediaQueryToken(NumberToken, value, type); }
// This method merges the following spec sections for efficiency // http://www.w3.org/TR/css3-syntax/#consume-a-number // http://www.w3.org/TR/css3-syntax/#convert-a-string-to-a-number CSSParserToken CSSTokenizer::consumeNumber() { ASSERT(nextCharsAreNumber()); NumericValueType type = IntegerValueType; double value = 0; unsigned offset = 0; int exponentSign = 1; NumericSign sign = getSign(m_input, offset); double integerPart = getInteger(m_input, offset); unsigned integerPartEndOffset = offset; double fractionPart = getFraction(m_input, offset); double exponentPart = getExponent(m_input, offset, exponentSign); double exponent = pow(10, (float)exponentSign * (double)exponentPart); value = ((double)integerPart + fractionPart) * exponent; if (sign == MinusSign) value = -value; m_input.advance(offset); if (offset != integerPartEndOffset) type = NumberValueType; return CSSParserToken(NumberToken, value, type, sign); }