Annotation of gpl/axl/babel/gen-table.c, revision 1.1.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>