summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
6a19b8f)
And add proper error handling.
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
FIN
} tokenType;
const char* tokenTypestr[] = { "MOTCLE", "SECTION", "SSECTION", "NPARA", "MOT", "FIN" };
FIN
} tokenType;
const char* tokenTypestr[] = { "MOTCLE", "SECTION", "SSECTION", "NPARA", "MOT", "FIN" };
/* It looks silly to check for each characters but for debugging, it's just the way to go */
bool istAlpha() {
/* It looks silly to check for each characters but for debugging, it's just the way to go */
bool istAlpha() {
- const wchar_t* Titre = L"Titre";
- const wchar_t* Auteur = L"Auteur";
- unsigned int j = 0;
+ unsigned int i = 0;
+ wchar_t m[6];
-// The main loop get the next character
init:
if (c == L' ' || c == L'\t') {
c = fgetwc(source);
init:
if (c == L' ' || c == L'\t') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto init;
}
if (c == L'\n') {
c = fgetwc(source);
goto init;
}
if (c == L'\n') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto initLV1;
}
if (c == L'>') {
c = fgetwc(source);
goto initLV1;
}
if (c == L'>') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto MC1;
}
if (c == L'=') {
c = fgetwc(source);
goto MC1;
}
if (c == L'=') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto S1SS1;
}
if (istAlpha()) {
goto S1SS1;
}
if (istAlpha()) {
token[tokenFound].value[i] = c;
i++;
token[tokenFound].value[i] = c;
i++;
goto M1;
}
if (c == WEOF) {
goto FIN;
goto M1;
}
if (c == WEOF) {
goto FIN;
- // FIXME: Partial match need a rewind in the characters extraction from the file
- if (c == (wint_t)Titre[j] && j < wcslen(Titre) - 1) {
+ if (c == L'A' && !wcscmp(fgetws(m, 6, source), L"uteur")) {
+ wcscpy((wchar_t*)token[tokenFound].value, L">Auteur");
- token[tokenFound].value[i] = c;
- i++;
- j++;
- goto MC1;
- if (c == (wint_t)Auteur[j] && j < wcslen(Auteur) - 1) {
+ if (c == L'T' && !wcscmp(fgetws(m, 5, source), L"itre")) {
+ wcscpy((wchar_t*)token[tokenFound].value, L">Titre");
- token[tokenFound].value[i] = c;
- i++;
- j++;
- goto MC1;
- } else {
- c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
S1SS1:
if (c == L'=') {
c = fgetwc(source);
S1SS1:
if (c == L'=') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto SS2;
}
if (isSeparator() || c == WEOF) {
goto SECTION;
}
goto SS2;
}
if (isSeparator() || c == WEOF) {
goto SECTION;
}
SS2:
if (isSeparator() || c == WEOF) {
goto SSECTION;
}
SS2:
if (isSeparator() || c == WEOF) {
goto SSECTION;
}
SECTION:
tokenType = SECTION;
SECTION:
tokenType = SECTION;
token[tokenFound].value[i] = c;
i++;
token[tokenFound].value[i] = c;
i++;
goto M1;
}
if (isSeparator() || c == WEOF) {
goto MOT;
}
goto M1;
}
if (isSeparator() || c == WEOF) {
goto MOT;
}
initLV1:
if (c == L' ' || c == L'\t') {
c = fgetwc(source);
initLV1:
if (c == L' ' || c == L'\t') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto initLV1;
}
if (c == L'\n') {
c = fgetwc(source);
goto initLV1;
}
if (c == L'\n') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto initLV1LV2;
}
if (istAlpha()) {
goto initLV1LV2;
}
if (istAlpha()) {
token[tokenFound].value[i] = c;
i++;
token[tokenFound].value[i] = c;
i++;
goto M1;
}
if (c == L'=') {
c = fgetwc(source);
goto M1;
}
if (c == L'=') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto S1SS1;
}
if (c == L'>') {
c = fgetwc(source);
goto S1SS1;
}
if (c == L'>') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto MC1;
}
if (c == WEOF) {
goto FIN;
}
goto MC1;
}
if (c == WEOF) {
goto FIN;
}
initLV1LV2:
if (isSeparator()) {
c = fgetwc(source);
initLV1LV2:
if (isSeparator()) {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto initLV1LV2;
}
if (istAlpha()) {
goto initLV1LV2;
}
if (istAlpha()) {
}
if (c == L'>') {
c = fgetwc(source);
}
if (c == L'>') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto MC1;
}
if (c == L'=') {
c = fgetwc(source);
goto MC1;
}
if (c == L'=') {
c = fgetwc(source);
- token[tokenFound].value[i] = c;
- i++;
goto S1SS1;
}
if (c == WEOF) {
goto FIN;
}
goto S1SS1;
}
if (c == WEOF) {
goto FIN;
}
NPARA:
tokenType = NPARA;
NPARA:
tokenType = NPARA;
if (isSeparator() || c == WEOF) {
goto MOTCLE;
}
if (isSeparator() || c == WEOF) {
goto MOTCLE;
}
MOTCLE:
tokenType = MOTCLE;
MOTCLE:
tokenType = MOTCLE;
// Ouvre le fichier test.txt en lecture seulement (le fichier doit exister) :
// Ouvre le fichier test.txt en lecture seulement (le fichier doit exister) :
- source = fopen("test.txt", "r");
+ source = fopen("test.txt", "r+");
// Cree et ouvre un fichier target.html en lecture/ecriture
// avec suppression du contenu au prealable :
target = fopen("target.html", "w+");
// Cree et ouvre un fichier target.html en lecture/ecriture
// avec suppression du contenu au prealable :
target = fopen("target.html", "w+");
+ c = fgetwc(source); // lecture du premier caractere
- c = fgetwc(source); // lecture du caractere suivant du fichier source
- token[tokenFound].value[i] = c;
- i++;
int scanrt = scanner();
if (scanrt == -1) {
wprintf(L"Scanner error with token value: %ls\n", token[tokenFound].value);
exit(EXIT_FAILURE);
}
if (c != WEOF) {
int scanrt = scanner();
if (scanrt == -1) {
wprintf(L"Scanner error with token value: %ls\n", token[tokenFound].value);
exit(EXIT_FAILURE);
}
if (c != WEOF) {
- wprintf(L"Token type found: %s with value: %ls\n", tokenTypestr[tokenType], token[tokenFound].value);
+ wprintf(L"%20s: %ls\n", tokenTypestr[tokenType], token[tokenFound].value);
- wprintf(L"Token type found: %s\n", tokenTypestr[tokenType]);
+ wprintf(L"%20s\n", tokenTypestr[tokenType]);
}
token[tokenFound].type = tokenTypestr[tokenType];
tokenFound++;
}
token[tokenFound].type = tokenTypestr[tokenType];
tokenFound++;
- // reinit token.value array counter
- i = 0;
- //} while (c != WEOF); // tant que la fin du fichier n'est pas atteinte
- } while (!feof(source)); // tant que la fin du fichier n'est pas atteinte
+ } while (tokenType != FIN); // tant que la fin du fichier n'est pas atteinte
if (source != NULL) fclose(source); // fermeture du fichier source
if (target != NULL) fclose(target); // fermeture du fichier target
if (source != NULL) fclose(source); // fermeture du fichier source
if (target != NULL) fclose(target); // fermeture du fichier target
Vient ensuite un ou plusieurs paragraphes optionnels comme celui que vous
lisez.
Vient ensuite un ou plusieurs paragraphes optionnels comme celui que vous
lisez.
Les paragraphes sont separes par une ou plusieurs lignes blanches. Vous
etes donc entrain de lire un deuxieme paragraphe.
Les sections sont introduites par le symbole plus suivi du titre, comme
Les paragraphes sont separes par une ou plusieurs lignes blanches. Vous
etes donc entrain de lire un deuxieme paragraphe.
Les sections sont introduites par le symbole plus suivi du titre, comme
Ici vous pouvez ecrire vos paragraphes de section.
Au besoin vous pouvez definir des sous sections, en les introduisant par
deux symboles plus suivi du titre de sous section, comme ci-dessous.
== Ma premiere sous Section
Ici vous pouvez ecrire vos paragraphes de section.
Au besoin vous pouvez definir des sous sections, en les introduisant par
deux symboles plus suivi du titre de sous section, comme ci-dessous.
== Ma premiere sous Section
Ici vous pouvez ecrire vos paragraphes de section toujours separes par une
ou plusieurs lignes blanches.
Il peut bien sur avoir plusieurs sous sections dans une meme section. En
Ici vous pouvez ecrire vos paragraphes de section toujours separes par une
ou plusieurs lignes blanches.
Il peut bien sur avoir plusieurs sous sections dans une meme section. En
Au besoin vous pouvez aussi ajouter des mots en #index en lui accolant
devant un #symbole diese. Dans la phrase precedente les mots index et
symbole seront donc mis en index lors du processus de compilation.
= Au sujet de la table des matieres et des numeros de section
Au besoin vous pouvez aussi ajouter des mots en #index en lui accolant
devant un #symbole diese. Dans la phrase precedente les mots index et
symbole seront donc mis en index lors du processus de compilation.
= Au sujet de la table des matieres et des numeros de section
La numerotation des sections et sous sections se fera automatiquement lors
du processus de compilation. On utilisera une numerotation du style 1.3.
qui signifiera sous section 3 de la section 1. Actuellement vous etes en
train de lire la section 2.
La numerotation des sections et sous sections se fera automatiquement lors
du processus de compilation. On utilisera une numerotation du style 1.3.
qui signifiera sous section 3 de la section 1. Actuellement vous etes en
train de lire la section 2.
Une table des matieres sera aussi generee lors de la compilation et inseree
en tout debut de page HTML.
Une table des matieres sera aussi generee lors de la compilation et inseree
en tout debut de page HTML.