#ifndef Character_h
#define Character_h
#include "platform/PlatformExport.h"
#include "platform/text/TextDirection.h"
#include "platform/text/TextPath.h"
#include "wtf/HashSet.h"
#include "wtf/text/WTFString.h"
#include "wtf/unicode/CharacterNames.h"
namespace WebCore {
class PLATFORM_EXPORT Character {
public:
static CodePath characterRangeCodePath(const LChar*, unsigned) { return SimplePath; }
static CodePath characterRangeCodePath(const UChar*, unsigned len);
static bool isCJKIdeograph(UChar32);
static bool isCJKIdeographOrSymbol(UChar32);
static unsigned expansionOpportunityCount(const LChar*, size_t length, TextDirection, bool& isAfterExpansion);
static unsigned expansionOpportunityCount(const UChar*, size_t length, TextDirection, bool& isAfterExpansion);
static bool treatAsSpace(UChar c) { return c == ' ' || c == '\t' || c == '\n' || c == noBreakSpace; }
static bool treatAsZeroWidthSpace(UChar c) { return treatAsZeroWidthSpaceInComplexScript(c) || c == 0x200c || c == 0x200d; }
static bool treatAsZeroWidthSpaceInComplexScript(UChar c) { return c < 0x20 || (c >= 0x7F && c < 0xA0) || c == softHyphen || c == zeroWidthSpace || (c >= 0x200e && c <= 0x200f) || (c >= 0x202a && c <= 0x202e) || c == zeroWidthNoBreakSpace || c == objectReplacementCharacter; }
static bool canReceiveTextEmphasis(UChar32);
static inline UChar normalizeSpaces(UChar character)
{
if (treatAsSpace(character))
return space;
if (treatAsZeroWidthSpace(character))
return zeroWidthSpace;
return character;
}
static String normalizeSpaces(const LChar*, unsigned length);
static String normalizeSpaces(const UChar*, unsigned length);
static bool isRoundingHackCharacter(UChar32 c)
{
return !(c & ~0xFF) && s_roundingHackCharacterTable[c];
}
private:
Character();
static const uint8_t s_roundingHackCharacterTable[256];
};
}
#endif