blob: 7c88ea53a82d036cf9f7016fc3fa136a33733f5e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_SIZES_MATH_FUNCTION_PARSER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_SIZES_MATH_FUNCTION_PARSER_H_
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/css/css_math_operator.h"
#include "third_party/blink/renderer/core/css/media_values.h"
#include "third_party/blink/renderer/core/css/parser/css_parser_token.h"
#include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
struct SizesMathValue {
DISALLOW_NEW();
double value = 0;
bool is_length = false;
CSSMathOperator operation = CSSMathOperator::kInvalid;
SizesMathValue() = default;
SizesMathValue(double numeric_value, bool length)
: value(numeric_value), is_length(length) {}
explicit SizesMathValue(CSSMathOperator op) : operation(op) {}
};
class CORE_EXPORT SizesMathFunctionParser {
STACK_ALLOCATED();
public:
SizesMathFunctionParser(CSSParserTokenRange, MediaValues*);
float Result() const;
bool IsValid() const { return is_valid_; }
private:
bool CalcToReversePolishNotation(CSSParserTokenRange);
bool Calculate();
void AppendNumber(const CSSParserToken&);
bool AppendLength(const CSSParserToken&);
bool HandleComma(Vector<CSSParserToken>& stack, const CSSParserToken&);
bool HandleRightParenthesis(Vector<CSSParserToken>& stack);
bool HandleOperator(Vector<CSSParserToken>& stack, const CSSParserToken&);
void AppendOperator(const CSSParserToken&);
Vector<SizesMathValue> value_list_;
MediaValues* media_values_;
bool is_valid_;
float result_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_PARSER_SIZES_MATH_FUNCTION_PARSER_H_