root/ext/mbstring/libmbfl/tests/strwidth.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   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 int main(int argc, char **argv)
  14 {
  15         enum mbfl_no_encoding no_encoding;
  16         enum mbfl_no_language no_language;
  17         mbfl_memory_device dev;
  18         mbfl_string string;
  19         int final = 0;
  20         int state = 0;
  21 
  22         if (argc < 3) {
  23                 fprintf(stderr, "Usage: %s lang encoding\n", argv[0]);
  24                 return EXIT_FAILURE;
  25         }
  26 
  27         if ((no_language = mbfl_name2no_language(argv[1])) ==
  28                         mbfl_no_language_invalid) {
  29                 printf("Unsupported NLS: %s\n", argv[1]);
  30                 return EXIT_FAILURE;
  31         }
  32 
  33         if ((no_encoding = mbfl_name2no_encoding(argv[2])) ==
  34                         mbfl_no_encoding_invalid) {
  35                 printf("Unsupported encoding: %s\n", argv[2]);
  36                 return EXIT_FAILURE;
  37         }
  38 
  39         do {
  40                 mbfl_memory_device_init(&dev, 0, 4096);
  41                 mbfl_string_init_set(&string, no_language, no_encoding);
  42 
  43                 for (;;) {
  44                         const int c = fgetc(stdin);
  45 
  46                         if (c == EOF) {
  47                                 final = 1;
  48                                 break;
  49                         } else if (c == 10) {
  50                                 if (state == 1) {
  51                                         state = 0;
  52                                         continue;
  53                                 }
  54                                 break;
  55                         } else if (c == 13) {
  56                                 state = 1;
  57                                 break;
  58                         }
  59 
  60                         if (dev.pos >= dev.length) {
  61                                 if (dev.length + dev.allocsz < dev.length) {
  62                                         printf("Unable to allocate memory\n");
  63                                         return EXIT_FAILURE;
  64                                 }
  65 
  66                                 mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz,
  67                                                 dev.allocsz);
  68                         }
  69 
  70                         dev.buffer[dev.pos++] = (unsigned char)c;
  71                 }
  72 
  73                 mbfl_memory_device_result(&dev, &string);
  74                 printf("%d\n", mbfl_strwidth(&string));
  75                 mbfl_string_clear(&string);
  76         } while (!final);
  77 
  78         return EXIT_SUCCESS;
  79 }

/* [<][>][^][v][top][bottom][index][help] */