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