/* # encoding.h: parse a font encoding (.enc) file. # # Copyright (C) 1992, 2011 Free Software Foundation, Inc. # # 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 3 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. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # */ #ifndef ENCODING_H #define ENCODING_H #include "font.h" #include "list.h" #include "types.h" /* A single character from the encoding file. Since we usually want to deal with the entire collection of characters as a group, we don't define any accessor macros for this structure, but rather the next. */ typedef struct { string name; list_type ligature; } encoding_char_type; /* The size of font's encoding vector (PostScript defines this). */ #define ENCODING_VECTOR_SIZE 256 /* The collection of all the information from the file. */ typedef struct { string coding_scheme; encoding_char_type encoding_char[ENCODING_VECTOR_SIZE]; } encoding_info_type; /* The name of the encoding scheme in E_I. */ #define ENCODING_SCHEME_NAME(e_i) ((e_i).coding_scheme) /* The Nth encoding character in E_I. */ #define ENCODING_CHAR_ELT(e_i, n) ((e_i).encoding_char[n]) /* The name of the character CODE in the encoding structure E_I, or NULL if the character doesn't exist. */ #define ENCODING_CHAR_NAME(e_i, code) (ENCODING_CHAR_ELT (e_i, code).name) /* The ligature table for the character code in the encoding structure E_I. Each element of the list is a pointer to a `tfm_ligature_type'. The list is garbage if the character doesn't exist. */ #define ENCODING_CHAR_LIG(e_i, code) (ENCODING_CHAR_ELT (e_i, code).ligature) /* If an encoding file is mandatory for a program to operate, and the user does not specify one, the program should use this. */ #define DEFAULT_ENCODING "ascii" /* Returns the character code for the character named NAME in E_I, or -1 if NAME is not present or NULL. */ extern int encoding_number (encoding_info_type e_i, string name); /* Return the basename for the encoding file in which the encoding CODINGSCHEME can be found. Reads the library file (see `libfile.h') `encoding.map'. Case is ignored in the comparison with CODINGSCHEME. If CODINGSCHEME is not present in `encoding.map', issue a warning and return some default. */ extern string coding_scheme_to_filename (string codingscheme); /* Read the library file (see `libfile.h') `FILENAME.enc', and return the information it contains. If the file cannot be opened, give a fatal error. */ extern encoding_info_type read_encoding_file (string filename); #endif /* not ENCODING_H */