Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1989, 1995, 1997, 1998, 1999 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gxchar.h,v 1.14 2003/08/11 19:14:07 igor Exp $ */
18
/* Internal character definition for Ghostscript library */
19
/* Requires gsmatrix.h, gxfixed.h */
20
 
21
#ifndef gxchar_INCLUDED
22
#  define gxchar_INCLUDED
23
 
24
#include "gschar.h"
25
#include "gxtext.h"
26
 
27
/* The type of cached characters is opaque. */
28
#ifndef cached_char_DEFINED
29
#  define cached_char_DEFINED
30
typedef struct cached_char_s cached_char;
31
#endif
32
 
33
/* The type of cached font/matrix pairs is opaque. */
34
#ifndef cached_fm_pair_DEFINED
35
#  define cached_fm_pair_DEFINED
36
typedef struct cached_fm_pair_s cached_fm_pair;
37
#endif
38
 
39
/* The type of font objects is opaque. */
40
#ifndef gs_font_DEFINED
41
#  define gs_font_DEFINED
42
typedef struct gs_font_s gs_font;
43
#endif
44
 
45
/* The type of text enum objects is opaque. */
46
#ifndef gs_text_enum_DEFINED
47
#  define gs_text_enum_DEFINED
48
typedef struct gs_text_enum_s gs_text_enum_t;
49
#endif
50
 
51
/* The types of memory and null devices may be opaque. */
52
#ifndef gx_device_memory_DEFINED
53
#  define gx_device_memory_DEFINED
54
typedef struct gx_device_memory_s gx_device_memory;
55
#endif
56
#ifndef gx_device_null_DEFINED
57
#  define gx_device_null_DEFINED
58
typedef struct gx_device_null_s gx_device_null;
59
#endif
60
 
61
/* An enumeration object for string display. */
62
typedef enum {
63
    sws_none,
64
    sws_cache,			/* setcachedevice[2] */
65
    sws_no_cache,		/* setcharwidth */
66
    sws_cache_width_only,	/* setcharwidth for xfont char */
67
    sws_retry			/* retry setcachedevice[2] */
68
} show_width_status;
69
struct gs_show_enum_s {
70
    /* Put this first for subclassing. */
71
    gs_text_enum_common;	/* (procs, text, index) */
72
    /* Following are set at creation time */
73
    bool auto_release;		/* true if old API, false if new */
74
    gs_state *pgs;
75
    int level;			/* save the level of pgs */
76
    gs_char_path_mode charpath_flag;
77
    gs_state *show_gstate;	/* for setting pgs->show_gstate */
78
				/* at returns/callouts */
79
    int can_cache;		/* -1 if can't use cache at all, */
80
				/* 0 if can read but not load, */
81
				/* 1 if can read and load */
82
    gs_int_rect ibox;		/* int version of quick-check */
83
				/* (inner) clipping box */
84
    gs_int_rect obox;		/* int version of (outer) clip box */
85
    int ftx, fty;		/* transformed font translation */
86
    /* Following are updated dynamically */
87
    gs_glyph (*encode_char)(gs_font *, gs_char, gs_glyph_space_t);  /* copied from font */
88
    gs_log2_scale_point fapi_log2_scale; /* scaling factors for oversampling with FAPI, -1 = not valid */
89
    gs_point fapi_glyph_shift;          /* glyph shift for FAPI-handled font */
90
    gx_device_memory *dev_cache;	/* cache device */
91
    gx_device_memory *dev_cache2;	/* underlying alpha memory device, */
92
				/* if dev_cache is an alpha buffer */
93
    gx_device_null *dev_null;	/* null device for stringwidth */
94
    /*uint index; */		/* index within string */
95
    /*uint xy_index;*/		/* index within X/Y widths */
96
    /*gs_char returned.current_char;*/	/* current char for render or move */
97
    /*gs_glyph returned.current_glyph;*/	/* current glyph ditto */
98
    gs_fixed_point wxy;		/* width of current char */
99
				/* in device coords */
100
    gs_fixed_point origin;	/* unrounded origin of current char */
101
				/* in device coords, needed for */
102
				/* charpath and WMode=1 */
103
    cached_char *cc;		/* being accumulated */
104
    /*gs_point returned.total_width;*/		/* total width of string, set at end */
105
    show_width_status width_status;
106
    /*gs_log2_scale_point log2_scale;*/
107
    int (*continue_proc) (gs_show_enum *);	/* continuation procedure */
108
};
109
#define gs_show_enum_s_DEFINED
110
/* The structure descriptor is public for gschar.c. */
111
#define public_st_gs_show_enum() /* in gxchar.c */\
112
  gs_public_st_composite(st_gs_show_enum, gs_show_enum, "gs_show_enum",\
113
    show_enum_enum_ptrs, show_enum_reloc_ptrs)
114
 
115
/* Get the current character code. */
116
int gx_current_char(const gs_text_enum_t * pte);
117
 
118
/* Cached character procedures (in gxccache.c and gxccman.c) */
119
#ifndef gs_font_dir_DEFINED
120
#  define gs_font_dir_DEFINED
121
typedef struct gs_font_dir_s gs_font_dir;
122
 
123
#endif
124
cached_char *
125
            gx_alloc_char_bits(gs_font_dir *, gx_device_memory *, gx_device_memory *, ushort, ushort, const gs_log2_scale_point *, int);
126
void gx_open_cache_device(gx_device_memory *, cached_char *);
127
void gx_free_cached_char(gs_font_dir *, cached_char *);
128
void gx_add_cached_char(gs_font_dir *, gx_device_memory *, cached_char *, cached_fm_pair *, const gs_log2_scale_point *);
129
void gx_add_char_bits(gs_font_dir *, cached_char *, const gs_log2_scale_point *);
130
cached_char *
131
            gx_lookup_cached_char(const gs_font *, const cached_fm_pair *, gs_glyph, int, int, gs_fixed_point *);
132
cached_char *
133
            gx_lookup_xfont_char(const gs_state *, cached_fm_pair *, gs_char, gs_glyph, int);
134
int gx_image_cached_char(gs_show_enum *, cached_char *);
135
void gx_compute_text_oversampling(const gs_show_enum * penum, const gs_font *pfont,
136
				  int alpha_bits, gs_log2_scale_point *p_log2_scale);
137
int set_char_width(gs_show_enum *penum, gs_state *pgs, floatp wx, floatp wy);
138
int gx_default_text_restore_state(gs_text_enum_t *pte);
139
int gx_hld_stringwidth_begin(gs_imager_state * pis, gx_path **path);
140
 
141
#endif /* gxchar_INCLUDED */