master xplshn/aruu / shared / libutf / lowerrune.c
  1/* Automatically generated by mkrunetype.awk */
  2#include <stdlib.h>
  3
  4#include "../utf.h"
  5#include "runetype.h"
  6
  7static const Rune lower4[][2] = {
  8    {0x0101, 0x012F}, {0x0133, 0x0137}, {0x013A, 0x0148}, {0x014B, 0x0177}, {0x017A, 0x017E},
  9    {0x0183, 0x0185}, {0x01A1, 0x01A5}, {0x01B4, 0x01B6}, {0x01CE, 0x01DC}, {0x01DF, 0x01EF},
 10    {0x01F9, 0x021F}, {0x0223, 0x0233}, {0x0247, 0x024F}, {0x0371, 0x0373}, {0x03D9, 0x03EF},
 11    {0x0461, 0x0481}, {0x048B, 0x04BF}, {0x04C2, 0x04CE}, {0x04D1, 0x052F}, {0x1E01, 0x1E95},
 12    {0x1EA1, 0x1EFF}, {0x2C68, 0x2C6C}, {0x2C81, 0x2CE3}, {0x2CEC, 0x2CEE}, {0xA641, 0xA66D},
 13    {0xA681, 0xA69B}, {0xA723, 0xA72F}, {0xA733, 0xA76F}, {0xA77A, 0xA77C}, {0xA77F, 0xA787},
 14    {0xA791, 0xA793}, {0xA797, 0xA7A9}, {0xA7B5, 0xA7C3}, {0xA7C8, 0xA7CA}, {0xA7D7, 0xA7D9},
 15};
 16
 17static const Rune lower2[][3] = {
 18    {0x0061, 0x007A, 0x0041},    {0x00E0, 0x00F6, 0x00C0},    {0x00F8, 0x00FE, 0x00D8},
 19    {0x01AA, 0x01AB, 0x01AA},    {0x0234, 0x0239, 0x0234},    {0x023F, 0x0240, 0x2C7E},
 20    {0x0256, 0x0257, 0x0189},    {0x025D, 0x025F, 0x025D},    {0x026D, 0x026E, 0x026D},
 21    {0x0273, 0x0274, 0x0273},    {0x0276, 0x027C, 0x0276},    {0x027E, 0x027F, 0x027E},
 22    {0x0284, 0x0286, 0x0284},    {0x028A, 0x028B, 0x01B1},    {0x028D, 0x0291, 0x028D},
 23    {0x0295, 0x029C, 0x0295},    {0x029F, 0x02AF, 0x029F},    {0x037B, 0x037D, 0x03FD},
 24    {0x03AD, 0x03AF, 0x0388},    {0x03B1, 0x03C1, 0x0391},    {0x03C3, 0x03CB, 0x03A3},
 25    {0x03CD, 0x03CE, 0x038E},    {0x0430, 0x044F, 0x0410},    {0x0450, 0x045F, 0x0400},
 26    {0x0561, 0x0586, 0x0531},    {0x0587, 0x0588, 0x0587},    {0x10D0, 0x10FA, 0x1C90},
 27    {0x10FD, 0x10FF, 0x1CBD},    {0x13F8, 0x13FD, 0x13F0},    {0x1C83, 0x1C84, 0x0421},
 28    {0x1D00, 0x1D2B, 0x1D00},    {0x1D6B, 0x1D77, 0x1D6B},    {0x1D7A, 0x1D7C, 0x1D7A},
 29    {0x1D7E, 0x1D8D, 0x1D7E},    {0x1D8F, 0x1D9A, 0x1D8F},    {0x1E96, 0x1E9A, 0x1E96},
 30    {0x1E9C, 0x1E9D, 0x1E9C},    {0x1F00, 0x1F07, 0x1F08},    {0x1F10, 0x1F15, 0x1F18},
 31    {0x1F20, 0x1F27, 0x1F28},    {0x1F30, 0x1F37, 0x1F38},    {0x1F40, 0x1F45, 0x1F48},
 32    {0x1F60, 0x1F67, 0x1F68},    {0x1F70, 0x1F71, 0x1FBA},    {0x1F72, 0x1F75, 0x1FC8},
 33    {0x1F76, 0x1F77, 0x1FDA},    {0x1F78, 0x1F79, 0x1FF8},    {0x1F7A, 0x1F7B, 0x1FEA},
 34    {0x1F7C, 0x1F7D, 0x1FFA},    {0x1F80, 0x1F87, 0x1F88},    {0x1F90, 0x1F97, 0x1F98},
 35    {0x1FA0, 0x1FA7, 0x1FA8},    {0x1FB0, 0x1FB1, 0x1FB8},    {0x1FB6, 0x1FB7, 0x1FB6},
 36    {0x1FC6, 0x1FC7, 0x1FC6},    {0x1FD0, 0x1FD1, 0x1FD8},    {0x1FD2, 0x1FD3, 0x1FD2},
 37    {0x1FD6, 0x1FD7, 0x1FD6},    {0x1FE0, 0x1FE1, 0x1FE8},    {0x1FE2, 0x1FE4, 0x1FE2},
 38    {0x1FE6, 0x1FE7, 0x1FE6},    {0x1FF6, 0x1FF7, 0x1FF6},    {0x210E, 0x210F, 0x210E},
 39    {0x213C, 0x213D, 0x213C},    {0x2146, 0x2149, 0x2146},    {0x2C30, 0x2C5F, 0x2C00},
 40    {0x2C77, 0x2C7B, 0x2C77},    {0x2D00, 0x2D25, 0x10A0},    {0xA730, 0xA731, 0xA730},
 41    {0xA771, 0xA778, 0xA771},    {0xAB30, 0xAB52, 0xAB30},    {0xAB54, 0xAB5A, 0xAB54},
 42    {0xAB60, 0xAB68, 0xAB60},    {0xAB70, 0xABBF, 0x13A0},    {0xFB00, 0xFB06, 0xFB00},
 43    {0xFB13, 0xFB17, 0xFB13},    {0xFF41, 0xFF5A, 0xFF21},    {0x10428, 0x1044F, 0x10400},
 44    {0x104D8, 0x104FB, 0x104B0}, {0x10597, 0x105A1, 0x10570}, {0x105A3, 0x105B1, 0x1057C},
 45    {0x105B3, 0x105B9, 0x1058C}, {0x105BB, 0x105BC, 0x10594}, {0x10CC0, 0x10CF2, 0x10C80},
 46    {0x118C0, 0x118DF, 0x118A0}, {0x16E60, 0x16E7F, 0x16E40}, {0x1D41A, 0x1D433, 0x1D41A},
 47    {0x1D44E, 0x1D454, 0x1D44E}, {0x1D456, 0x1D467, 0x1D456}, {0x1D482, 0x1D49B, 0x1D482},
 48    {0x1D4B6, 0x1D4B9, 0x1D4B6}, {0x1D4BD, 0x1D4C3, 0x1D4BD}, {0x1D4C5, 0x1D4CF, 0x1D4C5},
 49    {0x1D4EA, 0x1D503, 0x1D4EA}, {0x1D51E, 0x1D537, 0x1D51E}, {0x1D552, 0x1D56B, 0x1D552},
 50    {0x1D586, 0x1D59F, 0x1D586}, {0x1D5BA, 0x1D5D3, 0x1D5BA}, {0x1D5EE, 0x1D607, 0x1D5EE},
 51    {0x1D622, 0x1D63B, 0x1D622}, {0x1D656, 0x1D66F, 0x1D656}, {0x1D68A, 0x1D6A5, 0x1D68A},
 52    {0x1D6C2, 0x1D6DA, 0x1D6C2}, {0x1D6DC, 0x1D6E1, 0x1D6DC}, {0x1D6FC, 0x1D714, 0x1D6FC},
 53    {0x1D716, 0x1D71B, 0x1D716}, {0x1D736, 0x1D74E, 0x1D736}, {0x1D750, 0x1D755, 0x1D750},
 54    {0x1D770, 0x1D788, 0x1D770}, {0x1D78A, 0x1D78F, 0x1D78A}, {0x1D7AA, 0x1D7C2, 0x1D7AA},
 55    {0x1D7C4, 0x1D7C9, 0x1D7C4}, {0x1DF00, 0x1DF09, 0x1DF00}, {0x1DF0B, 0x1DF1E, 0x1DF0B},
 56    {0x1DF25, 0x1DF2A, 0x1DF25}, {0x1E922, 0x1E943, 0x1E900},
 57};
 58
 59static const Rune lower1[][2] = {
 60    {0x00B5, 0x039C}, {0x00DF, 0x00DF}, {0x00FF, 0x0178}, {0x0131, 0x0049},   {0x0138, 0x0138},
 61    {0x0149, 0x0149}, {0x017F, 0x0053}, {0x0180, 0x0243}, {0x0188, 0x0187},   {0x018C, 0x018B},
 62    {0x018D, 0x018D}, {0x0192, 0x0191}, {0x0195, 0x01F6}, {0x0199, 0x0198},   {0x019A, 0x023D},
 63    {0x019B, 0x019B}, {0x019E, 0x0220}, {0x01A8, 0x01A7}, {0x01AD, 0x01AC},   {0x01B0, 0x01AF},
 64    {0x01B9, 0x01B8}, {0x01BA, 0x01BA}, {0x01BD, 0x01BC}, {0x01BE, 0x01BE},   {0x01BF, 0x01F7},
 65    {0x01C6, 0x01C4}, {0x01C9, 0x01C7}, {0x01CC, 0x01CA}, {0x01DD, 0x018E},   {0x01F0, 0x01F0},
 66    {0x01F3, 0x01F1}, {0x01F5, 0x01F4}, {0x0221, 0x0221}, {0x023C, 0x023B},   {0x0242, 0x0241},
 67    {0x0250, 0x2C6F}, {0x0251, 0x2C6D}, {0x0252, 0x2C70}, {0x0253, 0x0181},   {0x0254, 0x0186},
 68    {0x0255, 0x0255}, {0x0258, 0x0258}, {0x0259, 0x018F}, {0x025A, 0x025A},   {0x025B, 0x0190},
 69    {0x025C, 0xA7AB}, {0x0260, 0x0193}, {0x0261, 0xA7AC}, {0x0262, 0x0262},   {0x0263, 0x0194},
 70    {0x0264, 0x0264}, {0x0265, 0xA78D}, {0x0266, 0xA7AA}, {0x0267, 0x0267},   {0x0268, 0x0197},
 71    {0x0269, 0x0196}, {0x026A, 0xA7AE}, {0x026B, 0x2C62}, {0x026C, 0xA7AD},   {0x026F, 0x019C},
 72    {0x0270, 0x0270}, {0x0271, 0x2C6E}, {0x0272, 0x019D}, {0x0275, 0x019F},   {0x027D, 0x2C64},
 73    {0x0280, 0x01A6}, {0x0281, 0x0281}, {0x0282, 0xA7C5}, {0x0283, 0x01A9},   {0x0287, 0xA7B1},
 74    {0x0288, 0x01AE}, {0x0289, 0x0244}, {0x028C, 0x0245}, {0x0292, 0x01B7},   {0x0293, 0x0293},
 75    {0x029D, 0xA7B2}, {0x029E, 0xA7B0}, {0x0377, 0x0376}, {0x0390, 0x0390},   {0x03AC, 0x0386},
 76    {0x03B0, 0x03B0}, {0x03C2, 0x03A3}, {0x03CC, 0x038C}, {0x03D0, 0x0392},   {0x03D1, 0x0398},
 77    {0x03D5, 0x03A6}, {0x03D6, 0x03A0}, {0x03D7, 0x03CF}, {0x03F0, 0x039A},   {0x03F1, 0x03A1},
 78    {0x03F2, 0x03F9}, {0x03F3, 0x037F}, {0x03F5, 0x0395}, {0x03F8, 0x03F7},   {0x03FB, 0x03FA},
 79    {0x03FC, 0x03FC}, {0x04CF, 0x04C0}, {0x0560, 0x0560}, {0x1C80, 0x0412},   {0x1C81, 0x0414},
 80    {0x1C82, 0x041E}, {0x1C85, 0x0422}, {0x1C86, 0x042A}, {0x1C87, 0x0462},   {0x1C88, 0xA64A},
 81    {0x1D79, 0xA77D}, {0x1D7D, 0x2C63}, {0x1D8E, 0xA7C6}, {0x1E9B, 0x1E60},   {0x1E9F, 0x1E9F},
 82    {0x1F50, 0x1F50}, {0x1F51, 0x1F59}, {0x1F52, 0x1F52}, {0x1F53, 0x1F5B},   {0x1F54, 0x1F54},
 83    {0x1F55, 0x1F5D}, {0x1F56, 0x1F56}, {0x1F57, 0x1F5F}, {0x1FB2, 0x1FB2},   {0x1FB3, 0x1FBC},
 84    {0x1FB4, 0x1FB4}, {0x1FBE, 0x0399}, {0x1FC2, 0x1FC2}, {0x1FC3, 0x1FCC},   {0x1FC4, 0x1FC4},
 85    {0x1FE5, 0x1FEC}, {0x1FF2, 0x1FF2}, {0x1FF3, 0x1FFC}, {0x1FF4, 0x1FF4},   {0x210A, 0x210A},
 86    {0x2113, 0x2113}, {0x212F, 0x212F}, {0x2134, 0x2134}, {0x2139, 0x2139},   {0x214E, 0x2132},
 87    {0x2184, 0x2183}, {0x2C61, 0x2C60}, {0x2C65, 0x023A}, {0x2C66, 0x023E},   {0x2C71, 0x2C71},
 88    {0x2C73, 0x2C72}, {0x2C74, 0x2C74}, {0x2C76, 0x2C75}, {0x2CE4, 0x2CE4},   {0x2CF3, 0x2CF2},
 89    {0x2D27, 0x10C7}, {0x2D2D, 0x10CD}, {0xA78C, 0xA78B}, {0xA78E, 0xA78E},   {0xA794, 0xA7C4},
 90    {0xA795, 0xA795}, {0xA7AF, 0xA7AF}, {0xA7D1, 0xA7D0}, {0xA7D3, 0xA7D3},   {0xA7D5, 0xA7D5},
 91    {0xA7F6, 0xA7F5}, {0xA7FA, 0xA7FA}, {0xAB53, 0xA7B3}, {0x1D4BB, 0x1D4BB}, {0x1D7CB, 0x1D7CB},
 92};
 93
 94int
 95islowerrune(Rune r)
 96{
 97  const Rune *match;
 98
 99  if ((match = bsearch(&r, lower4, nelem(lower4), sizeof *lower4, &rune2cmp)))
100    return !((r - match[0]) % 2);
101  if (bsearch(&r, lower2, nelem(lower2), sizeof *lower2, &rune2cmp))
102    return 1;
103  if (bsearch(&r, lower1, nelem(lower1), sizeof *lower1, &rune1cmp))
104    return 1;
105  return 0;
106}
107
108int
109toupperrune(Rune r)
110{
111  Rune *match;
112
113  match = bsearch(&r, lower4, nelem(lower4), sizeof *lower4, &rune2cmp);
114  if (match)
115    return ((r - match[0]) % 2) ? r : r - 1;
116  match = bsearch(&r, lower2, nelem(lower2), sizeof *lower2, &rune2cmp);
117  if (match)
118    return match[2] + (r - match[0]);
119  match = bsearch(&r, lower1, nelem(lower1), sizeof *lower1, &rune1cmp);
120  if (match)
121    return match[1];
122  return r;
123}