// Copyright 2014 The Cobalt Authors. 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_NAMES_H_
#define COBALT_CSSOM_KEYWORD_NAMES_H_

namespace cobalt {
namespace cssom {

// Lower-case names of CSS keywords used as property values.
extern const char kAbsoluteKeywordName[];
extern const char kAlternateKeywordName[];
extern const char kAlternateReverseKeywordName[];
extern const char kAquaKeywordName[];
extern const char kAtKeywordName[];
extern const char kAutoKeywordName[];
extern const char kBackwardsKeywordName[];
extern const char kBaselineKeywordName[];
extern const char kBlackKeywordName[];
extern const char kBlockKeywordName[];
extern const char kBlueKeywordName[];
extern const char kBoldKeywordName[];
extern const char kBothKeywordName[];
extern const char kBottomKeywordName[];
extern const char kBreakWordKeywordName[];
extern const char kCenterKeywordName[];
extern const char kCircleKeywordName[];
extern const char kClipKeywordName[];
extern const char kClosestCornerKeywordName[];
extern const char kClosestSideKeywordName[];
extern const char kContainKeywordName[];
extern const char kCoverKeywordName[];
extern const char kCurrentColorKeywordName[];
extern const char kCursiveKeywordName[];
extern const char kEaseInKeywordName[];
extern const char kEaseInOutKeywordName[];
extern const char kEaseKeywordName[];
extern const char kEaseOutKeywordName[];
extern const char kEllipseKeywordName[];
extern const char kEllipsisKeywordName[];
extern const char kEndKeywordName[];
extern const char kEquirectangularKeywordName[];
extern const char kFantasyKeywordName[];
extern const char kFarthestCornerKeywordName[];
extern const char kFarthestSideKeywordName[];
extern const char kFixedKeywordName[];
extern const char kForwardsKeywordName[];
extern const char kFromKeywordName[];
extern const char kFuchsiaKeywordName[];
extern const char kGrayKeywordName[];
extern const char kGreenKeywordName[];
extern const char kHiddenKeywordName[];
extern const char kInfiniteKeywordName[];
extern const char kInheritKeywordName[];
extern const char kInitialKeywordName[];
extern const char kInlineBlockKeywordName[];
extern const char kInlineKeywordName[];
extern const char kInsetKeywordName[];
extern const char kItalicKeywordName[];
extern const char kLeftKeywordName[];
extern const char kLimeKeywordName[];
extern const char kLinearKeywordName[];
extern const char kLineThroughKeywordName[];
extern const char kMaroonKeywordName[];
extern const char kMiddleKeywordName[];
extern const char kMonoscopicKeywordName[];
extern const char kMonospaceKeywordName[];
extern const char kNavyKeywordName[];
extern const char kNoneKeywordName[];
extern const char kNoRepeatKeywordName[];
extern const char kNormalKeywordName[];
extern const char kNoWrapKeywordName[];
extern const char kObliqueKeywordName[];
extern const char kOliveKeywordName[];
extern const char kPreKeywordName[];
extern const char kPreLineKeywordName[];
extern const char kPreWrapKeywordName[];
extern const char kPurpleKeywordName[];
extern const char kRectangularKeywordName[];
extern const char kRedKeywordName[];
extern const char kRelativeKeywordName[];
extern const char kRepeatKeywordName[];
extern const char kRepeatXKeywordName[];
extern const char kRepeatYKeywordName[];
extern const char kReverseKeywordName[];
extern const char kRightKeywordName[];
extern const char kSansSerifKeywordName[];
extern const char kScrollKeywordName[];
extern const char kSerifKeywordName[];
extern const char kSilverKeywordName[];
extern const char kSolidKeywordName[];
extern const char kStartKeywordName[];
extern const char kStaticKeywordName[];
extern const char kStepEndKeywordName[];
extern const char kStepStartKeywordName[];
extern const char kStereoscopicLeftRightKeywordName[];
extern const char kStereoscopicTopBottomKeywordName[];
extern const char kTealKeywordName[];
extern const char kToKeywordName[];
extern const char kTopKeywordName[];
extern const char kTransparentKeywordName[];
extern const char kUppercaseKeywordName[];
extern const char kVisibleKeywordName[];
extern const char kWhiteKeywordName[];
extern const char kYellowKeywordName[];

}  // namespace cssom
}  // namespace cobalt

#endif  // COBALT_CSSOM_KEYWORD_NAMES_H_
