| /* |
| * 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 <algorithm> |
| #include <array> |
| #include <utility> |
| |
| 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<SkUnichar, 21> 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<SkUnichar, 25> 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<std::pair<SkUnichar, SkUnichar>, 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; |
| } |