L'utilitaire PasMat
Cette annexe décrit PasMat, un programme utilitaire MPW Shell que vous pouvez utiliser pour convertir votre texte source au format «joli-imprimé» (pretty-printed).
PasMat [option...] [inputfile [outputfile]] |
Description
Reformate le code source Pascal dans un format standard, adapté à l'impression ou à la compilation. PasMat accepte les programmes complets, les procédures externes, les blocs et les groupes d'instructions.
Remarque : Un programme syntaxiquement incorrect provoque l'abandon de PasMat. Si cela se produit, la sortie générée contiendra la source formatée jusqu'au point de l'erreur.
Les options PasMat vous permettent d'effectuer les opérations suivantes :
- Convertir un programme en conventions de cas uniformes.
- Indentez un programme pour montrer sa structure logique et ajustez les lignes pour qu'elles correspondent à une longueur de ligne spécifiée.
- Remplacez les délimiteurs de commentaires (* *) par { }
- Supprimez le caractère de soulignement (_) des identificateurs, renommez les identificateurs ou changez leur casse.
- Formater les fichiers d'inclusion nommés dans les directives d'inclusion MPW Pascal.
Les spécifications PasMat peuvent être effectuées via ses options ou via des directives de formatage spéciales, ressemblant aux directives du compilateur Pascal et sont insérées dans le fichier source sous forme de commentaires Pascal.
Le formatage par défaut de PasMat est simple et ne nécessite pas que vous utilisiez des options. La meilleure façon de découvrir comment PasMat formate quelque chose est d'essayer un petit exemple et de voir.
Entrée
Si aucun fichier d'entrée n'est spécifié, l'entrée standard est formatée.
Sortie
Si aucun fichier de sortie n'est spécifié, la sortie formatée est écrite dans le fichier de sortie standard.
Options
La plupart des options suivantes modifient les paramètres par défaut initiaux des directives décrites dans le manuel de référence Macintosh Programmer's Workshop.
Paramètre | Description | |
---|---|---|
-a | Définissez a- pour désactiver le regroupement d'étiquettes CASE. | |
-b | Définissez b+ pour activer le regroupement IF. | |
-body | Définissez body+ pour aligner les corps de procédure avec leur paire BEGIN ... END englobante. | |
-c | Définissez c+ pour le placement de BEGIN sur la même ligne que le mot précédent. | |
-d | Définissez d+ pour activer le remplacement de (* *) par des délimiteurs de commentaires { }. | |
-e | Définissez e+ pour mettre les identificateurs en majuscule. | |
-entab | Remplacez les séries de blancs par des tabulations. La valeur du taquet de tabulation est déterminée par l'option -t ou la directive t=n actuelle (et non par le paramètre de tabulation du fichier). | |
-f | Définissez f- pour désactiver le formatage. | |
-g | Définissez g+ sur l'affectation de groupe et les instructions d'appel. | |
-h | Définissez h- pour désactiver le regroupement FOR, WHILE et WITH. | |
-i pathname [, pathname... ] | Recherchez les fichiers inclus dans les répertoires spécifiés. Plusieurs options -i peuvent être spécifiées. Au maximum 15 répertoires seront recherchés. L'ordre de recherche est précisé sous la description de la commande Pascal. (Notez que les déclarations USES ne sont pas traitées par PasMat.) | |
-in | Définissez + pour traiter les inclusions du compilateur Pascal. Cette option est implicite si l'option -i est utilisée. | |
-k | Définissez k+ pour indenter les instructions entre les paires BEGIN ... END. | |
-l | Définissez l+ pour une copie littérale des mots et identificateurs réservés. | |
-list filename | Générez une liste de la source formatée. La liste est écrite dans le fichier spécifié. | |
-n | Définissez n+ pour regrouper les paramètres formels. | |
-o width | Définissez la largeur de la ligne de sortie. La valeur maximale autorisée est 150. La valeur par défaut est 80. | |
-p | Afficher les informations de version et les informations de progression sur le fichier de diagnostic. | |
-pattern =pattern=replacement= | Le processus inclut (-in) et génère un ensemble de messages de sortie avec la même structure d'inclusion que l'entrée, mais avec de nouveaux noms tels que spécifiés
dans le modèle et les chaînes de caractères de remplacement. Les noms de fichiers de sortie et les directives d'inclusion du compilateur Pascal sont générés en modifiant
les noms de fichiers d'entrée (inclus) en fonction du modèle et des chaînes de caractères de remplacement. Pattern est un chemin d'accès devant être recherché
dans le fichier d'entrée et dans chaque fichier inclus (le chemin d'accès complet est utilisé et la casse est ignorée). Si le modèle est trouvé, cette séquence de
caractères est remplacée par la chaîne de caractères de remplacement. Le résultat est un nouveau chemin d'accès, devant le nom d'un fichier de sortie. Par exemple :
remplace chaque nom contenant la chaîne de caractères OldFile par la chaîne de caractères : NewFile Tout caractère non contenu dans le modèle ou les chaînes de caractères de remplacement peut être utilisé à la place d'un signe égal. Notez que les caractères spéciaux doivent être mis entre guillemets. Voir l'exemple à la fin de cette annexe. |
|
-q | Définissez q+ pour ne pas traiter spécialement la séquence ELSE ... IF. | |
-r | Définissez r+ sur les mots réservés en majuscules. | |
-rec | Indentez la liste de champs d'un enregistrement sous l'identificateur défini par la définition de l'enregistrement. | |
-s renameFile | Renommez les identificateurs. renameFile doit être un fichier contenant une liste d'identificateurs et leurs nouveaux noms. Chaque ligne de ce fichier contient deux identificateurs de 63 caractères maximum chacun : le premier est l'identificateur à renommer et le second est le nom remplaçant toutes les occurrences du premier identificateur lors de la création de la sortie. Il doit y avoir au moins un espace ou une tabulation entre les deux identificateurs. Les espaces et tabulations de début et de fin sont facultatifs. La casse du premier identificateur n'a pas d'importance, mais le deuxième identificateur doit être spécifié exactement tel qu'il doit apparaître dans la sortie. La casse de tous les identificateurs non spécifiés dans renameFile est soumise aux autres options de casse (-e, -1, -u et -w) ou à leurs directives correspondantes. Les mots réservés ne peuvent pas être renommés. | |
-t tab | Définissez le montant de la tabulation pour chaque niveau d'indentation. Si l'option -entab est également spécifiée, les caractères de tabulation seront effectivement générés. La valeur de tabulation par défaut est deux. | |
-u | Renommer tous les identificateurs en fonction de leur première occurrence dans la source. Les spécifications du fichier rename (-s) ont toujours priorité sur cette option, c'est-à-dire que la traduction de l'identificateur est basée sur le fichier rename plutôt que sur la première occurrence. | |
-v | Définissez v+ pour mettre THEN sur une ligne séparée. | |
-w | Définissez w+ pour écrire les identificateurs en majuscules. | |
-x | Définissez x+ pour supprimer l'espace autour des opérateurs. | |
-y | Définissez y+ pour supprimer l'espace autour de :=. | |
-z | Définissez z+ pour supprimer l'espace après les virgules. | |
-: | Définissez :+ pour aligner les deux-points dans les déclarations VAR (uniquement si une directive j PasMat dans la source spécifie une largeur) | |
-@ | Définissez @+ pour forcer plusieurs balises CASE sur des lignes distinctes. | |
"-#" | Définissez #+ pour un regroupement "intelligent" des instructions d'affectation et d'appel (les instructions d'affectation et d'appel groupées sur une ligne d'entrée apparaîtront regroupées en sortie). Remarque : étant donné que # est le caractère de commentaire du Shell, cette option doit être citée sur la ligne de commande. |
|
-_ | Définissez _+ pour le mode "portabilité" (les traits de soulignement sont supprimés des identificateurs). |
Toutes les options, à l'exception de -list, -pattern, -s et -entab, ont des équivalents de directive. Il est recommandé de spécifier les options sous forme de directives dans la source d'entrée afin de ne pas avoir à les spécifier à chaque fois que vous appelez PasMat.
{PasMatOpts}
variable:
Vous pouvez également spécifier un ensemble d'options par défaut dans la variable Shell exportée {PasMatOpts} - PasMat traite ces options avant de traiter les options de ligne de commande. {PasMatopts} doit contenir une chaîne de caractères (longueur maximale 255) spécifiant les options exactement comme vous les spécifieriez sur la ligne de commande (sauf pour les guillemets sur la ligne de commande, devant être omises ; notez également que les options -pattern, -list, - s, et -i, nécessitant un paramètre de chaîne de caractères, ne peuvent être spécifiés que sur la ligne de commande). Par exemple, vous pouvez définir {PasMatopts} dans le Shell (peut-être dans le fichier UserStartup) comme suit :
Set PasMatOpts "-n -u -r -d -entab -t -o 82 -t 2" Export PasMatOpts |
La chaîne de caractères de définition entière doit être mise entre guillemets pour préserver les espaces.
Au lieu de spécifier directement les options, vous pouvez indiquer que les options sont entreposées dans un fichier, en spécifiant le chemin d'accès complet du fichier préfixé du caractère ^ :
Set PasMatOpts "^pathname" Export PasMatOpts |
PasMat va maintenant rechercher les options par défaut dans le fichier spécifié. Les lignes de ce fichier peuvent contenir n'importe quelle séquence d'options de ligne de commande (à l'exception de -pattern, -list, -s et -i), regroupées sur la même ligne ou sur des lignes distinctes. Les lignes peuvent être commentées en plaçant le commentaire entre accolades ({ ... }). Un fichier d'options typique peut ressembler à ceci :
-n {regrouper les paramètres formels sur la même ligne} -u {traduction automatique des identificateurs basée sur la première occurrence} -r {mots réservés en majuscules} -d {laissez les accolades de commentaire seules} -entab {placer de vrais tabulations dans la sortie} -t {regroupement intelligent} -o 82 {largeur de ligne de sortie} -t 2 {valeur de la tabulation d'identation} |
(À l'exception de la valeur de tabulation, cet exemple montre l'ensemble d'options recommandé.
Si PasMat trouve un ensemble d'options par défaut, ces options seront reprises dans les informations d'état fournies avec l'option -p.
Directives
Les directives sont spécifiées par des commentaires spéciaux inclus dans le code source Pascal. Ces commentaires ont le format suivant :
{[directives] optional text} |
Les directives elles-mêmes sont soit des commutateurs au format :
<character(s)>+ |
ou
<character(s)>- |
ou des directives numériques au format :
<character(s)>=<number> |
Pour la directive j uniquement, la directive numérique peut également avoir le format spécial :
j=<number>c/<number>cc/<number>c |
où les c sont des caractères et l'une ou les deux premières entrées peuvent être omises (mais pas les barres obliques les séparant, par exemple //<number>c).
Plusieurs directives sont séparées par des virgules. Les espaces dans une directive ne sont pas autorisés. Par exemple :
{[b+,o=95,t=4,r-]} |
active et désactive le commutateur b et définit la directive numérique o sur 95 et t sur 4. La casse est ignorée dans les directives.
Les directives suivantes sont reconnues :
Directives | Description | |||
---|---|---|---|---|
a | Placez une instruction après une étiquette CASE. Il sera mis sur la même ligne s'il convient. La valeur par défaut est a+. | |||
b | Placez une instruction après THEN ou ELSE. Il sera mis sur la même ligne s'il convient. La valeur par défaut est b-. | |||
body | N'indentez pas le corps d'une procédure entre BEGIN ... END. La directive body+ aligne le corps de la procédure avec BEGIN et END. La valeur par défaut est body-. | |||
c | Placez BEGIN sur la même ligne que son mot-clef d'introduction. Si c+ est spécifié, alors k- (la valeur par défaut) doit être utilisé. La valeur par défaut est c-. | |||
d | Remplacez les délimiteurs de commentaires (* *) par { }. La valeur par défaut est d-. | |||
e | Mettez en majuscule la première (ou la seule) lettre des identifiants et la première lettre suivant un caractère de saut (trait de soulignement). Conservez le caractère de pause. Cette directive remplace les directives l et w. Voir aussi l'option _ (portabilité) ci-dessous. La valeur par défaut est e-. | |||
f | Activez ou désactivez le formatage. Cette directive entre en vigueur immédiatement après le commentaire dans lequel elle est placée. Ceci est utile pour sauvegarder des parties formatées manuellement d'un programme. La valeur par défaut est f+. | |||
g | Déclarations de groupe (i par ligne). Cette directive est spécifiée soit sous forme de commutateur (g+ ou g-), soit sous forme de directive numérique (g=i). Pour g=i, l'espace depuis le niveau d'indentation actuel jusqu'à la fin de la ligne est divisé en i champs, et les instructions successives sont placées sur les limites des champs successifs. Une instruction peut prendre plus d'un champ, auquel cas l'instruction suivante va à nouveau sur la limite du champ suivant. Ceci est similaire à l'utilisation d'onglets sur une machine à écrire. Toute instruction nécessitant plusieurs lignes peut produire des résultats étranges sur les instructions suivantes. La forme g=i affecte les déclarations et instructions constantes. En spécifiant la forme g+, seules les instructions d'affectation et d'appel sont regroupées (si elles tiennent sur une ligne). La directive g+ n'a d'effet que si g=1 est défini. Les valeurs par défaut sont g- et g=1. | |||
h | Regroupez une seule instruction sur la même ligne que FOR, WHILE et WITH si elle convient. Sinon, mettez-le en retrait sur la ligne suivante. Cela s'applique également à IF (sans ELSE) avec la directive b. La valeur par défaut est h+. | |||
in | Processus INCLUDE {$I filename} de directives du compilateur Pascal (et non PasMat). PasMat propose trois manières de traiter les fichiers d'inclusion, la troisième étant recommandée :
|
|||
j | Alignement particulier des déclarations et commentaires. Il s'agit d'une directive numérique unique au format général :
Spécifie que les colonnes de largeur doivent être réservées pour tous les identifiants CONST, TYPE ou VAR suivants (vous pouvez également contrôler l'alignement des deux-points dans les déclarations VAR dans la largeur en utilisant l'option :). Le signe facultatif suivant la largeur indique s'il faut appliquer la largeur aux listes d'enregistrements (si + est utilisé ou si le signe est omis) ou s'il faut l'appliquer uniquement aux variables déclarées elles-mêmes (si - est spécifié).
Spécifie dans quelle colonne doit commencer un commentaire suivant une instruction sur la même ligne. Notez que width est une spécification de largeur et col1 est une spécification de colonne. L'utilisation de col1 vous permet d'aligner tous les commentaires dans les déclarations. Tous les commentaires suivent les instructions (lorsque le commentaire est la dernière chose sur la même ligne que l'instruction), sauf si vous utilisez les options s et d après col1 (la casse est ignorée et les lettres peuvent être dans n'importe quel ordre). Si s est spécifié, col1 n'est appliqué qu'aux instructions et non aux déclarations. Si d est spécifié, alors col1 n'est appliqué qu'aux déclarations. Omettre s et d revient à spécifier les deux ; col1 est appliqué à tous les commentaires suivant les instructions si le commentaire est le dernier élément de la ligne.
Spécifie une colonne de début pour les commentaires, comme le fait col1, mais affecte uniquement les commentaires qui ont le caractère déclencheur c comme premier caractère de commentaire. Si la largeur est omise, sa valeur précédente reste inchangée ; la barre oblique devant le col1 est obligatoire. Si col1 est omis, la valeur précédente reste inchangée ; la barre oblique devant est facultative, sauf si col2 est spécifié, auquel cas les deux barres obliques sont obligatoires. Pour les déclarations de constantes, la directive g=i (où i est supérieur à un) remplace la largeur. Les commentaires ne doivent pas être utilisés pour ces déclarations. De plus, les valeurs width et col1 sont ignorées pour une ligne si elles ne peuvent pas être utilisées car un identificateur ou ses informations déclaratives sont trop larges. Une valeur de zéro pour width, col1 ou col2 désactive l'alignement correspondant. La valeur par défaut est j=0/0/0. |
|||
k | Indentez les instructions entre les paires BEGIN ... END. Normalement, les instructions sont indentées au même niveau que la paire BEGIN ... END. La directive c détermine l'emplacement réel de BEGIN. Normalement, BEGIN apparaît sur une ligne séparée à moins que c+ ne soit utilisé. De plus, k- doit être utilisé si c+ est spécifié. La valeur par défaut est k-. | |||
l | Le cas des mots et identificateurs réservés doit être une copie littérale de l'entrée. Cette directive remplace la directive et est désactivée par la directive _. La directive r remplace l pour les mots réservés. La valeur par défaut est l-. | |||
n | Paramètres de procédure formelle de groupe. Ceci est similaire à l'option g+, mais uniquement pour les paramètres formels des déclarations de procédure et de fonction. Normalement, ceux-ci apparaissent un par ligne. La valeur par défaut est n-. | |||
o | Il s'agit d'une directive numérique (o=w) spécifiant la largeur de la ligne de sortie. La valeur maximale autorisée est de 150 caractères. Si un jeton particulier ne rentre pas dans cette largeur, cette ligne sera allongée pour l'adapter et un message sera affiché à la fin du formatage. La valeur par défaut est o=80. | |||
q | Lorsque IF suit ELSE, ne précise pas IF. Il est ainsi mis en retrait sur la ligne suivante après ELSE. La valeur par défaut est q-. | |||
r | Afficher tous les mots réservés en majuscules ; sinon (r-), sortie en minuscules. La valeur par défaut est r-. | |||
rec | Le champ d'enregistrement en retrait est répertorié sous l'identificateur de l'enregistrement, plutôt que sous le mot réservé RECORD. La directive rec+ formate les enregistrements comme ceci :
La valeur par défaut rec- formate les enregistrements comme ceci :
|
|||
t | Spécifie le nombre de tabulations pour chaque niveau d'indentation. Il s'agit d'une directive numérique (t=n). Les instructions se poursuivant sur des lignes successives sont en outre indentées de la moitié de ce montant. L'option de commande -entab provoque le placement des caractères de tabulation réels dans le fichier de sortie en utilisant la valeur de taquet de tabulation de la directive t. La valeur par défaut est t=2. | |||
u | Les conventions de casse pour chaque identificateur doivent être basées sur la première occurrence de l'identificateur dans la source. La première occurrence de chaque identificateur est laissée telle quelle ; toutes les occurrences ultérieures sont faites pour ressembler exactement à la première occurrence. Cette option remplace les options l et w, mais les options e et _ peuvent toujours être utilisées. La valeur par défaut est u-. | |||
v | Alignez une instruction IF de sorte que THEN soit en retrait sur la ligne suivante après la ligne contenant IF. ELSE est aligné avec THEN. La valeur par défaut est v-. | |||
w | Convertir les identificateurs en majuscules ; sinon, convertissez en minuscules. Cette directive est remplacée par les directives 1, e et_. La valeur par défaut est w-. | |||
x | Supprimez l'espace autour des opérateurs arithmétiques +, -, * et / et des opérateurs relationnels =, <>, <, <=, > et >=. Normalement, un espace est placé de chaque côté de ces opérateurs. Cette option n'a aucun effet sur le = utilisé dans les déclarations CONST et TYPE. La valeur par défaut est x-. | |||
y | Supprime l'espace autour de l'opérateur d'affectation :=. La valeur par défaut est y-. | |||
z | Supprime l'espace après les virgules. La valeur par défaut est z-. | |||
@ | Contrôle les balises d'instruction CASE (étiquettes). Cette directive est spécifiée soit sous forme de commutateur (q+ ou q-), soit sous forme de directive numérique
(@=i). Dans son format @=i, le i indique que l'instruction associée à la balise CASE doit démarrer i colonnes après le début de la balise case. Ceci est similaire à
la directive j=&t;width>/<col1>/<col2>c où width indique la quantité d'espace à réserver pour un identificateur déclaré. Ici, le i indique la quantité
d'espace à réserver pour la ou les balises CASE. Si @=0 (valeur par défaut), les instructions suivant une balise CASE sont mises en retrait (en utilisant la valeur de
tabulation d'indentation actuelle) sur la ligne suivant la balise. Si @=1, la largeur de la première balise plus deux (pour les deux-points de la balise et l'espace
suivant) est utilisée pour déterminer l'espace à réserver pour toutes les balises suivantes dans cette instruction CASE. Cela signifie que vous devez placer votre balise
CASE la plus longue en premier. Pour @=i (où i est supérieur à un), les espaces i sont réservés aux balises CASE. Si la balise est trop large pour la largeur spécifiée,
alors les instructions qui suivent sont placées sur la ligne suivante, en retrait d'espaces. @+ et @- spécifient quoi faire avec une liste de balises qui ne rentrent pas dans la largeur spécifiée. @+· indique qu'une balise faisant partie d'une liste doit être placée sur la ligne suivante si elle dépasse la largeur i. @- indique que autant de balises que possible doivent être conservées ensemble sur la même ligne. Si la liste résultante est plus longue que i, les instructions sont placées sur la ligne suivante en retrait de i. Les valeurs par défaut sont @=, @=0. |
|||
: | Positionnement des deux-points dans les déclarations VAR alignées. La largeur réservée aux identificateurs dans les déclarations est contrôlée par le paramètre width de la directive j. Dans les déclarations VAR, vous avez le choix de permettre aux deux-points de suivre immédiatement leurs identificateurs (en précisant la directive :-) ou d'aligner les deux-points à droite de la largeur réservée (en précisant la directive :+). La valeur par défaut est :-. | |||
# | Option de regroupement "intelligente". Si t+ est spécifié, alors les instructions d'affectation et d'appel ayant été regroupées sur la même ligne dans l'entrée seront regroupées sur la même ligne dans la sortie (si elles ne dépassent pas la largeur de la ligne de sortie). La valeur par défaut est #-. | |||
_ | Cette directive (un trait de soulignement) définit le formatage du mode de portabilité, supprimant le caractère de soulignement des identificateurs. La première lettre de chaque identificateur et la première lettre suivant chaque caractère de soulignement sont en majuscule, tandis que les caractères restants sont en minuscules. Cette directive remplace les directives l et w. Le cas des mots réservés est défini avec la directive r. La valeur par défaut est _-. |
Commentaires de formatage :
Les commentaires en Pascal sont difficiles à formater, et PasMat essaie d'être intelligent à ce sujet. Les règles devraient vous permettre d'utiliser les commentaires pour obtenir presque tous les effets souhaités. Les règles suivantes régissent le formatage des commentaires par PasMat :
- Un commentaire isolé sur une seule ligne sera transmis à la sortie sans modification. Son extrémité gauche est définie sur le niveau d'indentation actuel afin qu'elle soit alignée avec les instructions la précédant et/ou la suivent. S'il est trop long pour correspondre à cet alignement, il est placé le plus à droite possible sur la page.
- Un commentaire commençant en premier sur une ligne et continue sur une autre ligne est transmis à la sortie sans modification, y compris son indentation. Ce type de commentaire est supposé contenir du texte formaté par l'utilisateur.
- Si un commentaire couvert par l'une des règles ci-dessus ne rentre pas dans la longueur de ligne de sortie définie, la ligne de sortie est étendue autant que nécessaire pour l'adapter et un message sera affiché à la fin du formatage.
- Un commentaire n'étant pas le premier élément d'une ligne est formaté avec le reste du code. Les mots qu'il contient sont déplacés vers la ligne suivante pour l'adapter, donc rien de ce qui a un format fixe ne peut être utilisé dans un tel commentaire. Le commentaire n'est interrompu qu'au niveau des blancs ; s'il n'y a aucun moyen de rompre un commentaire tout en gardant la sortie dans la longueur de la ligne de sortie, la ligne est prolongée si nécessaire et un message est écrit à la fin du formatage et le code suit un commentaire dans la ligne d'entrée, alors aucun code ne sera être placé après le commentaire dans la ligne de sortie. La directive j vous permet de forcer ces commentaires à commencer dans une colonne spécifique. Cette fonctionnalité est utile pour commenter les déclarations (voir ci-dessous).
- Un commentaire suivant une instruction sur une ligne et commence par un caractère spécifique peut être forcé à commencer dans une colonne spécifique. Cette fonctionnalité est utile si vous effectuez des mises à jour d'un programme et que vous souhaitez afficher ayant effectué la mise à jour et quand.
Regroupement d'instructions :
Le regroupement d'instructions fait référence à la manière dont PasMat aligne une instruction par rapport à une composante d'une autre instruction la précédant. Il y a trois cas :
- une déclaration suivant les étiquettes CASE
- une instruction suivant THEN ou ELSE
- une instruction suivant FOR, WHILE ou WITH
Étant donné que les utilisateurs ont des styles différents dans le formatage de ces instructions, PasMat permet de contrôler, dans une certaine mesure, la manière dont ces instructions sont alignées.
Les discussions suivantes sur le regroupement traitent de la manière dont une instruction peut être alignée par rapport à son instruction «d'introduction», c'est-à-dire si elle est mise en retrait après ou sur la même ligne que l'instruction d'introduction. Par conséquent, dans ces cas, l'instruction fait référence à une instruction simple. Les instructions composées sont généralement indentées en commençant sur une nouvelle ligne (sauf peut-être pour leur BEGINS contrôlé par la directive c).
Regroupement avec les étiquettes CASE : la règle de formatage par défaut pour une instruction CASE consiste à placer les instructions sélectionnées sur la même ligne que les étiquettes de cas. La directive a vous permet de faire apparaître l'instruction sur une ligne distincte de l'étiquette du cas. La directive @ vous permet de contrôler dans quelle mesure les instructions suivant l'étiquette case sont indentées.
Regroupement avec des instructions IF : la valeur par défaut consiste à placer les instructions contrôlées sur des lignes distinctes. La directive b indique à PasMat de placer les instructions contrôlées sur la même ligne que THEN ou ELSE.
Dans le cas particulier de ELSE ... IF, la valeur par défaut est de mettre IF sur la même ligne que ELSE. La directive q vous permet de faire apparaître IF sur la ligne suivante, en retrait après ELSE.
Regroupement avec FOR, WHILE et WITH : la valeur par défaut est de placer l'instruction contrôlée sur la même ligne (si elle convient). Sinon, il est mis en retrait sur la ligne suivante. La directive vous permet de spécifier que l'instruction apparaît toujours sur la ligne suivante.
Remarque : La directive h affecte également l'instruction IF. Avec le regroupement IF désactivé (directive b-) et la directive h désactivée (h-), l'instruction contrôlée apparaîtrait normalement sur une ligne séparée. S'il n'y a pas ELSE, alors la directive h s'applique à l'instruction IF tout comme FOR, WHILE et WITH ; c'est-à-dire que l'instruction contrôlée est placée sur la même ligne que IF (si elle correspond).
Tables :
De nombreux programmes Pascal contiennent de longues listes d'instructions d'initialisation ou de déclarations constantes étant logiquement une seule action ou déclaration. Vous pouvez les insérer dans le moins de lignes possible en utilisant la directive g (format g=i). Si cela est fait, les taquets de tabulation sont définis sur la ligne et les instructions successives ou les déclarations constantes sont alignées sur ces taquets de tabulation au lieu de commencer sur de nouvelles lignes.
Les instructions structurées, étant normalement formatées sur plusieurs lignes, ne seront pas affectées par la directive g. Cependant, il faut faire attention car les instructions d'affectation et d'appel peuvent être regroupées avec la fin de l'instruction structurée (par exemple, après une instruction END). Une forme spéciale de directive de regroupement est fournie spécifiquement pour les instructions d'affectation et d'appel.
Regroupement des affectations et des relevés d'appel :
Comme décrit ci-dessus, la directive de regroupement pour formater les tableaux est g=i, où i est le nombre maximum d'instructions par ligne. Cela configure les taquets de tabulation pour s'aligner sur les instructions i ou les déclarations constantes. Cependant, pour les instructions d'affectation et d'appel, on ne sait pas toujours combien d'instructions tiendront sur une ligne. Même si cela est connu, ces instructions alignées sur des taquets de tabulation peuvent insérer trop d'espace et produire un résultat esthétiquement désagréable. Une forme spéciale de regroupement peut être spécifiée à l'aide de g+, qui n'affecte que les instructions d'affectation et d'appel. Ils sont regroupés de manière à ce que le plus grand nombre possible puisse tenir sur une ligne sans dépasser la longueur de la ligne. Ils ne sont jamais regroupés sur une ligne terminant une instruction structurée, donc le problème posé par la forme de regroupement g=i ne peut pas se produire.
Vous ne souhaiterez probablement pas regrouper toutes les instructions d'affectation et d'appel partout dans votre programme. L'option prédéfinie est g- pour formater les instructions d'affectation et d'appel, une par ligne. Encadrez les sections groupées de votre code avec les directives g+ et g-.
Si vous formatez un programme déjà partiellement formaté et comportant des sections de code regroupées selon le style du codeur, vous ne souhaiterez peut-être pas qu'il soit reformaté à l'aide de g+ et g-. L'option de regroupement "intelligent" (#+) vous permet de spécifier que si plusieurs instructions d'affectation ou d'appel se trouvent sur la même ligne d'entrée et qu'elles ne dépassent pas la largeur de la ligne de sortie, elles resteront regroupées dans la sortie. Ainsi, ils apparaîtront dans la sortie exactement comme dans l'entrée (sauf peut-être pour l'espace entre les instructions).
Remarque : Si g=i est en vigueur avec i supérieur à un, il aura priorité sur l'effet de g+ et #+. Ainsi, g+ ou #+ peuvent être activés et g=i toujours être utilisé (sauf pour g=1).
Déclarations
Si vous souhaitez aligner les déclarations pour que les objets des identifiants (constantes ou types) commencent tous à une colonne particulière, ou aligner les commentaires expliquant les identificateurs, utilisez la directive j. Il permet de préciser le nombre de colonnes à réserver aux identifiants et dans quelle colonne doit commencer le commentaire explicatif.
PasMat présente les limitations suivantes :
- La longueur maximale de la ligne de saisie est de 255 caractères.
- La longueur maximale de la ligne de sortie est de 150 caractères.
- Les fichiers d'entrée et les fichiers de sortie doivent être différents.
- Seuls les programmes, unités, blocs, procédures et instructions syntaxiquement corrects sont formatés. Ceci doit être pris en considération lorsque des fichiers d'inclusion séparés et des directives conditionnelles du compilateur doivent être formatés.
- La directive d'inclusion Pascal doit être la dernière chose sur la ligne d'entrée si les fichiers d'inclusion doivent être traités. Les fichiers d'inclusion sont traités jusqu'à une profondeur d'imbrication maximale de cinq. Tous les fichiers d'inclusion non traités sont récapitulés en fin de formatage. (Cela suppose, bien sûr, que la directive/option in soit en vigueur.)
- Les identificateurs Cycle et Leave sont traités comme des mots-clefs Pascal réservés par PasMat. Ils sont traités comme deux instructions de contrôle de boucle par Pascal sauf déclaration explicite.
- Bien que PasMat prenne en charge la fonction $$Shell de Pascal dans les fichiers d'inclusion, le traitement des MPW {PInterface n'est pas entièrement pris en charge car ces fichiers incluent des fichiers de manière conditionnelle (rappelez-vous, la condition n'est pas traitée). Pour cette raison, n'utilisez pas l'option -in ou -e.
La gestion des erreurs:
Les erreurs suivantes sont détectées et écrites dans la sortie de diagnostic :
- En général, les conditions de fin de fichier prématurées dans l'entrée ne sont pas signalées comme des erreurs, afin de permettre le formatage de fichiers d'inclusion individuels, qui peuvent être uniquement des segments de programme. Il existe cependant des cas où le fichier d'inclusion est un programme partiel que PasMat interprète et signale comme une erreur de syntaxe.
- Il existe une limite au nombre de niveaux d'indentation que PasMat peut gérer. Si cette limite est dépassée, le traitement sera interrompu. Ce problème devrait être extrêmement rare.
- Si un commentaire nécessite plus que la longueur de sortie maximale (150) pour respecter les règles données, le traitement sera interrompu. Ce problème devrait être encore plus rare que les problèmes de niveau d'indentation.
Si une erreur de syntaxe dans le code d'entrée provoque l'abandon du formatage, un message d'erreur donnera le numéro de ligne d'entrée sur laquelle l'erreur a été détectée. La vérification des erreurs n'est pas parfaite : un formatage réussi ne garantit pas que le programme sera compilé.
Exemple
PasMat -n -u -r -d -pattern "==formatted/=" Sample.p a "formatted/Sample.p" |
Formatez le fichier Sample.p avec les options -n, -u, -r et -d et écrivez le résultat dans le fichier "formatted/Sample.p". Les fichiers d'inclusion sont traités (-motif) et chaque fichier d'inclusion $I du compilateur Pascal entraîne la génération de fichiers de sortie supplémentaires. Chacun de ces fichiers est créé avec le nom "formatted/filename," n où filename est le nom de fichier spécifié dans le fichier d'inclusion correspondant.
Des précautions doivent être prises lorsqu'une ligne de commande contient des guillemets, des barres obliques ou d'autres caractères spéciaux traités par le Shell lui-même. Cet exemple utilise le caractère barre oblique, les chaînes de caractères le contenant doivent donc être entre guillemets.
Le paramètre -pattern contient un modèle nul (==) avec "formatted/" comme chaîne de caractères de remplacement. Un modèle nul correspond toujours au début d'une chaîne de caractères.