xref: /aosp_15_r20/external/skia/experimental/tools/generate-unicode-test-txt (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker#! /usr/bin/env python
2*c8dee2aaSAndroid Build Coastguard Worker
3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 Google Inc.
4*c8dee2aaSAndroid Build Coastguard Worker#
5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file.
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerimport array, zlib, base64, sys
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker#   import array, zlib, base64, sys, unicodedata
11*c8dee2aaSAndroid Build Coastguard Worker#   def codepoints():
12*c8dee2aaSAndroid Build Coastguard Worker#       for i in range(0x110000):
13*c8dee2aaSAndroid Build Coastguard Worker#           try:
14*c8dee2aaSAndroid Build Coastguard Worker#               u = ('\\U%08x' % i).decode('unicode-escape')
15*c8dee2aaSAndroid Build Coastguard Worker#               n = unicodedata.name(u)
16*c8dee2aaSAndroid Build Coastguard Worker#               c = unicodedata.category(u)
17*c8dee2aaSAndroid Build Coastguard Worker#               if c[0] == 'C' or n.startswith('VARIATION '):
18*c8dee2aaSAndroid Build Coastguard Worker#                   continue
19*c8dee2aaSAndroid Build Coastguard Worker#               yield i
20*c8dee2aaSAndroid Build Coastguard Worker#           except ValueError:
21*c8dee2aaSAndroid Build Coastguard Worker#               pass
22*c8dee2aaSAndroid Build Coastguard Worker#   def make_unicode_data():
23*c8dee2aaSAndroid Build Coastguard Worker#       last = 0
24*c8dee2aaSAndroid Build Coastguard Worker#       a = array.array('I')
25*c8dee2aaSAndroid Build Coastguard Worker#       for i in codepoints():
26*c8dee2aaSAndroid Build Coastguard Worker#         a.append(i - last - 1)
27*c8dee2aaSAndroid Build Coastguard Worker#         last = i
28*c8dee2aaSAndroid Build Coastguard Worker#       return base64.b64encode(zlib.compress(a.tostring(), 9))
29*c8dee2aaSAndroid Build Coastguard Worker#   if __name__ == '__main__':
30*c8dee2aaSAndroid Build Coastguard Worker#       b = make_unicode_data()
31*c8dee2aaSAndroid Build Coastguard Worker#       for i in range(0, len(b), 76):
32*c8dee2aaSAndroid Build Coastguard Worker#           print '  %s' % b[i:i+76]
33*c8dee2aaSAndroid Build Coastguard Workervalid_codepoint_data = '''
34*c8dee2aaSAndroid Build Coastguard Worker  eNrt3LmOHEUYAOCt7p5jL89iAbZJwJY4ExKTIiJChAh4CgSvgIgREjEJEa+ARAQxEW/gR4GRbDGa
35*c8dee2aaSAndroid Build Coastguard Worker  7Z4+pq+q/j5p5fVMd3XVX3fPTr99wVSedjgnCBsAANyTlby2qllX9722tlYH4DqieTKG+etV3tYJ
36*c8dee2aaSAndroid Build Coastguard Worker  t5ntiNcqWxu9NnCbW+r6yLpQnaewn1rS3pFpPVhQWVcL7Dd/GVt6m1PGHL/WDfMXGsZlqLyHmvfy
37*c8dee2aaSAndroid Build Coastguard Worker  DjGsyvN+3V6cuG42wrhRVd5i4jiX/ZtVnFeW1309bUrS3fS4Pw8tyxlmEMsu7auqDPvzd2ekuYuo
38*c8dee2aaSAndroid Build Coastguard Worker  358Tw7K8b4/abh/9/66mLPmJ8uYHr4ej1/KKNJooWuYjezlXDLGOW7dob2P02zZph5o4ti3D5uj1
39*c8dee2aaSAndroid Build Coastguard Worker  dce2t23Y9lOId9byvKqYbyrafZt87SKN60WDsaltOS5L2mE2YH76vi+ZXwyr6Tolq8ljceLcums8
40*c8dee2aaSAndroid Build Coastguard Worker  PPj9ZiF7uGKCa75bUp/hYF5tu+Y5rN9z2n2o6Zuhh33qq+OeXTDkWB1zPykii00Y6dz3dQu45yrC
41*c8dee2aaSAndroid Build Coastguard Worker  POeqDaDx2qju79u63q+JpYxLiHvQrhetmOi6Y63H1qq4d9dCAABAIvuFlO162DuPtQ+47Dm9mzPL
42*c8dee2aaSAndroid Build Coastguard Worker  Hs5IZ86yRPK37vm4tn2hr2tQbxtRXleqq9QUnyH38XfadcfHsk7JRp7PhzDWvev1gG3MOiIdYeZx
43*c8dee2aaSAndroid Build Coastguard Worker  H3qN9JUmMMvxa6n78LZ5/Tzx9pYvpN7rfDmjvNwaBmGW3hQCYIL9W5ZYfsPRz9zyH7MwwbnZAHk5
44*c8dee2aaSAndroid Build Coastguard Worker  dY3Qc1nGui+fwv3/uwn6TlldjnF/+tEM4r27gHo+ZwYASHM/UOVJi2PfUJUAAFEIPadVjJzfqZ+9
45*c8dee2aaSAndroid Build Coastguard Worker  EmZWl1XPmD8ltc8s85nWeWh5rO+kAgAApKvpnu+3iMsY5J2F20SY56tE62L/LLC7gdPvMp6k8B7N
46*c8dee2aaSAndroid Build Coastguard Worker  fWEOS8aNEEDv3mp5fLHweBnrh+F5ZPMVw3difbZvPCwzt2fP3qhrQN8DAAAAAAAAAAAAAAAAAAAA
47*c8dee2aaSAndroid Build Coastguard Worker  AAAAAAAAAAAAAKCDKyEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
48*c8dee2aaSAndroid Build Coastguard Worker  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIwnMhAAAAAOBInnDZLlUvwChe
49*c8dee2aaSAndroid Build Coastguard Worker  n/j6WU/pbEfO91bTEV9m5dsEylA0PG6t/y9O273ReqZtl2auJ7puLvSdhA595R3jVec9QTZx+Yx3
50*c8dee2aaSAndroid Build Coastguard Worker  /3tc8tqLSMvStF2tVTsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA
51*c8dee2aaSAndroid Build Coastguard Worker  JzcDpl0kEJ/iqTYCxCVTbmbsvZZrktVI+QoVr4Wj94MqjIplHEA87qzhk/RBx/MeNjxufeK9yxnF
52*c8dee2aaSAndroid Build Coastguard Worker  IQyYVjHw9UhLIQQsUN5y7m3yet5xzL/tOO+PNa4PMV+dk2bX9dEzzX4xVpHPcbkqHKw9NPE80nL+
53*c8dee2aaSAndroid Build Coastguard Worker  oK128vGM9oM3I177kwT2wFPvhT4yvDKBpuvgr/Pq82O7NxQO5pxshOuc8mvC8+x+vfRnRUxWLWI3
54*c8dee2aaSAndroid Build Coastguard Worker  ZvsqWo7l2wbHbCZu798nOnZNsWbMRu4/S6zXPj2a8IOwsMA/KDseqz/daYMAAABz97MQzMbt0f9/
55*c8dee2aaSAndroid Build Coastguard Worker  vBYTAAAAYL7++UUMIDVXM86bZ3s1sxWC2fBd03J/CMFg+nrGyU9C2TvPYKmPTXYw12dnxi/UnKM+
56*c8dee2aaSAndroid Build Coastguard Worker  7scgO6MNh4nzXvX8zlwbALBPB4xHsXkcV3Y9U3Jevmlx7Gri/nr9cl+Wvdy7le3f9ve5989leHJ0
57*c8dee2aaSAndroid Build Coastguard Worker  7+CqJL3v/vuZy9eYHzQ45vdb7RUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
58*c8dee2aaSAndroid Build Coastguard Worker  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
59*c8dee2aaSAndroid Build Coastguard Worker  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
60*c8dee2aaSAndroid Build Coastguard Worker  AAAAAAAAAAAAAAAAAIB2PhQCAAAAAAAAAAAAAAAAAAAAYAB/fyYGAMA4/gXQcRfM
61*c8dee2aaSAndroid Build Coastguard Worker'''
62*c8dee2aaSAndroid Build Coastguard Workerdef codepoints():
63*c8dee2aaSAndroid Build Coastguard Worker    i = 0
64*c8dee2aaSAndroid Build Coastguard Worker    for increment in array.array('I', zlib.decompress(
65*c8dee2aaSAndroid Build Coastguard Worker        base64.b64decode(valid_codepoint_data))).tolist():
66*c8dee2aaSAndroid Build Coastguard Worker        i += increment + 1
67*c8dee2aaSAndroid Build Coastguard Worker        yield i
68*c8dee2aaSAndroid Build Coastguard Workerif sys.version_info[0] < 3:
69*c8dee2aaSAndroid Build Coastguard Worker    def to_unicode(i):
70*c8dee2aaSAndroid Build Coastguard Worker        return ('\\U%08x' % i).decode('unicode-escape').encode('UTF-8')
71*c8dee2aaSAndroid Build Coastguard Workerelse:
72*c8dee2aaSAndroid Build Coastguard Worker    def to_unicode(i):
73*c8dee2aaSAndroid Build Coastguard Worker        return chr(i)
74*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__':
75*c8dee2aaSAndroid Build Coastguard Worker    o = sys.stdout
76*c8dee2aaSAndroid Build Coastguard Worker    o.write(to_unicode(0xFEFF))
77*c8dee2aaSAndroid Build Coastguard Worker    last_row = -1
78*c8dee2aaSAndroid Build Coastguard Worker    for i in codepoints():
79*c8dee2aaSAndroid Build Coastguard Worker        row = i - (i & 63)
80*c8dee2aaSAndroid Build Coastguard Worker        if last_row != row:
81*c8dee2aaSAndroid Build Coastguard Worker            if row:
82*c8dee2aaSAndroid Build Coastguard Worker                o.write('\n' if row % 1024 else '\n\n')
83*c8dee2aaSAndroid Build Coastguard Worker            o.write('U+%06x ' % row)
84*c8dee2aaSAndroid Build Coastguard Worker            last_row = row
85*c8dee2aaSAndroid Build Coastguard Worker        o.write(' ' + to_unicode(i))
86*c8dee2aaSAndroid Build Coastguard Worker    o.write('\n')
87