// 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 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_
