IPtoPCharCodesSImpl.mesa
Copyright Ó 1990, 1992 by Xerox Corporation. All rights reserved.
Jules Bloomenthal May 29, 1993 5:16 pm PDT
Obtain PostScript Character Byte from Universal Name
DIRECTORY IPtoPS, RefTab;
IPtoPSCharCodesImpl: CEDAR PROGRAM
IMPORTS RefTab
EXPORTS IPtoPS
~ BEGIN
EncodingVectorType: TYPE ~ IPtoPS.EncodingVectorType;
Entry:      TYPE ~ RECORD [code: BYTE, encodingVector: EncodingVectorType];
table:       RefTab.Ref ¬ NIL;
ListSpecialCharNames: PROC RETURNS [list: LIST OF ATOMNIL] ~ {
FOR set: CARD IN [1..255] DO
FOR code: CARD IN [0..255] DO
xchar: ImagerFont.XChar ← [Basics.Byte3[set], Basics.Byte3[code]];
a: ATOM ← CharCodeConvert.NameFromXChar[xchar];
IF a # NIL THEN list ← CONS[a, list];
ENDLOOP;
ENDLOOP;
};
Initialize: PROC ~ {
Insert: PROC [name: ATOM, code: BYTE, type: EncodingVectorType] ~ {
[] ¬ RefTab.Insert[table, name, NEW[Entry ¬ [code, type]]];
};
InsertISO: PROC [name: ATOM, code: BYTE] ~ {Insert[name, code, isoLatin1]};
InsertSymbol: PROC [name: ATOM, code: BYTE] ~ {Insert[name, code, symbol]};
InsertStandard: PROC [name: ATOM, code: BYTE] ~ {Insert[name, code, standard]};
table ¬ RefTab.Create[];
With thanks for his help to Jean-Marie deLaBeaujardiere
Presently unsupported special characters (no PostScript equivalent found):
Idot, Scedilla, dectab, down, format, graybox, indent, left, Ifraktur, lira, ll,
notegraphic, overscore, prescription, return, scedilla, square, tab, up
Also, some names have codes in more than one encoding vector, which is why
DoWithCode uses a call-back; presently, however, these multiple possibilities
are ignored and the action proc is called only once.
ISO-Latin1 characters (PostScript appendix E.5):
InsertISO[$Aacute,    301B];
InsertISO[$Acircumflex,  302B];
InsertISO[$Adieresis,   304B];
InsertISO[$Agrave,    300B];
InsertISO[$Aring,    305B];
InsertISO[$Atilde,    303B];
InsertISO[$AE,     306B];
InsertISO[$Ccedilla,    307B];
InsertISO[$Eacute,    311B];
InsertISO[$Ecircumflex,   312B];
InsertISO[$Edieresis,   313B];
InsertISO[$Egrave,    310B];
InsertISO[$Eth,     320B];
InsertISO[$Iacute,    315B];
InsertISO[$Icircumflex,   316B];
InsertISO[$Idieresis,    317B];
InsertISO[$Igrave,    314B];
InsertISO[$Ntilde,    321B];
InsertISO[$Oacute,    323B];
InsertISO[$Ocircumflex,  324B];
InsertISO[$Odieresis,   326B];
InsertISO[$Ograve,    322B];
InsertISO[$Oslash,    330B];
InsertISO[$Otilde,    325B];
InsertISO[$Uacute,    332B];
InsertISO[$Ucircumflex,  333B];
InsertISO[$Udieresis,   334B];
InsertISO[$Ugrave,    331B];
InsertISO[$Yacute,    335B];
InsertISO[$aacute,    341B];
InsertISO[$acircumflex,   342B];
InsertISO[$adieresis,    344B];
InsertISO[$ae,     346B];
InsertISO[$agrave,    340B];
InsertISO[$aring,    345B];
InsertISO[$atilde,    343B];
InsertISO[$brokenbar,   246B];
InsertISO[$bullet,     267B];
InsertISO[$largebullet,    267B];
InsertISO[$ccedilla,    347B];
InsertISO[$eacute,    351B];
InsertISO[$ecircumflex,   352B];
InsertISO[$copyright,   251B];
InsertISO[$degree,    260B];
InsertISO[$divide,    367B];
InsertISO[$edieresis,    353B];
InsertISO[$egrave,    350B];
InsertISO[$eth,     360B];
InsertISO[$hyphen,    255B];
InsertISO[$iacute,    355B];
InsertISO[$icircumflex,   356B];
InsertISO[$idieresis,    357B];
InsertISO[$igrave,    354B];
InsertISO[$minus,    055B];
InsertISO[$minute,    242B];
InsertISO[$ntilde,    361B];
InsertISO[$oacute,    363B];
InsertISO[$multiply,   327B];
InsertISO[$plusminus,   261B];
InsertISO[$registered,   256B];
InsertISO[$ocircumflex,   364B];
InsertISO[$odieresis,    366B];
InsertISO[$ograve,    362B];
InsertISO[$onehalf,    275B];
InsertISO[$onequarter,   274B];
InsertISO[$oslash,    370B];
InsertISO[$otilde,    365B];
InsertISO[$quoteright,    047B];
InsertISO[$a98,      047B];
InsertISO[$threequarters,  276B];
InsertISO[$uacute,    372B];
InsertISO[$ucircumflex,   373B];
InsertISO[$udieresis,   374B];
InsertISO[$ugrave,    371B];
InsertISO[$yacute,    375B];
Symbol characters (PostScript appendix E.11)
InsertSymbol[$Alpha,   101B];
InsertSymbol[$Beta,    102B];
InsertSymbol[$Chi,    103B];
InsertSymbol[$Delta,   104B];
InsertSymbol[$Epsilon,   105B];
InsertSymbol[$Eta,    110B];
InsertSymbol[$Gamma,   107B];
InsertSymbol[$Iota,    111B];
InsertSymbol[$Kappa,   113B];
InsertSymbol[$Lambda,   114B];
InsertSymbol[$Mu,    115B];
InsertSymbol[$Nu,    116B];
InsertSymbol[$Omega,   127B];
InsertSymbol[$Omicron,  117B];
InsertSymbol[$Phi,    106B];
InsertSymbol[$Pi,    120B];
InsertSymbol[$Psi,    131B];
InsertSymbol[$Rfraktur,  302B];
InsertSymbol[$Rho,    122B];
InsertSymbol[$Sigma,   123B];
InsertSymbol[$Tau,    124B];
InsertSymbol[$Theta,   121B];
InsertSymbol[$Upsilon,   125B];
InsertSymbol[$Upsilon1,  241B];
InsertSymbol[$Xi,    130B];
InsertSymbol[$Zeta,    132B];
InsertSymbol[$aleph,   300B];
InsertSymbol[$alpha,   141B];
InsertSymbol[$angle,   320B];
InsertSymbol[$angleleft,   341B];
InsertSymbol[$a91,     341B];
InsertSymbol[$angleright,  361B];
InsertSymbol[$a92,     361B];
InsertSymbol[$approxequal,  273B];
InsertSymbol[$arrowboth,  253B];
InsertSymbol[$a163,    253B];
InsertSymbol[$arrowdown,  257B];
InsertSymbol[$arrowleft,  254B];
InsertSymbol[$arrowright,  256B];
InsertSymbol[$a161,    256B];
InsertSymbol[$arrowup,  255B];
InsertSymbol[$arrowdblboth, 333B];
InsertSymbol[$arrowdbldown, 337B];
InsertSymbol[$arrowdblleft, 334B];
InsertSymbol[$arrowdblright, 336B];
InsertSymbol[$arrowdblup,  335B];
InsertSymbol[$arrowhorizex, 276B];
InsertSymbol[$arrowvertex, 275B];
InsertSymbol[$asteriskmath, 052B];
InsertSymbol[$beta,    142B];
InsertSymbol[$braceleftbt,  356B];
InsertSymbol[$braceex,   357B];
InsertSymbol[$braceleftmid, 355B];
InsertSymbol[$bracelefttp,  354B];
InsertSymbol[$bracerightbt, 376B];
InsertSymbol[$bracerightmid, 375B];
InsertSymbol[$bracerighttp, 374B];
InsertSymbol[$bracketleftbt, 353B];
InsertSymbol[$bracketleftex, 352B];
InsertSymbol[$bracketlefttp, 351B];
InsertSymbol[$bracketrightbt, 373B];
InsertSymbol[$bracketrightex, 372B];
InsertSymbol[$bracketrighttp, 371B];
InsertSymbol[$chi,    143B];
InsertSymbol[$circlemultiply, 304B];
InsertSymbol[$carriagereturn, 277B];
InsertSymbol[$copyrightsans, 343B];
InsertSymbol[$copyrightserif, 323B];
InsertSymbol[$circleplus,  305B];
InsertSymbol[$club,    247B];
InsertSymbol[$a112,    247B];
InsertSymbol[$congruent,  100B];
InsertSymbol[$copyrightserif, 323B];
InsertSymbol[$delta,   144B];
InsertSymbol[$diamond,  250B];
InsertSymbol[$dotmath,   327B];
InsertSymbol[$element,   316B];
InsertSymbol[$ellipsis,   274B];
InsertSymbol[$emptyset,  306B];
InsertSymbol[$epsilon,   145B];
InsertSymbol[$equivalence, 272B];
InsertSymbol[$eta,    150B];
InsertSymbol[$existential,  044B];
InsertSymbol[$fraction,   244B];
InsertSymbol[$gamma,   147B];
InsertSymbol[$gradient,  321B];
InsertSymbol[$greaterequal, 263B];
InsertSymbol[$heart,   251B];
InsertSymbol[$infinity,   245B];
InsertSymbol[$integral,   362B];
InsertSymbol[$integralbt,  365B];
InsertSymbol[$integralex,  364B];
InsertSymbol[$integraltp,  363B];
InsertSymbol[$intersection,  307B];
InsertSymbol[$iota,    151B];
InsertSymbol[$kappa,   153B];
InsertSymbol[$lambda,   154B];
InsertSymbol[$lessequal,  243B];
InsertSymbol[$logicaland,  331B];
InsertSymbol[$logicalnot,  330B];
InsertSymbol[$logicalor,  332B];
InsertSymbol[$lozenge,   340B];
InsertSymbol[$mu,    155B];
InsertSymbol[$notelement,  317B];
InsertSymbol[$notequal,  271B];
InsertSymbol[$notsubset,  313B];
InsertSymbol[$nu,    156B];
InsertSymbol[$omega,   167B];
InsertSymbol[$omega1,   166B];
InsertSymbol[$omicron,   157B];
InsertSymbol[$parenleftbt,  350B];
InsertSymbol[$parenleftex,  347B];
InsertSymbol[$parenlefttp,  346B];
InsertSymbol[$parenrightbt, 370B];
InsertSymbol[$parenrightex, 367B];
InsertSymbol[$parenrighttp, 366B];
InsertSymbol[$partialdiff,  266B];
InsertSymbol[$perpendicular, 136B];
InsertSymbol[$phi,    146B];
InsertSymbol[$phi1,    152B];
InsertSymbol[$pi,    160B];
InsertSymbol[$product,   325B];
InsertSymbol[$propersubset, 314B];
InsertSymbol[$propersuperset, 311B];
InsertSymbol[$proportional, 265B];
InsertSymbol[$psi,    171B];
InsertSymbol[$radical,   326B];
InsertSymbol[$radicale,   140B];
InsertSymbol[$reflexsubset, 315B];
InsertSymbol[$registersans,  342B];
InsertSymbol[$reflexsuperset, 312B];
InsertSymbol[$registerserif, 322B];
InsertSymbol[$rho,    162B];
InsertSymbol[$second,   262B];
InsertSymbol[$sigma,   163B];
InsertSymbol[$sigma1,   126B];
InsertSymbol[$similar,   176B];
InsertSymbol[$spade,   252B];
InsertSymbol[$a109,    252B];
InsertSymbol[$suchthat,  047B];
InsertSymbol[$summation,  345B];
InsertSymbol[$tau,    164B];
InsertSymbol[$therefore,  134B];
InsertSymbol[$theta,   161B];
InsertSymbol[$theta1,   112B];
InsertSymbol[$trademark,  324B];
InsertSymbol[$trademarksans, 344B];
InsertSymbol[$trademarkserif, 324B];
InsertSymbol[$union,    310B];
InsertSymbol[$universal,   042B];
InsertSymbol[$upsilon,   165B];
InsertSymbol[$weierstrass,   303B];
InsertSymbol[$xi,     170B];
InsertSymbol[$zeta,    172B];
Standard characters (PostScript appendix E.5)
InsertStandard[$L,    114B];
InsertStandard[$acute,   302B];
InsertStandard[$breve,    306B];
InsertStandard[$caron,   317B];
InsertStandard[$cedilla,   313B];
InsertStandard[$cent,   242B];
InsertStandard[$circumflex, 303B];
InsertStandard[$comma,   054B];
InsertStandard[$dagger,   262B];
InsertStandard[$daggerdbl,  263B];
InsertStandard[$dieresis,  310B];
InsertStandard[$dollar,   044B];
InsertStandard[$dotaccent,  307B];
InsertStandard[$emdash,  320B];
InsertStandard[$endash,  261B];
InsertStandard[$exclamdown, 241B];
InsertStandard[$fi,    256B];
InsertStandard[$fl,    256B];
InsertStandard[$florin,   246B];
InsertStandard[$grave,   301B];
InsertStandard[$germandbls, 373B];
InsertStandard[$guillemotleft, 253B];
InsertStandard[$guillemotright,273B];
InsertStandard[$guilsinglleft, 254B];
InsertStandard[$guilsinglright, 255B];
InsertStandard[$hungarumlaut,315B];
InsertStandard[$macron,  305B];
InsertStandard[$ogonek,  316B];
InsertStandard[$ordfeminine, 343B];
InsertStandard[$ordmasculine, 353B];
InsertStandard[$paragraph,  266B];
InsertStandard[$periodcentered,264B];
InsertStandard[$perthousand, 275B];
InsertStandard[$question,  077B];
InsertStandard[$questiondown, 277B];
InsertStandard[$quotedblbase, 271B];
InsertStandard[$quotedblleft, 252B];
InsertStandard[$a99,    252B];
InsertStandard[$quotedbllright, 272B];
InsertStandard[$a100,    272B];
InsertStandard[$quoteleft,  140B];
InsertStandard[$a97,    140B];
InsertStandard[$quotesinglbase,270B];
InsertStandard[$section,  247B];
InsertStandard[$space,   040B];
InsertStandard[$sterling,  243B];
InsertStandard[$tilde,   304B];
InsertStandard[$yen,   245B];
};
DoWithCode: PUBLIC PROC [name: ATOM, action: IPtoPS.DoWithCodeProc] ~ {
val: REF ¬ RefTab.Fetch[table, name].val;
IF val = NIL
THEN [] ¬ action[0, standard]
ELSE {
entry: REF Entry ¬ NARROW[val];
[] ¬ action[entry.code, entry.encodingVector];
};
};
Initialize[];
END.