1
0
mirror of synced 2026-01-15 16:26:26 +00:00

Add a cache for FONTSAVAILABLE on files

Simplifies Sketch
This commit is contained in:
rmkaplan 2025-11-06 21:49:12 -08:00
parent 72251e34a6
commit 105bca7c1f
2 changed files with 102 additions and 98 deletions

View File

@ -1,13 +1,13 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "17-Oct-2025 19:43:25" {WMEDLEY}<sources>FONT.;621 286216
(FILECREATED " 6-Nov-2025 13:54:22" {WMEDLEY}<sources>FONT.;623 285863
:EDIT-BY rmk
:CHANGES-TO (VARS FONTCOMS)
(FNS MONOSPACEFONTP)
(FNS FONTSAVAILABLE)
:PREVIOUS-DATE "13-Oct-2025 21:33:14" {WMEDLEY}<sources>FONT.;620)
:PREVIOUS-DATE "20-Oct-2025 09:54:15" {WMEDLEY}<sources>FONT.;622)
(PRETTYCOMPRINT FONTCOMS)
@ -66,12 +66,12 @@
(FNS FONTSAVAILABLE FONTEXISTS? \SEARCHFONTFILES FLUSHFONTSINCORE FINDFONTFILES SORTFONTSPECS
)
(FNS MATCHFONTFACE MAKEFONTFACE FONTFACETOATOM)
(INITVARS \FONTSINCORE \FONTEXISTS?-CACHE \DEFAULTDEVICEFONTS)
(INITVARS \FONTSINCORE \FONTEXISTS?-CACHE \FONTSAVAILABLEFILECACHE \DEFAULTDEVICEFONTS)
[COMS (GLOBALVARS \DEFAULTDEVICEFONTS \UNITWIDTHSVECTOR)
(INITVARS \UNITWIDTHSVECTOR)
(FNS \UNITWIDTHSVECTOR)
(DECLARE%: DONTEVAL@LOAD DOCOPY (P (\UNITWIDTHSVECTOR]
(DECLARE%: DONTCOPY (EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO FONTSPEC)
(DECLARE%: DONTCOPY [EXPORT (RECORDS FONTCLASS FONTDESCRIPTOR FONTFACE CHARSETINFO FONTSPEC)
(MACROS FONTASCENT FONTDESCENT FONTHEIGHT \FGETOFFSET \FSETOFFSET
\FGETWIDTH \FSETWIDTH \FGETCHARWIDTH \FSETCHARWIDTH
\FGETIMAGEWIDTH \FSETIMAGEWIDTH)
@ -79,8 +79,7 @@
\CREATECSINFOELEMENT \CREATEFONTCHARSETVECTOR CHARSETPROP)
(PROP ARGNAMES CHARSETPROP)
(CONSTANTS (SLUGCHARINDEX (ADD1 \MAXTHINCHAR))
(SLUGCHARSET (ADD1 \MAXCHARSET)))
(MACROS LEGACYFONTS))
(SLUGCHARSET (ADD1 \MAXCHARSET]
(MACROS INDIRECTCHARSETP))
(FNS FONTDESCRIPTOR.DEFPRINT FONTCLASS.DEFPRINT)
(INITRECORDS FONTCLASS FONTDESCRIPTOR CHARSETINFO)
@ -2795,7 +2794,8 @@
(DEFINEQ
(FONTSAVAILABLE
[LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* ; "Edited 25-Sep-2025 18:39 by rmk")
[LAMBDA (FAMILY SIZE FACE ROTATION DEVICE CHECKFILESTOO?) (* ; "Edited 6-Nov-2025 13:50 by rmk")
(* ; "Edited 25-Sep-2025 18:39 by rmk")
(* ; "Edited 30-Aug-2025 13:55 by rmk")
(* ; "Edited 28-Aug-2025 14:43 by rmk")
(* ; "Edited 23-Aug-2025 10:51 by rmk")
@ -2810,48 +2810,63 @@
(* ;;; "returns a list of the fonts fitting a description that are available. FAMILY SIZE FACE or ROTATION can be * which means get them all. if CHECKFILESTOO? is NIL, only fonts in core will be considered. If ONLY, fonts in memory will be ignored. ")
(DECLARE (GLOBALVARS \FONTSINCORE))
(LET ((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE)))
(if (EQ '* (fetch (FONTSPEC FSDEVICE) of FONTSPEC))
then
(* ;;
(DECLARE (GLOBALVARS \FONTSINCORE \FONTSAVAILABLEFILECACHE))
(LET
((FONTSPEC (\FONT.CHECKARGS FAMILY SIZE FACE ROTATION DEVICE))
FILEFONTS)
(if (EQ '* (fetch (FONTSPEC FSDEVICE) of FONTSPEC))
then
(* ;;
 "The results for each device will be grouped together, because the sort happens in the clause below")
(for I in IMAGESTREAMTYPES join (FONTSAVAILABLE FONTSPEC NIL NIL NIL (CAR I)
CHECKFILESTOO?))
else (SPREADFONTSPEC FONTSPEC) (* ; "For easier matching code")
(SORTFONTSPECS (UNION (CL:UNLESS (EQ 'ONLY CHECKFILESTOO?)
[COLLECTMULTI \FONTSINCORE
(FUNCTION (LAMBDA (FM S FC R D FONT)
(DECLARE (USEDFREE $$COLLECT))
(CL:WHEN
[AND (OR (EQ FAMILY FM)
(EQ FAMILY '*))
(OR (EQ SIZE S)
(EQ SIZE '*))
(MATCHFONTFACE FACE FC)
(OR (EQ ROTATION R)
(EQ ROTATION '*))
(OR (EQ DEVICE D)
(EQ DEVICE '*]
(push $$COLLECT
(create FONTSPEC
FSFAMILY _ FM
FSSIZE _ S
FSFACE _ FC
FSROTATION _ R
FSDEVICE _ D)))])
(CL:WHEN CHECKFILESTOO?(* ;
(for I in IMAGESTREAMTYPES join (FONTSAVAILABLE FONTSPEC NIL NIL NIL (CAR I)
CHECKFILESTOO?))
else
(SPREADFONTSPEC FONTSPEC) (* ; "For easier matching code")
(SORTFONTSPECS
(UNION (CL:UNLESS (EQ 'ONLY CHECKFILESTOO?)
[COLLECTMULTI \FONTSINCORE
(FUNCTION (LAMBDA (FM S FC R D FONT)
(DECLARE (USEDFREE $$COLLECT))
(CL:WHEN [AND (OR (EQ FAMILY FM)
(EQ FAMILY '*))
(OR (EQ SIZE S)
(EQ SIZE '*))
(MATCHFONTFACE FACE FC)
(OR (EQ ROTATION R)
(EQ ROTATION '*))
(OR (EQ DEVICE D)
(EQ DEVICE '*]
(push $$COLLECT
(create FONTSPEC
FSFAMILY _ FM
FSSIZE _ S
FSFACE _ FC
FSROTATION _ R
FSDEVICE _ D)))])
(CL:WHEN CHECKFILESTOO? (* ;
 "apply the device font lookup function.")
(LET [(FN (OR (CAR (GETMULTI IMAGESTREAMTYPES DEVICE
'FONTSAVAILABLE))
(FUNCTION \SEARCHFONTFILES]
(SETQ FILEFONTS (SGETMULTI \FONTSAVAILABLEFILECACHE FAMILY SIZE FACE ROTATION
DEVICE))
(* ;; "Until all the device functions take a FONTSPEC")
(* ;; "APPEND the cache value because of the SORT")
(CL:IF (EQ 1 (NARGS FN))
(APPLY* FN FONTSPEC)
(APPLY* FN FAMILY SIZE FACE ROTATION DEVICE))))])
(APPEND (if (NULL FILEFONTS)
then (LET [(FN (OR (CAR (GETMULTI IMAGESTREAMTYPES DEVICE
'FONTSAVAILABLE))
(FUNCTION \SEARCHFONTFILES]
(* ;; "Until all the device functions take a FONTSPEC")
(SETQ FILEFONTS (CL:IF (EQ 1 (NARGS FN))
(APPLY* FN FONTSPEC)
(APPLY* FN FAMILY SIZE FACE ROTATION
DEVICE)))
(SPUTMULTI \FONTSAVAILABLEFILECACHE FAMILY SIZE FACE
ROTATION DEVICE (OR FILEFONTS 'NONE))
FILEFONTS)
elseif (NEQ FILEFONTS 'NONE)
then FILEFONTS)))])
(FONTEXISTS?
[LAMBDA (FAMILY SIZE FACE ROTATION DEVICE NOCOERCIONS) (* ; "Edited 26-Sep-2025 10:10 by rmk")
@ -3154,6 +3169,8 @@
(RPAQ? \FONTEXISTS?-CACHE NIL)
(RPAQ? \FONTSAVAILABLEFILECACHE NIL)
(RPAQ? \DEFAULTDEVICEFONTS NIL)
(DECLARE%: DOEVAL@COMPILE DONTCOPY
@ -3422,19 +3439,6 @@
(CONSTANTS (SLUGCHARINDEX (ADD1 \MAXTHINCHAR))
(SLUGCHARSET (ADD1 \MAXCHARSET)))
)
(DECLARE%: EVAL@COMPILE
(PUTPROPS LEGACYFONTS MACRO ((F . FORMS) (* ;
 "Execute FORMS in a legacy font environment")
(RESETLST
(RESETSAVE \FONTSINCORE NIL)
(RESETSAVE \FONTEXISTS?-CACHE)
(RESETSAVE DISPLAYFONTCOERCIONS)
(RESETSAVE DISPLAYCHARCOERCIONS)
(RESETSAVE DISPLAYFONTEXTENSIONS '(DISPLAYFONT))
(RESETSAVE DISPLAYFONTDIRECTORIES (MEDLEYDIR "fonts>displayfonts>"))
(PROGN F . FORMS))))
)
(* "END EXPORTED DEFINITIONS")
@ -4650,44 +4654,44 @@
(ADDTOVAR LAMA FONTCOPY)
)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (12132 21845 (CHARWIDTH 12142 . 12927) (CHARWIDTHY 12929 . 14446) (STRINGWIDTH 14448 .
15541) (\CHARWIDTH.DISPLAY 15543 . 15956) (\STRINGWIDTH.DISPLAY 15958 . 16382) (\STRINGWIDTH.GENERIC
16384 . 21843)) (21846 28366 (DEFAULTFONT 21856 . 23141) (FONTCLASS 23143 . 25305) (FONTCLASSUNPARSE
25307 . 26206) (FONTCLASSCOMPONENT 26208 . 26796) (SETFONTCLASSCOMPONENT 26798 . 27240) (
GETFONTCLASSCOMPONENT 27242 . 28364)) (30045 54426 (FONTCREATE 30055 . 33300) (FONTCREATE1 33302 .
35917) (FONTCREATE.SLUGFD 35919 . 37401) (\FONT.CHECKARGS 37403 . 43993) (\FONT.CHECKARGS1 43995 .
48518) (\FONTCREATE1.NOFN 48520 . 48734) (FONTFILEP 48736 . 49624) (\READCHARSET 49626 . 54424)) (
54427 61344 (\FONT.CHECKARGS 54437 . 61027) (\CHARSET.CHECK 61029 . 61342)) (61345 64428 (
COERCEFONTSPEC 61355 . 64426)) (66498 67288 (MAKEFONTSPEC 66508 . 67286)) (67289 75466 (COMPLETE.FONT
67299 . 69822) (COMPLETEFONTP 69824 . 70447) (COMPLETE.CHARSET 70449 . 73134) (PRUNESLUGCSINFOS 73136
. 74061) (MONOSPACEFONTP 74063 . 75464)) (75505 83426 (FONTASCENT 75515 . 75899) (FONTDESCENT 75901
. 76386) (FONTHEIGHT 76388 . 76790) (FONTPROP 76792 . 82703) (\AVGCHARWIDTH 82705 . 83424)) (84083
84991 (FONTDEVICEPROP 84093 . 84989)) (85037 85891 (EDITCHAR 85047 . 85889)) (85937 98127 (
GETCHARBITMAP 85947 . 87071) (PUTCHARBITMAP 87073 . 89231) (\GETCHARBITMAP.CSINFO 89233 . 91249) (
\PUTCHARBITMAP.CSINFO 91251 . 98125)) (98128 118608 (MOVECHARBITMAP 98138 . 100032) (MOVEFONTCHARS
100034 . 103994) (\MOVEFONTCHAR 103996 . 108839) (\MOVEFONTCHARS.SOURCEDATA 108841 . 114946) (
\MAKESLUGCHAR 114948 . 117483) (SLUGCHARP.DISPLAY 117485 . 118606)) (119541 139679 (FONTFILES 119551
. 121384) (\FINDFONTFILE 121386 . 123103) (\FONTFILENAMES 123105 . 124100) (\FONTFILENAME 124102 .
128085) (\FONTFILENAME.OLD 128087 . 131036) (\FONTFILENAME.NEW 131038 . 133295) (FONTSPECFROMFILENAME
133297 . 137398) (\FONTINFOFROMFILENAME.OLD 137400 . 139677)) (139946 175749 (FONTCOPY 139956 . 145019
) (FONTP 145021 . 145320) (FONTUNPARSE 145322 . 147041) (SETFONTDESCRIPTOR 147043 . 148507) (
\STREAMCHARWIDTH 148509 . 152673) (\COERCECHARSET 152675 . 155270) (\BUILDSLUGCSINFO 155272 . 158895)
(\FONTSYMBOL 158897 . 159547) (\DEVICESYMBOL 159549 . 160418) (\FONTFACE 160420 . 167610) (
\FONTFACE.COLOR 167612 . 174532) (SETFONTCHARENCODING 174534 . 175747)) (175750 196301 (FONTSAVAILABLE
175760 . 180615) (FONTEXISTS? 180617 . 184595) (\SEARCHFONTFILES 184597 . 187682) (FLUSHFONTSINCORE
187684 . 190857) (FINDFONTFILES 190859 . 194073) (SORTFONTSPECS 194075 . 196299)) (196302 199725 (
MATCHFONTFACE 196312 . 197127) (MAKEFONTFACE 197129 . 197969) (FONTFACETOATOM 197971 . 199723)) (
199953 200445 (\UNITWIDTHSVECTOR 199963 . 200443)) (215788 217855 (FONTDESCRIPTOR.DEFPRINT 215798 .
217377) (FONTCLASS.DEFPRINT 217379 . 217853)) (221684 224474 (\CREATEKERNELEMENT 221694 . 222052) (
\FSETLEFTKERN 222054 . 222545) (\FGETLEFTKERN 222547 . 224472)) (224475 234111 (\CREATEFONT 224485 .
225924) (\CREATECHARSET 225926 . 229862) (\INSTALLCHARSETINFO 229864 . 233198) (
\INSTALLCHARSETINFO.CHARENCODING 233200 . 234109)) (234433 235797 (\FONTRESETCHARWIDTHS 234443 .
235795)) (236427 246474 (\CREATEDISPLAYFONT 236437 . 238286) (\CREATECHARSET.DISPLAY 238288 . 243997)
(\FONTEXISTS?.DISPLAY 243999 . 246472)) (246475 261340 (STRIKEFONT.FILEP 246485 . 247373) (
STRIKEFONT.GETCHARSET 247375 . 252967) (WRITESTRIKEFONTFILE 252969 . 257880) (STRIKECSINFO 257882 .
261338)) (261371 277688 (MAKEBOLD.CHARSET 261381 . 265030) (MAKEBOLD.CHAR 265032 . 266784) (
MAKEITALIC.CHARSET 266786 . 270459) (MAKEITALIC.CHAR 270461 . 272807) (\SFMAKEBOLD 272809 . 275033) (
\SFMAKEITALIC 275035 . 277686)) (277689 281838 (\SFMAKEROTATEDFONT 277699 . 279100) (\SFROTATECSINFO
279102 . 279739) (\SFROTATEFONTCHARACTERS 279741 . 280121) (\SFROTATECSINFOOFFSETS 280123 . 281836)) (
281839 283220 (\SFMAKECOLOR 281849 . 283218)))))
(FILEMAP (NIL (12098 21811 (CHARWIDTH 12108 . 12893) (CHARWIDTHY 12895 . 14412) (STRINGWIDTH 14414 .
15507) (\CHARWIDTH.DISPLAY 15509 . 15922) (\STRINGWIDTH.DISPLAY 15924 . 16348) (\STRINGWIDTH.GENERIC
16350 . 21809)) (21812 28332 (DEFAULTFONT 21822 . 23107) (FONTCLASS 23109 . 25271) (FONTCLASSUNPARSE
25273 . 26172) (FONTCLASSCOMPONENT 26174 . 26762) (SETFONTCLASSCOMPONENT 26764 . 27206) (
GETFONTCLASSCOMPONENT 27208 . 28330)) (30011 54392 (FONTCREATE 30021 . 33266) (FONTCREATE1 33268 .
35883) (FONTCREATE.SLUGFD 35885 . 37367) (\FONT.CHECKARGS 37369 . 43959) (\FONT.CHECKARGS1 43961 .
48484) (\FONTCREATE1.NOFN 48486 . 48700) (FONTFILEP 48702 . 49590) (\READCHARSET 49592 . 54390)) (
54393 61310 (\FONT.CHECKARGS 54403 . 60993) (\CHARSET.CHECK 60995 . 61308)) (61311 64394 (
COERCEFONTSPEC 61321 . 64392)) (66464 67254 (MAKEFONTSPEC 66474 . 67252)) (67255 75432 (COMPLETE.FONT
67265 . 69788) (COMPLETEFONTP 69790 . 70413) (COMPLETE.CHARSET 70415 . 73100) (PRUNESLUGCSINFOS 73102
. 74027) (MONOSPACEFONTP 74029 . 75430)) (75471 83392 (FONTASCENT 75481 . 75865) (FONTDESCENT 75867
. 76352) (FONTHEIGHT 76354 . 76756) (FONTPROP 76758 . 82669) (\AVGCHARWIDTH 82671 . 83390)) (84049
84957 (FONTDEVICEPROP 84059 . 84955)) (85003 85857 (EDITCHAR 85013 . 85855)) (85903 98093 (
GETCHARBITMAP 85913 . 87037) (PUTCHARBITMAP 87039 . 89197) (\GETCHARBITMAP.CSINFO 89199 . 91215) (
\PUTCHARBITMAP.CSINFO 91217 . 98091)) (98094 118574 (MOVECHARBITMAP 98104 . 99998) (MOVEFONTCHARS
100000 . 103960) (\MOVEFONTCHAR 103962 . 108805) (\MOVEFONTCHARS.SOURCEDATA 108807 . 114912) (
\MAKESLUGCHAR 114914 . 117449) (SLUGCHARP.DISPLAY 117451 . 118572)) (119507 139645 (FONTFILES 119517
. 121350) (\FINDFONTFILE 121352 . 123069) (\FONTFILENAMES 123071 . 124066) (\FONTFILENAME 124068 .
128051) (\FONTFILENAME.OLD 128053 . 131002) (\FONTFILENAME.NEW 131004 . 133261) (FONTSPECFROMFILENAME
133263 . 137364) (\FONTINFOFROMFILENAME.OLD 137366 . 139643)) (139912 175715 (FONTCOPY 139922 . 144985
) (FONTP 144987 . 145286) (FONTUNPARSE 145288 . 147007) (SETFONTDESCRIPTOR 147009 . 148473) (
\STREAMCHARWIDTH 148475 . 152639) (\COERCECHARSET 152641 . 155236) (\BUILDSLUGCSINFO 155238 . 158861)
(\FONTSYMBOL 158863 . 159513) (\DEVICESYMBOL 159515 . 160384) (\FONTFACE 160386 . 167576) (
\FONTFACE.COLOR 167578 . 174498) (SETFONTCHARENCODING 174500 . 175713)) (175716 196655 (FONTSAVAILABLE
175726 . 180969) (FONTEXISTS? 180971 . 184949) (\SEARCHFONTFILES 184951 . 188036) (FLUSHFONTSINCORE
188038 . 191211) (FINDFONTFILES 191213 . 194427) (SORTFONTSPECS 194429 . 196653)) (196656 200079 (
MATCHFONTFACE 196666 . 197481) (MAKEFONTFACE 197483 . 198323) (FONTFACETOATOM 198325 . 200077)) (
200349 200841 (\UNITWIDTHSVECTOR 200359 . 200839)) (215435 217502 (FONTDESCRIPTOR.DEFPRINT 215445 .
217024) (FONTCLASS.DEFPRINT 217026 . 217500)) (221331 224121 (\CREATEKERNELEMENT 221341 . 221699) (
\FSETLEFTKERN 221701 . 222192) (\FGETLEFTKERN 222194 . 224119)) (224122 233758 (\CREATEFONT 224132 .
225571) (\CREATECHARSET 225573 . 229509) (\INSTALLCHARSETINFO 229511 . 232845) (
\INSTALLCHARSETINFO.CHARENCODING 232847 . 233756)) (234080 235444 (\FONTRESETCHARWIDTHS 234090 .
235442)) (236074 246121 (\CREATEDISPLAYFONT 236084 . 237933) (\CREATECHARSET.DISPLAY 237935 . 243644)
(\FONTEXISTS?.DISPLAY 243646 . 246119)) (246122 260987 (STRIKEFONT.FILEP 246132 . 247020) (
STRIKEFONT.GETCHARSET 247022 . 252614) (WRITESTRIKEFONTFILE 252616 . 257527) (STRIKECSINFO 257529 .
260985)) (261018 277335 (MAKEBOLD.CHARSET 261028 . 264677) (MAKEBOLD.CHAR 264679 . 266431) (
MAKEITALIC.CHARSET 266433 . 270106) (MAKEITALIC.CHAR 270108 . 272454) (\SFMAKEBOLD 272456 . 274680) (
\SFMAKEITALIC 274682 . 277333)) (277336 281485 (\SFMAKEROTATEDFONT 277346 . 278747) (\SFROTATECSINFO
278749 . 279386) (\SFROTATEFONTCHARACTERS 279388 . 279768) (\SFROTATECSINFOOFFSETS 279770 . 281483)) (
281486 282867 (\SFMAKECOLOR 281496 . 282865)))))
STOP

Binary file not shown.