-
Notifications
You must be signed in to change notification settings - Fork 2
/
ufo2otf-makes-otfs-webfonts-and-css-from-ufo.html
636 lines (409 loc) · 37 KB
/
ufo2otf-makes-otfs-webfonts-and-css-from-ufo.html
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
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=510">
<link rel="stylesheet" href="/and/style/in/reset.css" type="text/css" />
<link rel="stylesheet" href="/and/style/in/grid.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="/and/style/in/bnf.css" />
<link rel="start" href="/and/" title="Home" />
<link rel="alternate" type="application/atom+xml" title="Recent Entries" href="/and/feed/us/recent_entries.xml" />
<script type="text/javascript" src="/and/scripts/being/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/and/scripts/being/scripts.js"></script>
<title>I like tight pants and ufo2otf makes otf’s, webfonts and css from ufo’s</title>
<meta property="og:title dc:title" content="I like tight pants and ufo2otf makes otf’s, webfonts and css from ufo’s"/>
<meta property="og:type" content="article"/>
<meta property="og:url" content="http://i.liketightpants.net/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo"/>
<meta property="og:image" content="http://i.liketightpants.net/and/assets/called/ufo2otf.png"/>
<meta property="og:site_name" content="I like tight pants and mathematics"/>
<meta property="og:description dc:description"
content="ufo2otf is a command line utility that takes UFO font sources and generates OTF’s and webfonts."/>
<meta name="description"
content="ufo2otf is a command line utility that takes UFO font sources and generates OTF’s and webfonts."/>
<meta property="fb:admins" content="1488294875"/>
<meta property="mt:entry_basename" content="ufo2otf-makes-otfs-webfonts-and-css-from-ufo" />
<meta property="dc:modified" content="2013-11-17T13:21:12" />
</head>
<body>
<div id="header" class="container_7">
<div class="grid_2">
<h1><a href="/and/">i . like tight pants . net</a></h1>
</div>
<div class="grid_3">
<ul>
<li ><a href="/and/hybrid-publishing-back-to-the-future-publishing-theses-at-the-kabk">latest</a></li>
<li><a href="/and/about">about</a></li>
<li ><a href="/and/archives">index</a></li>
</ul>
</div>
<div class="grid_2">
<p class="byline" id="recent_entries">New entries published Monday and Thursday, 22:00 CET (<a href="/and/feed/us/recent_entries.xml">RSS</a>)</p>
</div>
</div>
<div id="content" class="container_7">
<div class="sidebar grid_1">
<img src="/and/assets/that/are/pictures/of/author/bnf.png" style="width:100px;height:100px;" alt="" />
<h4 class="author" property="dc:created" content="2013-11-05T20:57:07">November 5, 2013</h4>
<h4 class="author">by <span property="dc:creator">bnf</span></h4>
<p> </p>
<hr />
<h4>Other articles by bnf</h4>
<dl>
<dt><a href="/and/it-might-be-a-unix-sin-but-i-would-like-you-to-add-dot-t-x-t-as-the-extension-of-your-readme-file">It Might Be a Unix Sin But I Would Like You to Add .txt As the Extension of Your README file</a></dt>
<dd>April 30, 2013 7:51 PM</dd>
<dt><a href="/and/programmatically-manipulating-typefaces">Programmatically manipulating typefaces</a></dt>
<dd>May 2, 2012 11:43 AM</dd>
<dt><a href="/and/downloading-funghi">Downloading funghi, from Wikimedia Commons</a></dt>
<dd>February 3, 2012 5:36 PM</dd>
<dt><a href="/and/absolute-beginners-unix-for-art-students-part-2">Absolute Beginners: Unix for Art Students – Part 2</a></dt>
<dd>December 2, 2011 1:16 AM</dd>
<dt><a href="/and/vector-pixels">Vector pixels</a></dt>
<dd>November 25, 2011 4:14 PM</dd>
</dl>
<h4>bnf’s comments</h4>
<ul>
<li>Dear Ned, thanks for your reaction, and the link to ... <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-317" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
<li>As a programmer, what I find more worrying is that ... <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-311" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
<li>Welcome <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-310" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
<li>Comparatively, the offer of WYSIWYG libraries is meagre. Luckily, the ... <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-307" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
<li>Good call. So I should add a part to the ... <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-271" title="full comment on: ufo2otf Makes OTF’s, Webfonts and CSS From UFO’s">read more</a></li>
<li>By the way, a related project (that might make ufo2otf ... <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-269" title="full comment on: ufo2otf Makes OTF’s, Webfonts and CSS From UFO’s">read more</a></li>
<li>Never mind, I have found a solution more easy still. ... <a href="/and/48-hours-of-writing-stylesheets-with-etherpad-and-a-gong#comment-268" title="full comment on: 48 Hours of Writing Stylesheets with Etherpad and a Gong">read more</a></li>
<li>In PHP, it would be something like this:<?php header("Content-type: text/css"); ... <a href="/and/48-hours-of-writing-stylesheets-with-etherpad-and-a-gong#comment-267" title="full comment on: 48 Hours of Writing Stylesheets with Etherpad and a Gong">read more</a></li>
<li>With PHP, there still exists some link between the urls ... <a href="/and/48-hours-of-writing-stylesheets-with-etherpad-and-a-gong#comment-263" title="full comment on: 48 Hours of Writing Stylesheets with Etherpad and a Gong">read more</a></li>
<li>hh <a href="/and/no-one-starts-from-scratch-type-design-and-the-logic-of-the-fork#comment-254" title="full comment on: No-one Starts From Scratch: Type Design and the Logic of the Fork">read more</a></li>
</ul>
<hr />
<h4>Other writers</h4>
<ul>
<li>glit</li>
<li>jenseits</li>
<li>habitus</li>
<li>tellyou</li>
<li>baseline</li>
<li>bnf</li>
</ul>
</div>
<div class="post grid_5">
<p class="byline">
<a href="/and/who-makes-standards">Previous</a>
/ <a href="/and/hybrid-publishing-back-to-the-future-publishing-theses-at-the-kabk">Next</a>
</p>
<div class="article grid_3 alpha omega suffix_2">
<h4 property="mt:entry_title">ufo2otf Makes OTF’s, Webfonts and CSS From UFO’s</h4>
<article property="mt:entry_id" content="86" class="entry" id="entry-86">
<p style="">
<object type="image/svg+xml" style="width:830px;height:830px;" data="/and/assets/called/ufo2otf.svg">
<img src="/and/assets/called/ufo2otf.png" style="width:830px;height:830px;" alt="A greyish starry night with a baby blue ufo shining its purple light downwards, projecting an uppercase A, slab serif.">
</object>
</p>
<p style="" class="byline">ufo2otf logo by <a href="http://designed.with.meteor.com/by" class="aloha-link-text" style="">Loraine Furter</a> and baseline</p>
<h4><span style="font-size: 14px;"></span>Introducing ufo2otf</h4>
<p style=""><a href="http://github.com/fonts/ufo2otf" class="aloha-link-text" target="_self" title="fonts/ufo2otf" style="font-size: 14px;"><code>ufo2otf</code></a><span style="font-size: 14px;"> is a command line utility that takes <a href="/and/how-it-has-come-about-that-code-hosting-site-github-offers-visualisations-of-typeface-development" class="aloha-link-text" style="" target="_self" title="I like tight pants and how it has come about that code hosting site github offers visualisations of typeface development">UFO font sources</a> and generates OTF’s and webfonts. It helps you to translate as quickly as possible your font editor’s working files into fonts one can use and install, on one’s own system, and on the web.</span></p>
<p style="">Especially if you are following tellyou’s lead and <a href="/and/release-early-release-often-version-numbers-for-typefaces" class="aloha-link-text" style="" target="_self" title="I like tight pants and release early release often version numbers for typefaces">releasing your fonts early and often</a>, you can profit from automating this process. </p>
<h4>Installation</h4>
<p>Installing <code>ufo2otf</code> is quite easy. Well, you have to use the command line, but since <code>ufo2otf</code> itself runs on the command line, that is fair game. It is <a href="http://i.liketightpants.net/and/absolute-beginners-unix-for-art-students-part-1" class="aloha-link-text" target="_self" style="" title="I like tight pants and absolute beginners: unix for art students – part 1">a good idea to learn about the command line</a>.</p>
<p>On a Mac, you can install it like this:</p>
<pre>sudo easy_install ufo2otf</pre>
<p class="byline">(On Ubuntu, you might need to do <code style="
font-size: 11px;
">sudo apt-get install python-setuptools</code> before that will work).</p>
<h4></h4>
<h4>Usage</h4>
<p>Then, you can run <code>ufo2otf</code> and have it tell you if you have got all the dependencies set up:</p>
<pre style="">ufo2otf --diagnostics </pre>
<p>If everything works, and the folder in which you find yourself, you can create an otf as such:</p>
<pre>ufo2otf NimbusSanL-Regu.ufo</pre>
<p>Which will create <code>NimbusSanL-Regu.otf</code>. You can also create multiple otf’s by passing multiple arguments:</p>
<pre>ufo2otf NimbusSanL-Regu.ufo NimbusSanL-ReguItal.ufo</pre>
<p>Which creates <code>NimbusSanL-Regu.otf</code> and <code>NimbusSanL-ReguItal.otf</code>. To also generate webfonts we pass the option <code>--webfonts</code>:</p>
<pre>ufo2otf NimbusSanL-Regu.ufo NimbusSanL-ReguItal.ufo --webfonts</pre>
<p>Which will additionaly create a webfonts folder with ttf, eot and woff versions of the fonts, and a css stylesheet that links the different versions together.</p>
<p>From the command line there is even a way in which you can run it for all the ufos in the current folder. This is what I did when I created the webfonts and stylesheet for the article on <a href="/and/i-need-my-generic-font-medicine" class="" target="_self" style="" title="I like tight pants and i need my generic font medicine">the GhostScript fonts</a>:</p>
<pre>ufo2otf *.ufo --webfonts<br></pre>
<h4>Font compilers</h4>
<p style="">Traditionally, computer programs are written in a language like C, which is readable to (some) humans, and then compiled to machine code, which is readable to the computer. The program that takes care of this step is called the compiler.</p>
<p style="">If you have a set of <a href="http://i.liketightpants.net/and/how-it-has-come-about-that-code-hosting-site-github-offers-visualisations-of-typeface-development" class="aloha-link-text" target="_self" style="" title="I like tight pants and how it has come about that code hosting site github offers visualisations of typeface development">UFO source files</a>, the same logic applies: the UFO is human-readable text (even if, in this case, you never really write it yourself), and it requires a compilation step to turn it into smaller, quicker font files that your operating system knows how to use.<br style=""> A program that is widely used in the font industry is the <a href="http://www.adobe.com/devnet/opentype/afdko.html" class="aloha-link-text" target="_self" style="" title="Adobe Font Development Kit for OpenType | Adobe Developer Connection">Adobe Font Development Kit for Opentype</a>. It comes with the makeotf command line program which is able to create otf files from a specific layout of (PostScript) source files. Font editors like Fontlab use it to generate their Opentype/CFF fonts. To use AFDKO with UFO’s, Tal Leming has created a bridge called <a href="https://github.com/typesupply/ufo2fdk" style="" target="_self" title="typesupply/ufo2fdk" class="aloha-link-text">ufo2fdk</a>. This is a python library. You first read in the UFO using another python library, <a href="/and/programmatically-manipulating-typefaces#robofab" class="aloha-link-text" target="_self" style="" title="I like tight pants and programmatically manipulating typefaces: Robofab">Robofab</a>: Robofab reads in the UFO, and ufo2fdk passes it on to the AFDKO, which generates the font. </p>
<p style="">The AFDKO has some downsides when using it for a public project, where you might have a very heterogeneous working environment. It is closed source, which means there is no way that you can adapt it to new situations. For example, it is unavailable on Linux, which is not just a problem for those designers running on Linux, but also when embedding it into a web service.</p>
<p style="">The alternative comes in the form of the Open Source font editor <a href="http://fontforge.github.io" class="" target="_self" style="" title="FontForge is a font editor">FontForge</a>. FontForge is able to read a large number of font formats, including UFO, and can generate fonts as well. FontForge is scriptable with python, and you can use FontForge in your own python scrips without launching the graphical user interface. This makes it especially suitable to be used in a compilation workflow.</p>
<p style="">To generate OTF’s, <code>ufo2otf</code> can use both the AFDKO and FontForge. By default, it will use whichever compiler is installed (with a preference for FontForge if both are present). You can also explicitly tell it which compiler to use. This can be quite handy because different compilers might interpret UFO differently, and finding out about such inconsistencies can help to fix implementation details, or to fix ambiguities in the UFO specification.</p>
<p>To generate webfonts, one needs to have FontForge installed. For the webfonts, <code>ufo2otf</code> will automatically perform a number of crude optimisations that are meant to make a typeface more suitable for the screen.</p>
<h4>Why one needs a compiler for web fonts</h4>
<p>Asides writing OTF’s, one might want to create other kind of typefaces that cater to the environment of the web. In the early days of @font-face support, serving typefaces on the web is <a href="http://v1.jontangerine.com/log/2008/10/font-face-in-ie-making-web-fonts-work" style="" target="_self" title="@font-face in IE: Making Web Fonts Work — Jon Tan 陳" class="aloha-link-text">an onerous endeavour</a>. Only one browser, Safari, supports regular otf and ttf fonts. Internet Explorer supports an alternative format, yet it must be created from a desktop application that only runs onder Windows. Early versions of Mobile Safari require yet another format: SVG fonts. The conversions needed to create all these versions, and the CSS rules required to get them all to work together, is daunting.</p>
<p>It is at this point that FontSquirrel comes to the scene. This website offers you the possibility to create @font-face-kits: for a font you upload yourself, all the necessary versions are created, along with a CSS file. Running what probably is a headless version of Fontforge, together with a slew of other tools, the service proposes all kinds of useful modifications to your files to make them more fit to the web: automatic hinting, subsetting of the font to a defined character set (easier to download).</p>
<p>The ease of use offered by FontSquirrel is surely an important catalyst in the way in which @font-face ends up defining the face of the web. Using Fontsquirrel, however, does has its downsides, especially when setting up an automated workflow like you do in a larger organisation or in an open source project. As a website, it is not easy to automate. Its interface is made for humans ticking the boxes, not for hooking into scripts: there is no API or Application Programmatic Interface. FontSquirrel is also always changing: this means that you can not count on an option you used yesterday to be available today. This could be OK if it were Open Source, in which case you could choose a version to run on your own computer locally, but this is not the case.</p>
<h4>Proper css for font families</h4>
<p style="">A nice bonus when generating webfonts with <code>ufo2otf</code> is that it produces a more usable CSS than FontSquirrel. In CSS, one can group multiple @font-face declarations into one family. One can declare a font-file to use for bold, another one for regular and yet another for the italic. This is what you want, for example, if you use together <code>NimbusSanL-Regu.otf</code>, <code>NimbusSanL-ReguItal.otf</code>, <code>NimbusSanL-Bold.otf</code> and <code>NimbusSanL-BoldItal.otf</code></p>
<p style="">Font Squirrel produces:</p>
<pre>@font-face {
font-family: 'nimbus_sans_lregular';
src: url('nimbussanl-regu-webfont.eot');
src: url('nimbussanl-regu-webfont.eot?#iefix') format('embedded-opentype'),
url('nimbussanl-regu-webfont.woff') format('woff'),
url('nimbussanl-regu-webfont.ttf') format('truetype'),
url('nimbussanl-regu-webfont.svg#nimbus_sans_lregular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'nimbus_sans_lreguital';
src: url('nimbussanl-reguital-webfont.eot');
src: url('nimbussanl-reguital-webfont.eot?#iefix') format('embedded-opentype'),
url('nimbussanl-reguital-webfont.woff') format('woff'),
url('nimbussanl-reguital-webfont.ttf') format('truetype'),
url('nimbussanl-reguital-webfont.svg#nimbus_sans_lreguital') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'nimbus_sans_lbold';
src: url('nimbussanl-bold-webfont.eot');
src: url('nimbussanl-bold-webfont.eot?#iefix') format('embedded-opentype'),
url('nimbussanl-bold-webfont.woff') format('woff'),
url('nimbussanl-bold-webfont.ttf') format('truetype'),
url('nimbussanl-bold-webfont.svg#nimbus_sans_lbold') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'nimbus_sans_lbolditalic';
src: url('nimbussanl-boldital-webfont.eot');
src: url('nimbussanl-boldital-webfont.eot?#iefix') format('embedded-opentype'),
url('nimbussanl-boldital-webfont.woff') format('woff'),
url('nimbussanl-boldital-webfont.ttf') format('truetype'),
url('nimbussanl-boldital-webfont.svg#nimbus_sans_lbolditalic') format('svg');
font-weight: normal;
font-style: normal;
},</pre>
<p style="">Instead of creating one font family, Font Squirrel uses four: <code>nimbus_sans_lregular</code>, <code>nimbus_sans_lreguital</code>, <code>nimbus_sans_lbold</code> and <code>nimbus_sans_lbolditalic</code>. Even if there are italics and bolds, they all have <code>font-style: normal</code> and <code>font-weight: normal</code>.<br>In <code>ufo2otf</code> we create just one font family, <code>Nimbus Sans L</code>, and change the <code>font-weight</code> and the <code>font-style</code> in accordance with the font variant:</p>
<pre style="">@font-face {
font-family: 'Nimbus Sans L';
font-style: 'normal';
font-weight: '400';
src: url('NimbusSanL-Regu.eot'); /* IE9 Compat Modes */
src: url('NimbusSanL-Regu.eot?#iefix') format('embedded-opentype'),
url('NimbusSanL-Regu.woff') format('woff'),
url('NimbusSanL-Regu.ttf') format('truetype');
}
@font-face {
font-family: 'Nimbus Sans L';
font-style: 'italic';
font-weight: '400';
src: url('NimbusSanL-ReguItal.eot'); /* IE9 Compat Modes */
src: url('NimbusSanL-ReguItal.eot?#iefix') format('embedded-opentype'),
url('NimbusSanL-ReguItal.woff') format('woff'),
url('NimbusSanL-ReguItal.ttf') format('truetype');
}
@font-face {
font-family: 'Nimbus Sans L';
font-style: 'normal';
font-weight: '700';
src: url('NimbusSanL-Bold.eot'); /* IE9 Compat Modes */
src: url('NimbusSanL-Bold.eot?#iefix') format('embedded-opentype'),
url('NimbusSanL-Bold.woff') format('woff'),
url('NimbusSanL-Bold.ttf') format('truetype');
}
@font-face {
font-family: 'Nimbus Sans L';
font-style: 'italic';
font-weight: '700';
src: url('NimbusSanL-BoldItal.eot'); /* IE9 Compat Modes */
src: url('NimbusSanL-BoldItal.eot?#iefix') format('embedded-opentype'),
url('NimbusSanL-BoldItal.woff') format('woff'),
url('NimbusSanL-BoldItal.ttf') format('truetype');
}
</pre>
<p>This is easier to use: we can set the font-family <code>Nimbus Sans L</code> on the body, and bold text will automatically be rendered in the proper bold. With the Fontsquirrel CSS, you will need to explicitly assign a different font to the parts of the body that need to be rendered bold:</p>
<pre>strong, b { <br> font-style: normal;<br> font-family: 'nimbus_sans_lbold'<br>}</pre>
<p>Note that <code>ufo2otf</code>’s approach is a lot more convenient (and more semantically correct), but less foolproof: it relies on the font providing proper metadata. Also, while providing support for quite some font weights, CSS does not allow for a lot of different font-styles: only <code>normal</code> and <code>italic</code>. So you can’t have, for example, a normal and a condensed version in the same family. <code>ufo2otf</code> tries to counter this by creating a new font family for such variants:</p>
<pre>@font-face {
font-family: 'Nimbus Sans L Condensed';
font-style: 'normal';
font-weight: '700';
src: url('NimbusSanL-BoldCond.eot'); /* IE9 Compat Modes */
src: url('NimbusSanL-BoldCond.eot?#iefix') format('embedded-opentype'),
url('NimbusSanL-BoldCond.woff') format('woff'),
url('NimbusSanL-BoldCond.ttf') format('truetype');
}</pre>
<p>If you are curious how <code>ufo2otf</code> goes about its font detection, it is a simple Python based program and <a href="https://github.com/fonts/ufo2otf/blob/master/ufo2otf/compilers.py#L73" class="aloha-link-text" target="_self" style="" title="ufo2otf/ufo2otf/compilers.py at master · fonts/ufo2otf">it is in its source code that it tells the whole story</a>.</p>
</article>
<h4 class="comments-header">5 Comments</h4>
<div id="comments" class="comments">
<div class="comments-content">
<div property="mt:comment_id" content="260" id="comment-260" resource="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-260" class="comment">
<div class="comment-editor" property="mt:comment_text">
<blockquote>
For the webfonts, ufo2otf will automatically perform a number of crude optimisations that are meant to make a typeface more suitable for the screen.<br></blockquote><p>According to what I learned at the ATypI session on web sessions, according to the SIL Open Font License, you have to rename a changed typeface to avoid confusion with the original. This also holds for the kind of modifications like hinting and subsetting you would normally use when repurposing fonts for the web.</p>
</div>
<p class="byline" >
<img src="/and/assets/that/are/pictures/of/author/tellyou.png" width="18" height="18" />
by <a property="dc:creator" href="http://i.liketightpants.net/authors#tellyou">tellyou</a> - <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-260"><span property="dc:created" content="2013-10-30T23:00:52">October 30, 2013 11 PM</span></a><br />
<a title="Reply" href="javascript:void(0);" onclick="mtReplyCommentOnClick(260, 'tellyou')">Reply</a>
</p>
</div>
<div class="comments-parent-container" style="margin-left: 20px;">
<div property="mt:comment_id" content="271" id="comment-271" resource="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-271" class="comment comment-reply">
<div class="comment-editor" property="mt:comment_text">
<p>
Good call. So I should add a part to the script that changes the name in a random way?</p>
</div>
<p class="byline" >
<img src="/and/assets/that/are/pictures/of/author/bnf.png" width="18" height="18" />
by <a property="dc:creator" href="http://i.liketightpants.net/authors#bnf">bnf</a> - <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-271"><span property="dc:created" content="2013-11-11T09:20:27">November 11, 2013 9:20 AM</span></a><br />
<a title="Reply" href="javascript:void(0);" onclick="mtReplyCommentOnClick(271, 'bnf')">Reply</a>
</p>
</div>
<div class="comments-parent-container" style="margin-left: 20px;">
</div>
</div>
<div property="mt:comment_id" content="269" id="comment-269" resource="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-269" class="comment">
<div class="comment-editor" property="mt:comment_text">
<p>
By the way, a related project (that might make ufo2otf at some point) is <a href="https://github.com/xen/fontbakery" style="" target="_self" title="xen/fontbakery">Font Bakery</a> by Mikhail Kashkin and Dave Crossland. Besides—I imagine—more fine grained control on the optimisations of your web fonts, it will run tests on your fonts to detect possible technical problems: </p><blockquote class="" style="">You give it a font project git repository, tell it which license the project is under, which font source files you wish to build into binaries, and set some build options. It then runs tests on the sources, and if they pass, builds the fonts and runs further tests on the binaries.</blockquote>
</div>
<p class="byline" >
<img src="/and/assets/that/are/pictures/of/author/bnf.png" width="18" height="18" />
by <a property="dc:creator" href="http://i.liketightpants.net/authors#bnf">bnf</a> - <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-269"><span property="dc:created" content="2013-11-11T09:06:03">November 11, 2013 9:06 AM</span></a><br />
<a title="Reply" href="javascript:void(0);" onclick="mtReplyCommentOnClick(269, 'bnf')">Reply</a>
</p>
</div>
<div class="comments-parent-container" style="margin-left: 20px;">
<div property="mt:comment_id" content="270" id="comment-270" resource="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-270" class="comment comment-reply">
<div class="comment-editor" property="mt:comment_text">
<p>
I never opened a font for which FontForge did not find errors.</p>
</div>
<p class="byline" >
<img src="/and/assets/that/are/pictures/of/author/baseline.png" width="18" height="18" />
by <a property="dc:creator" href="http://i.liketightpants.net/authors#baseline">baseline</a> - <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-270"><span property="dc:created" content="2013-11-11T09:11:14">November 11, 2013 9:11 AM</span></a><br />
<a title="Reply" href="javascript:void(0);" onclick="mtReplyCommentOnClick(270, 'baseline')">Reply</a>
</p>
</div>
<div class="comments-parent-container" style="margin-left: 20px;">
<div property="mt:comment_id" content="272" id="comment-272" resource="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-272" class="comment comment-reply">
<div class="comment-editor" property="mt:comment_text">
<p>
I would prefer it to tell me <a href="/and/the-voice-of-the-shell" style="" target="_self" title="I like tight pants and the voice of the shell">Everything is OK</a></p>
</div>
<p class="byline" >
<img src="/and/assets/that/are/pictures/of/author/habitus.png" width="18" height="18" />
by <a property="dc:creator" href="http://i.liketightpants.net/authors#habitus">habitus</a> - <a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo#comment-272"><span property="dc:created" content="2013-11-11T09:33:55">November 11, 2013 9:33 AM</span></a><br />
<a title="Reply" href="javascript:void(0);" onclick="mtReplyCommentOnClick(272, 'habitus')">Reply</a>
</p>
</div>
<div class="comments-parent-container" style="margin-left: 20px;">
</div>
</div>
</div>
<a title="Reply" href="#reply">Reply</a>
</div>
<div class="comments-open" id="comments-open">
<h4 class="comments-open-header">Leave a comment</h4>
<div class="comments-open-content">
<div id="comment-greeting"></div>
<form method="post" action="/comments.cgi">
<input type='hidden' name='csrfmiddlewaretoken' value='hEXBeZ9F1RUWqsabBdodOJEhGeu7qlqf' />
<input id="id_parent" name="parent" type="hidden" />
<input id="id_entry" name="entry" type="hidden" value="86" />
<div id="comments-open-data">
<div id="comment-form-name">
<div class="alpha grid_1"><label for="id_author" class="span-4">Name</label></div>
<div class="omega grid_2"><input id="id_author" maxlength="300" name="author" required="required" size="30" type="text" /></div>
</div>
<div id="comment-form-email">
<div class="alpha grid_1"><label for="id_email" class="span-4">Email address</label></div>
<div class="omega grid_2"><input id="id_email" maxlength="381" name="email" required="required" size="30" type="email" /></div>
</div>
<div id="comment-form-url">
<div class="alpha grid_1"><label for="id_url" class="span-4">URL</label></div>
<div class="omega grid_2"><input id="id_url" maxlength="765" name="url" size="30" type="url" /></div>
</div>
</div>
<div id="comment-form-reply" style="display:none">
<input type="checkbox" id="comment-reply" name="comment_reply" value="" onclick="mtSetCommentParentID()" />
<label for="comment-reply" id="comment-reply-label"></label>
</div>
<div id="comments-open-text">
<label for="id_text">Text:</label><br />
<p class="byline">For formatting your post, you can use html tags like <p> and <br />. Whitespace for now is eaten up, like in HTML. we are sorry—we will have a more friendly commenting option in place shortly!</p>
<textarea cols="40" id="id_text" name="text" required="required" rows="15" style="width:100%">
</textarea>
<!-- <textarea id="comment-text" name="text" rows="15" style="width:100%;" onfocus="mtCommentFormOnFocus()"></textarea> -->
</div>
<p class="byline" id="comments-open-license">By submitting your comment, you agree to license it under the <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution Share-Alike license</a>, the same license used for the text of the blog.</p>
<div id="comments-open-captcha">
<div class="alpha grid_1"><label for="id_captcha_code">Anti-spam: What is the last name of David?</label></div>
<div class="omega grid_2"><input id="id_captcha_code" name="captcha_code" required="required" size="30" type="text" /></div>
</div>
<div id="comments-open-footer">
<!-- <input type="submit" accesskey="v" name="preview_button" id="comment-preview" value="Preview" onclick="this.form.preview.value='1';" /> -->
<input type="submit" accesskey="s" name="post" id="comment-submit" value="Submit" />
</div>
</form>
</form>
</div>
</div>
</div><!-- / comments -->
</div> <!-- / article grid_3 -->
<hr />
</div> <!-- / post grid_5-->
<div class="sidebar grid_1">
<h4>Latest articles</h4>
<dl>
<dt><a href="/and/hybrid-publishing-back-to-the-future-publishing-theses-at-the-kabk">Hybrid Publishing Back To The Future Publishing Theses at the KABK</a></dt>
<dd>May 10, 2018 10:07 AM</dd>
<dt><a href="/and/finding-red-letterboxes-in-belgium">Finding Red Letterboxes In Belgium</a></dt>
<dd>May 10, 2018 10:05 AM</dd>
<dt><a href="/and/the-underwater-screen-or-lessons-from-wordperfect">The Underwater Screen Or Lessons From Wordperfect </a></dt>
<dd>June 10, 2014 6:21 PM</dd>
<dt><a href="/and/hackers-culture-and-the-fear-of-wysiwyg">Hacker Culture and the Fear of WYSIWYG</a></dt>
<dd>May 22, 2014 11:40 PM</dd>
<dt><a href="/and/graphic-design-is-a-nostalgic-field"> Graphic Design Is A Nostalgic Field </a></dt>
<dd>February 19, 2014 7:02 PM</dd>
<dt><a href="/and/who-makes-standards">Who gets to write the web: the power struggles around the standards</a></dt>
<dd>November 20, 2013 9:08 PM</dd>
<dt><a href="/and/ufo2otf-makes-otfs-webfonts-and-css-from-ufo">ufo2otf Makes OTF’s, Webfonts and CSS From UFO’s</a></dt>
<dd>November 5, 2013 8:57 PM</dd>
<dt><a href="/and/no-one-starts-from-scratch-type-design-and-the-logic-of-the-fork">No-one Starts From Scratch: Type Design and the Logic of the Fork</a></dt>
<dd>October 9, 2013 8 PM</dd>
<dt><a href="/and/i-need-my-generic-font-medicine">I Need My Generic Font Medicine</a></dt>
<dd>October 9, 2013 7:55 PM</dd>
<dt><a href="/and/48-hours-of-writing-stylesheets-with-etherpad-and-a-gong">48 Hours of Writing Stylesheets with Etherpad and a Gong</a></dt>
<dd>October 8, 2013 8:06 PM</dd>
</dl>
<h4>Latest Comments</h4>
<ul>
<li><strong>Sujon Ahmad:</strong> Keep it up <a href="/and/release-early-release-often-version-numbers-for-typefaces#comment-338" title="full comment on: Release Early Release Often Version Numbers For Typefaces">read more</a></li>
<li><strong>Carly Durocher:</strong> I really like the stylized penrose triangle would you mind ... <a href="/and/illustration#comment-337" title="full comment on: Illustration">read more</a></li>
<li><strong>michaël:</strong> The recent evolution of MediaWiki is worth mentioning. One of ... <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-336" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
<li><strong>jaromil:</strong> Check the Linux Action Show on Tomb https://www.dyne.org/software/tomb there can ... <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-335" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
<li><strong>Ian Hickson:</strong> The member list is the one on the charter (it's ... <a href="/and/who-makes-standards#comment-334" title="full comment on: Who gets to write the web: the power struggles around the standards">read more</a></li>
<li><strong>habitus:</strong> Dear Ian, thank you for taking the time to respond. ... <a href="/and/who-makes-standards#comment-333" title="full comment on: Who gets to write the web: the power struggles around the standards">read more</a></li>
<li><strong>Ian Hickson:</strong> The part about the WHATWG membership is wrong. The WHATWG ... <a href="/and/who-makes-standards#comment-332" title="full comment on: Who gets to write the web: the power struggles around the standards">read more</a></li>
<li><strong>Erik:</strong> Good points. Also: writing UI is hard. <a href="/and/the-underwater-screen-or-lessons-from-wordperfect#comment-327" title="full comment on: The Underwater Screen Or Lessons From Wordperfect ">read more</a></li>
<li><strong>nike shox:</strong> do not want to be t basket vans femme pas ... <a href="/and/no-one-starts-from-scratch-type-design-and-the-logic-of-the-fork#comment-324" title="full comment on: No-one Starts From Scratch: Type Design and the Logic of the Fork">read more</a></li>
<li><strong>Tolan Blundell:</strong> As someone who's written a moderately complex CMS from scratch ... <a href="/and/hackers-culture-and-the-fear-of-wysiwyg#comment-323" title="full comment on: Hacker Culture and the Fear of WYSIWYG">read more</a></li>
</ul>
</div>
</div>
<div id="bar"> </div>
<!-- Piwik, Open Source Analytics,
let’s not give Google more data then necessary! Eric -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://var.schr.fr/piwik/" : "http://var.schr.fr/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 2);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://var.schr.fr/piwik/piwik.php?idsite=2" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->
<!--[if !(lt IE 8)]><!-->
<script type="text/javascript">
(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src=document.location.protocol+"//d1agz031tafz8n.cloudfront.net/thedaywefightback.js/widget.min.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})()
</script>
<!--<![endif]-->
</body>
</html>