/*
 * 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.
 */

#include "cobalt/cssom/keyword_names.h"

namespace cobalt {
namespace cssom {

const char kAbsoluteKeywordName[] = "absolute";
const char kAlternateKeywordName[] = "alternate";
const char kAlternateReverseKeywordName[] = "alternate-reverse";
const char kAquaKeywordName[] = "aqua";
const char kAtKeywordName[] = "at";
const char kAutoKeywordName[] = "auto";
const char kBackwardsKeywordName[] = "backwards";
const char kBaselineKeywordName[] = "baseline";
const char kBlackKeywordName[] = "black";
const char kBlockKeywordName[] = "block";
const char kBlueKeywordName[] = "blue";
const char kBoldKeywordName[] = "bold";
const char kBothKeywordName[] = "both";
const char kBottomKeywordName[] = "bottom";
const char kBreakWordKeywordName[] = "break-word";
const char kCenterKeywordName[] = "center";
const char kCircleKeywordName[] = "circle";
const char kClipKeywordName[] = "clip";
const char kClosestCornerKeywordName[] = "closest-corner";
const char kClosestSideKeywordName[] = "closest-side";
const char kContainKeywordName[] = "contain";
const char kCoverKeywordName[] = "cover";
const char kCurrentColorKeywordName[] = "currentColor";
const char kCursiveKeywordName[] = "cursive";
const char kEaseInKeywordName[] = "ease-in";
const char kEaseInOutKeywordName[] = "ease-in-out";
const char kEaseKeywordName[] = "ease";
const char kEaseOutKeywordName[] = "ease-out";
const char kEllipseKeywordName[] = "ellipse";
const char kEllipsisKeywordName[] = "ellipsis";
const char kEndKeywordName[] = "end";
const char kFantasyKeywordName[] = "fantasy";
const char kFarthestCornerKeywordName[] = "farthest-corner";
const char kFarthestSideKeywordName[] = "farthest-side";
const char kFixedKeywordName[] = "fixed";
const char kForwardsKeywordName[] = "forwards";
const char kFromKeywordName[] = "from";
const char kFuchsiaKeywordName[] = "fuchsia";
const char kGrayKeywordName[] = "gray";
const char kGreenKeywordName[] = "green";
const char kHiddenKeywordName[] = "hidden";
const char kInfiniteKeywordName[] = "infinite";
const char kInheritKeywordName[] = "inherit";
const char kInitialKeywordName[] = "initial";
const char kInlineBlockKeywordName[] = "inline-block";
const char kInlineKeywordName[] = "inline";
const char kInsetKeywordName[] = "inset";
const char kItalicKeywordName[] = "italic";
const char kLeftKeywordName[] = "left";
const char kLimeKeywordName[] = "lime";
const char kLinearKeywordName[] = "linear";
const char kLineThroughKeywordName[] = "line-through";
const char kMaroonKeywordName[] = "maroon";
const char kMiddleKeywordName[] = "middle";
const char kMonospaceKeywordName[] = "monospace";
const char kNavyKeywordName[] = "navy";
const char kNoneKeywordName[] = "none";
const char kNoRepeatKeywordName[] = "no-repeat";
const char kNormalKeywordName[] = "normal";
const char kNoWrapKeywordName[] = "nowrap";
const char kObliqueKeywordName[] = "oblique";
const char kOliveKeywordName[] = "olive";
const char kPreKeywordName[] = "pre";
const char kPreLineKeywordName[] = "pre-line";
const char kPreWrapKeywordName[] = "pre-wrap";
const char kPurpleKeywordName[] = "purple";
const char kRedKeywordName[] = "red";
const char kRelativeKeywordName[] = "relative";
const char kRepeatKeywordName[] = "repeat";
const char kRepeatXKeywordName[] = "repeat-x";
const char kRepeatYKeywordName[] = "repeat-y";
const char kReverseKeywordName[] = "reverse";
const char kRightKeywordName[] = "right";
const char kSansSerifKeywordName[] = "sans-serif";
const char kSerifKeywordName[] = "serif";
const char kSilverKeywordName[] = "silver";
const char kSolidKeywordName[] = "solid";
const char kStartKeywordName[] = "start";
const char kStaticKeywordName[] = "static";
const char kStepEndKeywordName[] = "step-end";
const char kStepStartKeywordName[] = "step-start";
const char kTealKeywordName[] = "teal";
const char kToKeywordName[] = "to";
const char kTopKeywordName[] = "top";
const char kTransparentKeywordName[] = "transparent";
const char kUppercaseKeywordName[] = "uppercase";
const char kVisibleKeywordName[] = "visible";
const char kWhiteKeywordName[] = "white";
const char kYellowKeywordName[] = "yellow";

}  // namespace cssom
}  // namespace cobalt
