--- rpl/src/analyse_notation_algebrique.c 2013/03/20 17:11:43 1.43 +++ rpl/src/analyse_notation_algebrique.c 2013/09/06 10:30:50 1.50 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 + RPL/2 (R) version 4.1.16 Copyright (C) 1989-2013 Dr. BERTRAND Joël This file is part of RPL/2. @@ -57,8 +57,6 @@ analyse_algebrique(struct_processus *s_e logical1 presence_fonction; logical1 presence_liste; - long k; - unsigned char *chaine_arguments; unsigned char *chaine_centrale; unsigned char *chaine_droite; @@ -88,6 +86,7 @@ analyse_algebrique(struct_processus *s_e integer8 fin_zone_algebrique; integer8 i; integer8 j; + integer8 k; integer8 longueur_chaine; integer8 longueur_tampon; integer8 niveau; @@ -117,7 +116,10 @@ analyse_algebrique(struct_processus *s_e if (chaine_algebrique[i] == '"') { - presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux; + if (chaine_algebrique[i - 1] != '\\') + { + presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux; + } } else if (presence_chaine == d_faux) { @@ -178,13 +180,30 @@ analyse_algebrique(struct_processus *s_e { if ((*ptr1) == '"') { - if (presence_chaine == d_faux) - { - presence_chaine = d_vrai; + if (ptr1 != chaine_travail) + { // Il existe un caractère précédent. + if ((*(ptr1 - 1)) != '\\') + { + if (presence_chaine == d_faux) + { + presence_chaine = d_vrai; + } + else + { + presence_chaine = d_faux; + } + } } else - { - presence_chaine = d_faux; + { // Il n'existe pas de caractère précédent. + if (presence_chaine == d_faux) + { + presence_chaine = d_vrai; + } + else + { + presence_chaine = d_faux; + } } } @@ -269,8 +288,19 @@ analyse_algebrique(struct_processus *s_e } else if (chaine_travail[i] == '"') { - presence_chaine = (presence_chaine == d_vrai) - ? d_faux : d_vrai; + if (i > 0) + { + if (chaine_travail[i - 1] != '\\') + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } + } + else + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } } i++; @@ -307,8 +337,19 @@ analyse_algebrique(struct_processus *s_e if (chaine_travail[j] == '"') { - presence_chaine = (presence_chaine == d_vrai) - ? d_faux : d_vrai; + if (j > 0) + { + if (chaine_travail[j - 1] != '\\') + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } + } + else + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } } j++; @@ -359,8 +400,19 @@ analyse_algebrique(struct_processus *s_e { if (chaine_centrale[i] == '"') { - presence_chaine = (presence_chaine == d_faux) - ? d_vrai : d_faux; + if (i > 0) + { + if (chaine_centrale[i - 1] != '\\') + { + presence_chaine = (presence_chaine == d_faux) + ? d_vrai : d_faux; + } + } + else + { + presence_chaine = (presence_chaine == d_faux) + ? d_vrai : d_faux; + } if (i == 1) { @@ -1098,8 +1150,8 @@ analyse_algebrique(struct_processus *s_e unsigned char * purification_chaine(unsigned char *chaine) { - long i; - long j; + integer8 i; + integer8 j; unsigned char *chaine_purifiee; @@ -1137,8 +1189,6 @@ purification_chaine(unsigned char *chain logical1 test_expression_rpn(unsigned char *chaine) { - long j; - int t; int t0; int t1; @@ -1149,6 +1199,7 @@ test_expression_rpn(unsigned char *chain integer8 compteur; integer8 longueur_chaine; integer8 i; + integer8 j; integer8 niveau; /* @@ -1168,7 +1219,7 @@ test_expression_rpn(unsigned char *chain if (chaine[i - 1] == '"') { i++; - while(chaine[i - 1] != '"') + while(!((chaine[i - 1] == '"') && (chaine[i - 2] != '\\'))) { i++; } @@ -1317,19 +1368,7 @@ extraction_chaine(unsigned char *chaine, unsigned char *sous_chaine; if ((position_1 < 1) || (position_2 < position_1) || - (position_1 > ((integer8) strlen(chaine)))) - { - if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char))) - == NULL) - { - return(NULL); - } - - (*sous_chaine) = d_code_fin_chaine; - return(sous_chaine); - } - - if (position_2 > ((integer8) strlen(chaine))) + (position_2 > ((integer8) strlen(chaine)))) { if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char))) == NULL)