master xplshn/aruu / shared / libutf / upperrune.c
  1/* Automatically generated by mkrunetype.awk */
  2#include <stdlib.h>
  3
  4#include "../utf.h"
  5#include "runetype.h"
  6
  7static const Rune upper3[][2] = {
  8    {0x0100, 0x012E}, {0x0132, 0x0136}, {0x0139, 0x0147}, {0x014A, 0x0176}, {0x0179, 0x017D},
  9    {0x0182, 0x0184}, {0x01A0, 0x01A4}, {0x01B3, 0x01B5}, {0x01CD, 0x01DB}, {0x01DE, 0x01EE},
 10    {0x01F8, 0x021E}, {0x0222, 0x0232}, {0x0246, 0x024E}, {0x0370, 0x0372}, {0x03D8, 0x03EE},
 11    {0x0460, 0x0480}, {0x048A, 0x04BE}, {0x04C1, 0x04CD}, {0x04D0, 0x052E}, {0x1E00, 0x1E94},
 12    {0x1EA0, 0x1EFE}, {0x2C67, 0x2C6B}, {0x2C80, 0x2CE2}, {0x2CEB, 0x2CED}, {0xA640, 0xA66C},
 13    {0xA680, 0xA69A}, {0xA722, 0xA72E}, {0xA732, 0xA76E}, {0xA779, 0xA77B}, {0xA77E, 0xA786},
 14    {0xA790, 0xA792}, {0xA796, 0xA7A8}, {0xA7B4, 0xA7C2}, {0xA7C7, 0xA7C9}, {0xA7D6, 0xA7D8},
 15};
 16
 17static const Rune upper2[][3] = {
 18    {0x0041, 0x005A, 0x0061},    {0x00C0, 0x00D6, 0x00E0},    {0x00D8, 0x00DE, 0x00F8},
 19    {0x0189, 0x018A, 0x0256},    {0x01B1, 0x01B2, 0x028A},    {0x0388, 0x038A, 0x03AD},
 20    {0x038E, 0x038F, 0x03CD},    {0x0391, 0x03A1, 0x03B1},    {0x03A3, 0x03AB, 0x03C3},
 21    {0x03D2, 0x03D4, 0x03D2},    {0x03FD, 0x03FF, 0x037B},    {0x0400, 0x040F, 0x0450},
 22    {0x0410, 0x042F, 0x0430},    {0x0531, 0x0556, 0x0561},    {0x10A0, 0x10C5, 0x2D00},
 23    {0x13A0, 0x13EF, 0xAB70},    {0x13F0, 0x13F5, 0x13F8},    {0x1C90, 0x1CBA, 0x10D0},
 24    {0x1CBD, 0x1CBF, 0x10FD},    {0x1F08, 0x1F0F, 0x1F00},    {0x1F18, 0x1F1D, 0x1F10},
 25    {0x1F28, 0x1F2F, 0x1F20},    {0x1F38, 0x1F3F, 0x1F30},    {0x1F48, 0x1F4D, 0x1F40},
 26    {0x1F68, 0x1F6F, 0x1F60},    {0x1FB8, 0x1FB9, 0x1FB0},    {0x1FBA, 0x1FBB, 0x1F70},
 27    {0x1FC8, 0x1FCB, 0x1F72},    {0x1FD8, 0x1FD9, 0x1FD0},    {0x1FDA, 0x1FDB, 0x1F76},
 28    {0x1FE8, 0x1FE9, 0x1FE0},    {0x1FEA, 0x1FEB, 0x1F7A},    {0x1FF8, 0x1FF9, 0x1F78},
 29    {0x1FFA, 0x1FFB, 0x1F7C},    {0x210B, 0x210D, 0x210B},    {0x2110, 0x2112, 0x2110},
 30    {0x2119, 0x211D, 0x2119},    {0x212C, 0x212D, 0x212C},    {0x2130, 0x2131, 0x2130},
 31    {0x213E, 0x213F, 0x213E},    {0x2C00, 0x2C2F, 0x2C30},    {0x2C7E, 0x2C7F, 0x023F},
 32    {0xFF21, 0xFF3A, 0xFF41},    {0x10400, 0x10427, 0x10428}, {0x104B0, 0x104D3, 0x104D8},
 33    {0x10570, 0x1057A, 0x10597}, {0x1057C, 0x1058A, 0x105A3}, {0x1058C, 0x10592, 0x105B3},
 34    {0x10594, 0x10595, 0x105BB}, {0x10C80, 0x10CB2, 0x10CC0}, {0x118A0, 0x118BF, 0x118C0},
 35    {0x16E40, 0x16E5F, 0x16E60}, {0x1D400, 0x1D419, 0x1D400}, {0x1D434, 0x1D44D, 0x1D434},
 36    {0x1D468, 0x1D481, 0x1D468}, {0x1D49E, 0x1D49F, 0x1D49E}, {0x1D4A5, 0x1D4A6, 0x1D4A5},
 37    {0x1D4A9, 0x1D4AC, 0x1D4A9}, {0x1D4AE, 0x1D4B5, 0x1D4AE}, {0x1D4D0, 0x1D4E9, 0x1D4D0},
 38    {0x1D504, 0x1D505, 0x1D504}, {0x1D507, 0x1D50A, 0x1D507}, {0x1D50D, 0x1D514, 0x1D50D},
 39    {0x1D516, 0x1D51C, 0x1D516}, {0x1D538, 0x1D539, 0x1D538}, {0x1D53B, 0x1D53E, 0x1D53B},
 40    {0x1D540, 0x1D544, 0x1D540}, {0x1D54A, 0x1D550, 0x1D54A}, {0x1D56C, 0x1D585, 0x1D56C},
 41    {0x1D5A0, 0x1D5B9, 0x1D5A0}, {0x1D5D4, 0x1D5ED, 0x1D5D4}, {0x1D608, 0x1D621, 0x1D608},
 42    {0x1D63C, 0x1D655, 0x1D63C}, {0x1D670, 0x1D689, 0x1D670}, {0x1D6A8, 0x1D6C0, 0x1D6A8},
 43    {0x1D6E2, 0x1D6FA, 0x1D6E2}, {0x1D71C, 0x1D734, 0x1D71C}, {0x1D756, 0x1D76E, 0x1D756},
 44    {0x1D790, 0x1D7A8, 0x1D790}, {0x1E900, 0x1E921, 0x1E922},
 45};
 46
 47static const Rune upper1[][2] = {
 48    {0x0130, 0x0069},   {0x0178, 0x00FF},   {0x0181, 0x0253},   {0x0186, 0x0254},
 49    {0x0187, 0x0188},   {0x018B, 0x018C},   {0x018E, 0x01DD},   {0x018F, 0x0259},
 50    {0x0190, 0x025B},   {0x0191, 0x0192},   {0x0193, 0x0260},   {0x0194, 0x0263},
 51    {0x0196, 0x0269},   {0x0197, 0x0268},   {0x0198, 0x0199},   {0x019C, 0x026F},
 52    {0x019D, 0x0272},   {0x019F, 0x0275},   {0x01A6, 0x0280},   {0x01A7, 0x01A8},
 53    {0x01A9, 0x0283},   {0x01AC, 0x01AD},   {0x01AE, 0x0288},   {0x01AF, 0x01B0},
 54    {0x01B7, 0x0292},   {0x01B8, 0x01B9},   {0x01BC, 0x01BD},   {0x01C4, 0x01C6},
 55    {0x01C7, 0x01C9},   {0x01CA, 0x01CC},   {0x01F1, 0x01F3},   {0x01F4, 0x01F5},
 56    {0x01F6, 0x0195},   {0x01F7, 0x01BF},   {0x0220, 0x019E},   {0x023A, 0x2C65},
 57    {0x023B, 0x023C},   {0x023D, 0x019A},   {0x023E, 0x2C66},   {0x0241, 0x0242},
 58    {0x0243, 0x0180},   {0x0244, 0x0289},   {0x0245, 0x028C},   {0x0376, 0x0377},
 59    {0x037F, 0x03F3},   {0x0386, 0x03AC},   {0x038C, 0x03CC},   {0x03CF, 0x03D7},
 60    {0x03F4, 0x03B8},   {0x03F7, 0x03F8},   {0x03F9, 0x03F2},   {0x03FA, 0x03FB},
 61    {0x04C0, 0x04CF},   {0x10C7, 0x2D27},   {0x10CD, 0x2D2D},   {0x1E9E, 0x00DF},
 62    {0x1F59, 0x1F51},   {0x1F5B, 0x1F53},   {0x1F5D, 0x1F55},   {0x1F5F, 0x1F57},
 63    {0x1FEC, 0x1FE5},   {0x2102, 0x2102},   {0x2107, 0x2107},   {0x2115, 0x2115},
 64    {0x2124, 0x2124},   {0x2126, 0x03C9},   {0x2128, 0x2128},   {0x212A, 0x006B},
 65    {0x212B, 0x00E5},   {0x2132, 0x214E},   {0x2133, 0x2133},   {0x2145, 0x2145},
 66    {0x2183, 0x2184},   {0x2C60, 0x2C61},   {0x2C62, 0x026B},   {0x2C63, 0x1D7D},
 67    {0x2C64, 0x027D},   {0x2C6D, 0x0251},   {0x2C6E, 0x0271},   {0x2C6F, 0x0250},
 68    {0x2C70, 0x0252},   {0x2C72, 0x2C73},   {0x2C75, 0x2C76},   {0x2CF2, 0x2CF3},
 69    {0xA77D, 0x1D79},   {0xA78B, 0xA78C},   {0xA78D, 0x0265},   {0xA7AA, 0x0266},
 70    {0xA7AB, 0x025C},   {0xA7AC, 0x0261},   {0xA7AD, 0x026C},   {0xA7AE, 0x026A},
 71    {0xA7B0, 0x029E},   {0xA7B1, 0x0287},   {0xA7B2, 0x029D},   {0xA7B3, 0xAB53},
 72    {0xA7C4, 0xA794},   {0xA7C5, 0x0282},   {0xA7C6, 0x1D8E},   {0xA7D0, 0xA7D1},
 73    {0xA7F5, 0xA7F6},   {0x1D49C, 0x1D49C}, {0x1D4A2, 0x1D4A2}, {0x1D546, 0x1D546},
 74    {0x1D7CA, 0x1D7CA},
 75};
 76
 77int
 78isupperrune(Rune r)
 79{
 80  const Rune *match;
 81
 82  if ((match = bsearch(&r, upper3, nelem(upper3), sizeof *upper3, &rune2cmp)))
 83    return !((r - match[0]) % 2);
 84  if (bsearch(&r, upper2, nelem(upper2), sizeof *upper2, &rune2cmp))
 85    return 1;
 86  if (bsearch(&r, upper1, nelem(upper1), sizeof *upper1, &rune1cmp))
 87    return 1;
 88  return 0;
 89}
 90
 91int
 92tolowerrune(Rune r)
 93{
 94  Rune *match;
 95
 96  match = bsearch(&r, upper3, nelem(upper3), sizeof *upper3, &rune2cmp);
 97  if (match)
 98    return ((r - match[0]) % 2) ? r : r + 1;
 99  match = bsearch(&r, upper2, nelem(upper2), sizeof *upper2, &rune2cmp);
100  if (match)
101    return match[2] + (r - match[0]);
102  match = bsearch(&r, upper1, nelem(upper1), sizeof *upper1, &rune1cmp);
103  if (match)
104    return match[1];
105  return r;
106}