//===--- UnicodeExtendedGraphemeClusters.cpp.gyb ----------------*- C++ -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// #include "swift/Runtime/Config.h" %{ # FIXME: this table should be moved to a Swift file in stdlib. Unfortunately, # in Swift we don't have a way to statically initialize arrays. from GYBUnicodeDataUtils import GraphemeClusterBreakPropertyTable, UnicodeTrieGenerator, get_extended_grapheme_cluster_rules_matrix grapheme_cluster_break_property_table = \ GraphemeClusterBreakPropertyTable(unicodeGraphemeBreakPropertyFile) trie_generator = UnicodeTrieGenerator() trie_generator.create_tables() trie_generator.fill_from_unicode_property(grapheme_cluster_break_property_table) trie_generator.verify(grapheme_cluster_break_property_table) }% /// Before compression: /// bmp_lookup: ${len(trie_generator.bmp_lookup)} /// bmp_data: ${len(trie_generator.bmp_data)} x ${len(trie_generator.bmp_data[0])} /// supp_lookup1: ${len(trie_generator.supp_lookup1)} /// supp_lookup2: ${len(trie_generator.supp_lookup2)} x ${len(trie_generator.supp_lookup2[0])} /// supp_data: ${len(trie_generator.supp_data)} x ${len(trie_generator.supp_data[0])} %{ trie_generator.freeze() trie_generator.verify(grapheme_cluster_break_property_table) }% /// After compression: /// bmp_lookup: ${len(trie_generator.bmp_lookup)} /// bmp_data: ${len(trie_generator.bmp_data)} x ${len(trie_generator.bmp_data[0])} /// supp_lookup1: ${len(trie_generator.supp_lookup1)} /// supp_lookup2: ${len(trie_generator.supp_lookup2)} x ${len(trie_generator.supp_lookup2[0])} /// supp_data: ${len(trie_generator.supp_data)} x ${len(trie_generator.supp_data[0])} %{ trie_generator.serialize(grapheme_cluster_break_property_table) }% #include static const uint8_t _swift_stdlib_GraphemeClusterBreakPropertyTrieImpl[] = { % for byte in trie_generator.trie_bytes: ${byte}, % end }; SWIFT_RUNTIME_STDLIB_INTERFACE const uint8_t *_swift_stdlib_GraphemeClusterBreakPropertyTrie = _swift_stdlib_GraphemeClusterBreakPropertyTrieImpl; struct _swift_stdlib_GraphemeClusterBreakPropertyTrieMetadataTy { unsigned BMPFirstLevelIndexBits; unsigned BMPDataOffsetBits; unsigned SuppFirstLevelIndexBits; unsigned SuppSecondLevelIndexBits; unsigned SuppDataOffsetBits; unsigned BMPLookupBytesPerEntry; unsigned BMPDataBytesPerEntry; unsigned SuppLookup1BytesPerEntry; unsigned SuppLookup2BytesPerEntry; unsigned SuppDataBytesPerEntry; unsigned TrieSize; unsigned BMPLookupBytesOffset; unsigned BMPDataBytesOffset; unsigned SuppLookup1BytesOffset; unsigned SuppLookup2BytesOffset; unsigned SuppDataBytesOffset; }; SWIFT_RUNTIME_STDLIB_INTERFACE const struct _swift_stdlib_GraphemeClusterBreakPropertyTrieMetadataTy _swift_stdlib_GraphemeClusterBreakPropertyTrieMetadata = { ${trie_generator.bmp_first_level_index_bits}, ${trie_generator.bmp_data_offset_bits}, ${trie_generator.supp_first_level_index_bits}, ${trie_generator.supp_second_level_index_bits}, ${trie_generator.supp_data_offset_bits}, ${trie_generator.bmp_lookup_bytes_per_entry}, ${trie_generator.bmp_data_bytes_per_entry}, ${trie_generator.supp_lookup1_bytes_per_entry}, ${trie_generator.supp_lookup2_bytes_per_entry}, ${trie_generator.supp_data_bytes_per_entry}, ${len(trie_generator.trie_bytes)}, ${trie_generator.bmp_lookup_bytes_offset}, ${trie_generator.bmp_data_bytes_offset}, ${trie_generator.supp_lookup1_bytes_offset}, ${trie_generator.supp_lookup2_bytes_offset}, ${trie_generator.supp_data_bytes_offset}, }; %{ extended_grapheme_cluster_rules_matrix = \ get_extended_grapheme_cluster_rules_matrix(grapheme_cluster_break_property_table) }% static const uint16_t _swift_stdlib_ExtendedGraphemeClusterNoBoundaryRulesMatrixImpl[] = { % for row in get_extended_grapheme_cluster_rules_matrix(grapheme_cluster_break_property_table): ${row}, % end }; SWIFT_RUNTIME_STDLIB_INTERFACE const uint16_t *_swift_stdlib_ExtendedGraphemeClusterNoBoundaryRulesMatrix = _swift_stdlib_ExtendedGraphemeClusterNoBoundaryRulesMatrixImpl; // ${'Local Variables'}: // eval: (read-only-mode 1) // End: