summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/luatexdir/font/texfont.h
diff options
context:
space:
mode:
authorTaco Hoekwater <taco@elvenkind.com>2010-04-04 13:55:46 +0000
committerTaco Hoekwater <taco@elvenkind.com>2010-04-04 13:55:46 +0000
commitf372862c42d234710b6057449b46818e63181c90 (patch)
treea9ebec66dd31ac37aed442502ebd1b9fe76245ec /Build/source/texk/web2c/luatexdir/font/texfont.h
parent2dad291ab056f30816e0aea61970f38033c2f6a5 (diff)
import luatex 0.60.0 (with small local changes, see luatexdir/ChangeLog)
and do an autoreconf git-svn-id: svn://tug.org/texlive/trunk@17680 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/font/texfont.h')
-rw-r--r--Build/source/texk/web2c/luatexdir/font/texfont.h283
1 files changed, 143 insertions, 140 deletions
diff --git a/Build/source/texk/web2c/luatexdir/font/texfont.h b/Build/source/texk/web2c/luatexdir/font/texfont.h
index 4963f71cad2..6a021726748 100644
--- a/Build/source/texk/web2c/luatexdir/font/texfont.h
+++ b/Build/source/texk/web2c/luatexdir/font/texfont.h
@@ -1,6 +1,6 @@
/* texfont.h Main font API implementation for the pascal parts
-
- Copyright 2006-2008 Taco Hoekwater <taco@luatex.org>
+
+ Copyright 2006-2010 Taco Hoekwater <taco@luatex.org>
This file is part of LuaTeX.
@@ -17,31 +17,29 @@
You should have received a copy of the GNU General Public License along
with LuaTeX; if not, see <http://www.gnu.org/licenses/>. */
-/* $Id: texfont.h 2448 2009-06-08 07:43:50Z taco $ */
+/* $Id: texfont.h 3482 2010-03-13 11:18:28Z taco $ */
/* Here we have the interface to LuaTeX's font system, as seen from the
main pascal program. There is a companion list in luatex.defines to
keep web2c happy */
/* this file is read at the end of ptexlib.h, which is called for at
- the end of luatexcoerce.h, as well as from the C sources
+ the end of luatexcoerce.h, as well as from the C sources
*/
#ifndef TEXFONT_H
# define TEXFONT_H
-# include "luatexdir/managed-sa.h"
-
# define pointer halfword
typedef struct liginfo {
- integer adj;
- integer lig;
+ int adj;
+ int lig;
char type;
} liginfo;
typedef struct kerninfo {
- integer adj;
+ int adj;
scaled sc;
} kerninfo;
@@ -53,23 +51,23 @@ typedef struct extinfo {
int advance;
int extender;
} extinfo;
-
+/* todo: maybe create a 'math info structure' */
typedef struct charinfo {
char *name; /* postscript character name */
liginfo *ligatures; /* ligature items */
kerninfo *kerns; /* kern items */
- real_eight_bits *packets; /* virtual commands. */
+ eight_bits *packets; /* virtual commands. */
unsigned short index; /* CID index */
- integer remainder; /* spare value for odd items, could be union-ed with extensible */
+ int remainder; /* spare value for odd items, could be union-ed with extensible */
scaled width; /* width */
scaled height; /* height */
scaled depth; /* depth */
scaled italic; /* italic correction */
scaled top_accent; /* top accent alignment */
scaled bot_accent; /* bot accent alignment */
- integer ef; /* font expansion factor */
- integer lp; /* left protruding factor */
- integer rp; /* right protruding factor */
+ int ef; /* font expansion factor */
+ int lp; /* left protruding factor */
+ int rp; /* right protruding factor */
char tag; /* list / ext taginfo */
char used; /* char is typeset ? */
char *tounicode; /* unicode equivalent */
@@ -85,20 +83,6 @@ typedef struct charinfo {
scaled *bottom_left_math_kern_array;
} charinfo;
-
-/* this is for speed reasons, it is called from the web source
- when more than two of the traditional four char values are needed
- at the same time. the structure |charinfo_short| is defined in
- web */
-
-# ifndef luaTeX
-typedef struct charinfo_short {
- scaled ci_wd; /* width */
- scaled ci_ht; /* height */
- scaled ci_dp; /* depth */
-} charinfo_short;
-# endif
-
# define EXT_NORMAL 0
# define EXT_REPEAT 1
@@ -114,66 +98,69 @@ extern extinfo *copy_variants(extinfo * o);
extern extinfo *new_variant(int glyph, int startconnect, int endconnect,
int advance, int repeater);
-extern charinfo_short char_info_short(internal_font_number f, integer c);
+extern scaled_whd get_charinfo_whd(internal_font_number f, int c);
typedef struct texfont {
- integer _font_size;
- integer _font_dsize;
+ int _font_size;
+ int _font_dsize;
+ int _font_units_per_em;
char *_font_name;
char *_font_area;
char *_font_filename;
char *_font_fullname;
+ char *_font_psname;
char *_font_encodingname;
char *_font_cidregistry;
char *_font_cidordering;
- integer _font_cidversion;
- integer _font_cidsupplement;
+ int _font_cidversion;
+ int _font_cidsupplement;
- integer _font_ec;
+ int _font_ec;
unsigned _font_checksum; /* internal information */
char _font_used; /* internal information */
char _font_touched; /* internal information */
- integer _font_cache_id; /* internal information */
+ int _font_cache_id; /* internal information */
char _font_encodingbytes; /* 1 or 2 bytes */
- integer _font_slant; /* a slant in ppt */
- integer _font_extend; /* an extension in ppt, or 0 */
+
+ int _font_slant; /* a slant in ppt */
+ int _font_extend; /* an extension in ppt, or 1000 */
+ int _font_expand_ratio; /* expansion ratio of a particular font */
+ internal_font_number _font_shrink; /* font at limit of shrinking */
+ internal_font_number _font_stretch; /* font at limit of stretching */
+ int _font_step; /* amount of one step of expansion */
+ boolean _font_auto_expand; /* this font is auto-expanded? */
+
char _font_tounicode; /* 1 if info is present */
- fm_entry_ptr _font_map;
- integer _font_type;
- integer _font_format;
- integer _font_embedding;
- integer _font_bc;
- integer _hyphen_char;
- integer _skew_char;
- integer _font_natural_dir;
+ fm_entry *_font_map;
+ int _font_type;
+ int _font_format;
+ int _font_embedding;
+ int _font_bc;
+ int _hyphen_char;
+ int _skew_char;
+ int _font_natural_dir;
charinfo *_left_boundary;
charinfo *_right_boundary;
- integer _font_params;
+ int _font_params;
scaled *_param_base;
- integer _font_math_params;
+ int _font_math_params;
scaled *_math_param_base;
sa_tree characters;
- integer charinfo_count;
- integer charinfo_size;
+ int charinfo_count;
+ int charinfo_size;
charinfo *charinfo;
int *charinfo_cache;
- integer ligatures_disabled;
+ int ligatures_disabled;
- integer _pdf_font_num; /* maps to a PDF resource ID */
- scaled _pdf_font_size; /* maps to a PDF font size */
+ int _pdf_font_num; /* maps to a PDF resource ID */
internal_font_number _pdf_font_blink; /* link to base font for expanded fonts */
internal_font_number _pdf_font_elink; /* link to expanded fonts for base font */
- integer _pdf_font_expand_ratio; /* expansion ratio of a particular font */
- internal_font_number _pdf_font_shrink; /* font at limit of shrinking */
- internal_font_number _pdf_font_stretch; /* font at limit of stretching */
- integer _pdf_font_step; /* amount of one step of expansion */
- boolean _pdf_font_auto_expand; /* this font is auto-expanded? */
str_number _pdf_font_attr; /* pointer to additional attributes */
} texfont;
@@ -216,19 +203,20 @@ extern const char *font_embedding_strings[];
# define font_dsize(a) font_tables[a]->_font_dsize
# define set_font_dsize(a,b) font_dsize(a) = b
+# define font_units_per_em(a) font_tables[a]->_font_units_per_em
+# define set_font_units_per_em(a,b) font_units_per_em(a) = b
+
# define font_name(a) font_tables[a]->_font_name
# define get_font_name(a) (unsigned char *)font_name(a)
# define set_font_name(f,b) font_name(f) = b
# define tex_font_name(a) maketexstring(font_name(a))
-boolean cmp_font_name(integer, str_number);
-
# define font_area(a) font_tables[a]->_font_area
# define get_font_area(a) (unsigned char *)font_area(a)
# define set_font_area(f,b) font_area(f) = b
# define tex_font_area(a) maketexstring(font_area(a))
-boolean cmp_font_area(integer, str_number);
+boolean cmp_font_area(int, str_number);
# define font_reassign(a,b) { if (a!=NULL) free(a); a = b; }
@@ -238,11 +226,12 @@ boolean cmp_font_area(integer, str_number);
# define font_fullname(a) font_tables[a]->_font_fullname
# define set_font_fullname(f,b) font_reassign(font_fullname(f),b)
+# define font_psname(a) font_tables[a]->_font_psname
+# define set_font_psname(f,b) font_reassign(font_psname(f),b)
+
# define font_encodingname(a) font_tables[a]->_font_encodingname
# define set_font_encodingname(f,b) font_reassign(font_encodingname(f),b)
-boolean font_shareable(internal_font_number, internal_font_number);
-
# define cmp_font_filename(a,b) (!(font_filename(a)!=NULL || font_filename(b)!=NULL || \
strcmp(font_filename(a),font_filename(b))))
# define cmp_font_fullname(a,b) (!(font_fullname(a)!=NULL || font_fullname(b)!=NULL || \
@@ -300,6 +289,21 @@ boolean font_shareable(internal_font_number, internal_font_number);
# define font_extend(a) font_tables[a]->_font_extend
# define set_font_extend(a,b) font_extend(a) = b
+# define font_expand_ratio(a) font_tables[a]->_font_expand_ratio
+# define set_font_expand_ratio(a,b) font_expand_ratio(a) = b
+
+# define font_shrink(a) font_tables[a]->_font_shrink
+# define set_font_shrink(a,b) font_shrink(a) = b
+
+# define font_stretch(a) font_tables[a]->_font_stretch
+# define set_font_stretch(a,b) font_stretch(a) = b
+
+# define font_step(a) font_tables[a]->_font_step
+# define set_font_step(a,b) font_step(a) = b
+
+# define font_auto_expand(a) font_tables[a]->_font_auto_expand
+# define set_font_auto_expand(a,b) font_auto_expand(a) = b
+
# define font_tounicode(a) font_tables[a]->_font_tounicode
# define set_font_tounicode(a,b) font_tounicode(a) = b
@@ -312,32 +316,14 @@ boolean font_shareable(internal_font_number, internal_font_number);
# define font_natural_dir(a) font_tables[a]->_font_natural_dir
# define set_font_natural_dir(a,b) font_natural_dir(a) = b
-# define pdf_font_size(a) font_tables[a]->_pdf_font_size
-# define set_pdf_font_size(a,b) pdf_font_size(a) = b
-
# define pdf_font_num(a) font_tables[a]->_pdf_font_num
# define set_pdf_font_num(a,b) pdf_font_num(a) = b
-# define pdf_font_blink(a) font_tables[a]->_pdf_font_blink
-# define set_pdf_font_blink(a,b) pdf_font_blink(a) = b
-
-# define pdf_font_elink(a) font_tables[a]->_pdf_font_elink
-# define set_pdf_font_elink(a,b) pdf_font_elink(a) = b
-
-# define pdf_font_expand_ratio(a) font_tables[a]->_pdf_font_expand_ratio
-# define set_pdf_font_expand_ratio(a,b) pdf_font_expand_ratio(a) = b
-
-# define pdf_font_shrink(a) font_tables[a]->_pdf_font_shrink
-# define set_pdf_font_shrink(a,b) pdf_font_shrink(a) = b
-
-# define pdf_font_stretch(a) font_tables[a]->_pdf_font_stretch
-# define set_pdf_font_stretch(a,b) pdf_font_stretch(a) = b
+# define pdf_font_blink(a) font_tables[a]->_pdf_font_blink
+# define set_pdf_font_blink(a,b) pdf_font_blink(a) = b
-# define pdf_font_step(a) font_tables[a]->_pdf_font_step
-# define set_pdf_font_step(a,b) pdf_font_step(a) = b
-
-# define pdf_font_auto_expand(a) font_tables[a]->_pdf_font_auto_expand
-# define set_pdf_font_auto_expand(a,b) pdf_font_auto_expand(a) = b
+# define pdf_font_elink(a) font_tables[a]->_pdf_font_elink
+# define set_pdf_font_elink(a,b) pdf_font_elink(a) = b
# define pdf_font_attr(a) font_tables[a]->_pdf_font_attr
# define set_pdf_font_attr(a,b) pdf_font_attr(a) = b
@@ -412,9 +398,15 @@ typedef enum {
top_left_kern = 4
} font_math_kern_codes;
-extern charinfo *get_charinfo(internal_font_number f, integer c);
-extern integer char_exists(internal_font_number f, integer c);
-extern charinfo *char_info(internal_font_number f, integer c);
+extern charinfo *get_charinfo(internal_font_number f, int c);
+extern int char_exists(internal_font_number f, int c);
+extern charinfo *char_info(internal_font_number f, int c);
+
+/* Here is a quick way to test if a glyph exists, when you are
+already certain the font |f| exists, and that the |c| is a regular
+glyph id, not one of the two special boundary objects.
+*/
+# define quick_char_exists(f,c) get_sa_item(font_tables[f]->characters,c)
extern void set_charinfo_width(charinfo * ci, scaled val);
extern void set_charinfo_height(charinfo * ci, scaled val);
@@ -430,7 +422,7 @@ extern void set_charinfo_name(charinfo * ci, char *val);
extern void set_charinfo_tounicode(charinfo * ci, char *val);
extern void set_charinfo_ligatures(charinfo * ci, liginfo * val);
extern void set_charinfo_kerns(charinfo * ci, kerninfo * val);
-extern void set_charinfo_packets(charinfo * ci, real_eight_bits * val);
+extern void set_charinfo_packets(charinfo * ci, eight_bits * val);
extern void set_charinfo_extensible(charinfo * ci, int a, int b, int c, int d);
extern void set_charinfo_ef(charinfo * ci, scaled val);
extern void set_charinfo_lp(charinfo * ci, scaled val);
@@ -452,23 +444,23 @@ extern scaled get_charinfo_italic(charinfo * ci);
extern scaled get_charinfo_top_accent(charinfo * ci);
extern scaled get_charinfo_bot_accent(charinfo * ci);
extern char get_charinfo_tag(charinfo * ci);
-extern integer get_charinfo_remainder(charinfo * ci);
+extern int get_charinfo_remainder(charinfo * ci);
extern char get_charinfo_used(charinfo * ci);
-extern integer get_charinfo_index(charinfo * ci);
+extern int get_charinfo_index(charinfo * ci);
extern char *get_charinfo_name(charinfo * ci);
extern char *get_charinfo_tounicode(charinfo * ci);
extern liginfo *get_charinfo_ligatures(charinfo * ci);
extern kerninfo *get_charinfo_kerns(charinfo * ci);
-extern real_eight_bits *get_charinfo_packets(charinfo * ci);
-extern integer get_charinfo_ef(charinfo * ci);
-extern integer get_charinfo_rp(charinfo * ci);
-extern integer get_charinfo_lp(charinfo * ci);
-extern integer get_charinfo_extensible(charinfo * ci, int which);
+extern eight_bits *get_charinfo_packets(charinfo * ci);
+extern int get_charinfo_ef(charinfo * ci);
+extern int get_charinfo_rp(charinfo * ci);
+extern int get_charinfo_lp(charinfo * ci);
+extern int get_charinfo_extensible(charinfo * ci, int which);
-extern integer ext_top(internal_font_number f, integer c);
-extern integer ext_bot(internal_font_number f, integer c);
-extern integer ext_rep(internal_font_number f, integer c);
-extern integer ext_mid(internal_font_number f, integer c);
+extern int ext_top(internal_font_number f, int c);
+extern int ext_bot(internal_font_number f, int c);
+extern int ext_rep(internal_font_number f, int c);
+extern int ext_mid(internal_font_number f, int c);
# define set_ligature_item(f,b,c,d) { f.type = b; f.adj = c; f.lig = d; }
@@ -514,30 +506,30 @@ extern integer ext_mid(internal_font_number f, integer c);
# define list_tag 2 /* character has a successor in a charlist */
# define ext_tag 3 /* character is extensible */
-extern scaled char_height(internal_font_number f, integer c);
-extern scaled char_width(internal_font_number f, integer c);
-extern scaled char_depth(internal_font_number f, integer c);
-extern scaled char_italic(internal_font_number f, integer c);
-extern scaled char_top_accent(internal_font_number f, integer c);
-extern scaled char_bot_accent(internal_font_number f, integer c);
+extern scaled char_height(internal_font_number f, int c);
+extern scaled char_width(internal_font_number f, int c);
+extern scaled char_depth(internal_font_number f, int c);
+extern scaled char_italic(internal_font_number f, int c);
+extern scaled char_top_accent(internal_font_number f, int c);
+extern scaled char_bot_accent(internal_font_number f, int c);
-extern liginfo *char_ligatures(internal_font_number f, integer c);
-extern kerninfo *char_kerns(internal_font_number f, integer c);
-extern real_eight_bits *char_packets(internal_font_number f, integer c);
+extern liginfo *char_ligatures(internal_font_number f, int c);
+extern kerninfo *char_kerns(internal_font_number f, int c);
+extern eight_bits *char_packets(internal_font_number f, int c);
# define has_lig(f,b) (char_exists(f,b) &&( char_ligatures(f,b) != NULL))
# define has_kern(f,b) (char_exists(f,b) && (char_kerns(f,b) != NULL))
# define has_packet(f,b) (char_exists(f,b) && (char_packets(f,b) != NULL))
-extern integer char_remainder(internal_font_number f, integer c);
-extern char char_tag(internal_font_number f, integer c);
-extern char char_used(internal_font_number f, integer c);
-extern char *char_name(internal_font_number f, integer c);
-extern integer char_index(internal_font_number f, integer c);
+extern int char_remainder(internal_font_number f, int c);
+extern char char_tag(internal_font_number f, int c);
+extern char char_used(internal_font_number f, int c);
+extern char *char_name(internal_font_number f, int c);
+extern int char_index(internal_font_number f, int c);
-scaled raw_get_kern(internalfontnumber f, integer lc, integer rc);
-scaled get_kern(internalfontnumber f, integer lc, integer rc);
-liginfo get_ligature(internalfontnumber f, integer lc, integer rc);
+scaled raw_get_kern(internal_font_number f, int lc, int rc);
+scaled get_kern(internal_font_number f, int lc, int rc);
+liginfo get_ligature(internal_font_number f, int lc, int rc);
# define EXT_TOP 0
# define EXT_BOT 1
@@ -546,44 +538,43 @@ liginfo get_ligature(internalfontnumber f, integer lc, integer rc);
extern texfont **font_tables;
-integer new_font(void);
-integer copy_font(integer id);
-integer scale_font(integer id, integer atsize);
-integer max_font_id(void);
-void set_max_font_id(integer id);
-integer new_font_id(void);
+int new_font(void);
+extern void font_malloc_charinfo(internal_font_number f, int num);
+int copy_font(int id);
+int scale_font(int id, int atsize);
+int max_font_id(void);
+void set_max_font_id(int id);
+int new_font_id(void);
void create_null_font(void);
-void delete_font(integer id);
-boolean is_valid_font(integer id);
+void delete_font(int id);
+boolean is_valid_font(int id);
void dump_font(int font_number);
void undump_font(int font_number);
-integer test_no_ligatures(internal_font_number f);
+int test_no_ligatures(internal_font_number f);
void set_no_ligatures(internal_font_number f);
-extern integer get_tag_code(internal_font_number f, integer c);
-extern integer get_lp_code(internal_font_number f, integer c);
-extern integer get_rp_code(internal_font_number f, integer c);
-extern integer get_ef_code(internal_font_number f, integer c);
+extern int get_tag_code(internal_font_number f, int c);
+extern int get_lp_code(internal_font_number f, int c);
+extern int get_rp_code(internal_font_number f, int c);
+extern int get_ef_code(internal_font_number f, int c);
-extern void set_tag_code(internal_font_number f, integer c, integer i);
-extern void set_lp_code(internal_font_number f, integer c, integer i);
-extern void set_rp_code(internal_font_number f, integer c, integer i);
-extern void set_ef_code(internal_font_number f, integer c, integer i);
+extern void set_tag_code(internal_font_number f, int c, int i);
+extern void set_lp_code(internal_font_number f, int c, int i);
+extern void set_rp_code(internal_font_number f, int c, int i);
+extern void set_ef_code(internal_font_number f, int c, int i);
int read_tfm_info(internal_font_number f, const char *nom, scaled s);
/* from dofont.c */
-extern int read_font_info(pointer u, str_number nom, scaled s, integer ndir);
+extern int read_font_info(pointer u, char *cnom, scaled s, int ndir);
extern int find_font_id(const char *nom, scaled s);
/* for and from vfpacket.c */
-# define scan_special 3 /* look into special text */ /* this is a hack */
-
typedef enum { packet_char_code,
packet_font_code,
packet_pop_code,
@@ -598,11 +589,23 @@ typedef enum { packet_char_code,
packet_end_code
} packet_command_codes;
-extern scaled store_scaled_f(scaled sq, integer fw);
+extern scaled store_scaled_f(scaled sq, int fw);
-extern void do_vf_packet(internal_font_number vf_f, integer c);
+extern void do_vf_packet(PDF pdf, internal_font_number vf_f, int c);
extern int vf_packet_bytes(charinfo * co);
-charinfo *copy_charinfo(charinfo * ci);
+extern charinfo *copy_charinfo(charinfo * ci);
+
+/* this function is in vfovf.c for the moment */
+extern int make_vf_table(lua_State * L, const char *name, scaled s);
+
+/* some bits of the old interface, used by e.g. writet3.c */
+
+# define get_x_height(f) x_height(f)
+# define get_quad(f) quad(f)
+# define get_slant(f) slant(f)
+# define get_charwidth(f,c) (char_exists(f,c) ? char_width(f,c) : 0)
+# define get_charheight(f,c) (char_exists(f,c) ? char_height(f,c) : 0)
+# define get_chardepth(f,c) (char_exists(f,c) ? char_depth(f,c) : 0)
#endif /* TEXFONT_H */