forked from fontforge/fontforge.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfaq.html
More file actions
2440 lines (2440 loc) · 106 KB
/
faq.html
File metadata and controls
2440 lines (2440 loc) · 106 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
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
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<HTML>
<HEAD>
<!-- Created with AOLpress/2.0 -->
<!-- AP: Created on: 7-Mar-2001 -->
<!-- AP: Last modified: 11-Sep-2009 -->
<TITLE>Frequently Asked Questions</TITLE>
<LINK REL="icon" href="fftype16.png">
<LINK REL="stylesheet" TYPE="text/css" HREF="/assets/css/old/FontForge.css">
</HEAD>
<BODY id="framed">
<div style="margin:0; height: 4 em; padding: 0.5em; background: red; color:yellow; text-align:center; font-size:1em; font-family: sans-serif;">
<p><a href="http://fontforge.github.io" style="padding: 0.5em; color: yellow; font-weight: bold; text-decoration: none;" onmouseover="this.style.background='black';" onmouseout="this.style.background='red';" >This is part of the old website. New website begins at fontforge.github.io</a></p>
<p><a href="https://github.com/fontforge/fontforge.github.io" style="padding: 0.5em; color: yellow; font-weight: bold; text-decoration: none;" onmouseover="this.style.background='black';" onmouseout="this.style.background='red';" >Are you a web developer? Help us migrate this page on Github</a></p>
</div>
<P ALIGN=CENTER>
<IMG SRC="/assets/img/old/fontforge-banner-420.jpeg" WIDTH=420 HEIGHT=80>
<DIV id="framed-in">
<TABLE ALIGN="Right">
<TR>
<TD><A HREF="faqFS.html" TARGET="_top">Frames</A></TD>
</TR>
</TABLE>
<H1 ALIGN=Center>
Frequently Asked Questions<BR>
<SMALL>(or many of the questions I've been asked so far)</SMALL>
</H1>
<TABLE>
<TR>
<TD>
</TD>
<TD><BLOCKQUOTE ID="lit">
<B><SMALL>Sir Toby:</SMALL></B>Thy most exquisite reason, dear knight?<BR>
<B><SMALL>Sir Andrew</SMALL></B> I have no exquisite reason for't,<BR>
but I have reason good enough
<P ALIGN=RIGHT>
<SMALL>Twelfth Night, II, iii, 130<BR>
Shakespeare</SMALL>
</BLOCKQUOTE>
</TD>
</TR>
</TABLE>
<H2>
Most important question
</H2>
<UL>
<LI>
How do I find something in the manual?
<FORM method=GET action="http://www.google.com/search">
<INPUT type=hidden name="as_sitesearch" value="fontforge.sourceforge.net">
<INPUT type=text name="as_q">
<INPUT type=submit name="btnG" value="Search">(Powered by
<A HREF="http://www.google.com/">Google</A>)
</FORM>
</UL>
<H2>
General questions about FontForge
</H2>
<UL>
<LI>
<A HREF="#font-editor">Why a font editor, aren't there enough fonts
already?</A>
<UL>
<LI>
<A HREF="#write">Why did I write it?</A>
<LI>
<A HREF="#give">Why do I give it away?</A>
<LI>
<A HREF="#Pots">Does working on FontForge provide the same kind of pleasure
as working on pots or baking bread?</A>
<LI>
<A HREF="faq.html#native">Why doesn't it use the native MS Windows or Mac
windowing system?</A>
<LI>
<A HREF="#widget-set">Why is FontForge based on a non-standard widget set?</A>
<LI>
<A HREF="#C-plus-plus">Why isn't FontForge written in C++? (or <I>Why C++
is not my favorite language</I>)</A>
<LI>
<A HREF="faq.html#bsd-license">Why do I release FontForge under the BSD license
and not GPL?</A>
<LI>
<A HREF="#libraries">Why does FontForge load libraries at run time rather
than being linked with them?</A>
<LI>
<A HREF="#roadmap">Why is there no future roadmap for FontForge?</A>
</UL>
</UL>
<H2>
General questions about fonts
</H2>
<UL>
<LI>
<A HREF="#legal">Is it legal to modify a font? Is it ethical?</A>
<LI>
<A HREF="#pointsize">What is a 12point font?</A> (What measurement of the
font determines the point size)
<UL>
<LI>
<A HREF="#linespace">How do I set the line spacing on a font?</A>
</UL>
<LI>
<A HREF="#em-units">How big will my glyph be? (What are em-units?)</A>
<LI>
<A HREF="#license">What's a good license to use on an open source font?</A>
</UL>
<H2>
Using FontForge & Installing fonts on various systems
</H2>
<UL>
<LI>
How do I install FontForge on:
<TABLE CELLSPACING="6" CELLPADDING="2">
<TR>
<TD><P ALIGN=Center>
<A HREF="nix-install.html" TARGET="_top">Unix/Linux</A></TD>
<TD> <A HREF="mac-install.html" TARGET="_top">Mac</A></TD>
<TD> <A HREF="ms-install.html" TARGET="_top">MS/Windows</A></TD>
<TD> <A HREF="vms-install.html" TARGET="_top">VMS</A></TD>
<TD> <A HREF="source-build.html" TARGET="_top">from source</A></TD>
</TR>
</TABLE>
<LI>
<A HREF="running.html#cygwin-troubles" TARGET="_top">Why does nothing happen
when I type "$ <TT>fontforge</TT>" on cygwin?</A>
<LI>
<A HREF="#Minimum">Minimum requirements</A>
<UL>
<LI>
<A HREF="#excessive-memory">Why does FontForge use so much memory?</A>
</UL>
<LI>
<A HREF="#font-install">How do I install the fonts once I've made them?</A>
<LI>
<A HREF="faq.html#Bad-Windows-Install">Why won't FontForge's fonts install
on some MS Windows systems</A>
<LI>
<A HREF="#How-mac">How do I edit fonts from my macintoy?</A>
<UL>
<LI>
<A HREF="#How-family">How do I create a mac font family? (How do I get the
mac to group my fonts so that the italic and bold styles work)?</A>
<LI>
<A HREF="#Mac-ATM">Why doesn't ATM work with my fonts?</A>
</UL>
<LI>
<A HREF="#windows">How do I edit fonts on MS windows?</A>
<UL>
<LI>
<A HREF="faq.html#Bad-Windows-Fonts">Why don't my fonts work on windows?</A>
</UL>
<LI>
<A HREF="#otf-diffs">I generated an opentype (or truetype) font and windows
wouldn't install it. Why not?</A>
<LI>
<A HREF="#DSIG">I have a truetype font with opentype tables, but windows
displays the "TT" (truetype) icon and not the "O" icon. Why?</A>
<LI>
<A HREF="#names">What do all the different font names mean?</A>
</UL>
<H2>
Font Conversions
</H2>
<UL>
<LI>
<A HREF="faq.html#outline-conversion">Converting from one outline format
to another</A>
<LI>
<A HREF="faq.html#bitmap-conversion">Converting from one bitmap format to
another</A>
<LI>
<A HREF="#outline-bitmap">Converting from an outline format to a bitmap</A>
<LI>
<A HREF="faq.html#bitmap-outline">Converting from a bitmap format to an
outline</A>
<LI>
<A HREF="#AAT2OT">Converting from Apple's Advanced Typography to OpenType</A>
<LI>
<A HREF="#OT2AAT">Converting from OT to AAT</A>
<LI>
<A HREF="#Inkscape">Importing glyphs from Inkscape</A>
</UL>
<H2>
Questions about Hints and TrueType Instructions
</H2>
<UL>
<LI>
<A HREF="#hint-subs">How do I make it use hint substitution?</A>
<LI>
<A HREF="#flex-hints">How do I make it use flex hints?</A>
<UL>
<LI>
<A HREF="#flex2">How can I tell if it is going to use flex hints?</A>
</UL>
<LI>
<A HREF="#fuzzy">My glyphs are all perfectly hinted, why do some stems have
different widths (or appear fuzzy, or fade away completely)?</A>
<LI>
<A HREF="#ttf-degrade">I loaded a ttf font, made a few changes and generated
a new font. The changed glyphs don't look anywhere near as nice as the originals.
Why?</A>
</UL>
<H2>
Questions about <A HREF="bibliography.html" TARGET="_top">Font Formats</A>
</H2>
<UL>
<LI>
<A HREF="faq.html#Open-difference">What's the difference between OpenType
and PostScript (or TrueType) fonts?</A>
<LI>
<A HREF="faq.html#AAT-Open">What is the difference between AAT (Apple Advanced
Typography) and OpenType?</A>
<LI>
<A HREF="#Tiger-Open">Why does a font, which worked fine under 10.3 fail
on Mac 10.4 (Tiger)?</A>
<LI>
<A HREF="#cidmaps">What on earth are the cidmap files, and should I care
about them?</A>
<UL>
<LI>
<A TARGET="_top" HREF="cidmenu.html#CID">(What is a CID-keyed font?)</A>
</UL>
<LI>
<A HREF="faq.html#TeX">Why doesn't TeX work with my fonts?</A>
<UL>
<LI>
<A HREF="#mf-files">Why doesn't FontForge let me edit an '.mf' file?</A>
</UL>
<LI>
<A HREF="#non-integral">Is it safe to use non-integral coordinates? Will
it screw up in Word or anything?</A>
<LI>
<A HREF="#Open-size">Why isn't my Open Type font much smaller than the .pfb
file?</A>
<LI>
<A HREF="#Missing-Refs">When I load an otf or a type1 font most of my references
have been replaced by inline copies. How do I get my references back?</A>
<LI>
<A HREF="#kern-info">Does FontForge read in the old kerning information from
fonts?</A>
<LI>
<A HREF="#mensis">How do I set a particular bit in the OS/2 table (or any
other)?</A>
<LI>
<A href="#sfd">What's an sfd file?</A>
<UL>
<LI>
<A HREF="#excessive-memory">Why are they so big?</A>
</UL>
</UL>
<H2>
Mathematical questions
</H2>
<UL>
<LI>
<A HREF="#simplify">Does the simplify command lose accuracy?</A>
<LI>
<A HREF="#cubic-quadratic">How does FontForge convert a cubic spline into
a quadratic spline for truetype?</A>
<LI>
<A HREF="#quadratic-cubic">How does FontForge convert a quadratic spline
into a cubic (when reading truetype)?</A>
</UL>
<H2>
Image file questions
</H2>
<UL>
<LI>
<A HREF="#dynamic-libs">Why does fontforge say "Error loading dynamic library"
when trying to import an image file?</A>
<LI>
<A HREF="#complex-eps">Why does fontforge say "EPS file is too complex to
be understood"?</A>
<LI>
<A HREF="#Inkscape">Importing glyphs from Inkscape</A>
</UL>
<H2>
Random questions
</H2>
<UL>
<LI>
<A HREF="#background">FontForge's grey background distesses me. How do I
change it?</A>
<LI>
<A HREF="#fontsize">The fonts FontForge uses in its GUI are too small (too
big) how do I change them?</A>
<LI>
<A HREF="#monospace">How do I mark a font as monospaced?</A>
<LI>
<A HREF="#new-encoding">How do I tell fontforge about a new encoding?</A>
<LI>
<A HREF="#new-name">How do I add a glyph with a new name?</A>
<LI>
<A HREF="#glyphnames">Why does fontforge give some glyphs the wrong name?</A>
<LI>
<A HREF="#save-no-change">After I generate a font and quit, why does FontForge
ask if I want to save the font? I didn't change anything.</A>
<LI>
<A HREF="#minify-iconify">Why does my window get iconified when I want to
minify the view?</A>
<LI>
<A HREF="#no-mu">Why isn't there a character named "mu" in my greek font?</A>
(or "Delta", or "Omega", or "pi1")
<LI>
<A HREF="#no-copy-names">Why doesn't Edit->Copy copy glyph names as well
as glyph info?</A>
<LI>
<A HREF="#copy-names">Why does Edit->Paste complain about name
duplication?</A>
<LI>
<A HREF="faq.html#default-char">How do I set the default glyph of a font?</A>
<LI>
<A HREF="#mingliu">I looked at kaiu.ttf or mingliu.ttf and the outlines looked
nothing like the correct glyphs. What's wrong?</A>
<LI>
<A HREF="#greek-accents">When I use Element->Build->Build Accented
Glyph to build one of the Extended Greek glyphs (U+1F00-U+1FFF) FontForge
picks the wrong accents. Why?</A>
<LI>
<A HREF="#u-accents">When I use Element->Build->Build Accented Glyph
to build accents over "u" or "y" I get the accent over one of the stems not
centered on the glyph. Why?</A>
<LI>
<A HREF="#ttf2afm">Why does ttf2afm crash on FontForge ttf files?</A>
<LI>
<A TARGET="_top" HREF="index.html#known-bugs">Where can I find a list of
known bugs in FontForge?</A>
<LI>
<A HREF="#memory">My system keeps crashing because FontForge keeps running
out of memory. What can I do about it?</A>
<LI>
<A HREF="#Unstable">Why is FontForge so unstable?</A>
<LI>
<A HREF="#Compiz">Why does FontForge look ugly under Xgl/Compiz?</A>
<LI>
<A HREF="#talk">Why don't I talk at conferences?</A>
<LI>
<A HREF="source-build.html#patch" TARGET="_top">How do I use a patch file?</A>
</UL>
<P>
<HR>
<DL>
<DT>
<A NAME="font-editor"><B>Why a font editor, aren't there enough fonts
already?</B></A>
<DD>
<TABLE ALIGN=RIGHT>
<TR>
<TD><BLOCKQUOTE ID="lit">
<SMALL>But Eeyore was saying to himself,<BR>
"This writing business. Pencils<BR>
and whatnot. Over-rated, if you<BR>
ask me. Silly stuff. Nothing in it</SMALL>
<P ALIGN=Right>
<SMALL>Winnie-the-Pooh<BR>
A.A. Milne</SMALL>
</BLOCKQUOTE>
</TD>
</TR>
</TABLE>
<P>
Well... no. Otherwise I wouldn't be writing this, and. more to the point,
there wouldn't be thousands of people downloading it every month.
<P>
I am often asked this question; to me it represents a misapprehension. You
wouldn't go up to a paintbrush maker and ask if he thought there were already
enough watercolor paintings. A font is a work of art and represents the
individual genius of its creator. It is no more redundant than a watercolor.
<P>
However, accepting the question at face value, here are my attempts to answer
it... er, pragmatically.
<OL>
<LI>
There are lots of latin fonts. There are far fewer greek, cyrillic, indic,
thai, chinese, japanese, korean, unicode...
<LI>
There aren't many good quality free fonts available.
<LI>
Researchers into old writing systems often need to design their own fonts
<LI>
Even for latin, traditionally each new style of art and architecture has
an associated style of fonts. New fonts are always being created to reflect
the esthetics of the times.
<LI>
Computer font technology is constantly changing. A font-format that was useful
10 years ago may not be so now.
<LI>
Even if you are satisfied with the fonts that do exist they may not be complete
<UL>
<LI>
Missing ligatures
<LI>
Missing accented glyphs
<LI>
No matching cyrillic or greek glyphs
</UL>
<LI>
Everybody wants a font of his/her own handwriting.
<LI>
Playing with fonts is fun.
</OL>
<P>
FontForge has uses beyond simply creating and modifying fonts. It can convert
from one format to another. It can extract information from the font file.
Or it can simply show you what the font looks like without having to install
it.
<DT>
<A NAME="write"><B>Why did I write it?</B></A>
<DD>
<TABLE Align="Right">
<TR>
<TD><BLOCKQUOTE ID="lit">
Why not?
<P ALIGN=RIGHT>
<SMALL>The Phantom Tollbooth<BR>
Juster</SMALL>
</BLOCKQUOTE>
</TD>
</TR>
</TABLE>
<UL>
<LI>
Because it was fun
<LI>
Because MacroMedia stopped development on Fontographer, and Fontographer
was lacking features that I wanted.
<LI>
To learn
</UL>
<P>
For a more complete description see the
<A HREF="ff-history.html" TARGET="_top">FontForge history</A> page.
<DT>
<A NAME="give"><B>Why do I give it away?</B></A>
<DD>
<UL>
<LI>
Because I approve of free software and hope that the availability of good
products on a good operating system will encourage people not to use proprietary
systems.
<LI>
Because programming is a lot more fun than marketing and giving things away
is easier than selling them.
<LI>
Because I'd have to spend more time doing QA if I sold it (and QA isn't much
fun).
</UL>
<DT>
<B>Why doesn't it use the <A NAME="native">native</A> MS Windows or Mac windowing
system?</B>
<DD>
<UL>
<LI>
FontForge is not a commercial product and is not bound by the constraints
of the market.
<LI>
Doing that port doesn't interest me.
<LI>
I don't have time nor do I have the skill to take that task on.
<LI>
I'd like to encourage people to use Linux/unix
</UL>
<P>
Of course, if I were to use either <A HREF="faq.html#widget-set">gtk or qt</A>
some of the difficulties of porting would vanish. But unfortunately I don't
like either of those widget sets.
<P>
Now... if <EM>you</EM> would like to do the port, that would be wonderful.
I encourage you to do so.
<DT>
<A NAME="widget-set"><B>Why is FontForge based on a non-standard widget
set?</B></A>
<DD>
I wanted a widget set that would handle Unicode reasonably well. In particular
I thought support for bidi text was important for hebrew and arabic typography.
As I was unaware of any widget sets that did that, I wrote my own.<BR>
I also wanted a widget set where I could actually figure out whether the
checkbox was checked or not checked. In far too many cases my eyes can't
work out which is which... (Ironically the most frequent complaint I get
is from people who can't tell whether my checkboxes are checked. I don't
know what to make of that).<BR>
I realize now that that there are essentially two free widget sets that are
far better at unicode support than mine. These are
<A HREF="http://www.trolltech.com/developer/downloads/qt">QT</A> and
<A HREF="http://www.gtk.org/">gtk</A>. I'm still not using either because:
<UL>
<LI>
Converting from one set of widgets to another is tedious. And people send
me bugs which distract me.
<LI>
If I spend my time doing that conversion I won't be making FontForge more
functional.
<LI>
QT is written in C++, and, <A HREF="faq.html#C-plus-plus">as I explain
below</A>, I don't like C++, so that's out.
<LI>
The more I look at gtk the less I like it.
<UL>
<LI>
The support for images is atrocious (which is odd, since it was written for
gimp):
<UL>
<LI>
There is no support whatsoever for client side bitmaps (and I want to support
bitmap fonts)
<LI>
Colors are ordered RGB in color tables for index images, but BGR for 24bit
color images
<LI>
No simple support for transparent images without resorting to full RGBA images,
which is a bit of overkill when I want to draw a simple bitmap.
<LI>
There is no overarching format for images, so I can't have an image which
itself knows whether it's bitmap, index or truecolor.
<LI>
Fixing these was possible, but it involved a lot of very low level work on
my part -- and I only know how to do that work on X.
</UL>
<LI>
I find the file chooser dialog really ugly. And it's so complex I can't figure
out how to modify it to make it look nice (by my standards, that is).
<LI>
I also can't figure out how to modify the file chooser to make it behave
the way the fontforge's file chooser currently behaves (popup windows showing
FontNames as you move the mouse over fontfiles, a pull down list of recently
used files attached to the filename input box, etc.)
<LI>
gtk+2 doesn't run natively on Mac OS, and the only people porting gtk to
the mac seem to be working on gtk-1
<LI>
Many of the widgets I want to use have been deprecated. Sometimes I can't
figure out what replaces them, sometimes I am forced to used a far more complex
widget instead.
<LI>
So I tend to wrestle with it for a while and then decide than my current
widgets are better after all.
<LI>
I did get a limited version of fontforge running under gtk. I would be greatful
if someone else would choose to extend and maintain it.
</UL>
</UL>
<DT>
<A NAME="C-plus-plus"><B>Why isn't FontForge written in C++ (or <I>Why C++
is not my favorite language</I>)?</B></A>
<DD>
I've been a little surprised to be asked this question, I had not realized
my choice of language needed justification, but it appears to do so...
<P>
Basically because I don't find object-oriented practices helpful in most
cases, because I find C++ far too complex and badly designed, and because
I can't debug it easily.
<UL>
<LI>
I grew up with SIMULA and dabbled with SmallTalk and found after a few years
that there were very few problems where an object oriented approach seemed
natural to me. In most cases it just seemed to impose unneeded complexities
on the problem.
<LI>
The semantics of a C++ program cannot be specified. The compiler is free
to generate temporaries as it wishes. In C this is not a problem, but in
C++ the creation of a temporary can involve calling a constructor and a
destructor which may have untold side-effects. I find this frightening.
<LI>
The order of execution of external constructors is unspecified. I have seen
many inexplicable bugs caused by this
<LI>
I find it extremely difficult to debug C++. Stepping through a statement
often involves many unexpected procedure calls (some of which are inlined
and not obvious). This distracts from my main purpose in debugging.
<LI>
Finally I find the language badly specified and too complex. Its various
concepts do not fit well together. Each compiler seems to do things slightly
differently.
<P>
I first met C++ in about 1981 when it was called C with Classes. I wrote
the C++ front end for Green Hills Software's compiler suite from 1987 to
1994 and I tracked each new version of the language from 1.1 to ANSI.
<P>
Each version added new features which did not sit well with the old ones.
Each version was badly specified. The reference implementation was wildly
different from the specification. For example the behavior of virtual functions
inside constructors was not specified until version 2 of the language and
since this behavior was different from naive expectations this caused bugs.
My favorite confusion occurred in (I think it was) the version 2.1 specification
where on one page, within a few paragraphs, the following two sentences occurred:
"Unions may contain member functions." and "Unions may not contain member
functions.".
</UL>
<P>
The above are my personal opinions based on my experience and explain why
<I>I</I> do not use C++. Your opinions probably differ, few people have spent
5 years writing C++ compilers.
<DT>
<B><A NAME="bsd-license">Why do I release FontForge with the BSD license
and not GPL?</A></B>
<DD>
I just don't like GPL. It's partly prejudice, partly real.
<P>
I don't like forcing restrictions on people.
<P>
I'm giving away fontforge, so I do.
<P>
The <A HREF="license.html" TARGET="_parent">BSD license </A>says "Don't sue
me, and include my copyright notice if you use my code" and that's all I
care about.
<P>
Perhaps I am naif, but I don't believe that anyone is going to start selling
fontforge. Why would they? It makes no sense for someone to try to sell what
I give away freely. If they add functionality to fontforge, then that's a
different matter, but in a sense they aren't charging for fontforge, they
are charging for the code they have added to it. It would be annoying if
someone did that, a bit rude in my eyes, but I'm not going to say "no".
<P>
Now someone might take a small piece of fontforge and use it in something
else. That doesn't bother me. I know that some of my OpenType code has been
snagged by some TeX packages. And I have snagged code for generating checksums
from some other packages.
<P>
I rather like helping other people. And people have helped me.
<DT>
<B><A NAME="libraries">Why does FontForge load libraries at run time rather
than being linked with them?</A></B>
<DD>
I dislike dependencies. The fewer the better.
<P>
I hate when I download a package and discover it won't work unless I download
half a dozen other packages (which, in their turn may demand that I download
yet more packages).
<P>
I want to download a package and just have it work.
<P>
So I try to write as much code myself as I can and release it all together
in a lump and not force people to wander all over the web looking for disparate
parts.
<P>
When I can't figure out how to do something myself I will use an external
library if I must. Even then I will try to insure that fontforge will run
if the library is not present on a system. When I release a binary package
I don't want to have to release 32 packages per host depending on the possible
presence or absence of 5 different libraries. But I also don't want to force
someone to install a library that s/he will never use just to get fontforge
to start.
<P>
If a user will never look at an svg glyph then they don't need to install
libxml2. If the user will never import a jpeg image (and there's really no
reason to want to do that) then they don't need to install libjpeg.
<P>
Instead, the binaries I release will try to load a library dynamically (dlopen)
<EM>when they need it</EM> and not before. This will also speed up starting
fontforge. If the library is on the system then all is happy and nice. If
the library is not, then that functionality is lost -- but the rest of fontforge
continues to work.
<DT>
<B><A NAME="roadmap">Why is there no future roadmap for FontForge?</A></B>
<DD>
<TABLE ALIGN=RIGHT>
<TR>
<TD><BLOCKQUOTE ID="lit">
<B><SMALL>TYSON:</SMALL></B><BR>
I'm not bewildered, I assure you I'm not<BR>
Bewildered. As a matter of fact a plan<BR>
Is almost certainly forming itself in my head<BR>
At this very moment. It may even be adequate.
<P ALIGN=RIGHT>
<I>The Lady's not for Burning</I><BR>
Christopher Fry
</BLOCKQUOTE>
</TD>
</TR>
</TABLE>
<P>
Mostly because I don't thnk that way. I don't plan things out, I have a vague
idea where I want to go and I explore in that direction.
<P>
Consider python scripting. I decided to add python to fontforge. I found
that meant it became easier to design a mechanism so users could create their
own scripts to add import/export file formats. And then startup scripts,
and scripts when certain standard "events" happened. And then I could allow
users to define their own menu items. And then I figured out how to add fontforge
to python (as opposed to the reverse). And now I realize that there is no
reason I couldn't define a set of c-bindings so that people could call fontforge
as a library from within C programs. And who knows where that will lead --
if anywhere.
<P>
Each stage means I can see a little further, and go a little further, and
then see a little more.
<P>
And often ideas will come from users, someone will ask for functionality
I had not thought of.
<P>
I did maintain such a page for a while. I found that half the things I wrote
never happened, and most of the time I didn't bother to update the page.
I'd forget about it. It was dull. Far better to <I>do</I> that to simply
speculate on what I might do were I not speculating.
<P>
So don't ask me what will happen next, because I don't know either. It's
an adventure. We'll just have to wait and see.
<DT>
<A NAME="Pots"><B>Does working on FontForge provide the same kind of pleasure
as working on pots or baking bread?</B></A>
<DD>
<IMG SRC="/assets/img/old/bowlweb.gif" WIDTH="150" HEIGHT="150" ALIGN="Right"><SMALL><B>From
an interview with <A HREF="http://ospublish.constantvzw.org/?p=221">Open
Source Publishing</A>, done at
<A HREF="http://www.libregraphicsmeeting.org/">LGM</A>2007</B></SMALL><BR>
I like to make things. I like to make things that -- in some strange definition
are beautiful. I'm not sure how that applies to making bread, but my pots
-- I think I make beautiful pots. And I really like the glazing I put onto
them.
<P>
It's harder to say that a font editor is beautiful. But I think the ideas
behind it are beautiful in my mind -- and in some sense <I>I</I> find the
user interface beautiful. I'm not sure that anyone else in the world does,
because it's what I want, but I think it's beautiful.
<P>
And there's a satisfaction in making something -- in making something that's
beautiful.
<P>
And there's a satisfaction too (as far as the bread goes) in making something
I need. I eat my own bread -- that's all the bread I eat.
<P>
So it's just -- I like making beautiful things.
<DT>
<A NAME="legal"><B>Is it legal to modify a font? Is it ethical?</B></A>
<DD>
Many current fonts are based on the work of great designers from centuries
past -- so reusing other people's designs has a long history. On the other
hand, no matter what the law, it is clearly unethical to steal the work of
a living designer.
<P>
Legal matters vary from country to country (and perhaps within countries).
You really should consult a lawyer for a definitive answer. Here are some
guidelines:
<P>
Look at the license agreement you received with the font and see what it
has to say on this issue.
<P>
TrueType (and OpenType and potentially CID-keyed fonts) have a field in the
OS/2 table called FSType which allows the font designer to place restrictions
on what other people can do with the font. If this field prohibits modification
fontforge will ask you to make sure you have an agreement with the font designer
which supersedes this field.
<P>
My understanding of US law (but check with a lawyer before relying on this)
is that:
<UL>
<LI>
There is minimal legal protection for font designs. Ages ago some legal figure
claimed "The alphabet is public." This meant a type design could not be
copyrighted.
<P>
However (I'm told) a designer may register (with the government) for a design
patent which protects the design for 14 years (if granted). I don't believe
it can be renewed, but I may be wrong.
<P>
Registering for a patent is an expensive and time-consuming process and is
often outside the ability of a small design firm. As far as I know the law
has never been tested in the US so the protection may be questionable.
<LI>
Font <EM>programs</EM> (such as a postscript or truetype font file, but not
a bitmap font file) may be copyrighted. This means the design itself is not
protected, but the mechanism for creating it is.
<LI>
Font names may be trademarked.
</UL>
<P>
My understanding is that in the UK:
<UL>
<LI>
There is something called a "design right" which is somewhat like a copyright
and protects a design for 5 years. A designer may also register the design
with the government up to 5 times to extend this protection to 25 years.
</UL>
<P>
Throughout the EU:
<UL>
<LI>
There are EU design rights. I'm not sure about the specifics of these, nor
how they interact with country specific laws (as the British design rights
above).
</UL>
<P>
In Canada:
<UL>
<LI>
Font designs may be registered as "industrial designs" for a limited time
(~15 years)
</UL>
<P>
I would welcome any additions or corrections here, as well as info on the
laws governing fonts in other countries. There is a
<A HREF="http://typophile.com/node/42709">thread on typophile</A> which discusses
this.
<P>
There is a good summary at the
<A href="http://www.fontembeddng.com/fonts-and-the-law">font embedding</A>
website.
<DT>
<A NAME="pointsize"><B>What is a 12 point font?</B></A> <B>(What measurement
of the font determines the point size?)</B>
<DD>
<IMG SRC="/assets/img/old/pointsize.png" WIDTH="147" HEIGHT="96" ALIGN="Right">A font is
12 points high if the distance between the baselines of two adjacent lines
of (unleaded) text is 12 points.
<P>
The pointsize is not based on the sizes of any of the glyphs of the font.
<P>
Back when fonts were made out of metal, the pointsize of the font was the
height of the metal slugs used for that font.
<P>
In some sense this is not a very good measure of the size of a font (some
fonts may allow more room for accents or ascenders or descenders than others
meaning that the height of the actual glyphs will be smaller).
<P>
There is also a measurement scheme based on the x-height of the glyphs.
<P>
In England and the US a point has traditionally meant the pica point
(1/72.27<SUP>th </SUP>of an inch), while in Europe the point has been the
didot point (1/67.54<SUP>th</SUP> of an inch). The Europeans have a slightly
larger point, but the glyphs of English and European fonts appear the same
size. English does not use accents (except in very rare cases) while most
European languages do, and the slight increase in the size of the point allows
more room for accents.
<P>
(Of course now most Europeans are probably forced to use the pica point by
their desktop software, while most computer fonts now contain accented glyphs,
so the distinction and the reason for it may have vanished).
<DT>
<A NAME="linespace"><B>How do I set the line spacing on a font?</B></A>
<DD>
It depends on the kind of font you are generating, the operating system under
which you are running, and luck.
<UL>
<LI>
For Type1 fonts there is no way to set the line spacing. Applications will
often take the values specified in the font's bounding box and use those
to set the line spacing. This is a really bad idea on their part, but it
is common practice.
<LI>
For True/Open Type fonts the answer is complicated.
<UL>
<LI>
On the mac<BR>
The line spacing is set by the ascender and descender values of the 'hhea'
table. These in turn are set to the bounding box values of the font. Not
a good choice. You can control these values from
<A HREF="fontinfo.html#TTF-Metrics" TARGET="_top">Element->Font
Info->OS/2->Metrics</A>.
<LI>
On windows<BR>
Line spacing is supposed to be set to the Typo Ascent/Typo Desent values
specified in the OS/2 table. And these in turn are supposed to sum to the
emsize. (FontForge sets these values to the ascent/descent values you specify
for your font). Unfortunately most windows applications don't follow this
rule, and instead base linespacing on the Win Ascent/Descent values of the
OS/2 table. These values are supposed to specify a clipping region for the
font (not line spacing). The clipping region should be as big as the font's
bounding box, but in some cases needs to be bigger. Again these may be set
from <A HREF="fontinfo.html#TTF-Metrics" TARGET="_top">Element->Font
Info->OS/2->Metrics</A>.
<P>
(The clipping region should be bigger than the bounding box if a GPOS lookup
could move a glyph so that it extended beyond the bounding box (mark to base
is likely to cause problems). I'm not sure how this applies to cursive
positioning in Urdu where GPOS lookups can make lines arbetrarily tall)
<P>
MicroSoft has added a redundant bit to the OS/2 table, which essentially
tells applications they should follow the standard and use the Typographic
linespacing fields. This bit is called UseTypoMetrics in OpenType, and in
FontForge it is available as Element->Font Info->OS/2
->Metrics->Really Use Typo Metrics.
<LI>
On linux<BR>
I don't know that there is a general consensus. An application will probably
use one of the above methods.
</UL>
</UL>
<P>
Actually this is not a very useful question any more. Modern fonts tend to
have several different scripts in them and the different scripts may have
different line spacing requirements. Even within one script there may be
differences (English uses no (or extremely few) accented letters, while most
other European languages use accents, thus English could be set more densely
than German).
<P>
Instead of having one global measurement which controls the line spacing
for all uses of the font, it is better to have more specific measures which
control the line spacing dependent on conditions. The OpenType
<A HREF="baseline.html" TARGET="_top">'BASE' table </A>does this. It allows
you to specify extent data depending on script, language and active feature
(for example, a 'mkmk' feature might increase the line spacing). I don't
know whether any applications actually make use of these data
<DT>
<A NAME="em-units"><B>How big will my glyphs be?</B></A>
<DD>
Unfortunately this seemingly simple question cannot be answered. Your glyphs
may be any size. Outline glyphs may be scaled and even bitmap glyphs will
be different sizes depending on the screen resolution.
<P>
Suppose instead that you have an outline font that you draw at 12 points.
Then we can answer the question.
<P>
Suppose you have a dash glyph that is 500 internal units long, and the font
has an em-size of 1000 units. Then your glyph will be 500/1000 * 12 = 6points
long. On a 72 dpi screen this will mean the dash is 6 pixels long.
<P>
<B>What are em-units? (internal units?)</B>
<P>
When you create your font you can use
<A HREF="fontinfo.html#PS-General" TARGET="_top">Element->Font
Info->General</A> to provide an em-size for your font. This is the sum
of the typographic ascent and descent (in the days of metal fonts, the height
of the metal slugs, the baseline to baseline distance). Generally the em-size
will be 1000 or 2048. This gives you the number of internal units (also called
em-units) used to represent em.
<P>
Within fontforge outline glyphs are displayed using the coordinate system
established here. See also the
<A HREF="overview.html#em-unit" TARGET="_top">section on em-units in the
overview.</A>
<DT>
<B><A NAME="license">What's a good license to use on an open source
font?</A></B>
<DD>
Many fonts have been released under one of the licenses designed for open
source programs --
<A HREF="http://www.opensource.org/licenses" TARGET="_top">see the Open Source
Initiative list of approved licenses </A>-- but these generally do not meet
the specific needs of font designers. I know of two licenses specifically
produced for fonts:
<UL>
<LI>
<A HREF="http://scripts.sil.org/OFL" TARGET="_top">The Open Font License
from SIL</A> (and its
<A HREF="http://scripts.sil.org/OFL-FAQ_web">FAQ</A>)<BR>
The above is the license I would
recommend.<A HREF="OFL-Unofficial.html" TARGET="_top"><BR>
A collection of unofficial translations of the OFL</A>. These are not legally
binding but may help non-English speakers get the intent of the license.
<LI>
<A HREF="http://www.gnome.org/fonts/#Final_Bitstream_Vera_fonts" TARGET="_top">The
license Bitstream used to release the Vera fonts</A>
</UL>
<P>
The <A HREF="http://www.gnu.org/licenses/gpl.html">GNU General Public License
</A>is also often used.
<DT>
<A NAME="Minimum"><B>Minimum requirements</B></A>
<DD>
This depends heavily on what you want to do. FontForge is mainly limited
by memory (though screen real estate can be a problem too)
<UL>
<LI>
If you are interested in scripts with no more than few hundred simple glyphs
(like the latin alphabet) then 192Mb is more than enough.
<LI>
If you are doing serious editing of CJK fonts then 512Mb is on the low end
of useablity.
</UL>
<P>
FontForge requires a color (or grey-scale) monitor -- black & white will
not suffice.
<DT>
<A NAME="excessive-memory"><B>Why does FontForge use so much memory?</B></A>
<DD>
Fonts are generally stored in a very compact representation. Font formats
are designed to be small and easily rasterized. They are not designed to
be edited.
<P>
When it loads a font FontForge expands it into a more intuitive (well intuitive
to me) format which is much easier to edit. But is much bigger.
<P>
It would probably be possible to rewrite FontForge to use a more efficient
memory representation. But this would be an enormous amount of work and doesn't
interest me.
<P>
Sfd files are large because they are an ASCII representation of this same
expanded format. They weren't designed to be compact but to be legible.
<P>
See also: <A HREF="#memory">My system keeps crashing because FontForge keeps
running out of memory. What can I do about it?</A>
<DT>
<A NAME="font-install"><B>How do I install the fonts once I've made
them?</B></A>
<DD>
Well it rather depends on what system you are working on, and what type of
font you've got:
<DL>
<DT>
<STRONG>Unix & <A NAME="X-Install">X</A></STRONG>
<DD>
<DL>
<DT>
Outline fonts and fontconfig
<DD>
Many programs now use fontconfig to find fonts (including fontforge). To
install a font for fontconfig, simply copy the file into your ~/.fonts directory.
<DT>
Bitmap fonts, and vanilla X11 installs
<DD>
I'd suggest that you look at the