#!/usr/bin/env python

import os
import sys
import unicodedata


if sys.hexversion >= 0x3000000:
    # noinspection PyShadowingBuiltins
    unichr = chr

CHARACTER_COUNT = 65536
CHARACTER_PER_LINE = 128
CHARACTER_PER_BYTE = 8

self_path = os.path.dirname(os.path.abspath(__file__)) + os.sep
output_path = self_path + os.pardir + os.sep + os.pardir + os.sep + 'src/gamedata/fonts/myiswalpha.h'

with open(output_path, 'w') as f:
    version = '%i.%i.%i' % (sys.version_info.major, sys.version_info.minor, sys.version_info.micro)
    f.write('''// Generated by Python %s

#pragma once

static const uint8_t MYISWALPHA_DATA[] =
{
''' % version)

    for i in range(0, CHARACTER_COUNT, CHARACTER_PER_LINE):
        s = ''

        for j in range(0, CHARACTER_PER_LINE, CHARACTER_PER_BYTE):
            b = 0

            for k in range(CHARACTER_PER_BYTE):
                # noinspection PyUnboundLocalVariable
                category = unicodedata.category(unichr(i + j + k))

                if category[0] == 'L':
                    b |= 1 << k

            s += '0x%02X, ' % b

        s += '// %04X..%04X\n' % (i, i + CHARACTER_PER_LINE - 1)
        f.write(s)

    f.write('''};

inline int myiswalpha(wint_t ch)
{
    return MYISWALPHA_DATA[ch / 8] & (1 << (ch & 7));
}
''')