diff --git a/third_party/WebKit/Source/platform/fonts/Character.cpp b/third_party/WebKit/Source/platform/fonts/Character.cpp index fed39eb..26161793 100644 --- a/third_party/WebKit/Source/platform/fonts/Character.cpp +++ b/third_party/WebKit/Source/platform/fonts/Character.cpp @@ -35,14 +35,45 @@ #include <algorithm> #include <unicode/uobject.h> #include <unicode/uscript.h> + +#if defined(USING_SYSTEM_ICU) +#include "CharacterData.h" +#include <unicode/uniset.h> +#else #define MUTEX_H // Prevent compile failure of utrie2.h on Windows #include <utrie2.h> +#endif using namespace WTF; using namespace Unicode; namespace blink { +#if defined(USING_SYSTEM_ICU) +static icu::UnicodeSet* createUnicodeSet( + const UChar32* characters, size_t charactersCount, + const UChar32* ranges, size_t rangesCount) +{ + icu::UnicodeSet* unicodeSet = new icu::UnicodeSet(); + for (size_t i = 0; i < charactersCount; i++) + unicodeSet->add(characters[i]); + for (size_t i = 0; i < rangesCount; i += 2) + unicodeSet->add(ranges[i], ranges[i + 1]); + unicodeSet->freeze(); + return unicodeSet; +} + +#define CREATE_UNICODE_SET(name) \ + createUnicodeSet( \ + name##Array, WTF_ARRAY_LENGTH(name##Array), \ + name##Ranges, WTF_ARRAY_LENGTH(name##Ranges)) + +#define RETURN_HAS_PROPERTY(c, name) \ + static icu::UnicodeSet* unicodeSet = nullptr; \ + if (!unicodeSet) \ + unicodeSet = CREATE_UNICODE_SET(name); \ + return unicodeSet->contains(c); +#else // Freezed trie tree, see CharacterDataGenerator.cpp. extern int32_t serializedCharacterDataSize; extern uint8_t serializedCharacterData[]; @@ -59,7 +90,7 @@ return trie; } -bool Character::hasProperty(UChar32 c, CharacterProperty property) +static bool hasProperty(UChar32 c, CharacterProperty property) { static UTrie2* trie = nullptr; if (!trie) @@ -67,6 +98,10 @@ return UTRIE2_GET16(trie, c) & static_cast<CharacterPropertyType>(property); } + +#define RETURN_HAS_PROPERTY(c, name) \ + return hasProperty(c, CharacterProperty::name); +#endif // Takes a flattened list of closed intervals template <class T, size_t size> @@ -184,7 +219,7 @@ bool Character::isUprightInMixedVertical(UChar32 character) { - return hasProperty(character, CharacterProperty::isUprightInMixedVertical); + RETURN_HAS_PROPERTY(character, isUprightInMixedVertical) } bool Character::isCJKIdeographOrSymbol(UChar32 c) @@ -193,7 +228,7 @@ if (c < 0x2C7) return false; - return hasProperty(c, CharacterProperty::isCJKIdeographOrSymbol); + RETURN_HAS_PROPERTY(c, isCJKIdeographOrSymbol) } unsigned Character::expansionOpportunityCount(const LChar* characters, size_t length, TextDirection direction, bool& isAfterExpansion, const TextJustify textJustify) diff --git a/third_party/WebKit/Source/platform/fonts/Character.h b/third_party/WebKit/Source/platform/fonts/Character.h index af407a6..fd0b52d 100644 --- a/third_party/WebKit/Source/platform/fonts/Character.h +++ b/third_party/WebKit/Source/platform/fonts/Character.h @@ -137,9 +137,6 @@ static String normalizeSpaces(const UChar*, unsigned length); static bool isCommonOrInheritedScript(UChar32); - -private: - static bool hasProperty(UChar32, CharacterProperty); }; } // namespace blink diff --git a/third_party/WebKit/Source/platform/fonts/CharacterData.h b/third_party/WebKit/Source/platform/fonts/CharacterData.h new file mode 100644 index 0000000..a9c8f21 --- /dev/null +++ b/third_party/WebKit/Source/platform/fonts/CharacterData.h @@ -0,0 +1,224 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CharacterData_h +#define CharacterData_h + +#include <unicode/uobject.h> + +namespace blink { + +static const UChar32 isCJKIdeographOrSymbolArray[] = { + // 0x2C7 Caron, Mandarin Chinese 3rd Tone + 0x2C7, + // 0x2CA Modifier Letter Acute Accent, Mandarin Chinese 2nd Tone + 0x2CA, + // 0x2CB Modifier Letter Grave Access, Mandarin Chinese 4th Tone + 0x2CB, + // 0x2D9 Dot Above, Mandarin Chinese 5th Tone + 0x2D9, + 0x2020, 0x2021, 0x2030, 0x203B, 0x203C, 0x2042, 0x2047, 0x2048, 0x2049, 0x2051, + 0x20DD, 0x20DE, 0x2100, 0x2103, 0x2105, 0x2109, 0x210A, 0x2113, 0x2116, 0x2121, + 0x212B, 0x213B, 0x2150, 0x2151, 0x2152, 0x217F, 0x2189, 0x2307, 0x2312, 0x23CE, + 0x2423, 0x25A0, 0x25A1, 0x25A2, 0x25AA, 0x25AB, 0x25B1, 0x25B2, 0x25B3, 0x25B6, + 0x25B7, 0x25BC, 0x25BD, 0x25C0, 0x25C1, 0x25C6, 0x25C7, 0x25C9, 0x25CB, 0x25CC, + 0x25EF, 0x2605, 0x2606, 0x260E, 0x2616, 0x2617, 0x2640, 0x2642, 0x26A0, 0x26BD, + 0x26BE, 0x2713, 0x271A, 0x273F, 0x2740, 0x2756, 0x2B1A, 0xFE10, 0xFE11, 0xFE12, + 0xFE19, 0xFF1D, + // Emoji. + 0x1F100 +}; + +static const UChar32 isCJKIdeographOrSymbolRanges[] = { + // cjkIdeographRanges + // CJK Radicals Supplement and Kangxi Radicals. + 0x2E80, 0x2FDF, + // CJK Strokes. + 0x31C0, 0x31EF, + // CJK Unified Ideographs Extension A. + 0x3400, 0x4DBF, + // The basic CJK Unified Ideographs block. + 0x4E00, 0x9FFF, + // CJK Compatibility Ideographs. + 0xF900, 0xFAFF, + // CJK Unified Ideographs Extension B. + 0x20000, 0x2A6DF, + // CJK Unified Ideographs Extension C. + // CJK Unified Ideographs Extension D. + 0x2A700, 0x2B81F, + // CJK Compatibility Ideographs Supplement. + 0x2F800, 0x2FA1F, + + // cjkSymbolRanges + 0x2156, 0x215A, + 0x2160, 0x216B, + 0x2170, 0x217B, + 0x23BE, 0x23CC, + 0x2460, 0x2492, + 0x249C, 0x24FF, + 0x25CE, 0x25D3, + 0x25E2, 0x25E6, + 0x2600, 0x2603, + 0x2660, 0x266F, + // Emoji HEAVY HEART EXCLAMATION MARK ORNAMENT..HEAVY BLACK HEART + // Needed in order not to break Emoji heart-kiss sequences in + // CachingWordShapeIterator. + // cmp. http://www.unicode.org/emoji/charts/emoji-zwj-sequences.html + 0x2763, 0x2764, + 0x2672, 0x267D, + 0x2776, 0x277F, + // Ideographic Description Characters, with CJK Symbols and Punctuation, + // excluding 0x3030. + // Then Hiragana 0x3040 .. 0x309F, Katakana 0x30A0 .. 0x30FF, Bopomofo + // 0x3100 .. 0x312F + 0x2FF0, 0x302F, + 0x3031, 0x312F, + // More Bopomofo and Bopomofo Extended 0x31A0 .. 0x31BF + 0x3190, 0x31BF, + // Enclosed CJK Letters and Months (0x3200 .. 0x32FF). + // CJK Compatibility (0x3300 .. 0x33FF). + 0x3200, 0x33FF, + 0xF860, 0xF862, + // CJK Compatibility Forms. + 0xFE30, 0xFE4F, + // Halfwidth and Fullwidth Forms + // Usually only used in CJK + 0xFF00, 0xFF0C, + 0xFF0E, 0xFF1A, + 0xFF1F, 0xFFEF, + // Emoji. + 0x1F110, 0x1F129, + 0x1F130, 0x1F149, + 0x1F150, 0x1F169, + 0x1F170, 0x1F189, + 0x1F200, 0x1F6FF +}; + +// Individual codepoints needed for Unicode vertical text layout according to +// http://www.unicode.org/reports/tr50/ +// Taken from the corresponding data file: +// http://www.unicode.org/Public/vertical/revision-13/VerticalOrientation-13.txt +static const UChar32 isUprightInMixedVerticalArray[] = { + 0x000A7, + 0x000A9, + 0x000AE, + 0x000B1, + 0x000D7, + 0x000F7 +}; + +static const UChar32 isUprightInMixedVerticalRanges[] = { + 0x000BC, 0x000BE, + // Spacing Modifier Letters (Part of) + 0x002EA, 0x002EB, + // Hangul Jamo + 0x01100, 0x011FF, + // Unified Canadian Aboriginal Syllabics + 0x01401, 0x0167F, + // Unified Canadian Aboriginal Syllabics Extended + 0x018B0, 0x018FF, + // General Punctuation (Part of) + 0x02016, 0x02016, + 0x02020, 0x02021, + 0x02030, 0x02031, + 0x0203B, 0x0203C, + 0x02042, 0x02042, + 0x02047, 0x02049, + 0x02051, 0x02051, + 0x02065, 0x02069, + // Combining Diacritical Marks for Symbols (Part of) + 0x020DD, 0x020E0, + 0x020E2, 0x020E4, + // Letterlike Symbols (Part of)/Number Forms + 0x02100, 0x02101, + 0x02103, 0x02109, + 0x0210F, 0x0210F, + 0x02113, 0x02114, + 0x02116, 0x02117, + 0x0211E, 0x02123, + 0x02125, 0x02125, + 0x02127, 0x02127, + 0x02129, 0x02129, + 0x0212E, 0x0212E, + 0x02135, 0x0213F, + 0x02145, 0x0214A, + 0x0214C, 0x0214D, + 0x0214F, 0x0218F, + // Mathematical Operators (Part of) + 0x0221E, 0x0221E, + 0x02234, 0x02235, + // Miscellaneous Technical (Part of) + 0x02300, 0x02307, + 0x0230C, 0x0231F, + 0x02324, 0x0232B, + 0x0237D, 0x0239A, + 0x023BE, 0x023CD, + 0x023CF, 0x023CF, + 0x023D1, 0x023DB, + 0x023E2, 0x02422, + // Control Pictures (Part of)/Optical Character Recognition/Enclosed + // Alphanumerics + 0x02424, 0x024FF, + // Geometric Shapes/Miscellaneous Symbols (Part of) + 0x025A0, 0x02619, + 0x02620, 0x02767, + 0x02776, 0x02793, + // Miscellaneous Symbols and Arrows (Part of) + 0x02B12, 0x02B2F, + 0x02B50, 0x02B59, + 0x02BB8, 0x02BFF, + // Common CJK + 0x02E80, 0x0A4CF, + // Hangul Jamo Extended-A + 0x0A960, 0x0A97F, + // Hangul Syllables/Hangul Jamo Extended-B + 0x0AC00, 0x0D7FF, + // Private Use Area/CJK Compatibility Ideographs + 0x0E000, 0x0FAFF, + // Vertical Forms + 0x0FE10, 0x0FE1F, + // CJK Compatibility Forms (Part of) + 0x0FE30, 0x0FE48, + // Small Form Variants (Part of) + 0x0FE50, 0x0FE57, + 0x0FE59, 0x0FE62, + 0x0FE67, 0x0FE6F, + // Halfwidth and Fullwidth Forms + 0x0FF01, 0x0FF0C, + 0x0FF0E, 0x0FF1B, + 0x0FF1F, 0x0FF60, + 0x0FFE0, 0x0FFE7, + // Specials (Part of) + 0x0FFF0, 0x0FFF8, + 0x0FFFC, 0x0FFFD, + // Meroitic Hieroglyphs + 0x10980, 0x1099F, + // Siddham + 0x11580, 0x115FF, + // Egyptian Hieroglyphs + 0x13000, 0x1342F, + // Kana Supplement + 0x1B000, 0x1B0FF, + // Byzantine Musical Symbols/Musical Symbols + 0x1D000, 0x1D1FF, + // Tai Xuan Jing Symbols/Counting Rod Numerals + 0x1D300, 0x1D37F, + // Mahjong Tiles/Domino Tiles/Playing Cards/Enclosed Alphanumeric Supplement + // Enclosed Ideographic Supplement/Enclosed Ideographic Supplement + // Emoticons/Ornamental Dingbats/Transport and Map Symbols/Alchemical + // Symbols Alchemical Symbols + 0x1F000, 0x1F7FF, + // CJK Unified Ideographs Extension B/C/D + // CJK Compatibility Ideographs Supplement + 0x20000, 0x2FFFD, + 0x30000, 0x3FFFD, + // Supplementary Private Use Area-A + 0xF0000, 0xFFFFD, + // Supplementary Private Use Area-B + 0x100000, 0x10FFFD, +}; + +} // namespace blink + +#endif diff --git a/third_party/WebKit/Source/platform/fonts/CharacterDataGenerator.cpp b/third_party/WebKit/Source/platform/fonts/CharacterDataGenerator.cpp index a1c5401..a6c6ca3 100644 --- a/third_party/WebKit/Source/platform/fonts/CharacterDataGenerator.cpp +++ b/third_party/WebKit/Source/platform/fonts/CharacterDataGenerator.cpp @@ -2,228 +2,27 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "CharacterProperty.h" +#include "CharacterData.h" +#include "CharacterProperty.h" #include <cassert> #include <cstring> #include <stdio.h> -#include <unicode/uobject.h> +#if !defined(USING_SYSTEM_ICU) #define MUTEX_H // Prevent compile failure of utrie2.h on Windows #include <utrie2.h> +#endif + +#if defined(USING_SYSTEM_ICU) +static void generate(FILE*) +{ +} +#else + +using namespace blink; const UChar32 kMaxCodepoint = 0x10FFFF; -using CharacterProperty = blink::CharacterProperty; #define ARRAY_LENGTH(a) (sizeof(a) / sizeof((a)[0])) - -static const UChar32 cjkIsolatedSymbolsArray[] = { - // 0x2C7 Caron, Mandarin Chinese 3rd Tone - 0x2C7, - // 0x2CA Modifier Letter Acute Accent, Mandarin Chinese 2nd Tone - 0x2CA, - // 0x2CB Modifier Letter Grave Access, Mandarin Chinese 4th Tone - 0x2CB, - // 0x2D9 Dot Above, Mandarin Chinese 5th Tone - 0x2D9, - 0x2020, 0x2021, 0x2030, 0x203B, 0x203C, 0x2042, 0x2047, 0x2048, 0x2049, 0x2051, - 0x20DD, 0x20DE, 0x2100, 0x2103, 0x2105, 0x2109, 0x210A, 0x2113, 0x2116, 0x2121, - 0x212B, 0x213B, 0x2150, 0x2151, 0x2152, 0x217F, 0x2189, 0x2307, 0x2312, 0x23CE, - 0x2423, 0x25A0, 0x25A1, 0x25A2, 0x25AA, 0x25AB, 0x25B1, 0x25B2, 0x25B3, 0x25B6, - 0x25B7, 0x25BC, 0x25BD, 0x25C0, 0x25C1, 0x25C6, 0x25C7, 0x25C9, 0x25CB, 0x25CC, - 0x25EF, 0x2605, 0x2606, 0x260E, 0x2616, 0x2617, 0x2640, 0x2642, 0x26A0, 0x26BD, - 0x26BE, 0x2713, 0x271A, 0x273F, 0x2740, 0x2756, 0x2B1A, 0xFE10, 0xFE11, 0xFE12, - 0xFE19, 0xFF1D, - // Emoji. - 0x1F100 -}; - -static const UChar32 cjkIdeographRanges[] = { - // CJK Radicals Supplement and Kangxi Radicals. - 0x2E80, 0x2FDF, - // CJK Strokes. - 0x31C0, 0x31EF, - // CJK Unified Ideographs Extension A. - 0x3400, 0x4DBF, - // The basic CJK Unified Ideographs block. - 0x4E00, 0x9FFF, - // CJK Compatibility Ideographs. - 0xF900, 0xFAFF, - // CJK Unified Ideographs Extension B. - 0x20000, 0x2A6DF, - // CJK Unified Ideographs Extension C. - // CJK Unified Ideographs Extension D. - 0x2A700, 0x2B81F, - // CJK Compatibility Ideographs Supplement. - 0x2F800, 0x2FA1F -}; - -static const UChar32 cjkSymbolRanges[] = { - 0x2156, 0x215A, - 0x2160, 0x216B, - 0x2170, 0x217B, - 0x23BE, 0x23CC, - 0x2460, 0x2492, - 0x249C, 0x24FF, - 0x25CE, 0x25D3, - 0x25E2, 0x25E6, - 0x2600, 0x2603, - 0x2660, 0x266F, - // Emoji HEAVY HEART EXCLAMATION MARK ORNAMENT..HEAVY BLACK HEART - // Needed in order not to break Emoji heart-kiss sequences in - // CachingWordShapeIterator. - // cmp. http://www.unicode.org/emoji/charts/emoji-zwj-sequences.html - 0x2763, 0x2764, - 0x2672, 0x267D, - 0x2776, 0x277F, - // Ideographic Description Characters, with CJK Symbols and Punctuation, - // excluding 0x3030. - // Then Hiragana 0x3040 .. 0x309F, Katakana 0x30A0 .. 0x30FF, Bopomofo - // 0x3100 .. 0x312F - 0x2FF0, 0x302F, - 0x3031, 0x312F, - // More Bopomofo and Bopomofo Extended 0x31A0 .. 0x31BF - 0x3190, 0x31BF, - // Enclosed CJK Letters and Months (0x3200 .. 0x32FF). - // CJK Compatibility (0x3300 .. 0x33FF). - 0x3200, 0x33FF, - 0xF860, 0xF862, - // CJK Compatibility Forms. - 0xFE30, 0xFE4F, - // Halfwidth and Fullwidth Forms - // Usually only used in CJK - 0xFF00, 0xFF0C, - 0xFF0E, 0xFF1A, - 0xFF1F, 0xFFEF, - // Emoji. - 0x1F110, 0x1F129, - 0x1F130, 0x1F149, - 0x1F150, 0x1F169, - 0x1F170, 0x1F189, - 0x1F200, 0x1F6FF -}; - -// Individual codepoints needed for Unicode vertical text layout according to -// http://www.unicode.org/reports/tr50/ -// Taken from the corresponding data file: -// http://www.unicode.org/Public/vertical/revision-13/VerticalOrientation-13.txt -static const UChar32 isUprightInMixedVerticalArray[] = { - 0x000A7, - 0x000A9, - 0x000AE, - 0x000B1, - 0x000D7, - 0x000F7 -}; - -static const UChar32 isUprightInMixedVerticalRanges[] = { - 0x000BC, 0x000BE, - // Spacing Modifier Letters (Part of) - 0x002EA, 0x002EB, - // Hangul Jamo - 0x01100, 0x011FF, - // Unified Canadian Aboriginal Syllabics - 0x01401, 0x0167F, - // Unified Canadian Aboriginal Syllabics Extended - 0x018B0, 0x018FF, - // General Punctuation (Part of) - 0x02016, 0x02016, - 0x02020, 0x02021, - 0x02030, 0x02031, - 0x0203B, 0x0203C, - 0x02042, 0x02042, - 0x02047, 0x02049, - 0x02051, 0x02051, - 0x02065, 0x02069, - // Combining Diacritical Marks for Symbols (Part of) - 0x020DD, 0x020E0, - 0x020E2, 0x020E4, - // Letterlike Symbols (Part of)/Number Forms - 0x02100, 0x02101, - 0x02103, 0x02109, - 0x0210F, 0x0210F, - 0x02113, 0x02114, - 0x02116, 0x02117, - 0x0211E, 0x02123, - 0x02125, 0x02125, - 0x02127, 0x02127, - 0x02129, 0x02129, - 0x0212E, 0x0212E, - 0x02135, 0x0213F, - 0x02145, 0x0214A, - 0x0214C, 0x0214D, - 0x0214F, 0x0218F, - // Mathematical Operators (Part of) - 0x0221E, 0x0221E, - 0x02234, 0x02235, - // Miscellaneous Technical (Part of) - 0x02300, 0x02307, - 0x0230C, 0x0231F, - 0x02324, 0x0232B, - 0x0237D, 0x0239A, - 0x023BE, 0x023CD, - 0x023CF, 0x023CF, - 0x023D1, 0x023DB, - 0x023E2, 0x02422, - // Control Pictures (Part of)/Optical Character Recognition/Enclosed - // Alphanumerics - 0x02424, 0x024FF, - // Geometric Shapes/Miscellaneous Symbols (Part of) - 0x025A0, 0x02619, - 0x02620, 0x02767, - 0x02776, 0x02793, - // Miscellaneous Symbols and Arrows (Part of) - 0x02B12, 0x02B2F, - 0x02B50, 0x02B59, - 0x02BB8, 0x02BFF, - // Common CJK - 0x02E80, 0x0A4CF, - // Hangul Jamo Extended-A - 0x0A960, 0x0A97F, - // Hangul Syllables/Hangul Jamo Extended-B - 0x0AC00, 0x0D7FF, - // Private Use Area/CJK Compatibility Ideographs - 0x0E000, 0x0FAFF, - // Vertical Forms - 0x0FE10, 0x0FE1F, - // CJK Compatibility Forms (Part of) - 0x0FE30, 0x0FE48, - // Small Form Variants (Part of) - 0x0FE50, 0x0FE57, - 0x0FE59, 0x0FE62, - 0x0FE67, 0x0FE6F, - // Halfwidth and Fullwidth Forms - 0x0FF01, 0x0FF0C, - 0x0FF0E, 0x0FF1B, - 0x0FF1F, 0x0FF60, - 0x0FFE0, 0x0FFE7, - // Specials (Part of) - 0x0FFF0, 0x0FFF8, - 0x0FFFC, 0x0FFFD, - // Meroitic Hieroglyphs - 0x10980, 0x1099F, - // Siddham - 0x11580, 0x115FF, - // Egyptian Hieroglyphs - 0x13000, 0x1342F, - // Kana Supplement - 0x1B000, 0x1B0FF, - // Byzantine Musical Symbols/Musical Symbols - 0x1D000, 0x1D1FF, - // Tai Xuan Jing Symbols/Counting Rod Numerals - 0x1D300, 0x1D37F, - // Mahjong Tiles/Domino Tiles/Playing Cards/Enclosed Alphanumeric Supplement - // Enclosed Ideographic Supplement/Enclosed Ideographic Supplement - // Emoticons/Ornamental Dingbats/Transport and Map Symbols/Alchemical - // Symbols Alchemical Symbols - 0x1F000, 0x1F7FF, - // CJK Unified Ideographs Extension B/C/D - // CJK Compatibility Ideographs Supplement - 0x20000, 0x2FFFD, - 0x30000, 0x3FFFD, - // Supplementary Private Use Area-A - 0xF0000, 0xFFFFD, - // Supplementary Private Use Area-B - 0x100000, 0x10FFFD, -}; static void setRanges(CharacterProperty* values, const UChar32* ranges, size_t length, @@ -250,7 +49,7 @@ } } -static void generate(FILE* fp, int32_t size, uint8_t* array) +static void generateUTrieSerialized(FILE* fp, int32_t size, uint8_t* array) { fprintf(fp, "#include <cstdint>\n\n" @@ -267,31 +66,21 @@ "} // namespace blink\n"); } -int main(int argc, char** argv) +static void generate(FILE* fp) { // Create a value array of all possible code points. const UChar32 size = kMaxCodepoint + 1; CharacterProperty* values = new CharacterProperty[size]; memset(values, 0, sizeof(CharacterProperty) * size); - setRanges(values, - cjkIdeographRanges, ARRAY_LENGTH(cjkIdeographRanges), - CharacterProperty::isCJKIdeographOrSymbol); - setRanges(values, - cjkSymbolRanges, ARRAY_LENGTH(cjkSymbolRanges), - CharacterProperty::isCJKIdeographOrSymbol); - setValues(values, - cjkIsolatedSymbolsArray, ARRAY_LENGTH(cjkIsolatedSymbolsArray), - CharacterProperty::isCJKIdeographOrSymbol); +#define SET(name) \ + setRanges(values, name##Ranges, ARRAY_LENGTH(name##Ranges), \ + CharacterProperty::name); \ + setValues(values, name##Array, ARRAY_LENGTH(name##Array), \ + CharacterProperty::name); - setRanges(values, - isUprightInMixedVerticalRanges, - ARRAY_LENGTH(isUprightInMixedVerticalRanges), - CharacterProperty::isUprightInMixedVertical); - setValues(values, - isUprightInMixedVerticalArray, - ARRAY_LENGTH(isUprightInMixedVerticalArray), - CharacterProperty::isUprightInMixedVertical); + SET(isCJKIdeographOrSymbol); + SET(isUprightInMixedVertical); // Create a trie from the value array. UErrorCode error = U_ZERO_ERROR; @@ -322,16 +111,23 @@ serializedSize = utrie2_serialize(trie, serialized, serializedSize, &error); assert(error == U_ZERO_ERROR); - // Write the serialized array to the source file. - if (argc <= 1) { - generate(stdout, serializedSize, serialized); - } else { - FILE* fp = fopen(argv[1], "wb"); - generate(fp, serializedSize, serialized); - fclose(fp); - } + generateUTrieSerialized(fp, serializedSize, serialized); utrie2_close(trie); +} +#endif + +int main(int argc, char** argv) +{ + + // Write the serialized array to the source file. + if (argc <= 1) { + generate(stdout); + } else { + FILE* fp = fopen(argv[1], "wb"); + generate(fp); + fclose(fp); + } return 0; } diff -up chromium-50.0.2661.11/build/linux/unbundle/icu.gyp.system-icu chromium-50.0.2661.11/build/linux/unbundle/icu.gyp --- chromium-50.0.2661.11/build/linux/unbundle/icu.gyp.system-icu 2016-02-15 00:11:20.000000000 +0100 +++ chromium-50.0.2661.11/build/linux/unbundle/icu.gyp 2016-03-06 13:52:36.203741752 +0100 @@ -13,6 +13,7 @@ ], 'defines': [ 'U_USING_ICU_NAMESPACE=0', + 'USING_SYSTEM_ICU', ], }, 'link_settings': { @@ -34,6 +35,7 @@ ], 'defines': [ 'U_USING_ICU_NAMESPACE=0', + 'USING_SYSTEM_ICU', ], }, 'link_settings': { @@ -135,6 +137,7 @@ ], 'defines': [ 'U_USING_ICU_NAMESPACE=0', + 'USING_SYSTEM_ICU', ], }, 'link_settings': {