/*
 * Copyright 2016 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_BASE_UNICODE_CHARACTER_VALUES_H_
#define COBALT_BASE_UNICODE_CHARACTER_VALUES_H_

#include "third_party/icu/public/common/unicode/uchar.h"

namespace base {
namespace unicode {

// These character values come from the Unicode character table, and include the
// values used by Cobalt.
// http://unicode-table.com/en/

const UChar kActivateArabicFormShapingCharacter = 0x206D;
const UChar kActivateSymmetricSwappingCharacter = 0x206B;
const UChar kArabicLetterMarkCharacter = 0x061C;
const UChar kCarriageReturnCharacter = 0x000D;
const UChar kFirstStrongIsolateCharacter = 0x2068;
const UChar kFormFeedCharacter = 0x000C;
const UChar kHorizontalTabulationCharacter = 0x0009;
const UChar kInhibitArabicFormShapingCharacter = 0x206C;
const UChar kInhibitSymmetricSwappingCharacter = 0x206A;
const UChar kLeftToRightEmbeddingCharacter = 0x202A;
const UChar kLeftToRightIsolateCharacter = 0x2066;
const UChar kLeftToRightMarkCharacter = 0x200E;
const UChar kLeftToRightOverrideCharacter = 0x202D;
const UChar kNationalDigitShapesCharacter = 0x206E;
const UChar kNominalDigitShapesCharacter = 0x206F;
const UChar kNewLineCharacter = 0x000A;
const UChar kNoBreakSpaceCharacter = 0x00A0;
const UChar kObjectReplacementCharacter = 0xFFFC;
const UChar kPopDirectionalFormattingCharacter = 0x202C;
const UChar kPopDirectionalIsolateCharacter = 0x2069;
const UChar kRightToLeftEmbeddingCharacter = 0x202B;
const UChar kRightToLeftIsolateCharacter = 0x2067;
const UChar kRightToLeftMarkCharacter = 0x200F;
const UChar kRightToLeftOverrideCharacter = 0x202E;
const UChar kSoftHyphenCharacter = 0x00AD;
const UChar kSpaceCharacter = 0x0020;
const UChar kZeroWidthJoinerCharacter = 0x200D;
const UChar kZeroWidthNoBreakSpaceCharacter = 0xFEFF;
const UChar kZeroWidthNonJoinerCharacter = 0x200C;
const UChar kZeroWidthSpaceCharacter = 0x200B;

}  // namespace unicode
}  // namespace base

#endif  // COBALT_BASE_UNICODE_CHARACTER_VALUES_H_
