Annotation of gpl/axl/babel/gen-table.c, revision 1.1

1.1     ! misho       1: #include <stdio.h>
        !             2: #include <axl.h>
        !             3: 
        !             4: int main (int argc, char ** argv)
        !             5: {
        !             6:        FILE * file;
        !             7:        FILE * file2;
        !             8:        FILE * output;
        !             9:        char   buffer[2];
        !            10:        char   buffer2[4];
        !            11:        int    iterator;
        !            12:        char * tolower_encoding;
        !            13:        char * toupper_encoding;
        !            14:        char * encoding;
        !            15:        char * string_aux;
        !            16:        int    max_value;
        !            17: 
        !            18:        if (argc != 4) {
        !            19:                printf ("Please ejecute: ./gen-table ORIGINAL_FILE UTF8-TRANSLATE-FILE CODING-NAME\n");
        !            20:                return -1;
        !            21:        }
        !            22: 
        !            23:        file = fopen (argv[1], "r");
        !            24:        if (file == NULL) {
        !            25:                printf ("failed to open: %s..\n", argv[1]);
        !            26:                return -1;
        !            27:        }
        !            28: 
        !            29:        file2 = fopen (argv[2], "r");
        !            30:        if (file2 == NULL) {
        !            31:                printf ("failed to open: %s..\n", argv[2]);
        !            32:                return -1;
        !            33:        }
        !            34:        
        !            35: 
        !            36:        encoding          = (char *) argv[3];
        !            37:        tolower_encoding  = axl_stream_to_lower_copy (encoding);
        !            38:        axl_stream_remove (tolower_encoding, "-", axl_false);
        !            39:        axl_stream_remove (tolower_encoding, ".", axl_false);
        !            40: 
        !            41:        toupper_encoding  = axl_stream_to_upper_copy (encoding);
        !            42:        axl_stream_remove (toupper_encoding, "-", axl_false);
        !            43:        axl_stream_remove (toupper_encoding, ".", axl_false);
        !            44: 
        !            45:        /* open output */
        !            46:        string_aux = axl_strdup_printf ("axl_babel_%s.c", tolower_encoding);
        !            47:        output = fopen (string_aux, "w");
        !            48:        if (output == NULL) {
        !            49:                printf ("failed to open output: %s..\n", string_aux);
        !            50:                axl_free (string_aux);
        !            51:                return -1;
        !            52:        }
        !            53:        
        !            54: 
        !            55:        fprintf (output, "/**\n");
        !            56:        fprintf (output, " * Axl Babel: encoding support for axl: %s coding\n", encoding);
        !            57:        fprintf (output, " * Copyright (C) 2008 Advanced Software Production Line, S.L.\n");
        !            58:        fprintf (output, " */\n\n");
        !            59:        fprintf (output, "/* include base header */\n");
        !            60:        fprintf (output, "#include <axl_babel_%s.h>\n\n", tolower_encoding);
        !            61: 
        !            62:        fprintf (output, "/**\n");
        !            63:        fprintf (output, " * @brief Creates the translation table for %s representation\n",
        !            64:                encoding);
        !            65:        fprintf (output, " *  to move information from %s to utf-8 and viceversa.\n", encoding);
        !            66:        fprintf (output, " */\n");
        !            67:        fprintf (output, "axlBabelTable * axl_babel_build_%s_table (void) {\n\n", tolower_encoding);
        !            68: 
        !            69:        fprintf (output, "\taxlBabelTable * table;\n\n");
        !            70: 
        !            71:        /* foreach item at the original array do */
        !            72:        iterator = 0;
        !            73:        while (fread (buffer, 1, 1, file) == 1) {
        !            74: 
        !            75:                /* read the terminator */
        !            76:                if (fread (&(buffer[1]), 1, 1, file) != 1) {
        !            77:                        break;
        !            78:                }
        !            79:                iterator++;
        !            80:        } /* end file */
        !            81:        fclose (file);
        !            82: 
        !            83:        /* record max value */
        !            84:        max_value = iterator;
        !            85: 
        !            86:        file = fopen (argv[1], "r");
        !            87:        if (file == NULL) {
        !            88:                printf ("failed to open: %s..\n", argv[1]);
        !            89:                return -1;
        !            90:        }
        !            91: 
        !            92:        fprintf (output, "\t/* create the table to hold information translate %s encoding */\n", encoding);
        !            93:        fprintf (output, "\ttable = axl_new (axlBabelTable, %d);\n\n", iterator);
        !            94:        
        !            95:        /* foreach item at the original array do */
        !            96:        iterator = 0;
        !            97:        while (fread (buffer, 1, 1, file) == 1) {
        !            98: 
        !            99:                /* read character from base file */
        !           100:                if (fread (&(buffer[1]), 1, 1, file) != 1) {
        !           101:                        break;
        !           102:                }
        !           103: 
        !           104:                if (buffer[1] != '\n') {
        !           105:                        printf ("ERROR (1): Expected to find new line character at=%d..\n", iterator);
        !           106:                        return -1;
        !           107:                }   
        !           108: 
        !           109:                /* check max value here */
        !           110:                if (iterator >= max_value) {
        !           111:                        printf ("ERROR (2): Reached max value expected at the translated file. Translation table must have a 1:1 relation.\n");
        !           112:                        return -1;
        !           113:                }
        !           114: 
        !           115:                /* read content from translated file */
        !           116:                if (fread (buffer2, 1, 1, file2) != 1) {
        !           117:                        printf ("ERROR (3): failed to read utf-8 file at iterator=%d (while handling buffer[0]='%c' (%u)..\n", 
        !           118:                                iterator, buffer[0], (unsigned char) buffer[0]);
        !           119:                        return -1;
        !           120:                } /* end if */
        !           121: 
        !           122:                if (buffer2[0] == '\n' && buffer[0] != '\n') {
        !           123:                        printf ("WARN: found no definition for buffer[0]='%c' (%u), iterator=%d..\n",
        !           124:                                buffer[0], (unsigned char) buffer[0], iterator);
        !           125:                        fprintf (output, "\t/* store item associated to code %d */\n", iterator);
        !           126:                        fprintf (output, "\ttable[%d].size      = 1;\n", iterator);
        !           127:                        fprintf (output, "\ttable[%d].buffer[0] = 0; /* unsupported translation */\n\n", iterator);
        !           128:                        iterator++;
        !           129:                        continue;
        !           130:                }
        !           131: 
        !           132:                if (fread (&(buffer2[1]), 1, 1, file2) != 1) {
        !           133:                        printf ("ERROR (4): failed to read utf-8 file (while handling buffer[0]='%c'..\n", iterator);
        !           134:                        return -1;
        !           135:                } /* end if */
        !           136: 
        !           137:                if (buffer2[1] == '\n') {
        !           138:                        fprintf (output, "\t/* store item associated to code %d */\n", iterator);
        !           139:                        fprintf (output, "\ttable[%d].size      = 1;\n", iterator);
        !           140:                        fprintf (output, "\ttable[%d].buffer[0] = (unsigned char) %d; /* 0x%x */\n\n", iterator, (unsigned char) iterator, (unsigned char) iterator);
        !           141:                        iterator++;
        !           142:                        continue;
        !           143:                }
        !           144: 
        !           145:                if (fread (&(buffer2[2]), 1, 1, file2) != 1) {
        !           146:                        printf ("ERROR (5): failed to read utf-8 file (2 type unit)..\n");
        !           147:                        return -1;
        !           148:                } /* end if */
        !           149:                
        !           150:                if (buffer2[2] == '\n') {
        !           151:                        fprintf (output, "\t/* store item associated to code %d */\n", iterator);
        !           152:                        fprintf (output, "\ttable[%d].size      = 2;\n", iterator);
        !           153:                        fprintf (output, "\ttable[%d].buffer[0] = (unsigned char) %u; /* 0x%x */\n", iterator, (unsigned char) buffer2[0], (unsigned char) buffer2[0]);
        !           154:                        fprintf (output, "\ttable[%d].buffer[1] = (unsigned char) %u; /* 0x%x */\n\n", iterator, (unsigned char) buffer2[1], (unsigned char) buffer2[1]);
        !           155:                        iterator++;
        !           156:                        continue;
        !           157:                }
        !           158: 
        !           159:                if (fread (&(buffer2[3]), 1, 1, file2) != 1) {
        !           160:                        printf ("ERROR (6): failed to read utf-8 file (3 type unit)..\n");
        !           161:                        return -1;
        !           162:                } /* end if */
        !           163: 
        !           164:                fprintf (output, "\t/* store item associated to code %d */\n", iterator);
        !           165:                fprintf (output, "\ttable[%d].size      = 3;\n", iterator);
        !           166:                fprintf (output, "\ttable[%d].buffer[0] = (unsigned char) %u; /* 0x%x */\n",   iterator, (unsigned char) buffer2[0], (unsigned char) buffer2[0]);
        !           167:                fprintf (output, "\ttable[%d].buffer[1] = (unsigned char) %u; /* 0x%x */\n",   iterator, (unsigned char) buffer2[1], (unsigned char) buffer2[1]);
        !           168:                fprintf (output, "\ttable[%d].buffer[2] = (unsigned char) %u; /* 0x%x */\n\n", iterator, (unsigned char) buffer2[2], (unsigned char) buffer2[2]);
        !           169:                iterator++;
        !           170:                continue;
        !           171:                
        !           172:        }
        !           173:        fclose (file);
        !           174: 
        !           175:        fprintf (output, "\t/* return table created */\n");
        !           176:        fprintf (output, "\treturn table;\n\n");
        !           177: 
        !           178:        fprintf (output, "} /* end axl_babel_build_%s_table */\n\n", tolower_encoding);
        !           179:        
        !           180:        /* close file */
        !           181:        fclose (output);
        !           182:        printf ("ok, result at: %s..\n", string_aux);
        !           183:        axl_free (string_aux);
        !           184: 
        !           185:        /* now write header */
        !           186:        string_aux = axl_strdup_printf ("axl_babel_%s.h", tolower_encoding);
        !           187:        output = fopen (string_aux, "w");
        !           188:        if (output == NULL) {
        !           189:                printf ("failed to open output: %s..\n", string_aux);
        !           190:                axl_free (string_aux);
        !           191:                return -1;
        !           192:        }
        !           193: 
        !           194:        fprintf (output, "/**\n");
        !           195:        fprintf (output, " * Axl Babel: encoding support for axl: %s coding\n", encoding);
        !           196:        fprintf (output, " * Copyright (C) 2008 Advanced Software Production Line, S.L.\n");
        !           197:        fprintf (output, " */\n\n");
        !           198:        fprintf (output, "/* include base header */\n");
        !           199:        fprintf (output, "#include <axl_babel.h>\n\n");
        !           200: 
        !           201:        fprintf (output, "#ifndef __AXL_BABEL_%s_H__\n", toupper_encoding);
        !           202:        fprintf (output, "#define __AXL_BABEL_%s_H__\n\n", toupper_encoding);
        !           203: 
        !           204:        fprintf (output, "/**\n");
        !           205:        fprintf (output, " * @brief Creates the translation table for %s representation to move information\n",
        !           206:                encoding);
        !           207:        fprintf (output, " * from %s to utf-8 and viceversa.\n", encoding);
        !           208:        fprintf (output, " */\n");
        !           209:        fprintf (output, "axlBabelTable * axl_babel_build_%s_table (void);\n", tolower_encoding);
        !           210: 
        !           211:        fprintf (output, "\n");
        !           212:        fprintf (output, "#endif /* end __AXL_BABEL_%s_H__ */\n\n", toupper_encoding);
        !           213: 
        !           214:        /* close file */
        !           215:        fclose (output);
        !           216:        printf ("ok, result at: %s..\n", string_aux);
        !           217:        axl_free (string_aux);
        !           218:        
        !           219:        /* free values */
        !           220:        axl_free (toupper_encoding);
        !           221:        axl_free (tolower_encoding);
        !           222: 
        !           223:        return 0;
        !           224: }

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