Nfont packages
Nfonts packages
The Arts backend manages fonts using so-called nfonts.
Nfonts are hand-crafted directories with a plist file and the font files, where the backend can find additional information to the fonts.
System-wide available Nfont directories are usually installed to $GNUSTEP_SYSTEM_ROOT/Library/Fonts/.
Creating a nfont is mainly a trivial task, so there are tools to help you creating them. One of them is alexm's mknfonts package.
Example
A typical nfont folder - in this case Arial.nfont packaged by Jeff Teunissen (Deek) - looks like this:
Arial.nfont/ Arial.nfont/ariali.ttf Arial.nfont/arial.ttf Arial.nfont/arialbi.ttf Arial.nfont/arialbd.ttf Arial.nfont/FontInfo.plist Arial.nfont/arialblk.ttf
This is the FontInfo.plist file in that directory:
{
Description = "Monotype Arial, WGL4 Character Set";
Faces = (
{
Files = (
arial.ttf
);
LocalizedNames = {
Basque = Arrunta;
Catalan = Normal;
Danish = normal;
Dutch = Standaard;
English = Regular;
Finnish = Normaali;
French = Normal;
Germany = Standard;
Hungarian = "Norm\u00e1l";
Italian = Normale;
Norwegian = Normal;
Polish = Normalne;
Portuguese = Normal;
Slovak = "Norm\u00e1lne";
Slovene = Navadno;
Spanish = Normal;
Swedish = Normal;
Turkish = Normal;
};
Name = Regular;
PostScriptName = ArialMT;
RenderHints_hack = 0x0002;
Traits = 0;
Weight = 5;
},
{
Files = (
ariali.ttf
);
LocalizedNames = {
English = Italic;
};
Name = Italic;
PostScriptName = "Arial-ItalicMT";
RenderHints_hack = 0x0002;
Traits = 1;
Weight = 5;
},
{
Files = (
arialbd.ttf
);
LocalizedNames = {
English = Bold;
};
Name = Bold;
PostScriptName = "Arial-BoldMT";
RenderHints_hack = 0x0002;
Traits = 2;
Weight = 9;
},
{
Files = (
arialbi.ttf
);
LocalizedNames = {
English = "Bold Italic";
};
Name = "Bold Italic";
PostScriptName = "Arial-BoldItalicMT";
RenderHints_hack = 0x0002;
Traits = 3;
Weight = 9;
},
{
Files = (
arialblk.ttf
);
LocalizedNames = {
English = Black;
};
Name = Black;
PostScriptName = "Arial-Black";
RenderHints_hack = 0x0002;
Traits = 2;
Weight = 12;
}
);
FontCopyright = "Typeface \u00a9 The Monotype Corporation plc.\nData \u00a9 The Monotype Corporation plc/Type Solutions Inc. 1990-1992.\nAll Rights Reserved";
Foundry = "Monotype Typography";
Packager = "Jeff Teunissen <deek@d2dc.net>";
Version = 2.82;
}
Rendering Hints
There's a hack for encoding rendering hints into Nfonts packages. You provide them using the RenderHints_hack value. It's a 24-bit value (usually given in hexadecimal form), where the highest-order byte contains information on if we want to use antialiasing by default and the two following bytes contain hinting information for antialiased displays and non-antialiased displays.
<-- high-order bits low-order bits -->
[ 0 0 0 0 0 0 0 D | 0 0 0 0 0 0 A A | 0 0 0 0 0 0 N N ]
| \ / \ /
antialiasing switch | |
hinting type hinting type
on antialiased displays on non-antialiased displays
The rendering hint types are as follows:
- '0' - unhinted, use only the font geometry
- '1' - use FreeType's auto-hinter
- '2' - use instructions in the font, if present
- '3' - force automatic hinting
Rendering Hint example
Let's say we have a RenderHints-hack-value of 0x010203. This would then mean "use antialiasing, on antialiased displays use instructions in the font and on unantialiased displays force automatic hinting.