/*
  DO NOT EDIT BY HAND!!!

  This file is generated by:
    make-casetable.pl

  Based on data published by the Unicode Consortium:
    https://www.unicode.org/Public/UNIDATA/UnicodeData.txt
*/

#include <stdint.h>
#include <atalk/unicode.h>
#include "utf16_casetable.h"

/*******************************************************************
 Convert a wide character to upper case.
*******************************************************************/
ucs2_t toupper_w(ucs2_t val)
{
    if (val <= 0x02BF) {
        return upper_table_1[val];
    }

    if (val >= 0x0340 && val <= 0x05BF) {
        return upper_table_2[val - 0x0340];
    }

    if (val >= 0x10C0 && val <= 0x10FF) {
        return upper_table_3[val - 0x10C0];
    }

    if (val >= 0x13C0 && val <= 0x13FF) {
        return upper_table_4[val - 0x13C0];
    }

    if (val >= 0x1C80 && val <= 0x1CBF) {
        return upper_table_5[val - 0x1C80];
    }

    if (val >= 0x1D40 && val <= 0x1DBF) {
        return upper_table_6[val - 0x1D40];
    }

    if (val >= 0x1E00 && val <= 0x1FFF) {
        return upper_table_7[val - 0x1E00];
    }

    if (val >= 0x2140 && val <= 0x21BF) {
        return upper_table_8[val - 0x2140];
    }

    if (val >= 0x24C0 && val <= 0x24FF) {
        return upper_table_9[val - 0x24C0];
    }

    if (val >= 0x2C00 && val <= 0x2D3F) {
        return upper_table_10[val - 0x2C00];
    }

    if (val >= 0xA640 && val <= 0xA6BF) {
        return upper_table_11[val - 0xA640];
    }

    if (val >= 0xA700 && val <= 0xA7FF) {
        return upper_table_12[val - 0xA700];
    }

    if (val >= 0xAB40 && val <= 0xABBF) {
        return upper_table_13[val - 0xAB40];
    }

    if (val >= 0xFF40 && val <= 0xFF7F) {
        return upper_table_14[val - 0xFF40];
    }

    return val;
}

/*******************************************************************
 Convert a surrogate pair to upper case.
*******************************************************************/
uint32_t toupper_sp(uint32_t val)
{
    if (val >= 0xD801DC00 && val <= 0xD801DC7F) {
        return upper_table_sp_1[val - 0xD801DC00];
    }

    if (val >= 0xD801DCC0 && val <= 0xD801DCFF) {
        return upper_table_sp_2[val - 0xD801DCC0];
    }

    if (val >= 0xD801DD80 && val <= 0xD801DDBF) {
        return upper_table_sp_3[val - 0xD801DD80];
    }

    if (val >= 0xD803DCC0 && val <= 0xD803DCFF) {
        return upper_table_sp_4[val - 0xD803DCC0];
    }

    if (val >= 0xD803DD40 && val <= 0xD803DD7F) {
        return upper_table_sp_5[val - 0xD803DD40];
    }

    if (val >= 0xD803DD40 && val <= 0xD803DDBF) {
        return upper_table_sp_6[val - 0xD803DD40];
    }

    if (val >= 0xD806DCC0 && val <= 0xD806DCFF) {
        return upper_table_sp_7[val - 0xD806DCC0];
    }

    if (val >= 0xD81BDE40 && val <= 0xD81BDE7F) {
        return upper_table_sp_8[val - 0xD81BDE40];
    }

    if (val >= 0xD83ADD00 && val <= 0xD83ADD7F) {
        return upper_table_sp_9[val - 0xD83ADD00];
    }

    return val;
}

/*******************************************************************
 Convert a wide character to lower case.
*******************************************************************/
ucs2_t tolower_w(ucs2_t val)
{
    if (val <= 0x007F) {
        return lower_table_1[val];
    }

    if (val >= 0x00C0 && val <= 0x027F) {
        return lower_table_2[val - 0x00C0];
    }

    if (val >= 0x0340 && val <= 0x057F) {
        return lower_table_3[val - 0x0340];
    }

    if (val >= 0x1080 && val <= 0x10FF) {
        return lower_table_4[val - 0x1080];
    }

    if (val >= 0x1380 && val <= 0x13FF) {
        return lower_table_5[val - 0x1380];
    }

    if (val >= 0x1C80 && val <= 0x1CBF) {
        return lower_table_6[val - 0x1C80];
    }

    if (val >= 0x1E00 && val <= 0x1FFF) {
        return lower_table_7[val - 0x1E00];
    }

    if (val >= 0x2100 && val <= 0x21BF) {
        return lower_table_8[val - 0x2100];
    }

    if (val >= 0x2480 && val <= 0x24FF) {
        return lower_table_9[val - 0x2480];
    }

    if (val >= 0x2C00 && val <= 0x2CFF) {
        return lower_table_10[val - 0x2C00];
    }

    if (val >= 0xA640 && val <= 0xA6BF) {
        return lower_table_11[val - 0xA640];
    }

    if (val >= 0xA700 && val <= 0xA7FF) {
        return lower_table_12[val - 0xA700];
    }

    if (val >= 0xFF00 && val <= 0xFF3F) {
        return lower_table_13[val - 0xFF00];
    }

    return val;
}

/*******************************************************************
 Convert a surrogate pair to lower case.
*******************************************************************/
uint32_t tolower_sp(uint32_t val)
{
    if (val >= 0xD801DC00 && val <= 0xD801DC3F) {
        return lower_table_sp_1[val - 0xD801DC00];
    }

    if (val >= 0xD801DC80 && val <= 0xD801DCFF) {
        return lower_table_sp_2[val - 0xD801DC80];
    }

    if (val >= 0xD801DD40 && val <= 0xD801DD7F) {
        return lower_table_sp_3[val - 0xD801DD40];
    }

    if (val >= 0xD801DD40 && val <= 0xD801DDBF) {
        return lower_table_sp_4[val - 0xD801DD40];
    }

    if (val >= 0xD803DC80 && val <= 0xD803DCBF) {
        return lower_table_sp_5[val - 0xD803DC80];
    }

    if (val >= 0xD803DD40 && val <= 0xD803DD7F) {
        return lower_table_sp_6[val - 0xD803DD40];
    }

    if (val >= 0xD806DC80 && val <= 0xD806DCBF) {
        return lower_table_sp_7[val - 0xD806DC80];
    }

    if (val >= 0xD81BDE40 && val <= 0xD81BDE7F) {
        return lower_table_sp_8[val - 0xD81BDE40];
    }

    if (val >= 0xD83ADD00 && val <= 0xD83ADD3F) {
        return lower_table_sp_9[val - 0xD83ADD00];
    }

    return val;
}

/* EOF */
