Annotation of embedaddon/php/ext/mbstring/libmbfl/tests/strwidth.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: 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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>