Annotation of embedaddon/php/ext/mbstring/libmbfl/tests/conv_kana.c, revision 1.1
1.1 ! misho 1: /**
! 2: * this is a small sample script to use libmbfl.
! 3: * Rui Hirokawa <hirokawa@php.net>
! 4: *
! 5: * this file is encoded in EUC-JP.
! 6: */
! 7:
! 8: #include <stdio.h>
! 9: #include <stdlib.h>
! 10: #include <string.h>
! 11: #include "mbfl/mbfilter.h"
! 12:
! 13: static void hexdump(const mbfl_string *ptr)
! 14: {
! 15: unsigned int i;
! 16:
! 17: for (i = 0; i < ptr->len; i++) {
! 18: printf("%%%02x", ptr->val[i]);
! 19: }
! 20:
! 21: printf(" (%u)\n", ptr->len);
! 22: }
! 23:
! 24: int main(int argc, char **argv)
! 25: {
! 26: enum mbfl_no_encoding no_enc;
! 27: const enum mbfl_no_language no_lang = mbfl_no_language_japanese;
! 28: mbfl_memory_device dev;
! 29: mbfl_string string, result;
! 30: int final = 0;
! 31: int state = 0;
! 32: int mode = 0;
! 33:
! 34: if (argc < 3) {
! 35: fprintf(stderr, "Usage: %s encoding flags\n", argv[0]);
! 36: return EXIT_FAILURE;
! 37: }
! 38:
! 39: if ((no_enc = mbfl_name2no_encoding(argv[1])) ==
! 40: mbfl_no_encoding_invalid) {
! 41: printf("Unsupported encoding: %s\n", argv[1]);
! 42: return EXIT_FAILURE;
! 43: }
! 44:
! 45: {
! 46: const char *p;
! 47:
! 48: for (p= argv[2] + strlen(argv[2]); p > argv[2]; ) {
! 49: switch (*(--p)) {
! 50: case 'A':
! 51: mode |= 0x1;
! 52: break;
! 53: case 'a':
! 54: mode |= 0x10;
! 55: break;
! 56: case 'R':
! 57: mode |= 0x2;
! 58: break;
! 59: case 'r':
! 60: mode |= 0x20;
! 61: break;
! 62: case 'N':
! 63: mode |= 0x4;
! 64: break;
! 65: case 'n':
! 66: mode |= 0x40;
! 67: break;
! 68: case 'S':
! 69: mode |= 0x8;
! 70: break;
! 71: case 's':
! 72: mode |= 0x80;
! 73: break;
! 74: case 'K':
! 75: mode |= 0x100;
! 76: break;
! 77: case 'k':
! 78: mode |= 0x1000;
! 79: break;
! 80: case 'H':
! 81: mode |= 0x200;
! 82: break;
! 83: case 'h':
! 84: mode |= 0x2000;
! 85: break;
! 86: case 'V':
! 87: mode |= 0x800;
! 88: break;
! 89: case 'C':
! 90: mode |= 0x10000;
! 91: break;
! 92: case 'c':
! 93: mode |= 0x20000;
! 94: break;
! 95: case 'M':
! 96: mode |= 0x100000;
! 97: break;
! 98: case 'm':
! 99: mode |= 0x200000;
! 100: break;
! 101: }
! 102: }
! 103: }
! 104:
! 105: do {
! 106: mbfl_memory_device_init(&dev, 0, 4096);
! 107: mbfl_string_init_set(&string, no_lang, no_enc);
! 108:
! 109: for (;;) {
! 110: const int c = fgetc(stdin);
! 111:
! 112: if (c == EOF) {
! 113: final = 1;
! 114: break;
! 115: } else if (c == 10) {
! 116: if (state == 1) {
! 117: state = 0;
! 118: continue;
! 119: }
! 120: break;
! 121: } else if (c == 13) {
! 122: state = 1;
! 123: break;
! 124: }
! 125:
! 126: if (dev.pos >= dev.length) {
! 127: if (dev.length + dev.allocsz < dev.length) {
! 128: printf("Unable to allocate memory\n");
! 129: return EXIT_FAILURE;
! 130: }
! 131:
! 132: mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz,
! 133: dev.allocsz);
! 134: }
! 135:
! 136: dev.buffer[dev.pos++] = (unsigned char)c;
! 137: }
! 138:
! 139: mbfl_memory_device_result(&dev, &string);
! 140: mbfl_ja_jp_hantozen(&string, &result, mode);
! 141: hexdump(&result);
! 142: mbfl_string_clear(&result);
! 143: mbfl_string_clear(&string);
! 144: } while (!final);
! 145:
! 146: return EXIT_SUCCESS;
! 147: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>