                      Some notes for developpers
                      ==========================

1. Needed tools

You need a text editor plus ghostscript (http://www.ghostscript.com/).
It would be nice to use a font editor with GUI instead. Does anyone know
if something like that exists as free software (GPL:ed or equivalent)?
 
2. Design considerations 

The font sources are written in the postscript laguage. Each glyph is described
by path construction operators and some special macros in a procedure of its 
own. The glyph procedures assume the default character space coordinate system,
where 1000 units correspond to one user space unit before scaling of the font. 

Since the glyph procedures consist mostly of normal path construction operators
the glyph can be shown by setting up the user coordinte system appropriately, 
calling the procedure, and then issuing fill or stroke, as is done in 
development.ps (note that this file will normally only produce meaningfull 
results in an interactive gs session, not when sent to printer since then 
referenced files will not be available).

To build the font files the different source files are processed by the 
included postscript programmes, normally using make. The dependencies between 
different source files have been coded in the prerequisites of the targets in 
Makefile.

The font source files consist of three categories: .h, .macros, .outlines.
In Misc-Fixed.h global definitions are kept. Among the objects defined in this
file is the fundamental constant sw ("stem width"). In Misc-Fixed.macros two 
kinds of objects reside: multiples of sw, e. g. sw4 -sw0.5, and path 
construction macros common to all outline files, e. g. lrcorner-R. The glyph 
subroutines are in Misc-Fixed.*.outlines.

A typical glyph subroutine looks like

/C {
  0 0 sw6 0 sbw
  0 sw2 moveto sw2 llcornerR sw 0 rlineto sw2 lrcornerR -sw 0 rlineto
  sw lrcorner-R -sw 0 rlineto sw llcorner-R 0 sw5 rlineto sw ulcorner-R
  sw 0 rlineto sw urcorner-R sw 0 rlineto sw2 urcornerR -sw 0 rlineto
  sw2 ulcornerR closepath
} def

The first macro in each complete glyph subroutine MUST be sbw. This sets the 
left side bearing vector (the first two arguments) and the width vector. This 
design is obviously influenced by the Type 1 format, but the information will 
be useful also for other targets such as TrueType. When displayed by 
development.ps sbw will expand to {pop pop pop pop} and do nothing, while in 
the building process it will insert the appropriate form in the compiled glyph
description.

The first path construction element in a complete glyph subroutine MUST be 
moveto to set the starting point for the path. All other movements will be by 
rmoveto.

Use of rlineto and rcurveto is as described in PostScript Language Reference 
("the red book").

To facilitate drawing 90-corners the macros *corner*R exist where the first 
star represents ll (lower left), ur (upper right), lr, and ul and the second 
star expand to nothing or - meaning drawing the corner in mathematically 
positive or negative direction. The macros take the radius of the corner as 
the argument.

The macro scale6 takes seven arguments: the first is a scaling constant 
(typically a multiple of sw) and the rest are arguments to be scaled 
(typically normalised bezier control points). The macro is used in conjunction
with rcurveto to draw bezier curves using a given scale factor, e. g. (taken 
from ampersand)

 sw1.5 0.148594 0.177998 0.232335  0.408983 0.232335  0.640852 scale6 rcurveto

Use of general postscript operators such as mul neg exch is allowed when 
building the arguments to the above mentioned operators and macros.

The name of the procedure should be the postscript name of the glyph. For a 
list relating Unicode codepoints to postscript glyph names, get the Adobe 
Glyph List (http://partners.adobe.com/asn/developer/typeforum/glyphlist.txt). 
For glyphs not contained in that list use the Unicode-based glyphnaming scheme
recommended by Adobe 
(http://partners.adobe.com/asn/developer/typeforum/unicodegn.html). This 
ensures that the names in the CharStrings-dictionary of the Type1 font will be
correct. TrueType, as I understand it, uses a glyph indexing based on Unicode,
thus when the output drivers for TrueType are designed in the future the 
mapping between postscript glyph names and Unicode will be taken care of there.

In all .outlines files except the one holding the special .notdef glyph a 
vector page* with 256 elements is defined and last it is exported by 
/page page00 def. The vector page is used by the font compilation machinery to
find out which (and incidentally also the order of) glyph procedures should be
processed in the file. The vector contains the literal name of the glyphs (/xi
etc.) and the unused elements are filled with /.notdef (which will be ignored 
in this file). This is the only significance of these vectors, they are not 
included in the final font file (especially not in Type1 fonts, since the 
glyphs are referenced by their name in the CharStrings-dictionary). If page is
not defined by the end of the file, it will be assumed that the only glyph 
procedure to get from the file is .notdef.

The glyph shapes are modeled (at least in the first test release) on 
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1. Sometimes 
this leads to too large stilisation, so I have deviated there. I feal that 
this medium semicondensed font is too black. Maybe some other of the 
misc-fixed should be the guideline. Comments?

In "Adobe Type 1 Font Format" tips are given on how to best design glyphs in 
this format.


3. Licensing issues
The font sources and font files are licensed under the GNU Lesser General 
Public License (http://www.gnu.org/copyleft/lesser.html), the auxilliary 
programs used to build the font files from sources distributed in the complete
source package are licensed under the GNU General Public License 
(http://www.gnu.org/copyleft/gpl.html). Copyright is held by the authors of 
the code. This means that it is free software and the usual disclaimer apply:

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

and

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

respectively.


==============================================================================

Contact address see README.
