blob: 1c7220b15fe9d9d99ad1e81483523b1c2e27a4fc [file] [log] [blame]
// Copyright 2014 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef COBALT_CSSOM_KEYWORD_VALUE_H_
#define COBALT_CSSOM_KEYWORD_VALUE_H_
#include <string>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "cobalt/base/polymorphic_equatable.h"
#include "cobalt/cssom/property_value.h"
namespace cobalt {
namespace cssom {
class KeywordValue : public PropertyValue {
public:
enum Value {
// "absolute" is a value of "position" property which indicates that values
// of "top", "right", "bottom", and "left" properties specify offsets
// with respect to the box's containing block.
// https://www.w3.org/TR/CSS21/visuren.html#choose-position
kAbsolute,
// "alternate" is a possible value of the "animation-direction" property.
// https://www.w3.org/TR/2013/WD-css3-animations-20130219/#animation-direction-property
kAlternate,
// "alternate-reverse" is a possible value of the "animation-direction"
// property.
// https://www.w3.org/TR/2013/WD-css3-animations-20130219/#animation-direction-property
kAlternateReverse,
// "auto" is a value of "width" and "height" properties which indicates
// that used value of these properties depends on the values of other
// properties.
// https://www.w3.org/TR/CSS21/visudet.html#the-width-property
// https://www.w3.org/TR/CSS21/visudet.html#the-height-property
kAuto,
// "backwards" is a value of "animation-fill-mode" property which causes the
// animation results to fill in backwards around the animation's active
// duration.
// https://www.w3.org/TR/css3-animations/#animation-fill-mode-property
kBackwards,
// "middle" is the default value of "vertical-align" property that indicates
// that the content should be aligned at the baselines.
// https://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align
kBaseline,
// "block" is a value of "display" property which causes an element
// to generate a block box.
// https://www.w3.org/TR/CSS21/visuren.html#display-prop
kBlock,
// "both" is a value of "animation-fill-mode" property which causes the
// animation results to fill in forwards and backwards around the
// animation's active duration.
// https://www.w3.org/TR/css3-animations/#animation-fill-mode-property
kBoth,
// "bottom" is a value of "background-position" property that computes to
// 100% for the vertical position if one or two values are given, otherwise
// specifies the bottom edge as the origin for the next offset.
// https://www.w3.org/TR/css3-background/#the-background-position
kBottom,
// "break-word" is a value of "overflow-wrap" property which specifies to
// the user agent that an unbreakable word may be broken at an arbitrary
// point if there are no otherwise-acceptable break points in the line.
// https://www.w3.org/TR/css-text-3/#overflow-wrap-property
kBreakWord,
// "center" is a value of "text-align" property that indicates that the
// content should be aligned horizontally centered.
// https://www.w3.org/TR/css-text-3/#text-align
kCenter,
// "clip" is a value of "text-overflow" property which specifies clipping
// content that overflows its block container element. Characters may be
// only partially rendered.
// https://www.w3.org/TR/css3-ui/#propdef-text-overflow
kClip,
// "contain" is a value of "background-size" property which scales the
// image to the largest size such that both its width and its height can
// completely cover the background positioning area.
// https://www.w3.org/TR/css3-background/#the-background-size
kContain,
// "cover" is a value of "background-size" property which scales the image
// to the smallest size such that both its width and its height can fit
// inside the background positioning area.
// https://www.w3.org/TR/css3-background/#the-background-size
kCover,
// "currentColor" is the initial value of "border-color" property.
// CSS3 extends the color value to include the 'currentColor' keyword
// to allow its use with all properties that accept a <color> value.
// https://www.w3.org/TR/css3-color/#currentcolor
kCurrentColor,
// "cursive" is a value of "font_family" property which indicates a generic
// font family using a more informal script style.
// https://www.w3.org/TR/css3-fonts/#generic-font-families
kCursive,
// "ellipsis" is a value of "text-overflow" property which specifies
// rendering an ellipsis to represent clipped inline content.
// https://www.w3.org/TR/css3-ui/#propdef-text-overflow
kEllipsis,
// "end" is a value of "text-align" property that indicates that content
// is aligned at the end edge of the line box.
// https://www.w3.org/TR/css-text-3/#text-align
kEnd,
// "equirectangular" is a value of a parameter of the "map-to-mesh"
// filter function which indicates that the built-in equirectangular mesh
// should be used.
kEquirectangular,
// "fantasy" is a value of "font_family" property which indicates a generic
// font family using decorative or expressive representations of characters.
// https://www.w3.org/TR/css3-fonts/#generic-font-families
kFantasy,
// "fixed" is a value of the "position" property which indicates that
// the element is positioned and the element's containing block should be
// set to the viewport.
// https://www.w3.org/TR/CSS21/visuren.html#choose-position
kFixed,
// "forwards" is a value of "animation-fill-mode" property which causes the
// animation results to fill in forwards around the animation's active
// duration.
// https://www.w3.org/TR/css3-animations/#animation-fill-mode-property
kForwards,
// "hidden" is a value of "overflow" property which indicates that
// the content is clipped.
// https://www.w3.org/TR/CSS21/visufx.html#overflow
// "hidden" is a value of "visibility" property which indicates that
// the generated box is invisible.
// https://www.w3.org/TR/CSS21/visufx.html#propdef-visibility
kHidden,
// "infinite" is a value of "animation-iteration-count" property which
// causes the animation to loop forever.
// https://www.w3.org/TR/css3-animations/#animation-iteration-count-property
kInfinite,
// Applicable to any property, represents a cascaded value of "inherit",
// which means that, for a given element, the property takes the same
// specified value as the property for the element's parent.
// https://www.w3.org/TR/CSS21/cascade.html#value-def-inherit
kInherit,
// Applicable to any property, the "initial" keyword represents
// the specified value that is designated as the property's initial value.
// https://www.w3.org/TR/css3-values/#common-keywords
kInitial,
// "inline" is a value of "display" property which causes an element
// to generate one or more inline boxes.
// https://www.w3.org/TR/CSS21/visuren.html#display-prop
kInline,
// "inline-block" is a value of "display" property which causes an element
// to generate an inline-level block container.
// https://www.w3.org/TR/CSS21/visuren.html#display-prop
kInlineBlock,
// "left" is a value of "text-align" property that indicates that the
// content should be aligned horizontally to the left.
// https://www.w3.org/TR/css-text-3/#text-align
kLeft,
// "line-through" is a value of "text-decoration-line" property that
// indicates that the line of text has a line through the middle.
kLineThrough,
// "middle" is a value of "vertical-align" property that indicates that the
// content should be aligned vertically centered.
// https://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align
kMiddle,
// "monospace" is a value of "font_family" property which indicates a
// generic
// font family using glyphs with the same fixed width.
// https://www.w3.org/TR/css3-fonts/#generic-font-families
kMonospace,
// "monoscopic" is a value of the "cobalt-mtm" property which indicates
// that the mesh should only be rendered through one eye.
kMonoscopic,
// "none" is a value of "transform" property which means that HTML element
// is rendered as is.
// https://www.w3.org/TR/css3-transforms/#transform-property
kNone,
// "no-repeat" is a value of "background-repeat" property which means that
// image is not repeated in a specific direction.
// https://www.w3.org/TR/css3-background/#background-repeat
kNoRepeat,
// "normal" is a value of "line-height" property which tells user agents
// to set the used value to a "reasonable" value based on the font
// of the element.
// https://www.w3.org/TR/CSS21/visudet.html#line-height
kNormal,
// "nowrap" is a value of "white-space" property which tells user agents
// that white space should be collapsed as for "normal" but line breaks
// should be suppressed within text.
// https://www.w3.org/TR/css3-text/#white-space-property
kNoWrap,
// "pre" is a value of "white-space" property which tells user agents that
// white space inside the element should not be collapsed and lines should
// only be broken at preserved newline characters.
// https://www.w3.org/TR/css3-text/#white-space-property
kPre,
// "pre-line" is a value of "white-space" property which tells user agents
// that white space inside the element should be collapsed and lines should
// be broken at preserved newline characters and as necessary to fill line
// boxes, meaning that wrapping is allowed.
// https://www.w3.org/TR/css3-text/#white-space-property
kPreLine,
// "pre-wrap" is a value of "white-space" property which tells user agents
// that white space inside the element should not be collapsed and lines
// should be broken at preserved newline characters and as necessary to fill
// line boxes, meaning that wrapping is allowed.
// https://www.w3.org/TR/css3-text/#white-space-property
kPreWrap,
// "relative" is a value of "position" property which indicates that values
// of "top", "right", "bottom", and "left" properties specify offsets
// with respect to the box's in-flow position.
// https://www.w3.org/TR/CSS21/visuren.html#choose-position
kRelative,
// "repeat" is a value of "background-repeat" property which means that
// image is repeated in a specific direction.
// https://www.w3.org/TR/css3-background/#background-repeat
kRepeat,
// "reverse" is a possible value of the "animation-direction" property.
// https://www.w3.org/TR/2013/WD-css3-animations-20130219/#animation-direction-property
kReverse,
// "right" is a value of "text-align" property that indicates that the
// content should be aligned horizontally to the right.
// https://www.w3.org/TR/css-text-3/#text-align
kRight,
// "sans-serif" is a value of "font_family" property which indicates a
// generic font family using glyphs with low contrast and plain stroke
// endings (without flaring, cross stroke or other ornamentation).
// https://www.w3.org/TR/css3-fonts/#generic-font-families
kSansSerif,
// "serif" is a value of "font_family" property which indicates a generic
// font family representing the formal text style for script.
// https://www.w3.org/TR/css3-fonts/#generic-font-families
kSerif,
// "solid" is a value of "border-style" property which indicates a single
// line segment.
// https://www.w3.org/TR/css3-background/#border-style
kSolid,
// "start" is a value of "text-align" property that indicates that content
// is aligned at the start edge of the line box. This is the initial
// value for "text-align"
// https://www.w3.org/TR/css-text-3/#text-align
kStart,
// "static" is a value of "position" property which indicates that a box
// is laid out according to the normal flow.
// https://www.w3.org/TR/CSS21/visuren.html#choose-position
kStatic,
// "stereoscopic-left-right" is a value of the "cobalt-mtm" property which
// indicates that the mesh should be rendered in two views
// side-by-side.
kStereoscopicLeftRight,
// "stereoscopic-top-bottom" is a value of the "cobalt-mtm" property which
// indicates that the mesh should be rendered in two views above and below.
kStereoscopicTopBottom,
// "top" is a value of "vertical-align" property that indicates that the
// content should be aligned vertically at the top.
// https://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align
kTop,
// "uppercase" is a value of "text_transform" property that indicates that
// all characters in each word of the element's text should be put in
// uppercase.
// https://www.w3.org/TR/css3-text/#text-transform-property
kUppercase,
// "visible" is a value of "overflow" property which indicates that
// the content is not clipped.
// https://www.w3.org/TR/CSS21/visufx.html#overflow
// "visible" is a value of "visibility" property which indicates that
// the generated box is visible.
// https://www.w3.org/TR/CSS21/visufx.html#propdef-visibility
kVisible,
};
// Since keyword values do not hold additional information and some of them
// (namely "inherit" and "initial") are used extensively, for the sake of
// saving memory an explicit instantiation of this class is disallowed.
// Use factory methods below to obtain shared instances.
static const scoped_refptr<KeywordValue>& GetAbsolute();
static const scoped_refptr<KeywordValue>& GetAlternate();
static const scoped_refptr<KeywordValue>& GetAlternateReverse();
static const scoped_refptr<KeywordValue>& GetAuto();
static const scoped_refptr<KeywordValue>& GetBackwards();
static const scoped_refptr<KeywordValue>& GetBaseline();
static const scoped_refptr<KeywordValue>& GetBlock();
static const scoped_refptr<KeywordValue>& GetBoth();
static const scoped_refptr<KeywordValue>& GetBottom();
static const scoped_refptr<KeywordValue>& GetBreakWord();
static const scoped_refptr<KeywordValue>& GetCenter();
static const scoped_refptr<KeywordValue>& GetClip();
static const scoped_refptr<KeywordValue>& GetContain();
static const scoped_refptr<KeywordValue>& GetCover();
static const scoped_refptr<KeywordValue>& GetCurrentColor();
static const scoped_refptr<KeywordValue>& GetCursive();
static const scoped_refptr<KeywordValue>& GetEllipsis();
static const scoped_refptr<KeywordValue>& GetEnd();
static const scoped_refptr<KeywordValue>& GetEquirectangular();
static const scoped_refptr<KeywordValue>& GetFantasy();
static const scoped_refptr<KeywordValue>& GetForwards();
static const scoped_refptr<KeywordValue>& GetFixed();
static const scoped_refptr<KeywordValue>& GetHidden();
static const scoped_refptr<KeywordValue>& GetInfinite();
static const scoped_refptr<KeywordValue>& GetInherit();
static const scoped_refptr<KeywordValue>& GetInitial();
static const scoped_refptr<KeywordValue>& GetInline();
static const scoped_refptr<KeywordValue>& GetInlineBlock();
static const scoped_refptr<KeywordValue>& GetLeft();
static const scoped_refptr<KeywordValue>& GetLineThrough();
static const scoped_refptr<KeywordValue>& GetMiddle();
static const scoped_refptr<KeywordValue>& GetMonoscopic();
static const scoped_refptr<KeywordValue>& GetMonospace();
static const scoped_refptr<KeywordValue>& GetNone();
static const scoped_refptr<KeywordValue>& GetNoRepeat();
static const scoped_refptr<KeywordValue>& GetNormal();
static const scoped_refptr<KeywordValue>& GetNoWrap();
static const scoped_refptr<KeywordValue>& GetPre();
static const scoped_refptr<KeywordValue>& GetPreLine();
static const scoped_refptr<KeywordValue>& GetPreWrap();
static const scoped_refptr<KeywordValue>& GetRelative();
static const scoped_refptr<KeywordValue>& GetRepeat();
static const scoped_refptr<KeywordValue>& GetReverse();
static const scoped_refptr<KeywordValue>& GetRight();
static const scoped_refptr<KeywordValue>& GetSansSerif();
static const scoped_refptr<KeywordValue>& GetSerif();
static const scoped_refptr<KeywordValue>& GetSolid();
static const scoped_refptr<KeywordValue>& GetStart();
static const scoped_refptr<KeywordValue>& GetStatic();
static const scoped_refptr<KeywordValue>& GetStereoscopicLeftRight();
static const scoped_refptr<KeywordValue>& GetStereoscopicTopBottom();
static const scoped_refptr<KeywordValue>& GetTop();
static const scoped_refptr<KeywordValue>& GetUppercase();
static const scoped_refptr<KeywordValue>& GetVisible();
void Accept(PropertyValueVisitor* visitor) override;
Value value() const { return value_; }
std::string ToString() const override;
bool operator==(const KeywordValue& other) const {
return value_ == other.value_;
}
DEFINE_POLYMORPHIC_EQUATABLE_TYPE(KeywordValue);
// Implementation detail, has to be public in order to be constructible.
struct NonTrivialStaticFields;
private:
explicit KeywordValue(Value value) : value_(value) {}
~KeywordValue() override {}
const Value value_;
DISALLOW_COPY_AND_ASSIGN(KeywordValue);
};
} // namespace cssom
} // namespace cobalt
#endif // COBALT_CSSOM_KEYWORD_VALUE_H_