Ce n'est pas trop dur. L'opérateur where
est décrit à la page 718 du manuel PostScript Language Reference Manual. Il prend un seul paramètre, la «clé» de la pile et recherche tous les dictionnaires courants sur la pile du dictionnaire (en commençant par le dictionnaire le plus haut, ou le dictionnaire actuel) pour un dictionnaire qui contient cette clé. S'il trouve un dictionnaire contenant cette clé, il pousse une référence au dictionnaire de la pile d'opérandes, puis il pousse un booléen "vrai" dans la pile d'opérandes.
S'il ne trouve pas de dictionnaire contenant la clé, il pousse une valeur booléenne 'false' sur la pile d'opérandes.
Alors /doStartGroupFile where
recherche l'existence d'un dictionnaire contenant la clé «/doStartGroupFile »
L'élément suivant (de « { » à « } ») est un tableau exécutable, donc nous rassemblons tout cela et mettre sur la pile d'opérandes.
Ainsi, en fonction du résultat de la « où l'opérateur la pile d'opérande soit contenir:
{} vrai -dict-
Ou:
{ } false
Suivant p est l'opérateur if
, vous pouvez le trouver à la page 607 du PLRM. L'opérateur if
consomme deux opérandes de la pile d'opérandes, une procédure et un booléen.
Si le booléen est vrai, alors il exécute la procédure, s'il est faux, il le supprime simplement. Donc, si 'doStartGroupFile' a été trouvé, nous exécutons la procédure, si ce n'est pas le cas, nous l'ignorons. En supposant qu'il a été trouvé la pile d'opérandes pendant que nous exécutons la procédure contiendra simplement la référence au dictionnaire où nous avons trouvé doStartGroupFile.
La procédure est déclarée comme {pop doStartGroupFile}
, et cela supprime d'abord l'élément supérieur de la pile d'opérandes (de sorte qu'il ignore la référence au dictionnaire), puis résout doStartGroupFile. Aucune idée de ce que faitStartGroupFile, mais je suppose que c'est une procédure exécutable définie ailleurs. Donc, en résumé, le fragment de code recherche une définition de 'doStartGroupFile', s'il en trouve une, il l'exécute, sinon il ne fait rien.
Simples :-)
Merci Kens! –