From e91bf5da68803e21da52091b0cba2cb4ea66e785 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Sun, 5 Apr 2026 23:19:10 -0700 Subject: [PATCH] MCCSFONTS: New file that isolates all of the legacy font translations previously spread in other files (MCCS) --- sources/MCCSFONTS | 1398 ++++++++++++++++++++++++++++++++++++++++ sources/MCCSFONTS.LCOM | Bin 0 -> 25036 bytes 2 files changed, 1398 insertions(+) create mode 100644 sources/MCCSFONTS create mode 100644 sources/MCCSFONTS.LCOM diff --git a/sources/MCCSFONTS b/sources/MCCSFONTS new file mode 100644 index 00000000..2bfc2aa8 --- /dev/null +++ b/sources/MCCSFONTS @@ -0,0 +1,1398 @@ +(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10 :FORMAT :UTF-8) + +(FILECREATED " 9-Mar-2026 22:08:29" {WMEDLEY}MCCSFONTS.;132 53474 + + :EDIT-BY rmk + + :CHANGES-TO (VARS MCCSFONTSCOMS) + + :PREVIOUS-DATE " 9-Mar-2026 12:34:44" {WMEDLEY}MCCSFONTS.;129) + + +(PRETTYCOMPRINT MCCSFONTSCOMS) + +(RPAQQ MCCSFONTSCOMS + [(VARS NSFONTFAMILIES ALTOFONTFAMILIES) + (INITVARS MCCSFONTFAMILIES) + (FNS DISPLAYENCODINGFN) + (COMS (* ; " Mapping to MCCS") + (FNS MCCSCODEMAPARRAY MCCSMAPFN MCCSMAPPAIRS XCCS.CS0.UNDEFINED XCCSUNDEFINEDPAIRS) + (VARS ALTOTEXTTOMCCS SYMBOLTOMCCS SIGMATOMCCS HIPPOTOMCCS CYRILLICTOMCCS MATHTOMCCS + PALATINOTOMCCS TITANTOMCCS TITANLEGALTOMCCS) + (GLOBALVARS GACHATOMCCSARRAY ALTOTOMCCSARRAY SYMBOLTOMCCSARRAY HIPPOTOMCCSARRAY + CYRILLICTOMCCSARRAY MATHTOMCCSARRAY SIGMATOMCCSARRAY PALATINOTOMCCSARRAY + TITANTOMCCSARRAY TITANLEGALTOMCCSARRAY) + + (* ;; "For translation of codes in datastructures (e.g. Tedit)") + + [INITVARS [GACHATOMCCSARRAY (MCCSCODEMAPARRAY (XCCSUNDEFINEDPAIRS '((Lowline ↑X] + (ALTOTOMCCSARRAY (MCCSCODEMAPARRAY ALTOTEXTTOMCCS)) + (SYMBOLTOMCCSARRAY (MCCSCODEMAPARRAY SYMBOLTOMCCS)) + (HIPPOTOMCCSARRAY (MCCSCODEMAPARRAY HIPPOTOMCCS)) + (CYRILLICTOMCCSARRAY (MCCSCODEMAPARRAY CYRILLICTOMCCS)) + (MATHTOMCCSARRAY (MCCSCODEMAPARRAY MATHTOMCCS)) + (SIGMATOMCCSARRAY (MCCSCODEMAPARRAY SIGMATOMCCS)) + (PALATINOTOMCCSARRAY (MCCSCODEMAPARRAY PALATINOTOMCCS)) + (TITANTOMCCSARRAY (MCCSCODEMAPARRAY (XCCSUNDEFINEDPAIRS TITANTOMCCS))) + (TITANLEGALTOMCCSARRAY (MCCSCODEMAPARRAY (XCCSUNDEFINEDPAIRS TITANLEGALTOMCCS] + (COMS + (* ;; + "Mappings into MCCS: needed for e.g. Tedit coercion. \TEDIT.MCCS.TRANSLATE") + + (FNS GACHATOMCODE SYMBOLTOMCODE SIGMATOMCODE ATOMCODE MATHTOMCODE HIPPOTOMCODE + CYRILLICTOMCODE PALATINOTOMCODE TITANTOMCODE TITANLEGALTOMCODE)) + [INITVARS [DISPLAYFONTCOERCIONS '(((HELVETICA (<= * 2)) + (HELVETICA 4)) + ((MODERN (<= 15 * 16)) + (* 14)) + ((MODERN (<= 17 * 21)) + (* 18)) + ((MODERN (<= 22 * 28)) + (* 24)) + ((MODERN (<= 29 * 33)) + (* 30)) + ((MODERN (<= 34 * 40)) + (* 36)) + ((MODERN (<= 41 * 65)) + (* 48)) + ((MODERN (<= 66 *)) + (* 72)) + ((PALATINO 9) + (PALATINO 12)) + ((PALATINO (<= * 8)) + (PALATINO 10)) + ((TITAN (<= * 9) + BOLD) + (MODERN 10)) + ((TITAN (<= * 9) + ITALIC) + (MODERN 10)) + ((TITAN (<= * 9)) + (TITAN 10)) + (LPT AMTEX] + (DISPLAYCHARCOERCIONS '((GACHA TERMINAL) + (MODERN CLASSIC) + (TIMESROMAN CLASSIC) + (HELVETICA MODERN) + (TERMINAL MODERN) + (HIPPO CLASSIC) + (CYRILLIC CLASSIC) + (MATH CLASSIC) + (SIGMA MODERN) + (SYMBOL MODERN) + (TITAN CLASSIC) + (PALATINO CLASSIC) + (OPTIMA MODERN) + (BOLDPS CLASSIC) + (PCTERMINAL CLASSIC) + (TITANLEGAL CLASSIC] + + (* ;; "Defunct coercions? Mapping for DOS filenames, Adobe equivalences") + + (COMS (INITVARS [ADOBEDISPLAYFONTCOERCIONS '(((HELVETICABLACK 16) + (HELVETICABLACK 18)) + ((SYMBOL) + (ADOBESYMBOL)) + ((SYMBOL 11) + (ADOBESYMBOL 10)) + ((AVANTGARDE-DEMI) + (AVANTGARDE)) + ((AVANTGARDE-BOOK) + (AVANTGARDE)) + ((NEWCENTURYSCHLBK) + (CENTURYSCHOOLBOOK)) + ((BOOKMAN-LIGHT) + (BOOKMAN)) + ((BOOKMAN-DEMI) + (BOOKMAN)) + ((HELVETICA-NARROW) + (HELVETICANARROW)) + ((HELVETICA 24) + (ADOBEHELVETICA 24] + (*DISPLAY-FONT-NAME-MAP* '((TIMESROMAN . TR) + (HELVETICA . HV) + (TIMESROMAND . TD) + (HELVETICAD . HD) + (MODERN . MD) + (CLASSIC . CL) + (GACHA . GC) + (TITAN . TI) + (LETTERGOTHIC . LG) + (BOLDPS . BP) + (TERMINAL . TM) + (CLASSICTHIN . CT) + (HIPPO . HP) + (LOGO . LG) + (MATH . MA) + (OLDENGLISH . OE) + (SYMBOL . SY]) + +(RPAQQ NSFONTFAMILIES (CLASSIC CLASSICTHIN MODERN TERMINAL OPTIMA BOLDPS PCTERMINAL)) + +(RPAQQ ALTOFONTFAMILIES (TIMESROMAN TIMESROMAND HELVETICA HELVETICAD CLARITY BRAVOX TONTO CREAM + OLDENGLISH)) + +(RPAQ? MCCSFONTFAMILIES NIL) +(DEFINEQ + +(DISPLAYENCODINGFN + [LAMBDA (FONTSPEC) (* ; "Edited 8-Mar-2026 22:46 by rmk") + (LET ((FAMILY (fetch (FONTSPEC FSFAMILY) of FONTSPEC))) + (if (MEMB FAMILY MCCSFONTFAMILIES) + then 'MCCS + elseif (MEMB FAMILY NSFONTFAMILIES) + then 'XCCS$ + elseif (MEMB FAMILY ALTOFONTFAMILIES) + then 'ALTOTEXT + elseif (EQ FAMILY 'TITAN) + then + (* ;; "The other sizes seem to have already been converted") + + (CL:IF (EQ 14 (fetch (FONTSPEC FSSIZE) of FONTSPEC)) + 'TITAN + 'XCCS$) + else FAMILY]) +) + + + +(* ; " Mapping to MCCS") + +(DEFINEQ + +(MCCSCODEMAPARRAY + [LAMBDA (MAP INVERT) (* ; "Edited 8-Mar-2026 00:42 by rmk") + (* ; "Edited 5-Feb-2026 11:02 by rmk") + (* ; "Edited 2-Feb-2026 23:11 by rmk") + (* ; "Edited 6-Sep-2025 18:26 by rmk") + (* ; "Edited 31-Aug-2025 16:15 by rmk") + (* ; "Edited 7-Aug-2025 08:55 by rmk") + (* ; "Edited 2-Jun-2025 11:45 by rmk") + (* ; "Edited 1-Jun-2025 07:26 by rmk") + (* ; "Edited 24-May-2025 12:22 by rmk") + (* ; "Edited 21-Dec-2024 18:57 by rmk") + + (* ;; "MAP is a list of (destcode source) pairs where source is a code, a (code font) pair, NIL, or (NIL), where the NIL sources designate a slug.") + + (* ;; "If INVERT, this produces a hash table for font-recoding by MOVEFONTCHARS where each key is a destcode the corresponding value is its source. The NIL source is represented as (NIL) in the hash table (as if it is (NIL font)), because putting NIL as a hash value takes it out of the MAPHASH. The INVERT hashtable presumably is used only offline and only once per font, when it is recoded to MCCS.") + + (* ;; "If not INVERT, this produces an array indexed by source codes that maps CS0 sources to their dest codes. This is used for translating old font-dependent codes in data structures (like Tedit) into the MCCS codes at the same time that the font is also changed to an MCCS font. This is used online but presumably only once per document/datastructure, if the result of the code translation is remembered.") + + (* ;; "The restriction to CS0 is because only XCCS fonts have characters outside that, and that's where MCCS agrees with XCCS. Other legacy fonts (HIPPO, SYMBOL...) only have CS0 glyphs. If a CS0 source code does not exist in the mapping, it is assumed to be an identity. ") + + (* ;; "") + + (SETQ MAP (for PAIR SOURCE DEST in MAP when (AND (LISTP PAIR) + (NEQ '* (CAR PAIR))) + collect (SETQ DEST (CAR PAIR)) + (CL:UNLESS (CHARCODEP DEST) (* ; "DEST always designates a code") + (SETQ DEST (CHARCODE.DECODE DEST))) + (SETQ SOURCE (CADR PAIR)) + + (* ;; "NIL source is a slug") + + (if (NULL SOURCE) + then (SETQ SOURCE (CONS NIL)) + elseif (LISTP SOURCE) + then (CL:UNLESS (OR (CHARCODEP (CAR SOURCE)) + (NULL (CAR SOURCE))) + (SETQ SOURCE (LIST (CHARCODE.DECODE (CAR SOURCE)) + (CADR SOURCE)))) + elseif (CHARCODEP SOURCE) + else (SETQ SOURCE (CHARCODE.DECODE SOURCE))) + (LIST DEST SOURCE))) (* ; "Add identities for CS 0") + (for DEST from 0 to \MAXTHINCHAR unless (ASSOC DEST MAP) do (PUSH MAP (LIST DEST DEST))) + (SORT MAP T) (* ; "Just easier to debug") + (LET (VAL) + [if INVERT + then + (* ;; "KEY's are destination codes, good for maphash recoding") + + (SETQ VAL (HASHARRAY (LENGTH MAP))) + (for PAIR in MAP do (PUTHASH (CAR PAIR) + (CADR PAIR) + VAL)) + else (SETQ VAL (ARRAY (ADD1 \MAXTHINCHAR) + NIL NIL 0 0)) + (for PAIR SOURCE in MAP eachtime [SETQ SOURCE (CAR (MKLIST (CADR PAIR] + (* ; "Value for NIL sources is NIL") + when (CHARCODEP SOURCE) do (SETA VAL SOURCE (CAR PAIR] + VAL]) + +(MCCSMAPFN + [LAMBDA (FROMENCODING) (* ; "Edited 5-Oct-2025 19:56 by rmk") + (* ; "Edited 6-Sep-2025 12:40 by rmk") + (* ; "Edited 4-Sep-2025 08:06 by rmk") + (* ; "Edited 24-May-2025 10:55 by rmk") + + (* ;; "Returns the function that maps a FROMENCODING code to the corresponding MCCS code") + + (CL:WHEN (LISTP FROMENCODING) + + (* ;; "Assume it's a FONTSPEC") + + (SETQ FROMENCODING (fetch (FONTSPEC FSFAMILY) of FROMENCODING))) + (if (MEMB FROMENCODING NSFONTFAMILIES) + then (SETQ FROMENCODING 'XCCS$) + elseif (MEMB FROMENCODING ALTOFONTFAMILIES) + then (SETQ FROMENCODING 'ALTOTEXT)) + (SELECTQ FROMENCODING + (XCCS$ (FUNCTION X$TOMCODE)) + (ALTOTEXT (FUNCTION ATOMCODE)) + (SYMBOL (FUNCTION SYMBOLTOMCODE)) + (SIGMA (FUNCTION SIGMATOMCODE)) + (MATH (FUNCTION MATHTOMCODE)) + (HIPPO (FUNCTION HIPPOTOMCODE)) + (CYRILLIC (FUNCTION CYRILLICTOMCODE)) + (XCCS (FUNCTION XTOMCODE)) + (GACHA (FUNCTION GACHATOMCODE)) + (PALATINO (FUNCTION PALATINOTOMCODE)) + (MCCS NIL) + NIL]) + +(MCCSMAPPAIRS + [LAMBDA (FROMENCODING NOIDENTITY) (* ; "Edited 8-Mar-2026 23:43 by rmk") + (* ; "Edited 3-Mar-2026 23:19 by rmk") + (* ; "Edited 26-Feb-2026 12:56 by rmk") + (* ; "Edited 7-Oct-2025 14:47 by rmk") + (* ; "Edited 6-Oct-2025 09:47 by rmk") + (* ; "Edited 20-Sep-2025 09:45 by rmk") + (* ; "Edited 6-Sep-2025 16:43 by rmk") + (* ; "Edited 31-Aug-2025 16:16 by rmk") + + (* ;; "Returns the pairs for MOVEFONTCHARS to use to move charset-0 glyphs into their MCCS positions. For example, the Leftarrow and Lowline glyphs switch positions in an XCCS$ font. Returns NIL (= nothing to do) if there is no function.") + + (LET (PAIRS KEEPCS0) + [SETQ PAIRS (SELECTQ FROMENCODING + (GACHA [XCCSUNDEFINEDPAIRS '((Lowline ↑X]) + (ALTOTEXT (* ; "Wipe the metas") + (XCCSUNDEFINEDPAIRS ALTOTEXTTOMCCS)) + (TITAN (XCCSUNDEFINEDPAIRS TITANTOMCCS)) + (TITANLEGAL (XCCSUNDEFINEDPAIRS TITANLEGALTOMCCS)) + (XCCS$ (* ; "Leave the Metas") + [XCCS.CS0.UNDEFINED '((Circumflex Uparrow) + (Uparrow Circumflex) + (Lowline Leftarrow) + (Leftarrow Lowline]) + (UNICODE *MCCSTOUNICODE*) + (PALATINO (XCCSUNDEFINEDPAIRS PALATINOTOMCCS)) + (PROGN (SETQ KEEPCS0 T) + (for C M FN from 0 to \MAXTHINCHAR first (CL:UNLESS (SETQ FN + (MCCSMAPFN + FROMENCODING)) + (RETURN)) + when (SETQ M (APPLY* FN C NOIDENTITY)) + collect (LIST M C] + (CL:WHEN (LISTP PAIRS) + + (* ;; "Weed out interspersed comments, convert to charcodes") + + (CL:UNLESS NOIDENTITY + (for DEST from 0 to \MAXTHINCHAR unless (ASSOC DEST PAIRS) + do (push PAIRS (LIST DEST DEST)))) + [SETQ PAIRS (for P SOURCE in PAIRS when (LISTP P) unless (EQ '* (CAR P)) + collect (SETQ SOURCE (CADR P)) + (LIST (OR (CHARCODEP (CAR P)) + (CHARCODE.DECODE (CAR P))) + (if (LISTP SOURCE) + then + (* ;; + "Allows for the (Uparrow TERMINAL) case above, for MOVEFONTCHARS") + + (CONS (CL:IF (CHARCODEP (CAR SOURCE)) + (CAR SOURCE) + (CHARCODE.DECODE (CAR SOURCE))) + (CDR SOURCE)) + elseif (CHARCODEP SOURCE) + else (CHARCODE.DECODE SOURCE] + + (* ;; "If a source is moved to a dest, the default is that that source gets replaced by a slug and there is no separate replacement for that source. That slug may then be coerced from another font. That is, we don't expect two codes to have the same glyph, by default. But families like SYMBOL, HIPPO etc. want to preserve CS0 even if they copy their glyphs also to somewhere else--KEEPCS0.") + + [SETQ PAIRS (APPEND PAIRS (for P DEST SOURCE SCODE in PAIRS + eachtime (SETQ DEST (CAR P)) + (SETQ SOURCE (CADR P)) + (SETQ SCODE (CAR (MKLIST SOURCE))) + (* ; "Already a slug?") when SCODE + unless (OR (AND KEEPCS0 (ILEQ SCODE \MAXTHINCHAR)) + (AND (LISTP SOURCE) + (LITATOM (CADR SOURCE))) + (ASSOC SCODE PAIRS)) + collect + + (* ;; "Don't slugify a source code in this font if it is coming from another font, or if that source is also a destination here.") + + (LIST DEST (CONS NIL]) + PAIRS]) + +(XCCS.CS0.UNDEFINED + [LAMBDA (ADDITIONS) (* ; "Edited 8-Mar-2026 23:32 by rmk") + (* ; "Edited 5-Oct-2025 22:44 by rmk") + + (* ;; "Maps slugs to all undefined/reserved characters in XCCS, then throw in the additions") + + [SETQ ADDITIONS (for P in ADDITIONS when (LISTP P) unless (EQ '* (CAR P)) + collect (LIST (OR (CHARCODEP (CAR P)) + (CHARCODE.DECODE (CAR P))) + (OR (CHARCODEP (CADR P)) + (CHARCODE.DECODE (CADR P] + (APPEND ADDITIONS (for I from 0 to (SUB1 (CHARCODE SPACE)) collect (LIST I NIL)) + (for I from (CHARCODE "0,#NULL") to (SUB1 (CHARCODE "0,#SPACE")) + collect (LIST I NIL)) + (for I in (CHARCODE ("0,177" "0,246" "0,250" "0,300" "0,351" "0,326" "0,327" "0,330" + "0,331" "0,332" "0,333" "0,377")) collect (LIST I NIL]) + +(XCCSUNDEFINEDPAIRS + [LAMBDA (ADDITIONS) (* ; "Edited 8-Mar-2026 23:42 by rmk") + (* ; "Edited 6-Mar-2026 23:57 by rmk") + (* ; "Edited 5-Oct-2025 22:39 by rmk") + (* ; "Edited 2-Sep-2025 13:14 by rmk") + + (* ;; "This clears out everything above Ascii in charset 0, allowing ony ADDITIONS. XCCS.CS0.UNDEFINED clears out only the truly undefined") + + (LET ((PAIRS (XCCS.CS0.UNDEFINED ADDITIONS))) + (for I from 128 to \MAXTHINCHAR unless (ASSOC I PAIRS) do (push PAIRS (LIST I NIL))) + PAIRS]) +) + +(RPAQQ ALTOTEXTTOMCCS + ( + (* ;; "From bravo doc") + + ("356,055" ↑N MINUS) + ("357,44" ↑V ENDASH) + (EMDASH ↑S) + (EMQUAD ↑O) + ("356,055" ↑X MINUS) + (FIGURESPACE ↑Y ENQUAD) + + (* ;; "Fom current Helvetica/Timesroman fonts") + + ("0,317" "0,1" HACHEK) + ("361,255" "0,3" DIARESIS) + ("0,310" "0,4" CCEDILLA) + ("0,301" "0,5" GRAVE) + ("360,41" "0,6" ff) + ("0,271" "0,7" LSQ) + ("0,241" "0,10" SPANISHEXCL) + ("0,302" "0,13" ACUTE) + ("0,304" "0,20" TILDE) + ("360,42" "0,21" ffi) + ("360,43" "0,22" ffl) + ("360,44" "0,24" fi) + ("360,45" "0,25" fl) + ("357,44" "0,26" ENDASH) + ("0,306" "0,27" BREVE) + (ENQUAD "0,34") + ("0,304" "0,36" TILDE) + ("0,251" "0,140") + ("361,47" "0,200" A-umlaut) + ("361,124" "0,201" O-umlaut) + ("361,47" "0,202" A-ring) + ("357,44" "0,233" ENDASH) + (EMDASH "0,234") + ("361,247" "0,240" a-umlaut) + ("361,324" "0,241" o-umlaut) + ("361,250" "0,242" a-ring) + ("361,345" "0,243" u-umlaut) + (Circumflex "0,254") + ("0,242" "0,260" CENTS) + ("0,243" "0,261" POUND) + ("41,172" "0,265" STAR) + ("0,247" "0,266" SECTION) + ("357,146" "0,267" BULLET) + ("357,60" "0,270" DAGGER) + ("357,061" "0,271" DOUBLEDAGGER) + ("0,266" "0,272" PARAGRAPH) + ("0,261" "0,274" PLUSMINUS) + ("0,241" "0,275" SPANISHEXCL) + ("0,277" "0,276" SPANISHQUES) + (Lowline "0,277"))) + +(RPAQQ SYMBOLTOMCCS + ((Null "0,1") + ("0,264" "0,2") + ("41,142" "0,3") + (Null "0,4") + ("41,176" "0,5") + ("0,261" "0,6") + ("357,175" Bell) + ("357,142" Backspace) + ("357,143" Tab) + ("357,144" Linefeed) + ("357,145" "0,13") + (Null Page) + ("0,270" Newline) + (Null "0,16") + (Null "0,17") + ("357,160" "0,20") + ("357,162" "0,21") + ("357,131" "0,22") + ("357,130" "0,23") + ("41,145" "0,24") + ("41,146" "0,25") + (Null "0,26") + (Null "0,27") + ("356,176" "0,30") + ("357,171" "0,31") + ("357,133" "0,32") + ("357,132" Escape) + ("41,142" "0,34") + ("357,163" "0,35") + (Null "0,36") + (Null Tenexeol) + (Null Space) + ("0,256" "0,41") + (Circumflex "0,42") + ("0,257" "0,43") + ("357,122" Dollar) + ("357,102" "0,45") + ("357,103" "0,46") + ("357,167" "0,47") + ("357,115" "0,50") + ("357,117" "0,51") + (Null "0,52") + (Null "0,53") + ("357,116" "0,54") + (Null "0,55") + (Null "0,56") + (Null "0,57") + (Null Zero) + (INFINITY One) + ("357,112" Two) + ("357,113" Three) + ("357,141" Four) + (Null Five) + ("357,154" Six) + (Lowline Seven) + ("357,265" Eight) + ("357,264" Nine) + ("357,152" "0,72") + ("357,247" "0,73") + (Null "0,74") + (Null "0,75") + (Null "0,76") + ("0,57" "0,77") + (Null "0,100") + ("357,127" "0,133") + ("357,126" "0,134") + (Null "0,135") + ("357,266" Uparrow) + ("357,267" Leftarrow) + ("357,66" "0,140") + ("357,67" "0,141") + ("357,262" "0,142") + ("357,263" "0,143") + ("357,260" "0,144") + ("357,261" "0,145") + ("0,173" "0,146") + ("0,175" "0,147") + ("357,62" "0,150") + ("357,63" "0,151") + ("356,174" "0,152") + ("41,102" "0,153") + ("357,73" "0,154") + ("357,72" "0,155") + ("42,44" "0,156") + ("42,46" "0,157") + ("357,174" "0,160") + ("41,142" "0,161") + (Null "0,162") + ("357,165" "0,163") + (Null "0,164") + (Null "0,165") + (Null "0,166") + (Null "0,167") + ("0,247" "0,170") + ("357,60" "0,171") + ("357,61" "0,172") + ("0,266" "0,173") + ("0,100" "0,174") + ("0,323" "0,175") + ("0,243" "0,176") + (Dollar Rubout) + (Null "0,200") + (Null "0,201") + (Null "0,202") + (Null "0,203") + (Null "0,204") + (Null "0,205") + (Null "0,206") + (Null "0,207") + (Null "0,210") + (Null "0,211") + (Null "0,212") + (Null "0,213") + (Null "0,214") + (Null "0,215") + (Null "0,216") + (Null "0,217") + (Null "0,220") + (Null "0,221") + (Null "0,222") + (Null "0,223") + (Null "0,224") + (Null "0,225") + (Null "0,226") + (Null "0,227") + (Null "0,230") + (Null "0,231") + (Null "0,232") + (Null "0,233") + (Null "0,234") + (Null "0,235") + (Null "0,236") + (Null "0,237") + (Null "0,240") + (Null "0,241") + (Null "0,242") + (Null "0,243") + (Null Currency) + (Null "0,245") + (Null "0,246") + (Null "0,247") + (Null "0,250") + (Null "0,251") + (Null LEFT-DOUBLEQUOTE) + (Null "0,253") + (Null Lowline) + (Null Circumflex) + (Null "0,256") + (Null "0,257") + (Null "0,260") + (Null "0,261") + (Null "0,262") + (Null "0,263") + (Null "0,264") + (Null "0,265") + (Null "0,266") + (Null "0,267") + (Null "0,270") + (Null "0,271") + (Null RIGHT-DOUBLEQUOTE) + (Null "0,273") + (Null "0,274") + (Null "0,275") + (Null "0,276") + (Null "0,277") + (Null "0,300") + (Null "0,301") + (Null "0,302") + (Null "0,303") + (Null "0,304") + (Null "0,305") + (Null "0,306") + (Null "0,307") + (Null "0,310") + (Null "0,311") + (Null "0,312") + (Null "0,313") + (Null "0,314") + (Null "0,315") + (Null "0,316") + (Null "0,317") + (Null "0,320") + (Null "0,321") + (Null "0,322") + (Null "0,323") + (Null "0,324") + (Null "0,325") + (Null "0,326") + (Null "0,327") + (Null "0,330") + (Null "0,331") + (Null "0,332") + (Null "0,333") + (Null "0,334") + (Null "0,335") + (Null "0,336") + (Null "0,337") + (Null "0,340") + (Null "0,341") + (Null "0,342") + (Null "0,343") + (Null "0,344") + (Null "0,345") + (Null "0,346") + (Null "0,347") + (Null "0,350") + (Null "0,351") + (Null "0,352") + (Null "0,353") + (Null "0,354") + (Null "0,355") + (Null "0,356") + (Null "0,357") + (Null "0,360") + (Null "0,361") + (Null "0,362") + (Null "0,363") + (Null "0,364") + (Null "0,365") + (Null "0,366") + (Null "0,367") + (Null "0,370") + (Null "0,371") + (Null "0,372") + (Null "0,373") + (Null "0,374") + (Null "0,375") + (Null "0,376") + (Null "0,377"))) + +(RPAQQ SIGMATOMCCS + (("0,101" "0,101" low squaredot not in XCCS) + ("357,166" "0,103" contourintegral) + ("357,126" "0,111" intersection) + ("357,266" "0,114" and) + ("357,172" "0,115" Summation) + ("357,173" "0,120" Product) + ("357,174" "0,122" radical) + ("357,165" "0,123" integral) + ("357,127" "0,125" union) + ("357,267" "0,126" or))) + +(RPAQQ HIPPOTOMCCS + (("356,55" "0,16") + (EMQUAD "0,17") + (EMDASH "0,23") + ("357,44" "0,26") + ("356,55" "0,30") + (ENQUAD "0,31") + ("Greek,101" "0,101") + ("Greek,102" "0,102") + ("Greek,121" "0,103") + ("Greek,105" "0,104") + ("Greek,106" "0,105") + ("Greek,132" "0,106") + ("Greek,104" "0,107") + ("Greek,112" "0,110") + ("Greek,114" "0,111") + ("Greek,115" "0,113") + ("Greek,116" "0,114") + ("Greek,117" "0,115") + ("Greek,120" "0,116") + ("Greek,122" "0,117") + ("Greek,123" "0,120") + ("Greek,113" "0,121") + ("Greek,125" "0,122") + ("Greek,126" "0,123") + ("Greek,130" "0,124") + ("Greek,131" "0,125") + ("Greek,135" "0,127") + ("Greek,133" "0,130") + ("Greek,134" "0,131") + ("Greek,111" "0,132") + ("Greek,141" "0,141") + ("Greek,142" "0,142") + ("Greek,161" "0,143") + ("Greek,145" "0,144") + ("Greek,146" "0,145") + ("Greek,172" "0,146") + ("Greek,144" "0,147") + ("Greek,152" "0,150") + ("Greek,154" "0,151") + ("Greek,155" "0,153") + ("Greek,156" "0,154") + ("Greek,157" "0,155") + ("Greek,160" "0,156") + ("Greek,162" "0,157") + ("Greek,163" "0,160") + ("Greek,153" "0,161") + ("Greek,165" "0,162") + ("Greek,166" "0,163") + ("Greek,170" "0,164") + ("Greek,171" "0,165") + ("Greek,175" "0,167") + ("Greek,173" "0,170") + ("Greek,174" "0,171") + ("Greek,151" "0,172") + ("357,44" "0,233") + (EMDASH "0,234") + ("357,146" "0,267"))) + +(RPAQQ CYRILLICTOMCCS + (("Cyrillic,47" Dollar) + ("Cyrillic,71" "0,52") + ("41,76" "0,55") + ("Cyrillic,157" Two) + ("Cyrillic,127" Four) + ("Cyrillic,150" Six) + ("Cyrillic,151" Eight) + ("0,253" "0,74") + ("0,273" "0,76") + ("Cyrillic,77" "0,100") + ("Cyrillic,41" "0,101") + ("Cyrillic,42" "0,102") + ("Cyrillic,76" "0,103") + ("Cyrillic,45" "0,104") + ("Cyrillic,46" "0,105") + ("Cyrillic,66" "0,106") + ("Cyrillic,44" "0,107") + ("Cyrillic,101" "0,110") + ("Cyrillic,52" "0,111") + ("Cyrillic,53" "0,112") + ("Cyrillic,54" "0,113") + ("Cyrillic,55" "0,114") + ("Cyrillic,56" "0,115") + ("Cyrillic,57" "0,116") + ("Cyrillic,60" "0,117") + ("Cyrillic,61" "0,120") + ("Cyrillic,67" "0,121") + ("Cyrillic,62" "0,122") + ("Cyrillic,63" "0,123") + ("Cyrillic,64" "0,124") + ("Cyrillic,65" "0,125") + ("Cyrillic,43" "0,126") + ("Cyrillic,50" "0,127") + ("Cyrillic,75" "0,130") + ("Cyrillic,100" "0,131") + ("Cyrillic,51" "0,132") + ("Cyrillic,152" "0,133") + ("Cyrillic,0" "0,134") + ("Cyrillic,153" "0,135") + ("Cyrillic,74" Uparrow) + ("Cyrillic,154" Leftarrow) + ("Cyrillic,0" "0,140") + ("Cyrillic,121" "0,141") + ("Cyrillic,122" "0,142") + ("Cyrillic,176" "0,143") + ("Cyrillic,125" "0,144") + ("Cyrillic,126" "0,145") + ("Cyrillic,146" "0,146") + ("Cyrillic,124" "0,147") + ("Cyrillic,161" "0,150") + ("Cyrillic,132" "0,151") + ("Cyrillic,133" "0,152") + ("Cyrillic,134" "0,153") + ("Cyrillic,135" "0,154") + ("Cyrillic,136" "0,155") + ("Cyrillic,137" "0,156") + ("Cyrillic,140" "0,157") + ("Cyrillic,141" "0,160") + ("Cyrillic,147" "0,161") + ("Cyrillic,142" "0,162") + ("Cyrillic,143" "0,163") + ("Cyrillic,144" "0,164") + ("Cyrillic,145" "0,165") + ("Cyrillic,123" "0,166") + ("Cyrillic,130" "0,167") + ("Cyrillic,155" "0,170") + ("Cyrillic,160" "0,171") + ("Cyrillic,131" "0,172") + ("Cyrillic,72" "0,173") + ("Cyrillic,0" "0,174") + ("Cyrillic,73" "0,175") + ("Cyrillic,70" "0,176") + ("Cyrillic,0" Rubout) + ("Cyrillic,156" "0,217") + ("357,44" "0,233") + (EMDASH "0,234") + ("357,146" "0,267"))) + +(RPAQQ MATHTOMCCS + (("357,173" "0,1") + ("357,62" "0,2") + ("357,63" "0,3") + (Null "0,4") + ("0,243" "0,5") + ("357,165" "0,6") + ("357,166" Bell) + (Null Backspace) + (Null Tab) + (Null Linefeed) + ("0,266" "0,13") + (Null Page) + (Null Newline) + (Null "0,16") + ("357,146" "0,17") + (Null "0,20") + (Null "0,21") + (Null "0,22") + ("357,172" "0,23") + (Null "0,24") + (Null "0,25") + ("357,157" "0,26") + (Null "0,27") + (Null "0,30") + (Null "0,31") + (Null "0,32") + (Null Escape) + (Null "0,34") + (Null "0,35") + (Null "0,36") + (Null Tenexeol) + ("357,60" "0,41") + ("357,147" "0,42") + (INFINITY "0,43") + ("0,242" Dollar) + ("0,270" "0,45") + ("357,266" "0,46") + ("357,163" "0,47") + ("0,302" "0,50") + ("357,174" "0,51") + ("0,307" "0,52") + ("0,261" "0,53") + ("357,114" "0,54") + ("357,175" "0,55") + ("41,150" "0,56") + ("357,145" "0,57") + ("357,147" Zero) + ("42,42" One) + ("42,44" Two) + ("41,176" Three) + ("357,142" Four) + ("357,143" Five) + ("357,144" Six) + ("357,154" Seven) + ("41,172" Eight) + ("0,307" Nine) + ("0,247" "0,72") + (Null "0,73") + ("41,145" "0,74") + ("41,142" "0,75") + ("41,146" "0,76") + ("0,277" "0,77") + ("357,100" "0,100") + ("357,265" "0,101") + ("357,112" "0,102") + ("357,254" "0,103") + ("357,271" "0,104") + ("357,264" "0,105") + ("357,61" "0,106") + ("357,133" "0,107") + ("357,137" "0,110") + ("357,131" "0,111") + ("357,132" "0,112") + ("357,136" "0,113") + ("357,130" "0,114") + ("360,275" "0,115") + ("357,113" "0,116") + ("357,141" "0,117") + ("357,161" "0,120") + ("357,121" "0,121") + ("357,256" "0,122") + ("357,171" "0,123") + ("357,160" "0,124") + ("357,127" "0,125") + ("357,267" "0,126") + ("357,162" "0,127") + ("0,264" "0,130") + ("360,272" "0,131") + ("357,270" "0,132") + (Null "0,133") + (Null "0,134") + (Null "0,135") + ("0,257" Uparrow) + ("0,256" Leftarrow) + (Null "0,140") + ("357,247" "0,141") + ("357,123" "0,142") + ("0,323" "0,143") + ("357,272" "0,144") + ("357,167" "0,145") + ("357,122" "0,146") + ("357,117" "0,147") + ("357,150" "0,150") + ("357,260" "0,151") + ("357,261" "0,152") + ("357,262" "0,153") + ("357,263" "0,154") + ("357,110" "0,155") + ("357,152" "0,156") + ("357,147" "0,157") + ("357,66" "0,160") + ("357,70" "0,161") + ("0,322" "0,162") + ("357,76" "0,163") + ("357,74" "0,164") + ("357,77" "0,165") + ("357,75" "0,166") + ("357,102" "0,167") + ("357,103" "0,170") + ("357,126" "0,171") + ("357,67" "0,172") + ("0,274" "0,173") + ("0,275" "0,174") + ("0,276" "0,175") + ("357,120" "0,176") + (Null Rubout) + (Null "0,200") + (Null "0,201") + (Null "0,202") + (Null "0,203") + (Null "0,204") + (Null "0,205") + (Null "0,206") + (Null "0,207") + (Null "0,210") + (Null "0,211") + (Null "0,212") + (Null "0,213") + (Null "0,214") + (Null "0,215") + (Null "0,216") + (Null "0,217") + (Null "0,220") + (Null "0,221") + (Null "0,222") + (Null "0,223") + (Null "0,224") + (Null "0,225") + (Null "0,226") + (Null "0,227") + (Null "0,230") + (Null "0,231") + (Null "0,232") + (Null "0,233") + (Null "0,234") + (Null "0,235") + (Null "0,236") + (Null "0,237") + (Null "0,240") + (Null "0,241") + (Null "0,242") + (Null "0,243") + (Null Currency) + (Null "0,245") + (Null "0,246") + (Null "0,247") + (Null "0,250") + (Null "0,251") + (Null LEFT-DOUBLEQUOTE) + (Null "0,253") + (Null Lowline) + (Null Circumflex) + (Null "0,256") + (Null "0,257") + (Null "0,260") + (Null "0,261") + (Null "0,262") + (Null "0,263") + (Null "0,264") + (Null "0,265") + (Null "0,266") + (Null "0,267") + (Null "0,270") + (Null "0,271") + (Null RIGHT-DOUBLEQUOTE) + (Null "0,273") + (Null "0,274") + (Null "0,275") + (Null "0,276") + (Null "0,277") + (Null "0,300") + (Null "0,301") + (Null "0,302") + (Null "0,303") + (Null "0,304") + (Null "0,305") + (Null "0,306") + (Null "0,307") + (Null "0,310") + (Null "0,311") + (Null "0,312") + (Null "0,313") + (Null "0,314") + (Null "0,315") + (Null "0,316") + (Null "0,317") + (Null "0,320") + (Null "0,321") + (Null "0,322") + (Null "0,323") + (Null "0,324") + (Null "0,325") + (Null "0,326") + (Null "0,327") + (Null "0,330") + (Null "0,331") + (Null "0,332") + (Null "0,333") + (Null "0,334") + (Null "0,335") + (Null "0,336") + (Null "0,337") + (Null "0,340") + (Null "0,341") + (Null "0,342") + (Null "0,343") + (Null "0,344") + (Null "0,345") + (Null "0,346") + (Null "0,347") + (Null "0,350") + (Null "0,351") + (Null "0,352") + (Null "0,353") + (Null "0,354") + (Null "0,355") + (Null "0,356") + (Null "0,357") + (Null "0,360") + (Null "0,361") + (Null "0,362") + (Null "0,363") + (Null "0,364") + (Null "0,365") + (Null "0,366") + (Null "0,367") + (Null "0,370") + (Null "0,371") + (Null "0,372") + (Null "0,373") + (Null "0,374") + (Null "0,375") + (Null "0,376") + (Null "0,377"))) + +(RPAQQ PALATINOTOMCCS + (("361,353" "0,32") + ("361,260" "0,34") + ("361,277" "0,35") + ("361,304" "0,36") + ("361,153" "0,37") + ("0,255" "0,136") + ("0,254" "0,137") + ("0,240" NIL) + ("361,047" "0,200") + ("361,124" "0,201") + ("361,043" "0,202") + ("361,077" "0,203") + ("361,114" "0,204") + ("361,120" "0,205") + ("361,121" "0,206") + ("361,117" "0,207") + ("361,122" "0,210") + ("361,134" "0,211") + ("361,140" "0,212") + ("361,141" "0,213") + ("361,145" "0,214") + ("361,137" "0,215") + ("361,155" "0,216") + ("361,160" "0,217") + ("361,142" "0,220") + ("361,241" "0,221") + ("361,243" "0,222") + ("361,276" "0,223") + ("361,250" "0,224") + ("361,320" "0,225") + ("361,321" "0,226") + ("361,322" "0,227") + ("361,322" "0,230") + ("361,334" "0,231") + ("361,244" "0,232") + ("361,341" "0,233") + ("361,261" "0,234") + ("361,337" "0,235") + ("361,262" "0,236") + ("361,255" "0,237") + ("361,247" "0,240") + ("0,057" "0,244") + (* ; "Slash, but should be fraction") + ("357,243" "0,246") + ("0,244" "0,250") + ("357,052" "0,254") + ("357,053" "0,255") + ("360,004" "0,256") + ("360,005" "0,257") + (EMDASH "0,261") + ("357,060" "0,262") + ("357,061" "0,263") + ("357,146" "0,267") + ("43,262" "0,270") + ("357,050" "0,271") + ("41,104" "0,274") + ("357,101" "0,275") + ("357,153" "0,311") + ("361,314" "0,314") + ("375,261" "0,321") + ("361,324" "0,324") + ("375,362" "0,325") + ("375,363" "0,326") + ("0,274" "0,327") + ("0,275" "0,330") + ("0,264" "0,331") + ("0,270" "0,332") + ("357,152" "0,333") + ("361,265" "0,334") + ("0,261" "0,335") + ("361,042" "0,336") + ("357,044" "0,337") + ("361,340" "0,340") + ("361,041" "0,344") + ("361,345" "0,345") + ("361,050" "0,346") + ("361,044" "0,347") + ("361,355" "0,355") + ("361,055" "0,356") + ("361,061" "0,357") + ("361,360" "0,360") + ("361,062" "0,362") + ("361,065" "0,364") + ("361,060" "0,366") + ("361,277" "0,367") + ("361,100" "0,375") + ("361,104" "0,376"))) + +(RPAQQ TITANTOMCCS + (("0,242" "0,176" cent) + ("0,176" NIL Delete cent) + (Lowline ↑X) + (Lowline "0,277") + ("0,55" "0,337") + ("0,55" "0,55" Hypehn) + ("0,274" "0,74" Quarter) + ("0,74" NIL Delete quarter) + ("0,275" "0,76" Half) + ("0,76" NIL Delete half))) + +(RPAQQ TITANLEGALTOMCCS + (("0,247" "0,176" Section) + ("0,176" NIL Delete section) + (Lowline ↑X) + (Lowline "0,277") + ("0,55" "0,337") + ("0,55" "0,55") + ("0,260" "0,74" Degree) + ("0,74" NIL Delete degree) + ("0,266" "0,100" Paragraph) + ("0,100" NIL Delete Paragraph))) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS GACHATOMCCSARRAY ALTOTOMCCSARRAY SYMBOLTOMCCSARRAY HIPPOTOMCCSARRAY CYRILLICTOMCCSARRAY + MATHTOMCCSARRAY SIGMATOMCCSARRAY PALATINOTOMCCSARRAY TITANTOMCCSARRAY TITANLEGALTOMCCSARRAY) +) + + + +(* ;; "For translation of codes in datastructures (e.g. Tedit)") + + +(RPAQ? GACHATOMCCSARRAY [MCCSCODEMAPARRAY (XCCSUNDEFINEDPAIRS '((Lowline ↑X]) + +(RPAQ? ALTOTOMCCSARRAY (MCCSCODEMAPARRAY ALTOTEXTTOMCCS)) + +(RPAQ? SYMBOLTOMCCSARRAY (MCCSCODEMAPARRAY SYMBOLTOMCCS)) + +(RPAQ? HIPPOTOMCCSARRAY (MCCSCODEMAPARRAY HIPPOTOMCCS)) + +(RPAQ? CYRILLICTOMCCSARRAY (MCCSCODEMAPARRAY CYRILLICTOMCCS)) + +(RPAQ? MATHTOMCCSARRAY (MCCSCODEMAPARRAY MATHTOMCCS)) + +(RPAQ? SIGMATOMCCSARRAY (MCCSCODEMAPARRAY SIGMATOMCCS)) + +(RPAQ? PALATINOTOMCCSARRAY (MCCSCODEMAPARRAY PALATINOTOMCCS)) + +(RPAQ? TITANTOMCCSARRAY (MCCSCODEMAPARRAY (XCCSUNDEFINEDPAIRS TITANTOMCCS))) + +(RPAQ? TITANLEGALTOMCCSARRAY (MCCSCODEMAPARRAY (XCCSUNDEFINEDPAIRS TITANLEGALTOMCCS))) + + + +(* ;; "Mappings into MCCS: needed for e.g. Tedit coercion. \TEDIT.MCCS.TRANSLATE") + +(DEFINEQ + +(GACHATOMCODE + [LAMBDA (GCODE) (* ; "Edited 7-Mar-2026 23:53 by rmk") + (* ; "Edited 6-Mar-2026 11:19 by rmk") + (* ; "Edited 7-Sep-2025 22:38 by rmk") + (* ; "Edited 3-Sep-2025 23:23 by rmk") + + (* ;; "Gacha did not have a code for circumflex, so there is nothing to map") + + (OR (CL:WHEN (ILEQ GCODE \MAXTHINCHAR) + (ELT GACHATOMCCSARRAY GCODE)) + GCODE]) + +(SYMBOLTOMCODE + [LAMBDA (SCODE) (* ; "Edited 7-Mar-2026 23:53 by rmk") + (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 7-Aug-2025 09:37 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (OR (CL:WHEN (ILEQ SCODE \MAXTHINCHAR) + (ELT SYMBOLTOMCCSARRAY SCODE)) + SCODE]) + +(SIGMATOMCODE + [LAMBDA (SCODE) (* ; "Edited 7-Mar-2026 23:54 by rmk") + (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (* ; "Edited 24-May-2025 10:54 by rmk") + (OR (CL:WHEN (ILEQ SCODE \MAXTHINCHAR) + (ELT SIGMATOMCCSARRAY SCODE)) + SCODE]) + +(ATOMCODE + [LAMBDA (ACODE) (* ; "Edited 7-Mar-2026 23:54 by rmk") + (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 24-May-2025 09:41 by rmk") + (OR (CL:WHEN (ILEQ ACODE \MAXTHINCHAR) + (ELT ALTOTOMCCSARRAY ACODE)) + ACODE]) + +(MATHTOMCODE + [LAMBDA (MATHCODE) (* ; "Edited 7-Mar-2026 23:54 by rmk") + (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 4-Sep-2025 08:18 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (* ; "Edited 24-May-2025 10:58 by rmk") + (OR (CL:WHEN (ILEQ MATHCODE \MAXTHINCHAR) + (ELT MATHTOMCCSARRAY MATHCODE)) + MATHCODE]) + +(HIPPOTOMCODE + [LAMBDA (HCODE) (* ; "Edited 7-Mar-2026 23:54 by rmk") + (* ; "Edited 7-Sep-2025 22:40 by rmk") + (* ; "Edited 3-Sep-2025 10:22 by rmk") + (* ; "Edited 24-May-2025 09:40 by rmk") + (OR (CL:WHEN (ILEQ HCODE \MAXTHINCHAR) + (ELT HIPPOTOMCCSARRAY HCODE)) + HCODE]) + +(CYRILLICTOMCODE + [LAMBDA (CCODE) (* ; "Edited 7-Mar-2026 23:55 by rmk") + (* ; "Edited 7-Sep-2025 22:40 by rmk") + (* ; "Edited 24-May-2025 09:38 by rmk") + (OR (CL:WHEN (ILEQ CCODE \MAXTHINCHAR) + (ELT CYRILLICTOMCCSARRAY CCODE)) + CCODE]) + +(PALATINOTOMCODE + [LAMBDA (PCODE) (* ; "Edited 7-Mar-2026 23:55 by rmk") + (* ; "Edited 5-Oct-2025 20:08 by rmk") + (* ; "Edited 7-Sep-2025 22:39 by rmk") + (* ; "Edited 3-Sep-2025 10:21 by rmk") + (* ; "Edited 7-Aug-2025 09:37 by rmk") + (* ; "Edited 1-Jun-2025 07:02 by rmk") + (OR (CL:WHEN (ILEQ PCODE \MAXTHINCHAR) + (ELT PALATINOTOMCCSARRAY PCODE)) + PCODE]) + +(TITANTOMCODE + [LAMBDA (TCODE) (* ; "Edited 7-Mar-2026 23:51 by rmk") + (* ; "Edited 6-Mar-2026 11:19 by rmk") + (* ; "Edited 7-Sep-2025 22:38 by rmk") + (* ; "Edited 3-Sep-2025 23:23 by rmk") + (* ; "Edited 30-Aug-2025 21:58 by rmk") + (OR (CL:WHEN (ILEQ TCODE \MAXTHINCHAR) + (ELT TITANTOMCCSARRAY TCODE)) + TCODE]) + +(TITANLEGALTOMCODE + [LAMBDA (TCODE) (* ; "Edited 7-Mar-2026 23:52 by rmk") + (* ; "Edited 6-Mar-2026 11:19 by rmk") + (* ; "Edited 7-Sep-2025 22:38 by rmk") + (* ; "Edited 3-Sep-2025 23:23 by rmk") + (* ; "Edited 30-Aug-2025 21:58 by rmk") + (OR (CL:WHEN (ILEQ TCODE \MAXTHINCHAR) + (ELT TITANLEGALTOMCCSARRAY TCODE)) + TCODE]) +) + +(RPAQ? DISPLAYFONTCOERCIONS + '(((HELVETICA (<= * 2)) + (HELVETICA 4)) + ((MODERN (<= 15 * 16)) + (* 14)) + ((MODERN (<= 17 * 21)) + (* 18)) + ((MODERN (<= 22 * 28)) + (* 24)) + ((MODERN (<= 29 * 33)) + (* 30)) + ((MODERN (<= 34 * 40)) + (* 36)) + ((MODERN (<= 41 * 65)) + (* 48)) + ((MODERN (<= 66 *)) + (* 72)) + ((PALATINO 9) + (PALATINO 12)) + ((PALATINO (<= * 8)) + (PALATINO 10)) + ((TITAN (<= * 9) + BOLD) + (MODERN 10)) + ((TITAN (<= * 9) + ITALIC) + (MODERN 10)) + ((TITAN (<= * 9)) + (TITAN 10)) + (LPT AMTEX))) + +(RPAQ? DISPLAYCHARCOERCIONS + '((GACHA TERMINAL) + (MODERN CLASSIC) + (TIMESROMAN CLASSIC) + (HELVETICA MODERN) + (TERMINAL MODERN) + (HIPPO CLASSIC) + (CYRILLIC CLASSIC) + (MATH CLASSIC) + (SIGMA MODERN) + (SYMBOL MODERN) + (TITAN CLASSIC) + (PALATINO CLASSIC) + (OPTIMA MODERN) + (BOLDPS CLASSIC) + (PCTERMINAL CLASSIC) + (TITANLEGAL CLASSIC))) + + + +(* ;; "Defunct coercions? Mapping for DOS filenames, Adobe equivalences") + + +(RPAQ? ADOBEDISPLAYFONTCOERCIONS + '(((HELVETICABLACK 16) + (HELVETICABLACK 18)) + ((SYMBOL) + (ADOBESYMBOL)) + ((SYMBOL 11) + (ADOBESYMBOL 10)) + ((AVANTGARDE-DEMI) + (AVANTGARDE)) + ((AVANTGARDE-BOOK) + (AVANTGARDE)) + ((NEWCENTURYSCHLBK) + (CENTURYSCHOOLBOOK)) + ((BOOKMAN-LIGHT) + (BOOKMAN)) + ((BOOKMAN-DEMI) + (BOOKMAN)) + ((HELVETICA-NARROW) + (HELVETICANARROW)) + ((HELVETICA 24) + (ADOBEHELVETICA 24)))) + +(RPAQ? *DISPLAY-FONT-NAME-MAP* + '((TIMESROMAN . TR) + (HELVETICA . HV) + (TIMESROMAND . TD) + (HELVETICAD . HD) + (MODERN . MD) + (CLASSIC . CL) + (GACHA . GC) + (TITAN . TI) + (LETTERGOTHIC . LG) + (BOLDPS . BP) + (TERMINAL . TM) + (CLASSICTHIN . CT) + (HIPPO . HP) + (LOGO . LG) + (MATH . MA) + (OLDENGLISH . OE) + (SYMBOL . SY))) +(DECLARE%: DONTCOPY + (FILEMAP (NIL (8275 9042 (DISPLAYENCODINGFN 8285 . 9040)) (9076 22495 (MCCSCODEMAPARRAY 9086 . 13654) +(MCCSMAPFN 13656 . 15023) (MCCSMAPPAIRS 15025 . 20556) (XCCS.CS0.UNDEFINED 20558 . 21691) ( +XCCSUNDEFINEDPAIRS 21693 . 22493)) (44760 51128 (GACHATOMCODE 44770 . 45415) (SYMBOLTOMCODE 45417 . +46085) (SIGMATOMCODE 46087 . 46753) (ATOMCODE 46755 . 47307) (MATHTOMCODE 47309 . 47982) (HIPPOTOMCODE + 47984 . 48541) (CYRILLICTOMCODE 48543 . 48997) (PALATINOTOMCODE 48999 . 49780) (TITANTOMCODE 49782 . +50448) (TITANLEGALTOMCODE 50450 . 51126))))) +STOP diff --git a/sources/MCCSFONTS.LCOM b/sources/MCCSFONTS.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..dd3bbcbd8808aecee322a2da6e743e5ddaee1a1a GIT binary patch literal 25036 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 E1ud#s`~Uy| literal 0 HcmV?d00001