14 struct token_s token
[TOKEN_MAX
] = {NULL
, 0};
16 FILE *source
= NULL
, *target
= NULL
;
18 unsigned int tokenFound
= 0;
27 const char* tokenTypestr
[] = { "MOTCLE", "SECTION", "SSECTION", "NPARA", "MOT", "FIN" };
30 /* It looks silly to check for each characters but for debugging, it's just the way to go */
32 if (c
== L
'a' || c
== L
'b' || c
== L
'c' || c
== L
'd' || c
== L
'e' || c
== L
'f' || c
== L
'g' || \
33 c
== L
'h' || c
== L
'i' || c
== L
'j' || c
== L
'k' || c
== L
'l' || c
== L
'm' || c
== L
'n' || \
34 c
== L
'o' || c
== L
'p' || c
== L
'q' || c
== L
'r' || c
== L
's' || c
== L
't' || c
== L
'u' || \
35 c
== L
'v' || c
== L
'w' || c
== L
'x' || c
== L
'y' || c
== L
'z' || \
36 c
== L
'A' || c
== L
'B' || c
== L
'C' || c
== L
'D' || c
== L
'E' || c
== L
'F' || c
== L
'G' || \
37 c
== L
'H' || c
== L
'I' || c
== L
'J' || c
== L
'K' || c
== L
'L' || c
== L
'M' || c
== L
'N' || \
38 c
== L
'O' || c
== L
'P' || c
== L
'Q' || c
== L
'R' || c
== L
'S' || c
== L
'T' || c
== L
'U' || \
39 c
== L
'V' || c
== L
'W' || c
== L
'X' || c
== L
'Y' || c
== L
'Z' || \
40 c
== L
'.' || c
== L
'?' || c
== L
'!' || c
== L
',' || c
== L
';' || c
== L
':' || c
== L
'-' || \
41 c
== L
'\''|| c
== L
'#' || \
42 c
== L
'0' || c
== L
'1' || c
== L
'2' || c
== L
'3' || c
== L
'4' || c
== L
'5' || c
== L
'6' || \
43 c
== L
'7' || c
== L
'8' || c
== L
'9' || \
44 c
== L
'à' || c
== L
'â' || c
== L
'ç' || c
== L
'è' || c
== L
'é' || c
== L
'î' || c
== L
'ô' || \
45 c
== L
'ù' || c
== L
'û' || \
46 c
== L
'À' || c
== L
'Â' || c
== L
'Ç' || c
== L
'È' || c
== L
'É' || c
== L
'Î' || c
== L
'Ô' || \
47 c
== L
'Ù' || c
== L
'Û') {
54 if (c
== L
'\t' || c
== L
' ' || c
== L
'\n') {
61 const wchar_t* Titre
= L
"Titre";
62 const wchar_t* Auteur
= L
"Auteur";
65 // The main loop get the next character
67 if (c
== L
' ' || c
== L
'\t') {
69 token
[tokenFound
].value
[i
] = c
;
75 token
[tokenFound
].value
[i
] = c
;
81 token
[tokenFound
].value
[i
] = c
;
87 token
[tokenFound
].value
[i
] = c
;
93 token
[tokenFound
].value
[i
] = c
;
104 // FIXME: Partial match need a rewind in the characters extraction from the file
105 if (c
== (wint_t)Titre
[j
] && j
< wcslen(Titre
) - 1) {
107 token
[tokenFound
].value
[i
] = c
;
112 if (c
== (wint_t)Auteur
[j
] && j
< wcslen(Auteur
) - 1) {
114 token
[tokenFound
].value
[i
] = c
;
120 token
[tokenFound
].value
[i
] = c
;
128 token
[tokenFound
].value
[i
] = c
;
132 if (isSeparator() || c
== WEOF
) {
137 if (isSeparator() || c
== WEOF
) {
146 tokenType
= SSECTION
;
152 token
[tokenFound
].value
[i
] = c
;
156 if (isSeparator() || c
== WEOF
) {
161 if (c
== L
' ' || c
== L
'\t') {
163 token
[tokenFound
].value
[i
] = c
;
169 token
[tokenFound
].value
[i
] = c
;
175 token
[tokenFound
].value
[i
] = c
;
181 token
[tokenFound
].value
[i
] = c
;
187 token
[tokenFound
].value
[i
] = c
;
198 token
[tokenFound
].value
[i
] = c
;
207 token
[tokenFound
].value
[i
] = c
;
213 token
[tokenFound
].value
[i
] = c
;
230 if (isSeparator() || c
== WEOF
) {
249 // Ouvre le fichier test.txt en lecture seulement (le fichier doit exister) :
250 source
= fopen("test.txt", "r");
251 // Cree et ouvre un fichier target.html en lecture/ecriture
252 // avec suppression du contenu au prealable :
253 target
= fopen("target.html", "w+");
255 if (source
== NULL
) {
256 printf("Impossible d'ouvrir le fichier source\n");
260 if (target
== NULL
) {
261 printf("Impossible d'ouvrir le fichier target\n");
266 c
= fgetwc(source
); // lecture du caractere suivant du fichier source
267 token
[tokenFound
].value
[i
] = c
;
269 int scanrt
= scanner();
271 wprintf(L
"Scanner error with token value: %ls\n", token
[tokenFound
].value
);
275 wprintf(L
"Token type found: %s with value: %ls\n", tokenTypestr
[tokenType
], token
[tokenFound
].value
);
277 wprintf(L
"Token type found: %s\n", tokenTypestr
[tokenType
]);
279 token
[tokenFound
].type
= tokenTypestr
[tokenType
];
281 // reinit token.value array counter
283 //} while (c != WEOF); // tant que la fin du fichier n'est pas atteinte
284 } while (!feof(source
)); // tant que la fin du fichier n'est pas atteinte
286 if (source
!= NULL
) fclose(source
); // fermeture du fichier source
287 if (target
!= NULL
) fclose(target
); // fermeture du fichier target