1 /* Copyright (C) 2001-2006 Artifex Software, Inc.
2    All Rights Reserved.
3 
4    This software is provided AS-IS with no warranty, either express or
5    implied.
6 
7    This software is distributed under license and may not be copied, modified
8    or distributed except as expressly authorized under the terms of that
9    license.  Refer to licensing information at http://www.artifex.com/
10    or contact Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134,
11    San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
12 */
13 
14 /* $Id: gdevpdtx.h 8022 2007-06-05 22:23:38Z giles $ */
15 /* Shared implementation definitions for pdfwrite text and fonts */
16 
17 #ifndef gdevpdtx_INCLUDED
18 #  define gdevpdtx_INCLUDED
19 
20 #include "gdevpdt.h"
21 
22 /*
23  * The pdfwrite text code is designed in layers.  Each layer uses only
24  * facilities defined in that layer and those below it.  The layers and the
25  * code files that define them are:
26  *
27  * Text processing
28  *   gdevpdtt.c - main text processing and utilities
29  *   gdevpdtc.c - processing for composite and CID-based fonts
30  *   gdevpdte.c - processing for Encoding-based (i.e., all other) fonts
31  *   gdevpdts.c - text state bookkeeping
32  *   gdevpdt[st].h - definitions shared by the above
33  * Font resources
34  *   gdevpdtf.h - interface and public definitions
35  *   gdevpdtf.c - implementation of font resources, except for writing
36  *   gdevpdtw.[hc] - font resource writing
37  * Font descriptors
38  *   gdevpdtd.h - interface and public definitions
39  *   gdevpdtd.c - implementation of font descriptors
40  * Base fonts
41  *   gdevpdtb.h - interface and public definitions
42  *   gdevpdtb.c - implementation of base fonts
43  *
44  * There is also a module for bitmap font processing:
45  *   gdevpdti.h - interface and public definitions
46  *   gdevpdti.c - implementation of bitmap fonts
47  * This handles both text processing and font resource management for
48  * Type 3 bitmap fonts, which don't fit into the layer structure very well.
49  */
50 
51 /* ================ Types and structures ================ */
52 
53 /*
54  * Define the structure for managing the text and font state.  This is
55  * made up of several individually opaque components.
56  */
57 
58 #ifndef pdf_bitmap_fonts_DEFINED
59 #  define pdf_bitmap_fonts_DEFINED
60 typedef struct pdf_bitmap_fonts_s pdf_bitmap_fonts_t;
61 #endif
62 #ifndef pdf_outline_fonts_DEFINED
63 #  define pdf_outline_fonts_DEFINED
64 typedef struct pdf_outline_fonts_s pdf_outline_fonts_t;
65 #endif
66 #ifndef pdf_text_state_DEFINED
67 #  define pdf_text_state_DEFINED
68 typedef struct pdf_text_state_s pdf_text_state_t;
69 #endif
70 
71 /*typedef struct pdf_text_data_s pdf_text_data_t;*/  /* gdevpdfx.h */
72 struct pdf_text_data_s {
73     pdf_outline_fonts_t *outline_fonts;	/* gdevpdtf.c */
74     pdf_bitmap_fonts_t *bitmap_fonts; /* gdevpdti.c */
75     pdf_text_state_t *text_state; /* gdevpdts.c */
76 };
77 #define private_st_pdf_text_data() /* gdevpdt.c */\
78   gs_private_st_ptrs3(st_pdf_text_data, pdf_text_data_t, "pdf_text_data_t",\
79     pdf_text_data_enum_ptrs, pdf_text_data_reloc_ptrs,\
80     outline_fonts, bitmap_fonts, text_state)
81 
82 /* ================ Procedures (internal utilities) ================ */
83 
84 /* The typedef will eventually move to gdevpdfx.h. */
85 typedef struct pdf_font_resource_s pdf_font_resource_t;
86 
87 /* ---------------- Font accessing ---------------- */
88 
89 /* Get the object ID of a font resource. */
90 long pdf_font_id(const pdf_font_resource_t *pdfont);
91 /* Register charproc fonts with the page or substream. */
92 int pdf_used_charproc_resources(gx_device_pdf *pdev, pdf_font_resource_t *pdfont);
93 
94 #endif /* gdevpdtx_INCLUDED */
95