From ea087f7a4e6cd92e3ddf2344491f796aada6512a Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Fri, 8 Aug 2025 22:18:44 -0700 Subject: [PATCH 1/2] Verbose mode implemented incorrectly --- lispusers/READ-BDF | 34 ++++++++++++++++++---------------- lispusers/READ-BDF.DFASL | Bin 20898 -> 20923 bytes 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lispusers/READ-BDF b/lispusers/READ-BDF index 229d59d0e..ebc2174c4 100644 --- a/lispusers/READ-BDF +++ b/lispusers/READ-BDF @@ -5,13 +5,14 @@ BITMAPHEIGHT BITMAPWIDTH BLACKSHADE BLTSHADE BOLD CONDENSED CHARSETINFO DISPLAY FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITESTRIKEFONTFILE)) READTABLE "XCL" BASE 10) -(IL:FILECREATED "30-Apr-2025 13:20:10" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;61| 47500 +(IL:FILECREATED " 7-Aug-2025 18:06:58" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;2| 47764 :EDIT-BY "mth" - :CHANGES-TO (IL:FUNCTIONS GET-FAMILY-FACE-SIZE-FROM-NAME) + :CHANGES-TO (IL:FUNCTIONS READ-BDF WRITE-BDF-TO-DISPLAYFONT-FILES BDF-TO-CHARSETINFO READ-GLYPH + GET-FAMILY-FACE-SIZE-FROM-NAME SPLIT-FONT-NAME) - :PREVIOUS-DATE "25-Apr-2025 10:10:08" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;60| + :PREVIOUS-DATE "30-Apr-2025 13:20:10" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;1| ) @@ -488,7 +489,8 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST X)) Y)))) -(DEFUN READ-BDF (PATH &OPTIONAL VERBOSE) (IL:* IL:\; "Edited 24-Apr-2025 00:44 by mth") +(DEFUN READ-BDF (PATH &OPTIONAL VERBOSE) (IL:* IL:\; "Edited 30-Apr-2025 13:37 by mth") + (IL:* IL:\; "Edited 24-Apr-2025 00:44 by mth") (IL:* IL:\; "Edited 17-Apr-2025 15:10 by mth") (IL:* IL:\; "Edited 12-Jul-2024 23:02 by mth") (LET @@ -603,15 +605,15 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETF (BF-SLUG FONT) GL)))))) (ENDFONT (SETQ FONT-COMPLETE T)))))))) - (WHEN VERBOSE - (DESTRUCTURING-BIND (FAMILY (WEIGHT SLANT EXPANSION) - SIZE) - (GET-FAMILY-FACE-SIZE-FROM-NAME FONT) + (DESTRUCTURING-BIND (FAMILY (WEIGHT SLANT EXPANSION) + SIZE) + (GET-FAMILY-FACE-SIZE-FROM-NAME FONT) + (WHEN VERBOSE (FORMAT *STANDARD-OUTPUT* "Name: ~A~%Family: ~A~%Size: ~A~%Weight: ~A~%Slant: ~A~%Expansion: ~A~%" (BF-NAME FONT) - FAMILY SIZE WEIGHT SLANT EXPANSION))) - FONT))) + FAMILY SIZE WEIGHT SLANT EXPANSION)) + (VALUES FONT FAMILY WEIGHT SLANT EXPANSION SIZE))))) (DEFUN READ-DELIMITED-LIST-FROM-STRING (INPUT-STRING &OPTIONAL (DELIMIT #\])) (IL:* IL:\; "Edited 20-Aug-2024 16:46 by mth") @@ -823,10 +825,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (IL:PUTPROPS IL:READ-BDF IL:DATABASE IL:NO) (IL:DECLARE\: IL:DONTCOPY - (IL:FILEMAP (NIL (2316 10275 (BDF-TO-CHARSETINFO 2316 . 10275)) (10277 16147 (BDF-TO-FONTDESCRIPTOR -10277 . 16147)) (16149 19687 (GET-FAMILY-FACE-SIZE-FROM-NAME 16149 . 19687)) (19689 26500 ( -GLYPHS-BY-CHARSET 19689 . 26500)) (26502 27927 (PACKFILENAME.STRING 26502 . 27927)) (27929 34733 ( -READ-BDF 27929 . 34733)) (34735 35058 (READ-DELIMITED-LIST-FROM-STRING 34735 . 35058)) (35060 41548 ( -READ-GLYPH 35060 . 41548)) (41550 42291 (SPLIT-FONT-NAME 41550 . 42291)) (42293 46075 ( -WRITE-BDF-TO-DISPLAYFONT-FILES 42293 . 46075))))) + (IL:FILEMAP (NIL (2425 10384 (BDF-TO-CHARSETINFO 2425 . 10384)) (10386 16256 (BDF-TO-FONTDESCRIPTOR +10386 . 16256)) (16258 19796 (GET-FAMILY-FACE-SIZE-FROM-NAME 16258 . 19796)) (19798 26609 ( +GLYPHS-BY-CHARSET 19798 . 26609)) (26611 28036 (PACKFILENAME.STRING 26611 . 28036)) (28038 34997 ( +READ-BDF 28038 . 34997)) (34999 35322 (READ-DELIMITED-LIST-FROM-STRING 34999 . 35322)) (35324 41812 ( +READ-GLYPH 35324 . 41812)) (41814 42555 (SPLIT-FONT-NAME 41814 . 42555)) (42557 46339 ( +WRITE-BDF-TO-DISPLAYFONT-FILES 42557 . 46339))))) IL:STOP diff --git a/lispusers/READ-BDF.DFASL b/lispusers/READ-BDF.DFASL index 1974ed35938ba59ce1aee8f097126b0f96dea634..3c3b384320b0b40c450b420b825eeb204cd0a3f6 100644 GIT binary patch delta 483 zcmZ3qm~r=F#tAWTMqI)9rA5i93Tc@+sS3$Osfi`2DGCbax{jskx<&>@rV54@Rt9EP zrWRaoj=?^t%0eskfU|oSIk|KTTfl z<{$hSWbPcW_!JPc7or5j>;N;r)Pku`F(8WJPZ*f@!39DYK_~?X#Rs7_d%E9ZV*I>W P#p^3G2;1Hk~^M9Zio11@-uOpayaB{WPUhWxFd)Q-q!$4{#+gVHVfApLQ zRLjuk45Ao6PR_7aW&F6g&svL_n=3fL$J5zW*U-{*^AWqxOpG5U?{LhLf(aWL7&A+Q zb-m#MQ=d26IyJEX%{buZ&-iJwfV-&eXOP()VA(IV5F27Z6vLk|Fz>w!gffCq3J{79 ZLTyfRzs1D(X|t`@S7ye~n~nWCm;oW%hK2wD From 3410e3db62aa8c40da37a18ee797bcc4b4aaa7ea Mon Sep 17 00:00:00 2001 From: Matt Heffron Date: Fri, 7 Nov 2025 21:47:39 -0800 Subject: [PATCH 2/2] Cleanup DEFPACKAGE using :IMPORT-FROM, and fewer imports. Various renaming for consistency with XCCS -> MCCS changes. Use IL:FONTSPEC record instead of using FIRST, SECOND, etc. Fix the parsing of IL:FONTSPEC to use COMPRESSED instead of incorrect CONDENSED. Zero-width "image" with zero-width "escapement" GLYPHS get put into NOMAPPINGCHARSET. Add (FILES (SYSLOAD) SYSEDIT) under existing (DECLARE: EVAL@COMPILE DONTCOPY ...) --- lispusers/READ-BDF | 183 ++++++++++++++++++++++----------------- lispusers/READ-BDF.DFASL | Bin 20923 -> 21485 bytes lispusers/READ-BDF.TEDIT | Bin 9640 -> 9819 bytes 3 files changed, 103 insertions(+), 80 deletions(-) diff --git a/lispusers/READ-BDF b/lispusers/READ-BDF index ebc2174c4..a4c28123e 100644 --- a/lispusers/READ-BDF +++ b/lispusers/READ-BDF @@ -1,18 +1,19 @@ (DEFINE-FILE-INFO PACKAGE (DEFPACKAGE "BDF" (USE "XCL" "LISP") (EXPORT "READ-BDF" -"WRITE-BDF-TO-DISPLAYFONT-FILES") (IMPORT \AVGCHARWIDTH \FGETWIDTH \FONTFACE \FONTFILENAME -\FSETOFFSET \FSETWIDTH \FONTSYMBOL \GETSTREAM \INSTALLCHARSETINFO \PUTBASE BITBLT BITMAPCREATE -BITMAPHEIGHT BITMAPWIDTH BLACKSHADE BLTSHADE BOLD CONDENSED CHARSETINFO DISPLAY FONTDESCRIPTOR FONTP -FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITESTRIKEFONTFILE)) -READTABLE "XCL" BASE 10) +"WRITE-BDF-TO-DISPLAYFONT-FILES") (IMPORT-FROM "IL" "BITBLT" "BITMAPCREATE" "BITMAPHEIGHT" +"BITMAPWIDTH" "BLACKSHADE" "BLTSHADE" "BOLD" "COMPRESSED" "CHARSETINFO" "DISPLAY" "FONTDESCRIPTOR" +"FONTP" "FONTPROP" "INPUT" "ITALIC" "LIGHT" "LRSH" "MEDIUM" "REGULAR" "TCONC" "UTOMCODE" "UTOMCODE?" +"WRITESTRIKEFONTFILE")) READTABLE "XCL" BASE 10) -(IL:FILECREATED " 7-Aug-2025 18:06:58" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;2| 47764 +(IL:FILECREATED " 6-Nov-2025 23:10:51" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;13| 49101 :EDIT-BY "mth" - :CHANGES-TO (IL:FUNCTIONS READ-BDF WRITE-BDF-TO-DISPLAYFONT-FILES BDF-TO-CHARSETINFO READ-GLYPH - GET-FAMILY-FACE-SIZE-FROM-NAME SPLIT-FONT-NAME) + :CHANGES-TO (IL:FUNCTIONS BDF-TO-FONTDESCRIPTOR BDF-TO-CHARSETINFO READ-GLYPH + WRITE-BDF-TO-DISPLAYFONT-FILES) + (FILE-ENVIRONMENTS "READ-BDF") + (IL:VARS IL:READ-BDFCOMS) - :PREVIOUS-DATE "30-Apr-2025 13:20:10" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;1| + :PREVIOUS-DATE " 6-Nov-2025 22:43:21" IL:|{DSK}matt>Interlisp>medley>lispusers>READ-BDF.;9| ) @@ -24,8 +25,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (IL:FUNCTIONS BDF-TO-CHARSETINFO BDF-TO-FONTDESCRIPTOR GET-FAMILY-FACE-SIZE-FROM-NAME GLYPHS-BY-CHARSET PACKFILENAME.STRING READ-BDF READ-DELIMITED-LIST-FROM-STRING READ-GLYPH SPLIT-FONT-NAME WRITE-BDF-TO-DISPLAYFONT-FILES) - (IL:DECLARE\: IL:EVAL@COMPILE IL:DONTCOPY (IL:FILES (IL:LOADCOMP) - IL:FONT)) + (IL:DECLARE\: IL:EVAL@COMPILE IL:DONTCOPY (IL:FILES (IL:SYSLOAD) + IL:SYSEDIT) + (IL:FILES (IL:LOADCOMP) + IL:FONT)) (FILE-ENVIRONMENTS "READ-BDF") (IL:PROP (IL:DATABASE) IL:READ-BDF))) @@ -41,10 +44,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SLUG NIL :TYPE GLYPH)) (DEFSTRUCT GLYPH - "This is an individual BDF glyph. Includes some values calculted for creating CHARSETINFO" + "This is an individual BDF glyph. Includes some values calculated for creating CHARSETINFO" (NAME NIL :TYPE STRING) ENCODING SWIDTH DWIDTH SWIDTH1 DWIDTH1 VVECTOR BBW BBH BBXOFF0 BBYOFF0 BITMAP - (XCODE 0 :TYPE INTEGER) + (MCODE 0 :TYPE INTEGER) (WIDTH 0 :TYPE INTEGER) (ASCENT 0 :TYPE INTEGER) (DESCENT 0 :TYPE INTEGER)) @@ -56,6 +59,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (DEFCONSTANT NOMAPPINGCHARSET (1+ MAXCHARSET)) (DEFUN BDF-TO-CHARSETINFO (FONT CSET SLUG-OR-WIDTH &OPTIONAL MAP-UNKNOWN-TO-PRIVATE) + (IL:* IL:\; "Edited 6-Nov-2025 17:30 by mth") (IL:* IL:\; "Edited 23-Apr-2025 17:53 by mth") (IL:* IL:\; "Edited 21-Apr-2025 16:23 by mth") (IL:* IL:\; "Edited 30-Jan-2025 16:40 by mth") @@ -99,7 +103,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST ((INTEGERP SLUG-OR-WIDTH) (SETQ SLUGWIDTH SLUG-OR-WIDTH)) (T (ERROR "Invalid SLUG-OR-WIDTH: ~S" SLUG-OR-WIDTH))) - (SETQ CSGLYPHS (LOOP :FOR XGL :IN CSGLYPHS :COLLECT (LET* ((XCODE (CAR XGL)) + (SETQ CSGLYPHS (LOOP :FOR XGL :IN CSGLYPHS :COLLECT (LET* ((MCODE (CAR XGL)) (GL (CDR XGL)) (GWIDTH (GLYPH-WIDTH GL)) @@ -113,13 +117,13 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST    "Is the above statement actually true?") - (SETF (GLYPH-XCODE GL) - XCODE) + (SETF (GLYPH-MCODE GL) + MCODE) (SETQ FIRSTCHAR - (MIN FIRSTCHAR XCODE + (MIN FIRSTCHAR MCODE )) (SETQ LASTCHAR - (MAX LASTCHAR XCODE) + (MAX LASTCHAR MCODE) ) (INCF TOTAL-WIDTH GWIDTH) (SETQ ASCENT @@ -134,13 +138,13 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (IL:* IL:|;;|  "Initialize the offsets to the TOTAL-WIDTH (without the SLUG. It will be added later)") - (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (\\FSETOFFSET OFFSETS I + (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (IL:\\FSETOFFSET OFFSETS I TOTAL-WIDTH)) (SETQ WIDTHS (IL:|fetch| (CHARSETINFO IL:WIDTHS) IL:|of| CSINFO)) (IL:* IL:|;;| "Initialize the widths to SLUGWIDTH") - (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (\\FSETWIDTH WIDTHS I + (IL:|for| I IL:|from| 0 IL:|to| (+ MAXTHINCHAR 2) IL:|do| (IL:\\FSETWIDTH WIDTHS I SLUGWIDTH)) (IL:|replace| (CHARSETINFO IL:IMAGEWIDTHS) IL:|of| CSINFO IL:|with| WIDTHS) @@ -152,19 +156,19 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETQ BMAP (BITMAPCREATE (+ TOTAL-WIDTH SLUGWIDTH) HEIGHT 1)) (IL:|replace| (CHARSETINFO IL:CHARSETBITMAP) IL:|of| CSINFO IL:|with| BMAP) - (LOOP :FOR GL :IN CSGLYPHS :WITH GLBM :WITH GLW :WITH XCODE :DO (SETQ GLBM + (LOOP :FOR GL :IN CSGLYPHS :WITH GLBM :WITH GLW :WITH MCODE :DO (SETQ GLBM (GLYPH-BITMAP GL)) (SETQ GLW (GLYPH-WIDTH GL)) - (SETQ XCODE (GLYPH-XCODE GL)) + (SETQ MCODE (GLYPH-MCODE GL)) (BITBLT GLBM 0 0 BMAP (+ DLEFT (MAX 0 (GLYPH-BBXOFF0 GL))) (+ DESCENT (GLYPH-BBYOFF0 GL)) (BITMAPWIDTH GLBM) (BITMAPHEIGHT GLBM) 'INPUT 'IL:REPLACE) - (\\FSETOFFSET OFFSETS XCODE DLEFT) - (\\FSETOFFSET WIDTHS XCODE GLW) + (IL:\\FSETOFFSET OFFSETS MCODE DLEFT) + (IL:\\FSETOFFSET WIDTHS MCODE GLW) (INCF DLEFT GLW)) (IL:* IL:|;;| "Now insert the SLUG glyph into the BMAP, or make a slug (block)") @@ -186,6 +190,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (DEFUN BDF-TO-FONTDESCRIPTOR (BDFONT FAMILY SIZE FACE ROTATION DEVICE &OPTIONAL MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING) + (IL:* IL:\; "Edited 5-Nov-2025 16:09 by mth") (IL:* IL:\; "Edited 21-Apr-2025 16:03 by mth") (IL:* IL:\; "Edited 30-Jan-2025 21:27 by mth") (WHEN (AND (BDF-FONT-P BDFONT) @@ -201,18 +206,22 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (OR DEVICE (FONTPROP FAMILY 'IL:DEVICE)) MAP-UNKNOWN-TO-PRIVATE))) (WHEN (LISTP FAMILY) - (RETURN (BDF-TO-FONTDESCRIPTOR BDFONT (FIRST FAMILY) - (OR (SECOND FAMILY) + + (IL:* IL:|;;| "Assume this is a FONTSPEC") + + (RETURN (BDF-TO-FONTDESCRIPTOR BDFONT (IL:|fetch| (IL:FONTSPEC IL:FSFAMILY) + IL:|of| FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSSIZE) IL:|of| FAMILY) SIZE) - (OR (THIRD FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSFACE) IL:|of| FAMILY) FACE "MRR") - (OR (FOURTH FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSROTATION) IL:|of| FAMILY) ROTATION 0) - (OR (FIFTH FAMILY) + (OR (IL:|fetch| (IL:FONTSPEC IL:FSDEVICE) IL:|of| FAMILY) DEVICE 'DISPLAY) MAP-UNKNOWN-TO-PRIVATE))) - (SETQ FAMILY (\\FONTSYMBOL FAMILY)) + (SETQ FAMILY (IL:\\FONTSYMBOL FAMILY)) (UNLESS (AND (INTEGERP SIZE) (PLUSP SIZE)) (ERROR "Invalid SIZE: ~S~%" SIZE)) @@ -237,7 +246,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (INTERN (STRING-UPCASE DEVICE) "IL")) (T (IL:\\ILLEGAL.ARG DEVICE)))) - (SETQ FACE (\\FONTFACE FACE NIL DEV)) + (SETQ FACE (IL:\\FONTFACE FACE NIL DEV)) (SETQ GBCSL (GLYPHS-BY-CHARSET BDFONT MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING)) (UNLESS SLUGWIDTH @@ -269,15 +278,16 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST GBCS CSET (OR SLUG (1+ SLUGWIDTH )))) - (\\INSTALLCHARSETINFO FONTDESC CSINFO CSET) + (IL:\\INSTALLCHARSETINFO FONTDESC CSINFO CSET + ) (LIST CSET))))) (LIST FONTDESC CHARSETS)))) (RETURN (VALUES-LIST (NCONC (GBCS-TO-FONTDESC (FIRST GBCSL) FAMILY) (GBCS-TO-FONTDESC (SECOND GBCSL) - (\\FONTSYMBOL (CONCATENATE 'STRING - (SYMBOL-NAME FAMILY) - "-UNMAPPED"))) + (IL:\\FONTSYMBOL (CONCATENATE 'STRING + (SYMBOL-NAME FAMILY) + "-UNMAPPED"))) (LIST (ASSOC NOMAPPINGCHARSET (FIRST GBCSL) :TEST #'EQL))))))))) @@ -312,8 +322,8 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST '((#\R . REGULAR) (#\N . REGULAR) (#\B . BOLD) - (#\S . CONDENSED) - (#\C . CONDENSED))))) + (#\S . COMPRESSED) + (#\C . COMPRESSED))))) 'REGULAR)) (IL:* IL:\;  "S is for \"SemiCondensed\", Assuming \"Condensed\"") @@ -337,17 +347,19 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (FIRST (BF-SIZE BDFONT)))))) (DEFUN GLYPHS-BY-CHARSET (FONT &OPTIONAL MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING) + (IL:* IL:\; "Edited 6-Nov-2025 18:11 by mth") + (IL:* IL:\; "Edited 5-Nov-2025 16:18 by mth") (IL:* IL:\; "Edited 21-Apr-2025 15:48 by mth") (IL:* IL:\; "Edited 9-Jan-2025 11:23 by mth") (LET* ((NCSETS (+ MAXCHARSET 2)) (CSETS (MAKE-ARRAY NCSETS :INITIAL-CONTENTS (LOOP :REPEAT NCSETS :COLLECT (CONS NIL)))) - (UTOXFN (COND + (UTOMFN (COND (RAW-UNICODE-MAPPING #'IDENTITY) - (MAP-UNKNOWN-TO-PRIVATE #'UTOXCODE) - (T #'UTOXCODE?))) + (MAP-UNKNOWN-TO-PRIVATE #'UTOMCODE) + (T #'UTOMCODE?))) (SLUG (BF-SLUG FONT)) (SLUGWIDTH (AND SLUG (GLYPH-WIDTH SLUG))) - NOMAPPINGCSETS ENC XCODE XCS) + NOMAPPINGCSETS ENC MCODE MCS) (UNLESS (OR MAP-UNKNOWN-TO-PRIVATE RAW-UNICODE-MAPPING) (SETQ NOMAPPINGCSETS (MAKE-ARRAY NCSETS :INITIAL-CONTENTS (LOOP :REPEAT NCSETS :COLLECT (CONS NIL))))) @@ -359,7 +371,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST :UNLESS (EQ GL SLUG) :DO - (SETQ XCS NIL) + (SETQ MCS NIL) (SETQ ENC (GLYPH-ENCODING GL)) (WHEN (LISTP ENC) @@ -373,9 +385,9 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST  "The -1 case of the (OR ...) shouldn't happen. The (EQ GL SLUG) test above should have caught it") ) - (SETQ XCODE (AND (INTEGERP ENC) + (SETQ MCODE (AND (INTEGERP ENC) (PLUSP ENC) - (FUNCALL UTOXFN ENC))) + (FUNCALL UTOMFN ENC))) (IF RAW-UNICODE-MAPPING (COND ((> ENC 65535) @@ -395,7 +407,15 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (CONS ENC GL))) (T (PUT-GLYPH-IN-CHARSET-ARRAY ENC GL CSETS))) (COND - ((NULL XCODE) + ((AND (ZEROP (GLYPH-BBW GL)) + (ZEROP (FIRST (GLYPH-DWIDTH GL)))) + + (IL:* IL:|;;| + "This has zero-width \"image\" with zero-width \"escapement\", put it in the NOMAPPINGCHARSET") + + (TCONC (AREF CSETS NOMAPPINGCHARSET) + (CONS ENC GL))) + ((NULL MCODE) (IL:* IL:|;;| "These assoc with the Unicode encoding") @@ -409,37 +429,37 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (TCONC (AREF CSETS NOMAPPINGCHARSET) (CONS ENC GL))) (T (PUT-GLYPH-IN-CHARSET-ARRAY ENC GL NOMAPPINGCSETS)))) - ((AND (INTEGERP XCODE) - (<= 0 XCODE 65535)) + ((AND (INTEGERP MCODE) + (<= 0 MCODE 65535)) (IL:* IL:|;;|  "These assoc with the 8 bit character code within the charset") - (PUT-GLYPH-IN-CHARSET-ARRAY XCODE GL CSETS) + (PUT-GLYPH-IN-CHARSET-ARRAY MCODE GL CSETS) (IL:* IL:|;;| "Default SLUG width is width of A.") (WHEN (AND (NOT SLUGWIDTH) (= ENC (CHAR-CODE #\A))) - (IL:* IL:|;;| "A is the same code in XCCS and UNICODE ") + (IL:* IL:|;;| "A is the same code in MCCS and UNICODE ") (IL:* IL:|;;| - "Comparing with ENC, not XCODE, to look only in charset 0") + "Comparing with ENC, not MCODE, to look only in charset 0") (SETQ SLUGWIDTH (GLYPH-WIDTH GL)))) - ((LISTP XCODE) + ((LISTP MCODE) (IL:* IL:|;;|  "These assoc with the 8 bit character code within the charset (like above)") - (LOOP :FOR XC :IN XCODE :WITH CS :UNLESS (MEMBER (SETQ CS - (LRSH XC 8)) - XCS) + (LOOP :FOR MC :IN MCODE :WITH CS :UNLESS (MEMBER (SETQ CS + (LRSH MC 8)) + MCS) :DO - (PUSH CS XCS) - (PUT-GLYPH-IN-CHARSET-ARRAY XC GL CSETS))) - (T (ERROR "Invalid XCODE: ~A~%")))))) + (PUSH CS MCS) + (PUT-GLYPH-IN-CHARSET-ARRAY MC GL CSETS))) + (T (ERROR "Invalid MCODE: ~A~%")))))) (IL:* IL:|;;| "Extract the lists from the TCONC pointers") @@ -701,7 +721,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETQ WORDINDEX (* BITROW BM.RASTERWIDTH)) (SETQ BYTEPOS (* 16 (1- NWORDS))) (LOOP :REPEAT NWORDS :DO - (\\PUTBASE BM.BASE WORDINDEX + (IL:\\PUTBASE BM.BASE WORDINDEX (LDB (BYTE 16 BYTEPOS) BITS)) (INCF WORDINDEX) @@ -746,12 +766,13 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (CHAR-SETS T) MAP-UNKNOWN-TO-PRIVATE WRITE-UNMAPPED RAW-UNICODE-MAPPING) + (IL:* IL:\; "Edited 5-Nov-2025 23:06 by mth") (IL:* IL:\; "Edited 25-Apr-2025 10:08 by mth") (IL:* IL:\; "Edited 24-Apr-2025 00:09 by mth") (IL:* IL:\; "Edited 21-Apr-2025 16:03 by mth") (IL:* IL:\; "Edited 3-Feb-2025 23:18 by mth") (UNLESS (TYPEP BDFONT 'BDF-FONT) - (ERROR "Not a BDF-FONT: ~S~%" BDFONT)) + (ERROR "Not a BDF-FONT: ~S ~%" BDFONT)) (COND ((EQ CHAR-SETS T) (IL:* IL:\; "This means ALL charsets") ) @@ -771,7 +792,7 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (GET-FAMILY-FACE-SIZE-FROM-NAME BDFONT) (SETQ FAMILY (OR FAMILY FN-FAMILY)) (WHEN RAW-UNICODE-MAPPING - (SETQ FAMILY (\\FONTSYMBOL (CONCATENATE 'STRING "RAW-" (STRING FAMILY))))) + (SETQ FAMILY (IL:\\FONTSYMBOL (CONCATENATE 'STRING "RAW-" (STRING FAMILY))))) (SETQ FACE (OR FACE FN-FACE)) (SETQ SIZE (OR SIZE FN-SIZE)) (MULTIPLE-VALUE-BIND (FONTDESC CSETS UNMAPPED-FONTDESC UNICODE-CSETS UNMAPPEDGLYPHS) @@ -782,16 +803,16 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (SETQ UNICODE-CSETS (INTERSECTION CHAR-SETS UNICODE-CSETS))) (LOOP :FOR CS :IN CSETS :DO (WRITESTRIKEFONTFILE FONTDESC CS (PACKFILENAME.STRING :BODY DEST-DIR :NAME - (\\FONTFILENAME FAMILY SIZE FACE + (IL:\\FONTFILENAME FAMILY SIZE FACE "DISPLAYFONT" CS)))) (IF WRITE-UNMAPPED (LOOP :FOR CS :IN UNICODE-CSETS :DO (WRITESTRIKEFONTFILE UNMAPPED-FONTDESC CS (PACKFILENAME.STRING :BODY DEST-DIR :NAME - (\\FONTFILENAME (FONTPROP - UNMAPPED-FONTDESC - 'IL:FAMILY) + (IL:\\FONTFILENAME (FONTPROP + UNMAPPED-FONTDESC + 'IL:FAMILY) SIZE FACE "DISPLAYFONT" CS)))) (SETQ UNICODE-CSETS NIL)) @@ -803,6 +824,10 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (VALUES FONTDESC CSETS UNMAPPED-FONTDESC UNICODE-CSETS UNMAPPEDGLYPHS)))) (IL:DECLARE\: IL:EVAL@COMPILE IL:DONTCOPY +(IL:FILESLOAD (IL:SYSLOAD) + IL:SYSEDIT) + + (IL:FILESLOAD (IL:LOADCOMP) IL:FONT) ) @@ -810,25 +835,23 @@ FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM REGULAR TCONC UTOXCODE UTOXCODE? WRITEST (DEFINE-FILE-ENVIRONMENT "READ-BDF" :PACKAGE (DEFPACKAGE "BDF" (:USE "XCL" "LISP") (:EXPORT "READ-BDF" "WRITE-BDF-TO-DISPLAYFONT-FILES") - (:IMPORT \\AVGCHARWIDTH \\FGETWIDTH \\FONTFACE - \\FONTFILENAME \\FSETOFFSET \\FSETWIDTH - \\FONTSYMBOL \\GETSTREAM - \\INSTALLCHARSETINFO \\PUTBASE BITBLT - BITMAPCREATE BITMAPHEIGHT BITMAPWIDTH - BLACKSHADE BLTSHADE BOLD CONDENSED - CHARSETINFO DISPLAY FONTDESCRIPTOR FONTP - FONTPROP INPUT ITALIC LIGHT LRSH MEDIUM - REGULAR TCONC UTOXCODE UTOXCODE? - WRITESTRIKEFONTFILE)) + (:IMPORT-FROM "IL" "BITBLT" "BITMAPCREATE" + "BITMAPHEIGHT" "BITMAPWIDTH" "BLACKSHADE" + "BLTSHADE" "BOLD" "COMPRESSED" + "CHARSETINFO" "DISPLAY" "FONTDESCRIPTOR" + "FONTP" "FONTPROP" "INPUT" "ITALIC" + "LIGHT" "LRSH" "MEDIUM" "REGULAR" "TCONC" + "UTOMCODE" "UTOMCODE?" + "WRITESTRIKEFONTFILE")) :READTABLE "XCL" :COMPILER :COMPILE-FILE) (IL:PUTPROPS IL:READ-BDF IL:DATABASE IL:NO) (IL:DECLARE\: IL:DONTCOPY - (IL:FILEMAP (NIL (2425 10384 (BDF-TO-CHARSETINFO 2425 . 10384)) (10386 16256 (BDF-TO-FONTDESCRIPTOR -10386 . 16256)) (16258 19796 (GET-FAMILY-FACE-SIZE-FROM-NAME 16258 . 19796)) (19798 26609 ( -GLYPHS-BY-CHARSET 19798 . 26609)) (26611 28036 (PACKFILENAME.STRING 26611 . 28036)) (28038 34997 ( -READ-BDF 28038 . 34997)) (34999 35322 (READ-DELIMITED-LIST-FROM-STRING 34999 . 35322)) (35324 41812 ( -READ-GLYPH 35324 . 41812)) (41814 42555 (SPLIT-FONT-NAME 41814 . 42555)) (42557 46339 ( -WRITE-BDF-TO-DISPLAYFONT-FILES 42557 . 46339))))) + (IL:FILEMAP (NIL (2497 10576 (BDF-TO-CHARSETINFO 2497 . 10576)) (10578 16996 (BDF-TO-FONTDESCRIPTOR +10578 . 16996)) (16998 20538 (GET-FAMILY-FACE-SIZE-FROM-NAME 16998 . 20538)) (20540 27970 ( +GLYPHS-BY-CHARSET 20540 . 27970)) (27972 29397 (PACKFILENAME.STRING 27972 . 29397)) (29399 36358 ( +READ-BDF 29399 . 36358)) (36360 36683 (READ-DELIMITED-LIST-FROM-STRING 36360 . 36683)) (36685 43176 ( +READ-GLYPH 36685 . 43176)) (43178 43919 (SPLIT-FONT-NAME 43178 . 43919)) (43921 47827 ( +WRITE-BDF-TO-DISPLAYFONT-FILES 43921 . 47827))))) IL:STOP diff --git a/lispusers/READ-BDF.DFASL b/lispusers/READ-BDF.DFASL index 3c3b384320b0b40c450b420b825eeb204cd0a3f6..927778eaf9838aafa5ba0d1b7cc9d57d42e6156d 100644 GIT binary patch delta 7890 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 delta 7224 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 I>+0421s#RH)c^nh diff --git a/lispusers/READ-BDF.TEDIT b/lispusers/READ-BDF.TEDIT index 8f6e2ec54277d7d0aa52a6e7c53c832eb004d43b..891c14cc161b6a178923a02d5d7af4e2a55e0467 100644 GIT binary patch delta 2044 zcmbtVO-~bH5T2K{C77cQPnJel|pd}rF3@=etqcBjugGxN+x+IO?x^B-R*8X6$opl@q zFb1*dv|%*CHpxy-UTtJ=ir=80YbJez-f}oSepIjL0iME4G#XD>L7<~AgT3R0T;9?4 zT;`re%V}-|Wtfee%Q~jL|4LKSGNk@hiL_HsQT_X7%=S;-XJgtZc3pscH z!Bh{suRRygVZI%Ij(b+xdLrErZbAD(&dbgRe%wnJAbDg=R7s@TOb6!E0`1Ya#GtaG zUx}nVFX+eJ?2j2%3aM7~N)IP@!75EKy3jyk8yZ%$qerWVAp~Z!wPQl$G$Pmyq7+94 zj^ivNs0t&;890Ro@)jBCL<8X-Mo0ptaB9d%qm~+A66wLmAR*D)p{@HENaMuqBq0+GzacT>X_x$x|h}tA~YCGL_@`I6uw9AZO$`{1}0l( zgtREA0`xH?>yTn~62K&Ly3xR5qzsD*M`kUEaAXu)7*5^Sm*}y2rT4ooB4Bz_wW~2- z7y*qgOhe;GIUfj#RI<-p=|HmY4tjZd>Nk1KgMQ|bFJh(XDdI%a$syXwB@Usx!w{KM z99@{Z7Y!^V{arbL(7?E3e4BzT6jWv|X+a%f4KX`m<#3frqMU|sXhNBjNS2Ebfpn%A zEf;Z(E66M>?-`P?4MtczccEm*=)uFmQGsRK^jDfKxPB&Am^QzRp6kv#jzfR06NWO9 UNiSq49_{>mZnn__pPqgG0~Z delta 1879 zcmb_bO>0w85S^RaYHM4yN^I1mH}zHWVp}S>5JBPf+e zyqmwivvTbBY+RFd*jpO%^<7>BZ*^5 zDxxyQV^u#6>R8Oo*vu0|PpM;`7xJc8$cCk43i{H9@9Wa7$_<@H{Eb^??`NtaXMRCg=!F+i^-WJ`hb_;#ixRAX=ko83M(l z-rHc~v-`cwT^pa;k7@7LX{K9iMz=fd=3>wyZ!fy}v9zj``M2cRv#JN@BmHo}_G>>G znzZLCLS_EwWiJJ*fMI*sj){rWjF^pLIR+8Ae9034au^7_vkndp(DzaMO@8&OUU9%7 z1gNp)kU0c^PdS7wKmvbYD|3EOOPzHj_JiXbBj#_h$3A(OPzW7Uka>ql$(BQoAVAg` zhe&roxfgC6V%!5ti(oR`I2i})*aat9((o`MbK_B?4qF8*o-aF{Wdsnr?+|u~tXv<7 z2TPJ-Lb~SC77!qfouQa;WCMZ-M+VeGIy>*L)|pqDSE5Yb%dLQr1rv>E1VDIRDE)~M zv+d>9(o)i6vQtZP)5|bTneSeax4g&#_TZP69s(6`g}l=UkSE?R3?V!WX8|&{hYTk@ zaaT6>iscFX({z~&bBOi%tjmLdjaw_=B%A+n|Ki%E&pq&_%AvNj((2v*acm23+) ZcmixqRf2AG^}){