summaryrefslogtreecommitdiff
path: root/include/encoding.h
blob: c5e09c8919ff17d5006bffe36aeed948d572f81a (plain)
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
/*
# 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 <http://www.gnu.org/licenses/>.
#
*/



#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 */