/* * Copyright 2023 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "include/private/base/SkDebug.h" #include "modules/skunicode/src/SkUnicode_hardcoded.h" #include #include #include bool SkUnicodeHardCodedCharProperties::isControl(SkUnichar utf8) { return (utf8 < ' ') || (utf8 >= 0x7f && utf8 <= 0x9f) || (utf8 >= 0x200D && utf8 <= 0x200F) || (utf8 >= 0x202A && utf8 <= 0x202E); } bool SkUnicodeHardCodedCharProperties::isWhitespace(SkUnichar unichar) { static constexpr std::array whitespaces { 0x0009, // character tabulation 0x000A, // line feed 0x000B, // line tabulation 0x000C, // form feed 0x000D, // carriage return 0x0020, // space //0x0085, // next line //0x00A0, // no-break space 0x1680, // ogham space mark 0x2000, // en quad 0x2001, // em quad 0x2002, // en space 0x2003, // em space 0x2004, // three-per-em space 0x2005, // four-per-em space 0x2006, // six-per-em space //0x2007, // figure space 0x2008, // punctuation space 0x2009, // thin space 0x200A, // hair space 0x2028, // line separator 0x2029, // paragraph separator //0x202F, // narrow no-break space 0x205F, // medium mathematical space 0x3000};// ideographic space return std::find(whitespaces.begin(), whitespaces.end(), unichar) != whitespaces.end(); } bool SkUnicodeHardCodedCharProperties::isSpace(SkUnichar unichar) { static constexpr std::array spaces { 0x0009, // character tabulation 0x000A, // line feed 0x000B, // line tabulation 0x000C, // form feed 0x000D, // carriage return 0x0020, // space 0x0085, // next line 0x00A0, // no-break space 0x1680, // ogham space mark 0x2000, // en quad 0x2001, // em quad 0x2002, // en space 0x2003, // em space 0x2004, // three-per-em space 0x2005, // four-per-em space 0x2006, // six-per-em space 0x2007, // figure space 0x2008, // punctuation space 0x2009, // thin space 0x200A, // hair space 0x2028, // line separator 0x2029, // paragraph separator 0x202F, // narrow no-break space 0x205F, // medium mathematical space 0x3000}; // ideographic space return std::find(spaces.begin(), spaces.end(), unichar) != spaces.end(); } bool SkUnicodeHardCodedCharProperties::isTabulation(SkUnichar utf8) { return utf8 == '\t'; } bool SkUnicodeHardCodedCharProperties::isHardBreak(SkUnichar utf8) { return utf8 == '\n' || utf8 == u'\u2028'; } bool SkUnicodeHardCodedCharProperties::isEmoji(SkUnichar unichar) { SkDEBUGFAIL("isEmoji Not implemented"); return false; } bool SkUnicodeHardCodedCharProperties::isEmojiComponent(SkUnichar utf8) { SkDEBUGFAIL("isEmojiComponent Not implemented"); return false; } bool SkUnicodeHardCodedCharProperties::isEmojiModifier(SkUnichar utf8) { SkDEBUGFAIL("isEmojiModifier Not implemented"); return false; } bool SkUnicodeHardCodedCharProperties::isEmojiModifierBase(SkUnichar utf8) { SkDEBUGFAIL("isEmojiModifierBase Not implemented"); return false; } bool SkUnicodeHardCodedCharProperties::isRegionalIndicator(SkUnichar unichar) { SkDEBUGFAIL("isRegionalIndicator Not implemented"); return false; } bool SkUnicodeHardCodedCharProperties::isIdeographic(SkUnichar unichar) { static constexpr std::array, 8> ranges {{ {4352, 4607}, // Hangul Jamo {11904, 42191}, // CJK_Radicals {43072, 43135}, // Phags_Pa {44032, 55215}, // Hangul_Syllables {63744, 64255}, // CJK_Compatibility_Ideographs {65072, 65103}, // CJK_Compatibility_Forms {65381, 65500}, // Katakana_Hangul_Halfwidth {131072, 196607}// Supplementary_Ideographic_Plane }}; for (auto range : ranges) { if (range.first <= unichar && range.second > unichar) { return true; } } return false; }