~ubuntu-branches/ubuntu/karmic/luatex/karmic

« back to all changes in this revision

Viewing changes to src/texk/web2c/luatexdir/image/image.h

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Preining
  • Date: 2008-04-15 07:50:17 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20080415075017-syz15wlp1f2ep6lo
Tags: 0.25.2-1
* several new upstreams
* fix poppler patch for 0.4 (etch) to work with split out libpng patch
* fix poppler patch for 0.6
* fix README.Debian-source
* add copyright statement for src/libs/md5 (needed now)
* link the luatex reference manual into /usr/share/doc/texmf to make it
  available to texdoc (Closes: #473049)
* fix doc-base section of luatex-ref manual

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
Copyright (c) 1996-2002 Han The Thanh, <thanh@pdftex.org>
3
3
 
4
4
This file is part of pdfTeX.
5
 
 
6
5
pdfTeX is free software; you can redistribute it and/or modify
7
6
it under the terms of the GNU General Public License as published by
8
7
the Free Software Foundation; either version 2 of the License, or
17
16
along with pdfTeX; if not, write to the Free Software
18
17
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
18
 
20
 
$Id: //depot/Build/source.development/TeX/texk/web2c/pdftexdir/image.h#10 $
 
19
$Id: image.h 1125 2008-03-25 19:36:52Z hhenkel $
21
20
*/
22
21
 
23
 
#include <png.h>
24
 
 
25
 
/* JPG_IMAGE_INFO is main structure for interchange of image data */
26
 
 
27
 
#define JPG_UINT16      unsigned int
28
 
#define JPG_UINT32      unsigned long
29
 
#define JPG_UINT8       unsigned char
30
 
 
31
 
typedef struct {
32
 
    int color_space;            /* used color space. See JPG_ constants */
33
 
    JPG_UINT8 bits_per_component;       /* bits per component                         */
34
 
    JPG_UINT32 length;          /* length of file/data                        */
35
 
    FILE *file;                 /* jpg file                                   */
36
 
} JPG_IMAGE_INFO;
 
22
#ifndef IMAGE_H
 
23
#  define IMAGE_H
 
24
 
 
25
#  include <../libpng/png.h>
 
26
 
 
27
#  define JPG_UINT16      unsigned int
 
28
#  define JPG_UINT32      unsigned long
 
29
#  define JPG_UINT8       unsigned char
 
30
 
 
31
#  define IMAGE_COLOR_B   1
 
32
#  define IMAGE_COLOR_C   2
 
33
#  define IMAGE_COLOR_I   4
 
34
 
 
35
extern integer zround(double);  /* from zround.c */
 
36
#  define bp2int(p)       zround(p * (one_hundred_bp / 100.0))
 
37
 
 
38
#  define TYPE_IMG        "image"
 
39
#  define TYPE_IMG_DICT   "image-dict"
 
40
 
 
41
#  define scaled          integer
 
42
 
 
43
/**********************************************************************/
37
44
 
38
45
typedef struct {
39
46
    png_structp png_ptr;
40
47
    png_infop info_ptr;
41
 
} png_image_struct;
42
 
 
43
 
typedef struct {
44
 
    integer orig_x;
45
 
    integer orig_y;
46
 
    integer selected_page;
47
 
    integer page_box;
48
 
    void *doc;
49
 
} pdf_image_struct;
50
 
 
51
 
typedef struct {
52
 
            integer selected_page;
53
 
                FILE *file;
54
 
} JBIG2_IMAGE_INFO;
55
 
 
56
 
typedef struct {
57
 
    char *image_name;
58
 
    int image_type;
59
 
    int color_type;
60
 
    integer width;
61
 
    integer height;
62
 
    integer x_res;
 
48
} png_img_struct;
 
49
 
 
50
typedef struct {
 
51
    int color_space;            /* used color space. See JPG_ constants */
 
52
    JPG_UINT32 length;          /* length of file/data */
 
53
} jpg_img_struct;
 
54
 
 
55
typedef struct {                /* currently unused */
 
56
} jb2_img_struct;
 
57
 
 
58
typedef enum { DICT_NEW,        /* fresh dictionary */
 
59
    DICT_FILESCANNED,           /* image file scanned */
 
60
    DICT_REFERED,               /* pdf_refximage_node in node list --> read-only dict */
 
61
    DICT_OUTIMG,                /* /Im* appears in pagestream */
 
62
    DICT_SCHEDULED,             /* image dict scheduled for writing */
 
63
    DICT_WRITTEN                /* image dict written to file */
 
64
} dict_state;
 
65
 
 
66
typedef enum { IMAGE_TYPE_NONE, IMAGE_TYPE_PDF, IMAGE_TYPE_PNG, IMAGE_TYPE_JPG,
 
67
    IMAGE_TYPE_JBIG2, IMAGE_TYPE_SENTINEL
 
68
} imgtype_e;
 
69
 
 
70
typedef enum { IMG_KEEPOPEN, IMG_CLOSEINBETWEEN } img_readtype_e;
 
71
 
 
72
typedef enum { PDF_BOX_SPEC_NONE, PDF_BOX_SPEC_MEDIA, PDF_BOX_SPEC_CROP,
 
73
    PDF_BOX_SPEC_BLEED, PDF_BOX_SPEC_TRIM, PDF_BOX_SPEC_ART,
 
74
    PDF_BOX_SPEC_SENTINEL
 
75
} pdfboxspec_e;
 
76
 
 
77
/**********************************************************************/
 
78
 
 
79
typedef struct {
 
80
    integer objnum;
 
81
    integer index;              /* /Im1, /Im2, ... */
 
82
    integer x_size;             /* dimensions in pixel counts as in JPG/PNG/JBIG2 file */
 
83
    integer y_size;
 
84
    integer x_orig;             /* origin in sp for PDF files */
 
85
    integer y_orig;
 
86
    integer x_res;              /* pixel resolution as in JPG/PNG/JBIG2 file */
63
87
    integer y_res;
64
 
    integer num_pages;
65
 
    integer colorspace_ref;
 
88
    integer colorspace;         /* number of /ColorSpace object */
 
89
    integer total_pages;
 
90
    integer page_num;           /* requested page (by number) */
 
91
    char *pagename;             /* requested page (by name) */
 
92
    char *filename;             /* requested raw file name */
 
93
    char *filepath;             /* full file path after kpathsea */
 
94
    char *attr;                 /* additional image dict entries */
 
95
    FILE *file;
 
96
    imgtype_e image_type;
 
97
    int color_space;            /* used color space. See JPG_ constants */
 
98
    int color_depth;            /* color depth */
 
99
    pdfboxspec_e page_box_spec; /* PDF page box spec.: media/crop/bleed/trim/art */
 
100
    dict_state state;
66
101
    union {
67
 
        pdf_image_struct *pdf;
68
 
        png_image_struct png;
69
 
        JPG_IMAGE_INFO *jpg;
70
 
        JBIG2_IMAGE_INFO *jbig2;
71
 
    } image_struct;
72
 
} image_entry;
73
 
 
74
 
extern image_entry *image_ptr, *image_array;
75
 
extern integer image_max;
76
 
 
77
 
#define IMAGE_TYPE_NONE 0
78
 
#define IMAGE_TYPE_PDF  1
79
 
#define IMAGE_TYPE_PNG  2
80
 
#define IMAGE_TYPE_JPG  3
81
 
#define IMAGE_TYPE_TIF  4
82
 
#define IMAGE_TYPE_JBIG2 5
83
 
 
84
 
#define IMAGE_COLOR_B   1
85
 
#define IMAGE_COLOR_C   2
86
 
#define IMAGE_COLOR_I   4
87
 
 
88
 
#define img_ptr(N)      (image_array + (N))
89
 
#define img_name(N)     (img_ptr(N)->image_name)
90
 
#define img_type(N)     (img_ptr(N)->image_type)
91
 
#define img_color(N)    (img_ptr(N)->color_type)
92
 
#define img_colorspace_ref(N) (img_ptr(N)->colorspace_ref)
93
 
#define img_pages(N)    (img_ptr(N)->num_pages)
94
 
#define img_width(N)    (img_ptr(N)->width)
95
 
#define img_height(N)   (img_ptr(N)->height)
96
 
#define img_xres(N)     (img_ptr(N)->x_res)
97
 
#define img_yres(N)     (img_ptr(N)->y_res)
98
 
#define png_ptr(N)      (img_ptr(N)->image_struct.png.png_ptr)
99
 
#define png_info(N)     (img_ptr(N)->image_struct.png.info_ptr)
100
 
#define pdf_ptr(N)      (img_ptr(N)->image_struct.pdf)
101
 
#define jpg_ptr(N)      (img_ptr(N)->image_struct.jpg)
102
 
#define jbig2_ptr(N)    (img_ptr(N)->image_struct.jbig2)
103
 
#define tif_ptr(N)      (img_ptr(N)->image_struct.tif)
104
 
 
105
 
extern integer read_pdf_info (char *, char *, integer, integer, integer,
106
 
                              integer);
107
 
extern void write_epdf (void);
108
 
extern void epdf_delete (void);
109
 
extern void read_png_info (integer);
110
 
extern void write_png (integer);
111
 
extern void read_jpg_info (integer);
112
 
extern void write_jpg (integer);
113
 
extern void read_jbig2_info(integer);
114
 
extern void write_jbig2(integer);
 
102
        png_img_struct *png;
 
103
        jpg_img_struct *jpg;
 
104
        jb2_img_struct *jb2;
 
105
    } img_struct;
 
106
} image_dict;
 
107
 
 
108
#  define img_objnum(N)         ((N)->objnum)
 
109
#  define img_index(N)          ((N)->index)
 
110
#  define img_xsize(N)          ((N)->x_size)
 
111
#  define img_ysize(N)          ((N)->y_size)
 
112
#  define img_xorig(N)          ((N)->x_orig)
 
113
#  define img_yorig(N)          ((N)->y_orig)
 
114
#  define img_xres(N)           ((N)->x_res)
 
115
#  define img_yres(N)           ((N)->y_res)
 
116
#  define img_colorspace(N)     ((N)->colorspace)
 
117
#  define img_totalpages(N)     ((N)->total_pages)
 
118
#  define img_pagenum(N)        ((N)->page_num)
 
119
#  define img_pagename(N)       ((N)->pagename)
 
120
#  define img_filename(N)       ((N)->filename)
 
121
#  define img_filepath(N)       ((N)->filepath)
 
122
#  define img_attr(N)           ((N)->attr)
 
123
#  define img_file(N)           ((N)->file)
 
124
#  define img_type(N)           ((N)->image_type)
 
125
#  define img_color(N)          ((N)->color_space)
 
126
#  define img_colordepth(N)     ((N)->color_depth)
 
127
#  define img_pagebox(N)        ((N)->page_box_spec)
 
128
#  define img_state(N)          ((N)->state)
 
129
 
 
130
#  define img_png_ptr(N)        ((N)->img_struct.png)
 
131
#  define img_png_png_ptr(N)    ((N)->img_struct.png->png_ptr)
 
132
#  define img_png_info_ptr(N)   ((N)->img_struct.png->info_ptr)
 
133
 
 
134
#  define img_jpg_ptr(N)        ((N)->img_struct.jpg)
 
135
#  define img_jpg_color(N)      ((N)->img_struct.jpg->color_space)
 
136
 
 
137
#  define img_jb2_ptr(N)        ((N)->img_struct.jb2)
 
138
 
 
139
/**********************************************************************/
 
140
 
 
141
typedef struct {
 
142
    integer width;              /* requested/actual TeX dimensions */
 
143
    integer height;
 
144
    integer depth;
 
145
    integer transform;
 
146
    integer flags;
 
147
    image_dict *dict;
 
148
    int dict_ref;               /* luaL_ref() reference */
 
149
} image;
 
150
 
 
151
#  define img_width(N)          ((N)->width)
 
152
#  define img_height(N)         ((N)->height)
 
153
#  define img_depth(N)          ((N)->depth)
 
154
#  define img_transform(N)      ((N)->transform)
 
155
#  define img_flags(N)          ((N)->flags)
 
156
#  define img_dict(N)           ((N)->dict)
 
157
#  define img_dictref(N)        ((N)->dict_ref)
 
158
 
 
159
#  define F_FLAG_SCALED         0x01
 
160
#  define F_FLAG_REFERED        0x02
 
161
 
 
162
#  define img_flags(N)          ((N)->flags)
 
163
#  define img_set_scaled(N)     (img_flags(N) |= F_FLAG_SCALED)
 
164
#  define img_set_refered(N)    (img_flags(N) |= F_FLAG_REFERED)
 
165
#  define img_unset_scaled(N)   (img_flags(N) &= ~F_FLAG_SCALED)
 
166
#  define img_unset_refered(N)  (img_flags(N) &= ~F_FLAG_REFERED)
 
167
#  define img_is_scaled(N)      ((img_flags(N) & F_FLAG_SCALED) != 0)
 
168
#  define img_is_refered(N)     ((img_flags(N) & F_FLAG_REFERED) != 0)
 
169
 
 
170
#  define set_wd_running(N)     (img_width(N) = null_flag)
 
171
#  define set_ht_running(N)     (img_height(N) = null_flag)
 
172
#  define set_dp_running(N)     (img_depth(N) = null_flag)
 
173
#  define is_wd_running(N)      (img_width(N) == null_flag)
 
174
#  define is_ht_running(N)      (img_height(N) == null_flag)
 
175
#  define is_dp_running(N)      (img_depth(N) == null_flag)
 
176
 
 
177
/**********************************************************************/
 
178
 
 
179
/* writeimg.c */
 
180
 
 
181
image *new_image();
 
182
image_dict *new_image_dict();
 
183
void init_image(image *);
 
184
void init_image_dict(image_dict *);
 
185
void scale_img(image *);
 
186
integer img_to_array(image *);
 
187
void delete_image(image *);
 
188
void free_image_dict(image_dict * p);
 
189
void read_img(image_dict *, integer, integer);
 
190
 
 
191
/* writepng.c */
 
192
 
 
193
#  ifndef boolean               /* TODO: from where to get the original definition? */
 
194
#    define boolean int
 
195
#  endif
 
196
 
 
197
void read_png_info(image_dict *, img_readtype_e);
 
198
void read_jpg_info(image_dict *, img_readtype_e);
 
199
void read_jbig2_info(image_dict *);
 
200
void read_pdf_info(image_dict *, integer, integer);
 
201
void write_img(image_dict *);
 
202
void write_png(image_dict *);
 
203
void write_jpg(image_dict *);
 
204
void write_jbig2(image_dict *);
 
205
void write_epdf(image_dict *);
 
206
 
 
207
/* pdftoepdf.cc */
 
208
 
 
209
void unrefPdfDocument(char *);
 
210
 
 
211
#endif