-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHTMLSTREAM.HTML
More file actions
313 lines (312 loc) · 25 KB
/
HTMLSTREAM.HTML
File metadata and controls
313 lines (312 loc) · 25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
<title>{HTMLSTREAM}HTMLSTREAM.HTML;56</title>
<!-- Created by Medley Interlisp software. Details at interlisp.org. -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans&family=Noto+Sans+Simplified+Chinese&family=Noto+Sans+Traditional+Chinese&family=Noto+Sans+JP&family=Noto+Sans+KR&family=Noto+Sans+Arabic&family=Noto+Sans+Hebrew&family=Noto+Sans+Runic&family=Noto+Sans+Georgian&family=Noto+Sans+Armenian&family=Noto+Sans+Thai&family=Noto+Sans+Lao&family=Noto+Sans+Gurmukhi&family=Noto+Sans+Bengali&family=Noto+Sans+Math&family=Noto+Sans+Symbols&family=Noto+Sans+Symbols+2">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+Mono">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+Display">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif&family=Noto+Serif+Simplified+Chinese&family=Noto+Serif+Traditional+Chinese&family=Noto+Serif+JP&family=Noto+Serif+KR&family=Noto+Naskh+Arabic&family=Noto+Serif+Hebrew&family=Noto+Sans+Runic&family=Noto+Serif+Georgian&family=Noto+Serif+Armenian&family=Noto+Serif+Thai&family=Noto+Serif+Lao&family=Noto+Serif+Devanagari&family=Noto+Serif+Gurmukhi&family=Noto+Serif+Bengali&family=Noto+Sans+Math&family=Noto+Sans+Symbols&family=Noto+Sans+Symbols+2">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif+Display">
<script>
function singleQuote(fn) { return "'" + fn + "'"; }
const notoSans = ["Noto Sans","Noto Sans Simplified Chinese","Noto Sans Traditional Chinese","Noto Sans JP","Noto Sans KR","Noto Sans Arabic","Noto Sans Hebrew","Noto Sans Runic","Noto Sans Georgian","Noto Sans Armenian","Noto Sans Thai","Noto Sans Lao","Noto Sans Gurmukhi","Noto Sans Bengali","Noto Sans Math","Noto Sans Symbols","Noto Sans Symbols 2"].map(singleQuote).join(",");
const notoSansMono = ["Noto Sans Mono"].map(singleQuote).join(",");
const notoSansDisplay = ["Noto Sans Display"].map(singleQuote).join(",");
const notoSerif = ["Noto Serif","Noto Serif Simplified Chinese","Noto Serif Traditional Chinese","Noto Serif JP","Noto Serif KR","Noto Naskh Arabic","Noto Serif Hebrew","Noto Sans Runic","Noto Serif Georgian","Noto Serif Armenian","Noto Serif Thai","Noto Serif Lao","Noto Serif Devanagari","Noto Serif Gurmukhi","Noto Serif Bengali","Noto Sans Math","Noto Sans Symbols","Noto Sans Symbols 2"].map(singleQuote).join(",");
const notoSerifDisplay = ["Noto Serif Display"].map(singleQuote).join(",");
const sizes = [6, 8, 10, 12, 14, 16, 18, 20, 24, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 92, ];
const families = [notoSerifDisplay, notoSerif, notoSansDisplay, notoSansMono, notoSans, ];
const fontLoadPromises = [];
for (const family of families) {
for (const size of sizes) {
fontLoadPromises.push(document.fonts.load(size+"pt "+family));
}
}
Promise.all(fontLoadPromises).then(_ => { console.log('All fonts loaded');});
</script>
<style>
text { white-space: pre; }
.ns { font-family: 'Noto Sans', 'Noto Sans Simplified Chinese', 'Noto Sans Traditional Chinese', 'Noto Sans JP', 'Noto Sans KR', 'Noto Sans Arabic', 'Noto Sans Hebrew', 'Noto Sans Runic', 'Noto Sans Georgian', 'Noto Sans Armenian', 'Noto Sans Thai', 'Noto Sans Lao', 'Noto Sans Gurmukhi', 'Noto Sans Bengali', 'Noto Sans Math', 'Noto Sans Symbols', 'Noto Sans Symbols 2', sans-serif; }
.nsm { font-family: 'Noto Sans Mono', monospace; }
.nsd { font-family: 'Noto Sans Display', sans-serif; }
.nsf { font-family: 'Noto Serif', 'Noto Serif Simplified Chinese', 'Noto Serif Traditional Chinese', 'Noto Serif JP', 'Noto Serif KR', 'Noto Naskh Arabic', 'Noto Serif Hebrew', 'Noto Sans Runic', 'Noto Serif Georgian', 'Noto Serif Armenian', 'Noto Serif Thai', 'Noto Serif Lao', 'Noto Serif Devanagari', 'Noto Serif Gurmukhi', 'Noto Serif Bengali', 'Noto Sans Math', 'Noto Sans Symbols', 'Noto Sans Symbols 2', serif; }
.nsfd { font-family: 'Noto Serif Display', serif; }
.sz6 { font-size: 600pt; }
.sz8 { font-size: 800pt; }
.sz10 { font-size: 1000pt; }
.sz12 { font-size: 1200pt; }
.sz14 { font-size: 1400pt; }
.sz16 { font-size: 1600pt; }
.sz18 { font-size: 1800pt; }
.sz20 { font-size: 2000pt; }
.sz24 { font-size: 2400pt; }
.sz32 { font-size: 3200pt; }
.sz34 { font-size: 3400pt; }
.sz36 { font-size: 3600pt; }
.sz38 { font-size: 3800pt; }
.sz40 { font-size: 4000pt; }
.sz42 { font-size: 4200pt; }
.sz44 { font-size: 4400pt; }
.sz46 { font-size: 4600pt; }
.sz48 { font-size: 4800pt; }
.sz50 { font-size: 5000pt; }
.sz92 { font-size: 9200pt; }
.bold { font-weight: bold; }
.italic { font-style: italic; }
.capb { stroke-linecap: butt; }
.capr { stroke-linecap: round; }
.caps { stroke-linecap: square; }
.joinm { stroke-linejoin: miter; }
.joinr { stroke-linejoin: round; }
.joinb { stroke-linejoin: bevel; }
</style>
</head>
<body>
<svg width='612.0pt' height='792.0pt' viewBox='0 0 61200 79200' style='background-color: #FFFFFF;'>
<text class='ns sz14 bold' fill='#000000' x='7200' y='8825'>HTMLSTREAM</text>
<text class='ns sz8 italic' fill='#000000' x='7200' y='11635'>Herb Jellinek <jellinek@interlisp.org>, June 2025</text>
<text class='ns sz10' fill='#000000' x='7200' y='15089'>An implementation of the Medley Interlisp device-independent graphics </text>
<text class='ns sz10' fill='#000000' x='7200' y='16879'>API for HTML. This package makes it possible to print ("hardcopy") to a file </text>
<text class='ns sz10' fill='#000000' x='7200' y='18669'>with the extension </text>
<text class='nsm sz10' fill='#000000' x='19108' y='18669'>.html;</text>
<text class='ns sz10' fill='#000000' x='24248' y='18669'> the output will be formatted in HTML.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='22249'>Installation</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='25829'>Code</text>
<text class='ns sz10' fill='#000000' x='7200' y='29409'>Clone this project and copy </text>
<text class='nsm sz10' fill='#000000' x='24501' y='29409'>HTMLSTREAM.DFASL</text>
<text class='ns sz10' fill='#000000' x='37285' y='29409'>, </text>
<text class='nsm sz10' fill='#000000' x='37988' y='29409'>U-PNG.DFASL</text>
<text class='ns sz10' fill='#000000' x='46777' y='29409'>, </text>
<text class='nsm sz10' fill='#000000' x='7200' y='31199'>BASE64.DFASL</text>
<text class='ns sz10' fill='#000000' x='16788' y='31199'>, and optionally their Lisp source files, to a local directory </text>
<text class='ns sz10' fill='#000000' x='7200' y='32989'>accessible by Medley.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='36569'>Font metrics</text>
<text class='ns sz10' fill='#000000' x='7200' y='40149'>Clone the project HtmlStreamFontMetrics </text>
<text class='nsm sz10' fill='#000000' x='7200' y='41939'>(https://github.com/hjellinek/HtmlStreamFontMetrics</text>
<text class='ns sz10' fill='#000000' x='47949' y='41939'>) into </text>
<text class='ns sz10' fill='#000000' x='7200' y='43729'>another local directory, say </text>
<text class='nsm sz10' fill='#000000' x='7200' y='45519'>/Users/lisphacker/HtmlStreamFontMetrics</text>
<text class='ns sz10' fill='#000000' x='38361' y='45519'>.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='49099'>Running</text>
<text class='ns sz10' fill='#000000' x='7200' y='52679'>Load </text>
<text class='nsm sz10' fill='#000000' x='10616' y='52679'>HTMLSTREAM.DFASL</text>
<text class='ns sz10' fill='#000000' x='23746' y='52679'> into your running Medley system. Set the </text>
<text class='ns sz10' fill='#000000' x='7200' y='54469'>variable </text>
<text class='nsm sz10' fill='#000000' x='12523' y='54469'>*WEB-FONT-DIRECTORY*</text>
<text class='ns sz10' fill='#000000' x='28849' y='54469'> to the fonts subdirectory of the </text>
<text class='nsm sz10' fill='#000000' x='7200' y='56259'>HtmlStreamFontMetrics</text>
<text class='ns sz10' fill='#000000' x='24325' y='56259'> directory above, using Interlisp/Tenex syntax. </text>
<text class='ns sz10' fill='#000000' x='7200' y='58049'>In our example that would be </text>
<text class='nsm sz10' fill='#000000' x='7200' y='59839'>{DSK}/Users/lisphacker/HtmlStreamFontMetrics/fonts</text>
<text class='ns sz10' fill='#000000' x='47496' y='59839'> or </text>
<text class='nsm sz10' fill='#000000' x='7200' y='61629'>{DSK}<Users>lisphacker>HtmlStreamFontMetrics>fonts></text>
<text class='ns sz10' fill='#000000' x='47949' y='61629'>.</text>
<text class='ns sz10' fill='#000000' x='7200' y='65209'>Generate HTML output by "printing" to a file with the extension </text>
<text class='nsm sz10' fill='#000000' x='47082' y='65209'>html</text>
<text class='ns sz10' fill='#000000' x='50278' y='65209'>.</text>
<text class='ns sz10' fill='#000000' x='7200' y='68789'>You can open the resulting file in any modern Web browser. </text>
<text class='nsm sz10' fill='#000000' x='45401' y='68789'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='53737' y='68789'> </text>
<text class='ns sz10' fill='#000000' x='7200' y='70579'>adds a </text>
<text class='nsm sz10' fill='#000000' x='11662' y='70579'>SEE</text>
<text class='ns sz10' fill='#000000' x='14405' y='70579'> method to FileBrowser to allow you to view HTML files.</text>
</svg>
<svg width='612.0pt' height='792.0pt' viewBox='0 0 61200 79200' style='background-color: #FFFFFF;'>
<text class='ns sz10' fill='#000000' x='7200' y='3600'>2</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='10151'>Fonts</text>
<text class='nsm sz10' fill='#000000' x='7200' y='13731'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='15536' y='13731'> uses Google's Noto webfonts (see</text>
<text class='nsm sz10' fill='#000000' x='37469' y='13731'> </text>
<text class='nsm sz10' fill='#000000' x='7200' y='15521'>https://fonts.google.com/noto</text>
<text class='ns sz10' fill='#000000' x='30371' y='15521'>). The font metrics files describe the </text>
<text class='ns sz10' fill='#000000' x='7200' y='17311'>line height, max ascent, max descent, and character widths of all </text>
<text class='ns sz10' fill='#000000' x='7200' y='19101'>characters in the intersection of XCCS 3.0.0 and Unicode, segmented by </text>
<text class='ns sz10' fill='#000000' x='7200' y='20891'>XCCS charset.</text>
<text class='ns sz10' fill='#000000' x='7200' y='24471'>We generate the metrics files with the </text>
<text class='nsm sz10' fill='#000000' x='31270' y='24471'>WebFontMetrics</text>
<text class='ns sz10' fill='#000000' x='42802' y='24471'> </text>
<text class='nsm sz10' fill='#000000' x='7200' y='26261'>(https://github.com/hjellinek/WebFontMetrics</text>
<text class='ns sz10' fill='#000000' x='42356' y='26261'>) software I (hdj) </text>
<text class='ns sz10' fill='#000000' x='7200' y='28051'>wrote.</text>
<text class='nsm sz10' fill='#000000' x='7200' y='31631'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='15536' y='31631'> maps common Medley font names to Noto font names using </text>
<text class='ns sz10' fill='#000000' x='7200' y='33421'>the a-list </text>
<text class='nsm sz10' fill='#000000' x='12928' y='33421'>*WEB-FONT-MAPPINGS*</text>
<text class='ns sz10' fill='#000000' x='28109' y='33421'>.</text>
<text class='ns sz10' fill='#000000' x='7200' y='37001'>Your browser downloads and caches the webfonts the first time you open </text>
<text class='ns sz10' fill='#000000' x='7200' y='38791'>an </text>
<text class='nsm sz10' fill='#000000' x='9116' y='38791'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='17106' y='38791'>-generated HTML file, or another file that uses the same </text>
<text class='ns sz10' fill='#000000' x='7200' y='40581'>webfonts.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='43371'>Customization</text>
<text class='nsm sz10' fill='#000000' x='7200' y='46161'>HTMLFONTDIRECTORIES</text>
<text class='nsm sz10' fill='#000000' x='35210' y='46161'>[VARIABLE]</text>
<text class='ns sz10' fill='#000000' x='7200' y='48951'>A list containing the location of the font metrics files. In the example </text>
<text class='ns sz10' fill='#000000' x='7200' y='50741'>above, this is </text>
<text class='nsm sz10' fill='#000000' x='7200' y='52531'>({DSK}<Users>lisphacker>HtmlStreamFontMetrics>fonts>).</text>
<text class='nsm sz10' fill='#000000' x='7200' y='55321'>HTMLFONTCOERCIONS</text>
<text class='nsm sz10' fill='#000000' x='35210' y='55321'>[VARIABLE]</text>
<text class='ns sz10' fill='#000000' x='7200' y='58111'>Maps font specifications (e.g., </text>
<text class='nsm sz10' fill='#000000' x='26073' y='58111'>HELVETICA 5 MRR</text>
<text class='ns sz10' fill='#000000' x='38058' y='58111'>) to Web font names </text>
<text class='ns sz10' fill='#000000' x='7200' y='59901'>(e.g., </text>
<text class='nsm sz10' fill='#000000' x='10586' y='59901'>NOTO-SANS 6 MRR</text>
<text class='ns sz10' fill='#000000' x='22571' y='59901'>).</text>
<text class='nsm sz10' fill='#000000' x='7200' y='62691'>*HTML-DEBUG-FONTCREATE*</text>
<text class='nsm sz10' fill='#000000' x='35210' y='62691'>[VARIABLE]</text>
<text class='ns sz10' fill='#000000' x='7200' y='64481'>Set this to </text>
<text class='nsm sz10' fill='#000000' x='13773' y='64481'>T</text>
<text class='ns sz10' fill='#000000' x='14918' y='64481'> to permit the </text>
<text class='nsm sz10' fill='#000000' x='23488' y='64481'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='31824' y='64481'> font creation code to log what it's </text>
<text class='ns sz10' fill='#000000' x='7200' y='66271'>doing. Normally set to </text>
<text class='nsm sz10' fill='#000000' x='21781' y='66271'>NIL</text>
<text class='ns sz10' fill='#000000' x='24178' y='66271'>.</text>
<text class='nsm sz10' fill='#000000' x='7200' y='69061'>*HTML.DEFAULT-PAGE-REGION*</text>
<text class='nsm sz10' fill='#000000' x='35210' y='69061'>[VARIABLE]</text>
</svg>
<svg width='612.0pt' height='792.0pt' viewBox='0 0 61200 79200' style='background-color: #FFFFFF;'>
<text class='ns sz10' fill='#000000' x='53238' y='3600'>3</text>
<text class='ns sz10' fill='#000000' x='7200' y='8361'>The default page region, an Interlisp </text>
<text class='nsm sz10' fill='#000000' x='30367' y='8361'>REGION</text>
<text class='ns sz10' fill='#000000' x='35507' y='8361'> measured in centipoints </text>
<text class='ns sz10' fill='#000000' x='7200' y='10151'>(hundredths of a printer's point). See also </text>
<text class='nsm sz10' fill='#000000' x='33777' y='10151'>OPENIMAGESTREAM</text>
<text class='ns sz10' fill='#000000' x='46108' y='10151'> below.</text>
<text class='nsm sz10' fill='#000000' x='7200' y='12941'>(OPENIMAGESTREAM FILE 'HTML </text>
<text class='nsm sz10 italic' fill='#000000' x='29572' y='12941'>OPTIONS</text>
<text class='nsm sz10' fill='#000000' x='35165' y='12941'>)</text>
<text class='nsm sz10' fill='#000000' x='36264' y='12941'>[PARAMETER]</text>
<text class='nsm sz10' fill='#000000' x='7200' y='14731'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='15536' y='14731'> accepts several optional parameters, passed as properties of </text>
<text class='ns sz10' fill='#000000' x='7200' y='16521'>the </text>
<text class='nsm sz10' fill='#000000' x='9601' y='16521'>OPTIONS</text>
<text class='ns sz10' fill='#000000' x='15540' y='16521'> p-list parameter to the </text>
<text class='nsm sz10' fill='#000000' x='29961' y='16521'>OPENIMAGESTREAM</text>
<text class='ns sz10' fill='#000000' x='42292' y='16521'> function:</text>
<text class='nsm sz10' fill='#000000' x='7200' y='19311'>FONT</text>
<text class='ns sz10' fill='#000000' x='10742' y='19311'> - the stream's initial font.</text>
<text class='nsm sz10' fill='#000000' x='7200' y='22101'>TITLE</text>
<text class='ns sz10' fill='#000000' x='11541' y='22101'> - a string, the title to assign to the HTML document. </text>
<text class='nsm sz10' fill='#000000' x='44351' y='22101'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='52687' y='22101'> </text>
<text class='ns sz10' fill='#000000' x='7200' y='23891'>will escape characters that HTML considers special.</text>
<text class='nsm sz10' fill='#000000' x='7200' y='26681'>REGION</text>
<text class='ns sz10' fill='#000000' x='12340' y='26681'> - an Interlisp </text>
<text class='nsm sz10' fill='#000000' x='20576' y='26681'>REGION object</text>
<text class='ns sz10' fill='#000000' x='30963' y='26681'>, the default page region, in </text>
<text class='ns sz10' fill='#000000' x='7200' y='28471'>centipoints.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='32051'>Font families, faces, and sizes</text>
<text class='ns sz10' fill='#000000' x='7200' y='35631'>We define four font families:</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='39211'>Name</text>
<text class='ns sz10 bold' fill='#000000' x='21600' y='39211'>Description</text>
<text class='ns sz10 bold' fill='#000000' x='43200' y='39211'>Lisp font name</text>
<text class='ns sz10 italic' fill='#000000' x='7200' y='41001'>Noto Sans</text>
<text class='ns sz10' fill='#000000' x='21600' y='41001'>Noto "unmodulated" (sans-serif)</text>
<text class='nsm sz10' fill='#000000' x='43200' y='41001'>NOTO-SANS</text>
<text class='ns sz10 italic' fill='#000000' x='7200' y='42791'>Noto Sans Mono</text>
<text class='ns sz10' fill='#000000' x='21600' y='42791'>Noto monospaced unmodulated</text>
<text class='nsm sz10' fill='#000000' x='43200' y='42791'>NOTO-SANS-</text>
<text class='nsm sz10' fill='#000000' x='7200' y='44581'>MONO</text>
<text class='ns sz10 italic' fill='#000000' x='7200' y='46371'>Noto Sans Display</text>
<text class='ns sz10' fill='#000000' x='21600' y='46371'>Noto unmodulated display typeface (see </text>
<text class='nsm sz10' fill='#000000' x='7200' y='48161'>https://en.wikipedia.org/wiki/Display_typeface</text>
<text class='ns sz10' fill='#000000' x='43954' y='48161'>)</text>
<text class='nsm sz10' fill='#000000' x='43200' y='49951'>NOTO-DISPLAY</text>
<text class='ns sz10 italic' fill='#000000' x='7200' y='51741'>Noto Serif</text>
<text class='ns sz10' fill='#000000' x='21600' y='51741'>Noto "modulated" (serif)</text>
<text class='nsm sz10' fill='#000000' x='43200' y='51741'>NOTO-SERIF</text>
<text class='ns sz10 italic' fill='#000000' x='7200' y='53531'>Noto Serif Display</text>
<text class='ns sz10' fill='#000000' x='21600' y='53531'>Noto modulated display</text>
<text class='nsm sz10' fill='#000000' x='43200' y='53531'>NOTO-SERIF-</text>
<text class='nsm sz10' fill='#000000' x='7200' y='55321'>DISPLAY</text>
<text class='ns sz10' fill='#000000' x='7200' y='60691'>We've created four faces for each: plain, bold, italic, bold italic.</text>
<text class='ns sz10' fill='#000000' x='7200' y='64271'>Every family and face combination is available in 6, 8, 10, 12, 14, 16, 18, 20, </text>
<text class='ns sz10' fill='#000000' x='7200' y='66061'>24, 32, 40, 42, 44, 46, 48, 50, and 92 points. We've implemented font </text>
<text class='ns sz10' fill='#000000' x='7200' y='67851'>coercion rules to map common fonts into the ones we support (e.g., </text>
<text class='ns sz10' fill='#000000' x='7200' y='69641'>Terminal maps to Noto Sans Mono) . Point sizes less than 6 map to 6, odd </text>
</svg>
<svg width='612.0pt' height='792.0pt' viewBox='0 0 61200 79200' style='background-color: #FFFFFF;'>
<text class='ns sz10' fill='#000000' x='7200' y='3600'>4</text>
<text class='ns sz10' fill='#000000' x='7200' y='8361'>sizes map to the next even size (e.g., 7 maps to 8), sizes between 51 and 91 </text>
<text class='ns sz10' fill='#000000' x='7200' y='10151'>map to 50, and sizes greater than 92 map to 92.</text>
<text class='ns sz10' fill='#000000' x='7200' y='13731'>The default font for new streams is </text>
<text class='nsm sz10' fill='#000000' x='29394' y='13731'>NOTO-SANS 10 MRR</text>
<text class='ns sz10' fill='#000000' x='42178' y='13731'>.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='16521'>Supported character sets</text>
<text class='nsm sz10' fill='#000000' x='7200' y='20101'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='15536' y='20101'> can write all of the characters in the intersection of Xerox </text>
<text class='ns sz10' fill='#000000' x='7200' y='21891'>Character Code Standard (XCCS) 2-0 and Unicode 14.0.0. Writing a </text>
<text class='ns sz10' fill='#000000' x='7200' y='23681'>character that isn't present in that set produces the Unicode </text>
<text class='nsm sz10' fill='#000000' x='45139' y='23681'>REPLACEMENT </text>
<text class='nsm sz10' fill='#000000' x='7200' y='25471'>CHARACTER</text>
<text class='ns sz10' fill='#000000' x='14737' y='25471'> </text>
<text class='nsm sz10' fill='#000000' x='14737' y='25471'>U+FFFD</text>
<text class='ns sz10' fill='#000000' x='19531' y='25471'>.</text>
<text class='ns sz10 bold' fill='#000000' x='7200' y='28261'>Graphical operations</text>
<text class='nsm sz10' fill='#000000' x='7200' y='31841'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='15536' y='31841'> defines the </text>
<text class='nsm sz10' fill='#000000' x='22866' y='31841'>HTML</text>
<text class='ns sz10' fill='#000000' x='26408' y='31841'> output device and font types.</text>
<text class='ns sz10' fill='#000000' x='7200' y='35421'>It supports HLS, RGB, and named colors in the standard but as-yet </text>
<text class='ns sz10' fill='#000000' x='7200' y='37211'>undocumented way.</text>
<text class='nsm sz10' fill='#000000' x='7200' y='40791'>HTMLSTREAM</text>
<text class='ns sz10' fill='#000000' x='15536' y='40791'> implements the bulk of the Interlisp-D/Medley Device-</text>
<text class='ns sz10' fill='#000000' x='7200' y='42581'>Independent Graphics API, including these methods:</text>
<text class='nsm sz10' fill='#000000' x='7200' y='46361'>OUTCHARFN</text>
<text class='ns sz10' fill='#000000' x='14391' y='46161'>*</text>
<text class='nsm sz10' fill='#000000' x='7200' y='48151'>IMCLOSEFN</text>
<text class='nsm sz10' fill='#000000' x='7200' y='49941'>IMDRAWLINE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='51731'>IMDRAWCURVE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='53521'>IMDRAWCIRCLE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='55311'>IMDRAWELLIPSE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='57101'>IMFILLPOLYGON</text>
<text class='nsm sz10' fill='#000000' x='7200' y='58891'>IMDRAWPOLYGON</text>
<text class='nsm sz10' fill='#000000' x='7200' y='60681'>IMFILLCIRCLE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='62471'>IMBLTSHADE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='64261'>IMBITBLT</text>
<text class='nsm sz10' fill='#000000' x='7200' y='66051'>IMSCALEDBITBLT</text>
<text class='nsm sz10' fill='#000000' x='7200' y='67841'>IMMOVETO</text>
<text class='nsm sz10' fill='#000000' x='7200' y='69631'>IMCHARWIDTH</text>
</svg>
<svg width='612.0pt' height='792.0pt' viewBox='0 0 61200 79200' style='background-color: #FFFFFF;'>
<text class='ns sz10' fill='#000000' x='53238' y='3600'>5</text>
<text class='nsm sz10' fill='#000000' x='7200' y='8361'>IMNEWPAGE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='10151'>IMTERPRI</text>
<text class='nsm sz10' fill='#000000' x='7200' y='11941'>IMRESET</text>
<text class='nsm sz10' fill='#000000' x='7200' y='13731'>IMCLIPPINGREGION</text>
<text class='nsm sz10' fill='#000000' x='7200' y='15521'>IMXPOSITION</text>
<text class='nsm sz10' fill='#000000' x='7200' y='17311'>IMYPOSITION</text>
<text class='nsm sz10' fill='#000000' x='7200' y='19101'>IMFONT</text>
<text class='nsm sz10' fill='#000000' x='7200' y='20891'>IMLEFTMARGIN</text>
<text class='nsm sz10' fill='#000000' x='7200' y='22681'>IMRIGHTMARGIN</text>
<text class='nsm sz10' fill='#000000' x='7200' y='24471'>IMTOPMARGIN</text>
<text class='nsm sz10' fill='#000000' x='7200' y='26261'>IMBOTTOMMARGIN</text>
<text class='nsm sz10' fill='#000000' x='7200' y='28051'>IMLINEFEED</text>
<text class='nsm sz10' fill='#000000' x='7200' y='29841'>IMSCALE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='31631'>IMSPACEFACTOR</text>
<text class='nsm sz10' fill='#000000' x='7200' y='33421'>IMOPERATION</text>
<text class='nsm sz10' fill='#000000' x='7200' y='35211'>IMBACKCOLOR</text>
<text class='nsm sz10' fill='#000000' x='7200' y='37001'>IMCOLOR</text>
<text class='ns sz10' fill='#000000' x='7200' y='40581'>These methods are implemented as no-ops (#'</text>
<text class='nsm sz10' fill='#000000' x='36230' y='40581'>NILL</text>
<text class='ns sz10' fill='#000000' x='39426' y='40581'>):</text>
<text class='nsm sz10' fill='#000000' x='7200' y='44161'>IMWRITEPIXEL</text>
<text class='nsm sz10' fill='#000000' x='7200' y='45951'>IMROTATE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='47741'>IMTRANSLATE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='49531'>IMSCALE2</text>
<text class='nsm sz10' fill='#000000' x='7200' y='51321'>IMPUSHSTATE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='53111'>IMPOPSTATE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='54901'>IMDEFAULTSTATE</text>
<text class='nsm sz10' fill='#000000' x='7200' y='56691'>IMCHARWIDTHY</text>
<text class='nsm sz10' fill='#000000' x='7200' y='58481'>IMOPERATION</text>
<text class='ns sz10' fill='#000000' x='7200' y='62261'>(</text>
<text class='nsm sz10' fill='#000000' x='7599' y='62061'>*</text>
<text class='ns sz10' fill='#000000' x='8744' y='62261'> = not documented as part of the DIG API)</text>
</svg>
</body>
</html>