Annotation of embedaddon/php/ext/mbstring/oniguruma/enc/mktable.c, revision 1.1
1.1 ! misho 1: /**********************************************************************
! 2: mktable.c
! 3: **********************************************************************/
! 4: /*-
! 5: * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
! 6: * All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: *
! 17: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
! 18: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 19: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 20: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
! 21: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 22: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 23: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 24: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 25: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 26: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 27: * SUCH DAMAGE.
! 28: */
! 29:
! 30: #include <stdlib.h>
! 31: #include <stdio.h>
! 32:
! 33: #define NOT_RUBY
! 34: #include "regenc.h"
! 35:
! 36: #define UNICODE_ISO_8859_1 0
! 37: #define ISO_8859_1 1
! 38: #define ISO_8859_2 2
! 39: #define ISO_8859_3 3
! 40: #define ISO_8859_4 4
! 41: #define ISO_8859_5 5
! 42: #define ISO_8859_6 6
! 43: #define ISO_8859_7 7
! 44: #define ISO_8859_8 8
! 45: #define ISO_8859_9 9
! 46: #define ISO_8859_10 10
! 47: #define ISO_8859_11 11
! 48: #define ISO_8859_13 12
! 49: #define ISO_8859_14 13
! 50: #define ISO_8859_15 14
! 51: #define ISO_8859_16 15
! 52: #define KOI8 16
! 53: #define KOI8_R 17
! 54:
! 55: typedef struct {
! 56: int num;
! 57: char* name;
! 58: } ENC_INFO;
! 59:
! 60: static ENC_INFO Info[] = {
! 61: { UNICODE_ISO_8859_1, "UNICODE_ISO_8859_1" },
! 62: { ISO_8859_1, "ISO_8859_1" },
! 63: { ISO_8859_2, "ISO_8859_2" },
! 64: { ISO_8859_3, "ISO_8859_3" },
! 65: { ISO_8859_4, "ISO_8859_4" },
! 66: { ISO_8859_5, "ISO_8859_5" },
! 67: { ISO_8859_6, "ISO_8859_6" },
! 68: { ISO_8859_7, "ISO_8859_7" },
! 69: { ISO_8859_8, "ISO_8859_8" },
! 70: { ISO_8859_9, "ISO_8859_9" },
! 71: { ISO_8859_10, "ISO_8859_10" },
! 72: { ISO_8859_11, "ISO_8859_11" },
! 73: { ISO_8859_13, "ISO_8859_13" },
! 74: { ISO_8859_14, "ISO_8859_14" },
! 75: { ISO_8859_15, "ISO_8859_15" },
! 76: { ISO_8859_16, "ISO_8859_16" },
! 77: { KOI8, "KOI8" },
! 78: { KOI8_R, "KOI8_R" }
! 79: };
! 80:
! 81:
! 82: static int IsAlpha(int enc, int c)
! 83: {
! 84: if (c >= 0x41 && c <= 0x5a) return 1;
! 85: if (c >= 0x61 && c <= 0x7a) return 1;
! 86:
! 87: switch (enc) {
! 88: case UNICODE_ISO_8859_1:
! 89: case ISO_8859_1:
! 90: case ISO_8859_9:
! 91: if (c == 0xaa) return 1;
! 92: if (c == 0xb5) return 1;
! 93: if (c == 0xba) return 1;
! 94: if (c >= 0xc0 && c <= 0xd6) return 1;
! 95: if (c >= 0xd8 && c <= 0xf6) return 1;
! 96: if (c >= 0xf8 && c <= 0xff) return 1;
! 97: break;
! 98:
! 99: case ISO_8859_2:
! 100: if (c == 0xa1 || c == 0xa3) return 1;
! 101: if (c == 0xa5 || c == 0xa6) return 1;
! 102: if (c >= 0xa9 && c <= 0xac) return 1;
! 103: if (c >= 0xae && c <= 0xaf) return 1;
! 104: if (c == 0xb1 || c == 0xb3) return 1;
! 105: if (c == 0xb5 || c == 0xb6) return 1;
! 106: if (c >= 0xb9 && c <= 0xbc) return 1;
! 107: if (c >= 0xbe && c <= 0xbf) return 1;
! 108: if (c >= 0xc0 && c <= 0xd6) return 1;
! 109: if (c >= 0xd8 && c <= 0xf6) return 1;
! 110: if (c >= 0xf8 && c <= 0xfe) return 1;
! 111: break;
! 112:
! 113: case ISO_8859_3:
! 114: if (c == 0xa1) return 1;
! 115: if (c == 0xa6) return 1;
! 116: if (c >= 0xa9 && c <= 0xac) return 1;
! 117: if (c == 0xaf) return 1;
! 118: if (c == 0xb1) return 1;
! 119: if (c == 0xb5 || c == 0xb6) return 1;
! 120: if (c >= 0xb9 && c <= 0xbc) return 1;
! 121: if (c == 0xbf) return 1;
! 122: if (c >= 0xc0 && c <= 0xc2) return 1;
! 123: if (c >= 0xc4 && c <= 0xcf) return 1;
! 124: if (c >= 0xd1 && c <= 0xd6) return 1;
! 125: if (c >= 0xd8 && c <= 0xe2) return 1;
! 126: if (c >= 0xe4 && c <= 0xef) return 1;
! 127: if (c >= 0xf1 && c <= 0xf6) return 1;
! 128: if (c >= 0xf8 && c <= 0xfe) return 1;
! 129: break;
! 130:
! 131: case ISO_8859_4:
! 132: if (c >= 0xa1 && c <= 0xa3) return 1;
! 133: if (c == 0xa5 || c == 0xa6) return 1;
! 134: if (c >= 0xa9 && c <= 0xac) return 1;
! 135: if (c == 0xae) return 1;
! 136: if (c == 0xb1 || c == 0xb3) return 1;
! 137: if (c == 0xb5 || c == 0xb6) return 1;
! 138: if (c >= 0xb9 && c <= 0xbf) return 1;
! 139: if (c >= 0xc0 && c <= 0xd6) return 1;
! 140: if (c >= 0xd8 && c <= 0xf6) return 1;
! 141: if (c >= 0xf8 && c <= 0xfe) return 1;
! 142: break;
! 143:
! 144: case ISO_8859_5:
! 145: if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1;
! 146: if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1;
! 147: break;
! 148:
! 149: case ISO_8859_6:
! 150: if (c >= 0xc1 && c <= 0xda) return 1;
! 151: if (c >= 0xe0 && c <= 0xf2) return 1;
! 152: break;
! 153:
! 154: case ISO_8859_7:
! 155: if (c == 0xb6) return 1;
! 156: if (c >= 0xb8 && c <= 0xba) return 1;
! 157: if (c == 0xbc) return 1;
! 158: if (c >= 0xbe && c <= 0xbf) return 1;
! 159: if (c == 0xc0) return 1;
! 160: if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1;
! 161: if (c >= 0xdc && c <= 0xfe) return 1;
! 162: break;
! 163:
! 164: case ISO_8859_8:
! 165: if (c == 0xb5) return 1;
! 166: if (c >= 0xe0 && c <= 0xfa) return 1;
! 167: break;
! 168:
! 169: case ISO_8859_10:
! 170: if (c >= 0xa1 && c <= 0xa6) return 1;
! 171: if (c >= 0xa8 && c <= 0xac) return 1;
! 172: if (c == 0xae || c == 0xaf) return 1;
! 173: if (c >= 0xb1 && c <= 0xb6) return 1;
! 174: if (c >= 0xb8 && c <= 0xbc) return 1;
! 175: if (c >= 0xbe && c <= 0xff) return 1;
! 176: break;
! 177:
! 178: case ISO_8859_11:
! 179: if (c >= 0xa1 && c <= 0xda) return 1;
! 180: if (c >= 0xdf && c <= 0xfb) return 1;
! 181: break;
! 182:
! 183: case ISO_8859_13:
! 184: if (c == 0xa8) return 1;
! 185: if (c == 0xaa) return 1;
! 186: if (c == 0xaf) return 1;
! 187: if (c == 0xb5) return 1;
! 188: if (c == 0xb8) return 1;
! 189: if (c == 0xba) return 1;
! 190: if (c >= 0xbf && c <= 0xd6) return 1;
! 191: if (c >= 0xd8 && c <= 0xf6) return 1;
! 192: if (c >= 0xf8 && c <= 0xfe) return 1;
! 193: break;
! 194:
! 195: case ISO_8859_14:
! 196: if (c == 0xa1 || c == 0xa2) return 1;
! 197: if (c == 0xa4 || c == 0xa5) return 1;
! 198: if (c == 0xa6 || c == 0xa8) return 1;
! 199: if (c >= 0xaa && c <= 0xac) return 1;
! 200: if (c >= 0xaf && c <= 0xb5) return 1;
! 201: if (c >= 0xb7 && c <= 0xff) return 1;
! 202: break;
! 203:
! 204: case ISO_8859_15:
! 205: if (c == 0xaa) return 1;
! 206: if (c == 0xb5) return 1;
! 207: if (c == 0xba) return 1;
! 208: if (c >= 0xc0 && c <= 0xd6) return 1;
! 209: if (c >= 0xd8 && c <= 0xf6) return 1;
! 210: if (c >= 0xf8 && c <= 0xff) return 1;
! 211: if (c == 0xa6) return 1;
! 212: if (c == 0xa8) return 1;
! 213: if (c == 0xb4) return 1;
! 214: if (c == 0xb8) return 1;
! 215: if (c == 0xbc) return 1;
! 216: if (c == 0xbd) return 1;
! 217: if (c == 0xbe) return 1;
! 218: break;
! 219:
! 220: case ISO_8859_16:
! 221: if (c == 0xa1) return 1;
! 222: if (c == 0xa2) return 1;
! 223: if (c == 0xa3) return 1;
! 224: if (c == 0xa6) return 1;
! 225: if (c == 0xa8) return 1;
! 226: if (c == 0xaa) return 1;
! 227: if (c == 0xac) return 1;
! 228: if (c == 0xae) return 1;
! 229: if (c == 0xaf) return 1;
! 230: if (c == 0xb2) return 1;
! 231: if (c == 0xb3) return 1;
! 232: if (c == 0xb4) return 1;
! 233: if (c >= 0xb8 && c <= 0xba) return 1;
! 234: if (c == 0xbc) return 1;
! 235: if (c == 0xbd) return 1;
! 236: if (c == 0xbe) return 1;
! 237: if (c == 0xbf) return 1;
! 238: if (c >= 0xc0 && c <= 0xde) return 1;
! 239: if (c >= 0xdf && c <= 0xff) return 1;
! 240: break;
! 241:
! 242: case KOI8_R:
! 243: if (c == 0xa3 || c == 0xb3) return 1;
! 244: /* fall */
! 245: case KOI8:
! 246: if (c >= 0xc0 && c <= 0xff) return 1;
! 247: break;
! 248:
! 249: default:
! 250: exit(-1);
! 251: }
! 252:
! 253: return 0;
! 254: }
! 255:
! 256: static int IsBlank(int enc, int c)
! 257: {
! 258: if (c == 0x09 || c == 0x20) return 1;
! 259:
! 260: switch (enc) {
! 261: case UNICODE_ISO_8859_1:
! 262: case ISO_8859_1:
! 263: case ISO_8859_2:
! 264: case ISO_8859_3:
! 265: case ISO_8859_4:
! 266: case ISO_8859_5:
! 267: case ISO_8859_6:
! 268: case ISO_8859_7:
! 269: case ISO_8859_8:
! 270: case ISO_8859_9:
! 271: case ISO_8859_10:
! 272: case ISO_8859_11:
! 273: case ISO_8859_13:
! 274: case ISO_8859_14:
! 275: case ISO_8859_15:
! 276: case ISO_8859_16:
! 277: case KOI8:
! 278: if (c == 0xa0) return 1;
! 279: break;
! 280:
! 281: case KOI8_R:
! 282: if (c == 0x9a) return 1;
! 283: break;
! 284:
! 285: default:
! 286: exit(-1);
! 287: }
! 288:
! 289: return 0;
! 290: }
! 291:
! 292: static int IsCntrl(int enc, int c)
! 293: {
! 294: if (c >= 0x00 && c <= 0x1F) return 1;
! 295:
! 296: switch (enc) {
! 297: case UNICODE_ISO_8859_1:
! 298: if (c == 0xad) return 1;
! 299: /* fall */
! 300: case ISO_8859_1:
! 301: case ISO_8859_2:
! 302: case ISO_8859_3:
! 303: case ISO_8859_4:
! 304: case ISO_8859_5:
! 305: case ISO_8859_6:
! 306: case ISO_8859_7:
! 307: case ISO_8859_8:
! 308: case ISO_8859_9:
! 309: case ISO_8859_10:
! 310: case ISO_8859_11:
! 311: case ISO_8859_13:
! 312: case ISO_8859_14:
! 313: case ISO_8859_15:
! 314: case ISO_8859_16:
! 315: case KOI8:
! 316: if (c >= 0x7f && c <= 0x9F) return 1;
! 317: break;
! 318:
! 319:
! 320: case KOI8_R:
! 321: if (c == 0x7f) return 1;
! 322: break;
! 323:
! 324: default:
! 325: exit(-1);
! 326: }
! 327:
! 328: return 0;
! 329: }
! 330:
! 331: static int IsDigit(int enc, int c)
! 332: {
! 333: if (c >= 0x30 && c <= 0x39) return 1;
! 334: return 0;
! 335: }
! 336:
! 337: static int IsGraph(int enc, int c)
! 338: {
! 339: if (c >= 0x21 && c <= 0x7e) return 1;
! 340:
! 341: switch (enc) {
! 342: case UNICODE_ISO_8859_1:
! 343: case ISO_8859_1:
! 344: case ISO_8859_2:
! 345: case ISO_8859_4:
! 346: case ISO_8859_5:
! 347: case ISO_8859_9:
! 348: case ISO_8859_10:
! 349: case ISO_8859_13:
! 350: case ISO_8859_14:
! 351: case ISO_8859_15:
! 352: case ISO_8859_16:
! 353: if (c >= 0xa1 && c <= 0xff) return 1;
! 354: break;
! 355:
! 356: case ISO_8859_3:
! 357: if (c >= 0xa1) {
! 358: if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 ||
! 359: c == 0xe3 || c == 0xf0)
! 360: return 0;
! 361: else
! 362: return 1;
! 363: }
! 364: break;
! 365:
! 366: case ISO_8859_6:
! 367: if (c == 0xa4 || c == 0xac || c == 0xad || c == 0xbb || c == 0xbf)
! 368: return 1;
! 369: if (c >= 0xc1 && c <= 0xda) return 1;
! 370: if (c >= 0xe0 && c <= 0xf2) return 1;
! 371: break;
! 372:
! 373: case ISO_8859_7:
! 374: if (c >= 0xa1 && c <= 0xfe &&
! 375: c != 0xa4 && c != 0xa5 && c != 0xaa &&
! 376: c != 0xae && c != 0xd2) return 1;
! 377: break;
! 378:
! 379: case ISO_8859_8:
! 380: if (c >= 0xa2 && c <= 0xfa) {
! 381: if (c >= 0xbf && c <= 0xde) return 0;
! 382: return 1;
! 383: }
! 384: break;
! 385:
! 386: case ISO_8859_11:
! 387: if (c >= 0xa1 && c <= 0xda) return 1;
! 388: if (c >= 0xdf && c <= 0xfb) return 1;
! 389: break;
! 390:
! 391: case KOI8:
! 392: if (c >= 0xc0 && c <= 0xff) return 1;
! 393: break;
! 394:
! 395: case KOI8_R:
! 396: if (c >= 0x80 && c <= 0xff && c != 0x9a) return 1;
! 397: break;
! 398:
! 399: default:
! 400: exit(-1);
! 401: }
! 402:
! 403: return 0;
! 404: }
! 405:
! 406: static int IsLower(int enc, int c)
! 407: {
! 408: if (c >= 0x61 && c <= 0x7a) return 1;
! 409:
! 410: switch (enc) {
! 411: case UNICODE_ISO_8859_1:
! 412: case ISO_8859_1:
! 413: case ISO_8859_9:
! 414: if (c == 0xaa) return 1;
! 415: if (c == 0xb5) return 1;
! 416: if (c == 0xba) return 1;
! 417: if (c >= 0xdf && c <= 0xf6) return 1;
! 418: if (c >= 0xf8 && c <= 0xff) return 1;
! 419: break;
! 420:
! 421: case ISO_8859_2:
! 422: if (c == 0xb1 || c == 0xb3) return 1;
! 423: if (c == 0xb5 || c == 0xb6) return 1;
! 424: if (c >= 0xb9 && c <= 0xbc) return 1;
! 425: if (c >= 0xbe && c <= 0xbf) return 1;
! 426: if (c >= 0xdf && c <= 0xf6) return 1;
! 427: if (c >= 0xf8 && c <= 0xfe) return 1;
! 428: break;
! 429:
! 430: case ISO_8859_3:
! 431: if (c == 0xb1) return 1;
! 432: if (c == 0xb5 || c == 0xb6) return 1;
! 433: if (c >= 0xb9 && c <= 0xbc) return 1;
! 434: if (c == 0xbf) return 1;
! 435: if (c == 0xdf) return 1;
! 436: if (c >= 0xe0 && c <= 0xe2) return 1;
! 437: if (c >= 0xe4 && c <= 0xef) return 1;
! 438: if (c >= 0xf1 && c <= 0xf6) return 1;
! 439: if (c >= 0xf8 && c <= 0xfe) return 1;
! 440: break;
! 441:
! 442: case ISO_8859_4:
! 443: if (c == 0xa2) return 1;
! 444: if (c == 0xb1 || c == 0xb3) return 1;
! 445: if (c == 0xb5 || c == 0xb6) return 1;
! 446: if (c >= 0xb9 && c <= 0xbc) return 1;
! 447: if (c >= 0xbe && c <= 0xbf) return 1;
! 448: if (c == 0xdf) return 1;
! 449: if (c >= 0xe0 && c <= 0xf6) return 1;
! 450: if (c >= 0xf8 && c <= 0xfe) return 1;
! 451: break;
! 452:
! 453: case ISO_8859_5:
! 454: if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1;
! 455: break;
! 456:
! 457: case ISO_8859_6:
! 458: break;
! 459:
! 460: case ISO_8859_7:
! 461: if (c == 0xc0) return 1;
! 462: if (c >= 0xdc && c <= 0xfe) return 1;
! 463: break;
! 464:
! 465: case ISO_8859_8:
! 466: if (c == 0xb5) return 1;
! 467: break;
! 468:
! 469: case ISO_8859_10:
! 470: if (c >= 0xb1 && c <= 0xb6) return 1;
! 471: if (c >= 0xb8 && c <= 0xbc) return 1;
! 472: if (c == 0xbe || c == 0xbf) return 1;
! 473: if (c >= 0xdf && c <= 0xff) return 1;
! 474: break;
! 475:
! 476: case ISO_8859_11:
! 477: break;
! 478:
! 479: case ISO_8859_13:
! 480: if (c == 0xb5) return 1;
! 481: if (c == 0xb8) return 1;
! 482: if (c == 0xba) return 1;
! 483: if (c == 0xbf) return 1;
! 484: if (c >= 0xdf && c <= 0xf6) return 1;
! 485: if (c >= 0xf8 && c <= 0xfe) return 1;
! 486: break;
! 487:
! 488: case ISO_8859_14:
! 489: if (c == 0xa2) return 1;
! 490: if (c == 0xa5) return 1;
! 491: if (c == 0xab) return 1;
! 492: if (c == 0xb1 || c == 0xb3 || c == 0xb5) return 1;
! 493: if (c >= 0xb8 && c <= 0xba) return 1;
! 494: if (c == 0xbc) return 1;
! 495: if (c == 0xbe || c == 0xbf) return 1;
! 496: if (c >= 0xdf && c <= 0xff) return 1;
! 497: break;
! 498:
! 499: case ISO_8859_15:
! 500: if (c == 0xaa) return 1;
! 501: if (c == 0xb5) return 1;
! 502: if (c == 0xba) return 1;
! 503: if (c >= 0xdf && c <= 0xf6) return 1;
! 504: if (c >= 0xf8 && c <= 0xff) return 1;
! 505: if (c == 0xa8) return 1;
! 506: if (c == 0xb8) return 1;
! 507: if (c == 0xbd) return 1;
! 508: break;
! 509:
! 510: case ISO_8859_16:
! 511: if (c == 0xa2) return 1;
! 512: if (c == 0xa8) return 1;
! 513: if (c == 0xae) return 1;
! 514: if (c == 0xb3) return 1;
! 515: if (c >= 0xb8 && c <= 0xba) return 1;
! 516: if (c == 0xbd) return 1;
! 517: if (c == 0xbf) return 1;
! 518: if (c >= 0xdf && c <= 0xff) return 1;
! 519: break;
! 520:
! 521: case KOI8_R:
! 522: if (c == 0xa3) return 1;
! 523: /* fall */
! 524: case KOI8:
! 525: if (c >= 0xc0 && c <= 0xdf) return 1;
! 526: break;
! 527:
! 528: default:
! 529: exit(-1);
! 530: }
! 531:
! 532: return 0;
! 533: }
! 534:
! 535: static int IsPrint(int enc, int c)
! 536: {
! 537: if (c >= 0x20 && c <= 0x7e) return 1;
! 538:
! 539: switch (enc) {
! 540: case UNICODE_ISO_8859_1:
! 541: if (c >= 0x09 && c <= 0x0d) return 1;
! 542: if (c == 0x85) return 1;
! 543: /* fall */
! 544: case ISO_8859_1:
! 545: case ISO_8859_2:
! 546: case ISO_8859_4:
! 547: case ISO_8859_5:
! 548: case ISO_8859_9:
! 549: case ISO_8859_10:
! 550: case ISO_8859_13:
! 551: case ISO_8859_14:
! 552: case ISO_8859_15:
! 553: case ISO_8859_16:
! 554: if (c >= 0xa0 && c <= 0xff) return 1;
! 555: break;
! 556:
! 557: case ISO_8859_3:
! 558: if (c >= 0xa0) {
! 559: if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 ||
! 560: c == 0xe3 || c == 0xf0)
! 561: return 0;
! 562: else
! 563: return 1;
! 564: }
! 565: break;
! 566:
! 567: case ISO_8859_6:
! 568: if (c == 0xa0) return 1;
! 569: if (c == 0xa4 || c == 0xac || c == 0xad || c == 0xbb || c == 0xbf)
! 570: return 1;
! 571: if (c >= 0xc1 && c <= 0xda) return 1;
! 572: if (c >= 0xe0 && c <= 0xf2) return 1;
! 573: break;
! 574:
! 575: case ISO_8859_7:
! 576: if (c >= 0xa0 && c <= 0xfe &&
! 577: c != 0xa4 && c != 0xa5 && c != 0xaa &&
! 578: c != 0xae && c != 0xd2) return 1;
! 579: break;
! 580:
! 581: case ISO_8859_8:
! 582: if (c >= 0xa0 && c <= 0xfa) {
! 583: if (c >= 0xbf && c <= 0xde) return 0;
! 584: if (c == 0xa1) return 0;
! 585: return 1;
! 586: }
! 587: break;
! 588:
! 589: case ISO_8859_11:
! 590: if (c >= 0xa0 && c <= 0xda) return 1;
! 591: if (c >= 0xdf && c <= 0xfb) return 1;
! 592: break;
! 593:
! 594: case KOI8:
! 595: if (c == 0xa0) return 1;
! 596: if (c >= 0xc0 && c <= 0xff) return 1;
! 597: break;
! 598:
! 599: case KOI8_R:
! 600: if (c >= 0x80 && c <= 0xff) return 1;
! 601: break;
! 602:
! 603: default:
! 604: exit(-1);
! 605: }
! 606:
! 607: return 0;
! 608: }
! 609:
! 610: static int IsPunct(int enc, int c)
! 611: {
! 612: if (enc == UNICODE_ISO_8859_1) {
! 613: if (c == 0x24 || c == 0x2b || c == 0x5e || c == 0x60 ||
! 614: c == 0x7c || c == 0x7e) return 1;
! 615: if (c >= 0x3c && c <= 0x3e) return 1;
! 616: }
! 617:
! 618: if (c >= 0x21 && c <= 0x2f) return 1;
! 619: if (c >= 0x3a && c <= 0x40) return 1;
! 620: if (c >= 0x5b && c <= 0x60) return 1;
! 621: if (c >= 0x7b && c <= 0x7e) return 1;
! 622:
! 623: switch (enc) {
! 624: case ISO_8859_1:
! 625: case ISO_8859_9:
! 626: case ISO_8859_15:
! 627: if (c == 0xad) return 1;
! 628: /* fall */
! 629: case UNICODE_ISO_8859_1:
! 630: if (c == 0xa1) return 1;
! 631: if (c == 0xab) return 1;
! 632: if (c == 0xb7) return 1;
! 633: if (c == 0xbb) return 1;
! 634: if (c == 0xbf) return 1;
! 635: break;
! 636:
! 637: case ISO_8859_2:
! 638: case ISO_8859_4:
! 639: case ISO_8859_5:
! 640: case ISO_8859_14:
! 641: if (c == 0xad) return 1;
! 642: break;
! 643:
! 644: case ISO_8859_3:
! 645: case ISO_8859_10:
! 646: if (c == 0xad) return 1;
! 647: if (c == 0xb7) return 1;
! 648: if (c == 0xbd) return 1;
! 649: break;
! 650:
! 651: case ISO_8859_6:
! 652: if (c == 0xac) return 1;
! 653: if (c == 0xad) return 1;
! 654: if (c == 0xbb) return 1;
! 655: if (c == 0xbf) return 1;
! 656: break;
! 657:
! 658: case ISO_8859_7:
! 659: if (c == 0xa1 || c == 0xa2) return 1;
! 660: if (c == 0xab) return 1;
! 661: if (c == 0xaf) return 1;
! 662: if (c == 0xad) return 1;
! 663: if (c == 0xb7 || c == 0xbb) return 1;
! 664: break;
! 665:
! 666: case ISO_8859_8:
! 667: if (c == 0xab) return 1;
! 668: if (c == 0xad) return 1;
! 669: if (c == 0xb7) return 1;
! 670: if (c == 0xbb) return 1;
! 671: if (c == 0xdf) return 1;
! 672: break;
! 673:
! 674: case ISO_8859_13:
! 675: if (c == 0xa1 || c == 0xa5) return 1;
! 676: if (c == 0xab || c == 0xad) return 1;
! 677: if (c == 0xb4 || c == 0xb7) return 1;
! 678: if (c == 0xbb) return 1;
! 679: if (c == 0xff) return 1;
! 680: break;
! 681:
! 682: case ISO_8859_16:
! 683: if (c == 0xa5) return 1;
! 684: if (c == 0xab) return 1;
! 685: if (c == 0xad) return 1;
! 686: if (c == 0xb5) return 1;
! 687: if (c == 0xb7) return 1;
! 688: if (c == 0xbb) return 1;
! 689: break;
! 690:
! 691: case KOI8_R:
! 692: if (c == 0x9e) return 1;
! 693: break;
! 694:
! 695: case ISO_8859_11:
! 696: case KOI8:
! 697: break;
! 698:
! 699: default:
! 700: exit(-1);
! 701: }
! 702:
! 703: return 0;
! 704: }
! 705:
! 706: static int IsSpace(int enc, int c)
! 707: {
! 708: if (c >= 0x09 && c <= 0x0d) return 1;
! 709: if (c == 0x20) return 1;
! 710:
! 711: switch (enc) {
! 712: case UNICODE_ISO_8859_1:
! 713: if (c == 0x85) return 1;
! 714: /* fall */
! 715: case ISO_8859_1:
! 716: case ISO_8859_2:
! 717: case ISO_8859_3:
! 718: case ISO_8859_4:
! 719: case ISO_8859_5:
! 720: case ISO_8859_6:
! 721: case ISO_8859_7:
! 722: case ISO_8859_8:
! 723: case ISO_8859_9:
! 724: case ISO_8859_10:
! 725: case ISO_8859_11:
! 726: case ISO_8859_13:
! 727: case ISO_8859_14:
! 728: case ISO_8859_15:
! 729: case ISO_8859_16:
! 730: case KOI8:
! 731: if (c == 0xa0) return 1;
! 732: break;
! 733:
! 734: case KOI8_R:
! 735: if (c == 0x9a) return 1;
! 736: break;
! 737:
! 738: default:
! 739: exit(-1);
! 740: }
! 741:
! 742: return 0;
! 743: }
! 744:
! 745: static int IsUpper(int enc, int c)
! 746: {
! 747: if (c >= 0x41 && c <= 0x5a) return 1;
! 748:
! 749: switch (enc) {
! 750: case UNICODE_ISO_8859_1:
! 751: case ISO_8859_1:
! 752: case ISO_8859_9:
! 753: if (c >= 0xc0 && c <= 0xd6) return 1;
! 754: if (c >= 0xd8 && c <= 0xde) return 1;
! 755: break;
! 756:
! 757: case ISO_8859_2:
! 758: if (c == 0xa1 || c == 0xa3) return 1;
! 759: if (c == 0xa5 || c == 0xa6) return 1;
! 760: if (c >= 0xa9 && c <= 0xac) return 1;
! 761: if (c >= 0xae && c <= 0xaf) return 1;
! 762: if (c >= 0xc0 && c <= 0xd6) return 1;
! 763: if (c >= 0xd8 && c <= 0xde) return 1;
! 764: break;
! 765:
! 766: case ISO_8859_3:
! 767: if (c == 0xa1) return 1;
! 768: if (c == 0xa6) return 1;
! 769: if (c >= 0xa9 && c <= 0xac) return 1;
! 770: if (c == 0xaf) return 1;
! 771: if (c >= 0xc0 && c <= 0xc2) return 1;
! 772: if (c >= 0xc4 && c <= 0xcf) return 1;
! 773: if (c >= 0xd1 && c <= 0xd6) return 1;
! 774: if (c >= 0xd8 && c <= 0xde) return 1;
! 775: break;
! 776:
! 777: case ISO_8859_4:
! 778: if (c == 0xa1 || c == 0xa3) return 1;
! 779: if (c == 0xa5 || c == 0xa6) return 1;
! 780: if (c >= 0xa9 && c <= 0xac) return 1;
! 781: if (c == 0xae) return 1;
! 782: if (c == 0xbd) return 1;
! 783: if (c >= 0xc0 && c <= 0xd6) return 1;
! 784: if (c >= 0xd8 && c <= 0xde) return 1;
! 785: break;
! 786:
! 787: case ISO_8859_5:
! 788: if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1;
! 789: break;
! 790:
! 791: case ISO_8859_6:
! 792: break;
! 793:
! 794: case ISO_8859_7:
! 795: if (c == 0xb6) return 1;
! 796: if (c >= 0xb8 && c <= 0xba) return 1;
! 797: if (c == 0xbc) return 1;
! 798: if (c >= 0xbe && c <= 0xbf) return 1;
! 799: if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1;
! 800: break;
! 801:
! 802: case ISO_8859_8:
! 803: case ISO_8859_11:
! 804: break;
! 805:
! 806: case ISO_8859_10:
! 807: if (c >= 0xa1 && c <= 0xa6) return 1;
! 808: if (c >= 0xa8 && c <= 0xac) return 1;
! 809: if (c == 0xae || c == 0xaf) return 1;
! 810: if (c >= 0xc0 && c <= 0xde) return 1;
! 811: break;
! 812:
! 813: case ISO_8859_13:
! 814: if (c == 0xa8) return 1;
! 815: if (c == 0xaa) return 1;
! 816: if (c == 0xaf) return 1;
! 817: if (c >= 0xc0 && c <= 0xd6) return 1;
! 818: if (c >= 0xd8 && c <= 0xde) return 1;
! 819: break;
! 820:
! 821: case ISO_8859_14:
! 822: if (c == 0xa1) return 1;
! 823: if (c == 0xa4 || c == 0xa6) return 1;
! 824: if (c == 0xa8) return 1;
! 825: if (c == 0xaa || c == 0xac) return 1;
! 826: if (c == 0xaf || c == 0xb0) return 1;
! 827: if (c == 0xb2 || c == 0xb4 || c == 0xb7) return 1;
! 828: if (c == 0xbb || c == 0xbd) return 1;
! 829: if (c >= 0xc0 && c <= 0xde) return 1;
! 830: break;
! 831:
! 832: case ISO_8859_15:
! 833: if (c >= 0xc0 && c <= 0xd6) return 1;
! 834: if (c >= 0xd8 && c <= 0xde) return 1;
! 835: if (c == 0xa6) return 1;
! 836: if (c == 0xb4) return 1;
! 837: if (c == 0xbc) return 1;
! 838: if (c == 0xbe) return 1;
! 839: break;
! 840:
! 841: case ISO_8859_16:
! 842: if (c == 0xa1) return 1;
! 843: if (c == 0xa3) return 1;
! 844: if (c == 0xa6) return 1;
! 845: if (c == 0xaa) return 1;
! 846: if (c == 0xac) return 1;
! 847: if (c == 0xaf) return 1;
! 848: if (c == 0xb2) return 1;
! 849: if (c == 0xb4) return 1;
! 850: if (c == 0xbc) return 1;
! 851: if (c == 0xbe) return 1;
! 852: if (c >= 0xc0 && c <= 0xde) return 1;
! 853: break;
! 854:
! 855: case KOI8_R:
! 856: if (c == 0xb3) return 1;
! 857: /* fall */
! 858: case KOI8:
! 859: if (c >= 0xe0 && c <= 0xff) return 1;
! 860: break;
! 861:
! 862: default:
! 863: exit(-1);
! 864: }
! 865:
! 866: return 0;
! 867: }
! 868:
! 869: static int IsXDigit(int enc, int c)
! 870: {
! 871: if (c >= 0x30 && c <= 0x39) return 1;
! 872: if (c >= 0x41 && c <= 0x46) return 1;
! 873: if (c >= 0x61 && c <= 0x66) return 1;
! 874: return 0;
! 875: }
! 876:
! 877: static int IsWord(int enc, int c)
! 878: {
! 879: if (c >= 0x30 && c <= 0x39) return 1;
! 880: if (c >= 0x41 && c <= 0x5a) return 1;
! 881: if (c == 0x5f) return 1;
! 882: if (c >= 0x61 && c <= 0x7a) return 1;
! 883:
! 884: switch (enc) {
! 885: case UNICODE_ISO_8859_1:
! 886: case ISO_8859_1:
! 887: case ISO_8859_9:
! 888: if (c == 0xaa) return 1;
! 889: if (c >= 0xb2 && c <= 0xb3) return 1;
! 890: if (c == 0xb5) return 1;
! 891: if (c >= 0xb9 && c <= 0xba) return 1;
! 892: if (c >= 0xbc && c <= 0xbe) return 1;
! 893: if (c >= 0xc0 && c <= 0xd6) return 1;
! 894: if (c >= 0xd8 && c <= 0xf6) return 1;
! 895: if (c >= 0xf8 && c <= 0xff) return 1;
! 896: break;
! 897:
! 898: case ISO_8859_2:
! 899: if (c == 0xa1 || c == 0xa3) return 1;
! 900: if (c == 0xa5 || c == 0xa6) return 1;
! 901: if (c >= 0xa9 && c <= 0xac) return 1;
! 902: if (c >= 0xae && c <= 0xaf) return 1;
! 903: if (c == 0xb1 || c == 0xb3) return 1;
! 904: if (c == 0xb5 || c == 0xb6) return 1;
! 905: if (c >= 0xb9 && c <= 0xbc) return 1;
! 906: if (c >= 0xbe && c <= 0xbf) return 1;
! 907: if (c >= 0xc0 && c <= 0xd6) return 1;
! 908: if (c >= 0xd8 && c <= 0xf6) return 1;
! 909: if (c >= 0xf8 && c <= 0xfe) return 1;
! 910: break;
! 911:
! 912: case ISO_8859_3:
! 913: if (c == 0xa1) return 1;
! 914: if (c == 0xa6) return 1;
! 915: if (c >= 0xa9 && c <= 0xac) return 1;
! 916: if (c == 0xaf) return 1;
! 917: if (c >= 0xb1 && c <= 0xb3) return 1;
! 918: if (c == 0xb5 || c == 0xb6) return 1;
! 919: if (c >= 0xb9 && c <= 0xbd) return 1;
! 920: if (c == 0xbf) return 1;
! 921: if (c >= 0xc0 && c <= 0xc2) return 1;
! 922: if (c >= 0xc4 && c <= 0xcf) return 1;
! 923: if (c >= 0xd1 && c <= 0xd6) return 1;
! 924: if (c >= 0xd8 && c <= 0xe2) return 1;
! 925: if (c >= 0xe4 && c <= 0xef) return 1;
! 926: if (c >= 0xf1 && c <= 0xf6) return 1;
! 927: if (c >= 0xf8 && c <= 0xfe) return 1;
! 928: break;
! 929:
! 930: case ISO_8859_4:
! 931: if (c >= 0xa1 && c <= 0xa3) return 1;
! 932: if (c == 0xa5 || c == 0xa6) return 1;
! 933: if (c >= 0xa9 && c <= 0xac) return 1;
! 934: if (c == 0xae) return 1;
! 935: if (c == 0xb1 || c == 0xb3) return 1;
! 936: if (c == 0xb5 || c == 0xb6) return 1;
! 937: if (c >= 0xb9 && c <= 0xbf) return 1;
! 938: if (c >= 0xc0 && c <= 0xd6) return 1;
! 939: if (c >= 0xd8 && c <= 0xf6) return 1;
! 940: if (c >= 0xf8 && c <= 0xfe) return 1;
! 941: break;
! 942:
! 943: case ISO_8859_5:
! 944: if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1;
! 945: if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1;
! 946: break;
! 947:
! 948: case ISO_8859_6:
! 949: if (c >= 0xc1 && c <= 0xda) return 1;
! 950: if (c >= 0xe0 && c <= 0xea) return 1;
! 951: if (c >= 0xeb && c <= 0xf2) return 1;
! 952: break;
! 953:
! 954: case ISO_8859_7:
! 955: if (c == 0xb2 || c == 0xb3) return 1;
! 956: if (c == 0xb6) return 1;
! 957: if (c >= 0xb8 && c <= 0xba) return 1;
! 958: if (c >= 0xbc && c <= 0xbf) return 1;
! 959: if (c == 0xc0) return 1;
! 960: if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1;
! 961: if (c >= 0xdc && c <= 0xfe) return 1;
! 962: break;
! 963:
! 964: case ISO_8859_8:
! 965: if (c == 0xb2 || c == 0xb3 || c == 0xb5 || c == 0xb9) return 1;
! 966: if (c >= 0xbc && c <= 0xbe) return 1;
! 967: if (c >= 0xe0 && c <= 0xfa) return 1;
! 968: break;
! 969:
! 970: case ISO_8859_10:
! 971: if (c >= 0xa1 && c <= 0xff) {
! 972: if (c != 0xa7 && c != 0xad && c != 0xb0 && c != 0xb7 && c != 0xbd)
! 973: return 1;
! 974: }
! 975: break;
! 976:
! 977: case ISO_8859_11:
! 978: if (c >= 0xa1 && c <= 0xda) return 1;
! 979: if (c >= 0xdf && c <= 0xfb) return 1;
! 980: break;
! 981:
! 982: case ISO_8859_13:
! 983: if (c == 0xa8) return 1;
! 984: if (c == 0xaa) return 1;
! 985: if (c == 0xaf) return 1;
! 986: if (c == 0xb2 || c == 0xb3 || c == 0xb5 || c == 0xb9) return 1;
! 987: if (c >= 0xbc && c <= 0xbe) return 1;
! 988: if (c == 0xb8) return 1;
! 989: if (c == 0xba) return 1;
! 990: if (c >= 0xbf && c <= 0xd6) return 1;
! 991: if (c >= 0xd8 && c <= 0xf6) return 1;
! 992: if (c >= 0xf8 && c <= 0xfe) return 1;
! 993: break;
! 994:
! 995: case ISO_8859_14:
! 996: if (c >= 0xa1 && c <= 0xff) {
! 997: if (c == 0xa3 || c == 0xa7 || c == 0xa9 || c == 0xad || c == 0xae ||
! 998: c == 0xb6) return 0;
! 999: return 1;
! 1000: }
! 1001: break;
! 1002:
! 1003: case ISO_8859_15:
! 1004: if (c == 0xaa) return 1;
! 1005: if (c >= 0xb2 && c <= 0xb3) return 1;
! 1006: if (c == 0xb5) return 1;
! 1007: if (c >= 0xb9 && c <= 0xba) return 1;
! 1008: if (c >= 0xbc && c <= 0xbe) return 1;
! 1009: if (c >= 0xc0 && c <= 0xd6) return 1;
! 1010: if (c >= 0xd8 && c <= 0xf6) return 1;
! 1011: if (c >= 0xf8 && c <= 0xff) return 1;
! 1012: if (c == 0xa6) return 1;
! 1013: if (c == 0xa8) return 1;
! 1014: if (c == 0xb4) return 1;
! 1015: if (c == 0xb8) return 1;
! 1016: break;
! 1017:
! 1018: case ISO_8859_16:
! 1019: if (c == 0xa1) return 1;
! 1020: if (c == 0xa2) return 1;
! 1021: if (c == 0xa3) return 1;
! 1022: if (c == 0xa6) return 1;
! 1023: if (c == 0xa8) return 1;
! 1024: if (c == 0xaa) return 1;
! 1025: if (c == 0xac) return 1;
! 1026: if (c == 0xae) return 1;
! 1027: if (c == 0xaf) return 1;
! 1028: if (c == 0xb2) return 1;
! 1029: if (c == 0xb3) return 1;
! 1030: if (c == 0xb4) return 1;
! 1031: if (c >= 0xb8 && c <= 0xba) return 1;
! 1032: if (c == 0xbc) return 1;
! 1033: if (c == 0xbd) return 1;
! 1034: if (c == 0xbe) return 1;
! 1035: if (c == 0xbf) return 1;
! 1036: if (c >= 0xc0 && c <= 0xde) return 1;
! 1037: if (c >= 0xdf && c <= 0xff) return 1;
! 1038: break;
! 1039:
! 1040: case KOI8_R:
! 1041: if (c == 0x9d) return 1;
! 1042: if (c == 0xa3 || c == 0xb3) return 1;
! 1043: /* fall */
! 1044: case KOI8:
! 1045: if (c >= 0xc0 && c <= 0xff) return 1;
! 1046: break;
! 1047:
! 1048: default:
! 1049: exit(-1);
! 1050: }
! 1051:
! 1052: return 0;
! 1053: }
! 1054:
! 1055: static int IsAscii(int enc, int c)
! 1056: {
! 1057: if (c >= 0x00 && c <= 0x7f) return 1;
! 1058: return 0;
! 1059: }
! 1060:
! 1061: static int IsNewline(int enc, int c)
! 1062: {
! 1063: if (c == 0x0a) return 1;
! 1064: return 0;
! 1065: }
! 1066:
! 1067: static int exec(FILE* fp, ENC_INFO* einfo)
! 1068: {
! 1069: #define NCOL 8
! 1070:
! 1071: int c, val, enc;
! 1072:
! 1073: enc = einfo->num;
! 1074:
! 1075: fprintf(fp, "static unsigned short Enc%s_CtypeTable[256] = {\n",
! 1076: einfo->name);
! 1077:
! 1078: for (c = 0; c < 256; c++) {
! 1079: val = 0;
! 1080: if (IsNewline(enc, c)) val |= ONIGENC_CTYPE_NEWLINE;
! 1081: if (IsAlpha (enc, c)) val |= ONIGENC_CTYPE_ALPHA;
! 1082: if (IsBlank (enc, c)) val |= ONIGENC_CTYPE_BLANK;
! 1083: if (IsCntrl (enc, c)) val |= ONIGENC_CTYPE_CNTRL;
! 1084: if (IsDigit (enc, c)) val |= ONIGENC_CTYPE_DIGIT;
! 1085: if (IsGraph (enc, c)) val |= ONIGENC_CTYPE_GRAPH;
! 1086: if (IsLower (enc, c)) val |= ONIGENC_CTYPE_LOWER;
! 1087: if (IsPrint (enc, c)) val |= ONIGENC_CTYPE_PRINT;
! 1088: if (IsPunct (enc, c)) val |= ONIGENC_CTYPE_PUNCT;
! 1089: if (IsSpace (enc, c)) val |= ONIGENC_CTYPE_SPACE;
! 1090: if (IsUpper (enc, c)) val |= ONIGENC_CTYPE_UPPER;
! 1091: if (IsXDigit(enc, c)) val |= ONIGENC_CTYPE_XDIGIT;
! 1092: if (IsWord (enc, c)) val |= ONIGENC_CTYPE_WORD;
! 1093: if (IsAscii (enc, c)) val |= ONIGENC_CTYPE_ASCII;
! 1094:
! 1095: if (c % NCOL == 0) fputs(" ", fp);
! 1096: fprintf(fp, "0x%04x", val);
! 1097: if (c != 255) fputs(",", fp);
! 1098: if (c != 0 && c % NCOL == (NCOL-1))
! 1099: fputs("\n", fp);
! 1100: else
! 1101: fputs(" ", fp);
! 1102: }
! 1103: fprintf(fp, "};\n");
! 1104: return 0;
! 1105: }
! 1106:
! 1107: extern int main(int argc, char* argv[])
! 1108: {
! 1109: int i;
! 1110: FILE* fp = stdout;
! 1111:
! 1112: for (i = 0; i < sizeof(Info)/sizeof(ENC_INFO); i++) {
! 1113: exec(fp, &Info[i]);
! 1114: }
! 1115: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>