Directory lout/maps - Lout Character Mapping (LCM) files

Jeffrey H. Kingston
14 March 1996

This directory contains Lout Character Mapping (LCM) files, which define
the names and codes of all characters known to Lout, plus various mappings.
Lout works with all characters via their codes, so it is not possible to
have an unencoded character.

LCM files replace the CEV and CMA files of previous versions of Lout.  The
format has changed but the information in the files is consistent with the
old CEV and CMA files (no changes to the encodings, etc.).  The format
change was needed to implement kerning of accented characters.

LCM files may contain blank lines and comment lines (which begin with #).
Each of the remaining lines defines one character, and must contain the
following entries, in order, separated by white space:

(1) Decimal character code, which must be unique in this file.  These codes
    must appear sorted into increasing order.  Codes not mentioned in this
    file have no associated character.

(2) Octal value of the decimal code, written in ASCII.

(3) Character name.  Width and height information for a character with this
    name must exist in every PostScript font metrics file that shares a Lout
    fontdef with this file, but the character name need not be encoded in the
    font metrics file, nor need any character code there agree with the
    character code here.  Lout will ensure (by including encoding vectors
    in its output) that the character codes defined in this file apply, not
    the codes in font metrics files.
    
    The character name may be -none-, and this is equivalent to omitting the
    line.  There must be no subsequent entries on the line in this case.

    If the character has entry UA below, and there is no kerning information
    for the character in the font metrics file, Lout will apply the kerning
    information for the corresponding unaccented character to the accented
    character.  This is always a good thing to do.

    If the character has entry UA below, and there is no entry in some
    font metrics file for the character, then (contrary to the above)
    instead of complaining that the character is missing from the font
    metrics file, Lout will silently apply the size information for
    the corresponding unaccented character to the accented character.
    Lout will still print the character code for the accented character,
    however.  This is always good horizontally but occasionally not
    enough space is allowed for the character vertically.

(4) Zero or more functions, each beginning with a string identifying which
    function it is, and followed by function-dependent information ending
    in a semicolon.  Functions may appear in any order; omitting a function
    is fine and means that the function does not apply to that character.
    At present the functions are
    
	UC <charname>;   Corresponding upper-case character (must be the
			 name of a character appearing elsewhere in the
			 same file).  This entry is used by Lout when
			 producing small capitals.

        LC <charname>;   Corresponding lower-case character (must be the
			 name of a character appearing elsewhere in the
			 same file).  This entry is not currently used.

        UA <charname>;   Corresponding unaccented character (must be the
			 name of a character appearing elsewhere in the
			 same file).  This entry is used by Lout to
			 guess size and kerning information for accented
			 characters (when this information is missing from
			 some font metrics file) by using the size and
			 kerning information of the corresponding unaccented
			 character.

	AC <charname>;   Name of the accent character (acute, ogonek, etc.)
			 that forms the accent of this character (must be the
			 name of a character appearing elsewhere in the
			 same file).  This entry is not currently used.

The particular LCM files in this directory are:

    Std.LCM       The StandardEncoding encoding vector, exactly as on page
                  598 of the PostScript LRM 2nd Ed., plus the mappings.

    Latin1.LCM    The ISOLatin1Encoding encoding vector, exactly as on page
                  599 of the PostScript LRM 2nd Ed., plus the mappings.
                  This is not usable with Lout as is because the ligature
                  characters fi and fl have no encoding, and because the
                  standard packages use characters not in this encoding.

    LtLatin1.LCM  Equal to Latin1.LCM augmented with some other characters
		  used by Lout and its standard packages.  See the header
		  in the file for the details.

    LtLatin2.LCM  Similar to LtLatin1.LCM but uses the Latin2 character set.

    koi8r.LCM     For Russian

    Symb.LCM      The Symbol encoding vector, exactly as on page 606 of the
		  PostScript LRM 2nd Ed., plus mappings.

    Ding.LCM      The Zapf Dingbats encoding vector, taken from the Zapf
		  Dingbats font metrics file, plus mappings.

    null.LCM      Useful skeleton file for building LCM files.
