/*************************************************************************************************************************************/
/* */
/* T A B U L A T I O N D E S P A R E N T H E S E S D ' U N E L I S T E : */
/* */
/* */
/* Author of '$xcp/listes.02$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20221201162101). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_MINI
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define TABULATION \
CINQ \
/* "Unite" de tabulation... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define PAS_DE_TABULATION \
ZERO
#define TABULATION_ELEMENTAIRE \
NEUT(tabulation)
#define TABULATION_COURANTE \
MUL2(compteur_des_parentheses,tabulation)
#define CHANGEMENT_DE_LIGNE(changer_de_ligne,amplitude_de_la_tabulation) \
Bblock \
Test(IL_FAUT(changer_de_ligne)) \
Bblock \
CALS(Putchar(K_LF)); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
\
Repe(amplitude_de_la_tabulation) \
Bblock \
CALS(Putchar(K_BLANC)); \
Eblock \
ERep \
Eblock
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* T A B U L A T I O N D E S P A R E N T H E S E S D ' U N E L I S T E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Int,INIT(tabulation,TABULATION));
/* "Unite" de tabulation... */
DEFV(Int,INIT(compteur_des_parentheses,ZERO));
/* Ce compteur est incremente d'une unite a la rencontre d'une parenthese ouvrante, et */
/* decremente d'une unite a la rencontre d'une parenthese fermante. */
DEFV(Char,INIT(caractere_precedent,K_UNDEF));
DEFV(Char,INIT(caractere_courant,K_UNDEF));
/* Caracteres precedent et courant. */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,GET_ARGUMENT_I("tabulation=",tabulation);
);
Tant(GetcharT(caractere_courant))
Bblock
/* Le caractere courant de l'entree courante est recupere ; et on boucle */
/* sur cette recuperation tant que l'on n'est pas au bout du fichier. */
Test(IFET(IFNE(caractere_courant,K_PG),IFNE(caractere_courant,K_PD)))
Bblock
CALS(Putchar(caractere_courant));
/* Tous les caracteres sont a priori transmis sauf les parentheses... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFEQ(caractere_courant,K_PG))
Bblock
INCR(compteur_des_parentheses,I);
/* Comptage des parentheses... */
CHANGEMENT_DE_LIGNE(IFNE(caractere_precedent,K_PG)
,COND(IFNE(caractere_precedent,K_PG),TABULATION_COURANTE,TABULATION_ELEMENTAIRE)
);
CALS(Putchar(caractere_courant));
/* Transmission des parentheses ouvrantes... */
CHANGEMENT_DE_LIGNE(TOUJOURS_VRAI,TABULATION_COURANTE);
Eblock
ATes
Bblock
Eblock
ETes
Test(IFEQ(caractere_courant,K_PD))
Bblock
Test(IZGT(compteur_des_parentheses))
Bblock
CHANGEMENT_DE_LIGNE(IFNE(caractere_precedent,K_PD)
,COND(IFNE(caractere_precedent,K_PD),TABULATION_COURANTE,PAS_DE_TABULATION)
);
CALS(Putchar(caractere_courant));
/* Transmission des parentheses fermantes... */
DECR(compteur_des_parentheses,I);
/* Decomptage des parentheses... */
CHANGEMENT_DE_LIGNE(TOUJOURS_VRAI,TABULATION_COURANTE);
Eblock
ATes
Bblock
PRINT_ERREUR("les parentheses sont mal equilibrees : il a trop de parentheses '$K_PD')");
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
EGAL(caractere_precedent,caractere_courant);
Eblock
ETan
Test(IZNE(compteur_des_parentheses))
Bblock
PRINT_ERREUR("les parentheses sont mal equilibrees : il a trop de parentheses '$K_PG'");
Eblock
ATes
Bblock
Eblock
ETes
RETU_Commande;
Eblock
ECommande