/*************************************************************************************************************************************/
/* */
/* E L I M I N A T I O N D E S C H A N G E M E N T S D E L I G N E S P R E - M A R Q U E S : */
/* */
/* */
/* Fonction : */
/* */
/* Cette commande est destinee a assurer */
/* des reecritures du type : */
/* */
/* "XXXX...XXXX`" */
/* "YYYY...YYYY" */
/* */
/* en : */
/* */
/* "XXXX...XXXXYYYY...YYYY" */
/* */
/* Le 20020111150814, un nouveau mode de */
/* fonctionnement a ete introduit par l'option */
/* "reconstituer=VRAI". Elle permet de ne faire */
/* ces reecritures que pour les parties du */
/* fichier Argument situe entre deux occurences */
/* d'un marqueur ; supposant que celui-ci soit */
/* "@" ('v $xcc/cpp$Z reconstituer='), le */
/* fichier : */
/* */
/* "AAAA...AAAA`" */
/* "@BBBB...BBBB" */
/* "CCCC...CCCC@" */
/* "DDDD...DDDD" */
/* */
/* se reecrira : */
/* */
/* "AAAA...AAAA`" */
/* "@BBBB...BBBBCCCC...CCCC@" */
/* "DDDD...DDDD" */
/* */
/* le marqueur ("@") etant conserve. On notera */
/* au passage que ce marqueur n'occupe pas */
/* necessairement des emplacements privilegies */
/* (comme le debut ou la fin de ligne dans */
/* l'exemple ci-dessus...). */
/* */
/* */
/* Author of '$xcp/recollage$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1990??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
@define PRAGMA_CL_____PAS_DE_LIBRAIRIES_DYNAMIQUES
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 RECONSTITUER_DES_GRANDES_LIGNES \
FAUX \
/* A priori, le mode de fonctionnement est le mode anterieur au 20020111150814. Il est */ \
/* possible d'avoir un nouveau mode de focntionnement utile a 'v $xcc/cpp$Z reconstituer=' */ \
/* permettant de reconstituer (provisoirement) des grandes lignes. */
#define MARQUEUR_DE_DELIMITAGE \
K_DOLLAR \
/* A priori, on utilise le premier 'SUBSTITUT_DE_L_UNDERSCORE' (voir '$Z_UNDERSCORE'), car */ \
/* en effet il a en general ete substitue au prealable (voir 'PASSE_1' dans $xcc/cpp$Z)... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E L I M I N A T I O N D E S C H A N G E M E N T S D E L I G N E S P R E - M A R Q U E S : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(Logical,INIT(reconstituer_des_grandes_lignes,RECONSTITUER_DES_GRANDES_LIGNES));
/* A priori, le mode de fonctionnement est le mode anterieur au 20020111150814. Il est */
/* possible d'avoir un nouveau mode de focntionnement utile a 'v $xcc/cpp$Z reconstituer=' */
/* permettant de reconstituer (provisoirement) des grandes lignes. */
DEFV(CHAR,INIT(marqueur_de_delimitage,MARQUEUR_DE_DELIMITAGE));
/* A priori, on utilise 'SUBSTITUT_DE_L_UNDERSCORE'... */
DEFV(Char,INIT(caractere_courant,K_UNDEF));
/* Caractere courant. */
DEFV(Logical,INIT(on_vient_de_rencontrer_une_apostrophe,FAUX));
/* Cet indicateur indique en permanence si l'on vient de rencontrer */
/* immediatement une apostrophe (') : */
/* */
/* VRAI : apres la premiere rencontree, */
/* FAUX : apres la seconde, */
/* */
/* cet indicateur fonctionnant en bascule, puisque les apostrophes forment */
/* des couples de parentheses... */
DEFV(Logical,INIT(on_vient_de_rencontrer_une_quote,FAUX));
/* Cet indicateur indique en permanence si l'on vient de rencontrer */
/* immediatement une quote (") : */
/* */
/* VRAI : apres la premiere rencontree, */
/* FAUX : apres la seconde, */
/* */
/* cet indicateur fonctionnant en bascule, puisque les quotes forment */
/* des couples de parentheses... */
DEFV(Logical,INIT(on_vient_de_rencontrer_le_marqueur_de_delimitage,FAUX));
/* Cet indicateur indique en permanence si l'on vient de rencontrer le caractere */
/* de marquage... */
/*..............................................................................................................................*/
GET_ARGUMENTS_(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("reconstituer=",reconstituer_des_grandes_lignes);
GET_ARGUMENT_K("marqueur=""m=""caractere=""c=",marqueur_de_delimitage);
)
);
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(IFNE(caractere_courant,marqueur_de_delimitage))
Bblock
Test(IFEQ(caractere_courant,K_LF))
Bblock
Test(EST_VRAI(on_vient_de_rencontrer_le_marqueur_de_delimitage))
Bblock
/* Les changements de lignes pre-marques sont ignores... */
Eblock
ATes
Bblock
CALS(Putchar(caractere_courant));
/* Les changements de lignes non pre-marques sont transmis... */
Eblock
ETes
EGAL(on_vient_de_rencontrer_une_apostrophe,FAUX);
EGAL(on_vient_de_rencontrer_une_quote,FAUX);
/* Au changement de ligne, on reinitialise la gestion des quotes et apostrophes... */
Eblock
ATes
Bblock
CALS(Putchar(caractere_courant));
/* Lorsque le caractere courant n'est pas le changement de ligne, on le reemet... */
Eblock
ETes
Test(IFET(IFEQ(caractere_courant,K_QUOTE),EST_FAUX(on_vient_de_rencontrer_une_apostrophe)))
Bblock
EGAL(on_vient_de_rencontrer_une_quote,NOTL(on_vient_de_rencontrer_une_quote));
/* On gere les quotes comme des parentheses... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IFET(IFEQ(caractere_courant,K_APOSTROPHE),EST_FAUX(on_vient_de_rencontrer_une_quote)))
Bblock
EGAL(on_vient_de_rencontrer_une_apostrophe,NOTL(on_vient_de_rencontrer_une_apostrophe));
/* On gere les apostrophes comme des parentheses... */
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(reconstituer_des_grandes_lignes))
Bblock
Eblock
ATes
Bblock
EGAL(on_vient_de_rencontrer_le_marqueur_de_delimitage,FAUX);
Eblock
ETes
Eblock
ATes
Bblock
Test(IFET(EST_FAUX(on_vient_de_rencontrer_une_quote)
,EST_FAUX(on_vient_de_rencontrer_une_apostrophe)
)
)
Bblock
Test(IL_FAUT(reconstituer_des_grandes_lignes))
Bblock
EGAL(on_vient_de_rencontrer_le_marqueur_de_delimitage
,NOTL(on_vient_de_rencontrer_le_marqueur_de_delimitage)
);
/* Gestion "parenthesee" du marqueur... */
Eblock
ATes
Bblock
EGAL(on_vient_de_rencontrer_le_marqueur_de_delimitage,VRAI);
/* Le marqueur n'est pas transmis... */
Eblock
ETes
Eblock
ATes
Bblock
Test(IL_FAUT(reconstituer_des_grandes_lignes))
Bblock
Eblock
ATes
Bblock
CALS(Putchar(caractere_courant));
/* Lorsque le caractere "marqueur" est entre quotes ou apostrophes, on l'emet... */
Eblock
ETes
Eblock
ETes
Test(IL_FAUT(reconstituer_des_grandes_lignes))
Bblock
CALS(Putchar(caractere_courant));
/* Le caractere "marqueur" est conserve en toutes circonstances... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ETes
Eblock
ETan
RETU_Commande;
Eblock
ECommande