のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

Unicode Range

   def test_recalcUnicodeRanges(self):
        font = TTFont()
        font['OS/2'] = os2 = newTable('OS/2')
        font['cmap'] = cmap = newTable('cmap')
        st = getTableModule('cmap').CmapSubtable.newSubtable(4)
        st.platformID, st.platEncID, st.language = 3, 1, 0
        st.cmap = {0x0041:'A', 0x03B1: 'alpha', 0x0410: 'Acyr'}
        cmap.tables = []
        cmap.tables.append(st)
        os2.setUnicodeRanges({0, 1, 9}) <=初期値
        # 'pruneOnly' will clear any bits for which there's no intersection:
        # bit 1 ('Latin 1 Supplement'), in this case. However, it won't set
        # bit 7 ('Greek and Coptic') despite the "alpha" character is present.

## 'pruneOnly'は、交差がないビットをすべてクリアします。
## (この場合、ビット1("Latin Sup1")をクリアする)。

## ただし、「アルファ」文字が存在するにもかかわらず、
## ビット7(ギリシャ語とコプト語)は設定されません。
##
## ビットを立てることはしない??
##ビットを落とすことは、する。
        self.assertEqual(os2.recalcUnicodeRanges(font, pruneOnly=True), {0, 9})

        # try again with pruneOnly=False: bit 7 is now set.
#pruneOnlyをFalseにして、再び挑戦。今度は、7がセットされる。
        self.assertEqual(os2.recalcUnicodeRanges(font), {0, 7, 9})

        # add a non-BMP char from 'Mahjong Tiles' block (bit 122)
        st.cmap[0x1F000] = 'eastwindtile'
        # the bit 122 and the special bit 57 ('Non Plane 0') are also enabled
## BMPでない文字を追加すると、57と122が立つ
        self.assertEqual(os2.recalcUnicodeRanges(font), {0, 7, 9, 57, 122})

github.com