blob: 739b8ea7206311be7325c945551243a4f11fac8c [file] [log] [blame]
//===--- 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 <stdint.h>
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: