00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __HPGS_READER_H__
00035 #define __HPGS_READER_H__
00036
00037 #include <hpgs.h>
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00051 #define MM_TO_PT (72.0 / 25.4)
00052 #define HP_TO_PT (72.0 / (25.4 * 40.0))
00053
00054 #define MAKE_COMMAND(a,b) (((int)(a) << 8) + (b))
00055
00056 #define AA_CMD MAKE_COMMAND('A','A')
00057 #define AC_CMD MAKE_COMMAND('A','C')
00058 #define AD_CMD MAKE_COMMAND('A','D')
00059 #define AR_CMD MAKE_COMMAND('A','R')
00060 #define AT_CMD MAKE_COMMAND('A','T')
00061 #define BP_CMD MAKE_COMMAND('B','P')
00062 #define BR_CMD MAKE_COMMAND('B','R')
00063 #define BZ_CMD MAKE_COMMAND('B','Z')
00064 #define CI_CMD MAKE_COMMAND('C','I')
00065 #define CO_CMD MAKE_COMMAND('C','O')
00066 #define CP_CMD MAKE_COMMAND('C','P')
00067 #define CR_CMD MAKE_COMMAND('C','R')
00068 #define DI_CMD MAKE_COMMAND('D','I')
00069 #define DR_CMD MAKE_COMMAND('D','R')
00070 #define DT_CMD MAKE_COMMAND('D','T')
00071 #define DV_CMD MAKE_COMMAND('D','V')
00072 #define EA_CMD MAKE_COMMAND('E','A')
00073 #define EP_CMD MAKE_COMMAND('E','P')
00074 #define ER_CMD MAKE_COMMAND('E','R')
00075 #define ES_CMD MAKE_COMMAND('E','S')
00076 #define EW_CMD MAKE_COMMAND('E','W')
00077 #define FP_CMD MAKE_COMMAND('F','P')
00078 #define FR_CMD MAKE_COMMAND('F','R')
00079 #define FT_CMD MAKE_COMMAND('F','T')
00080 #define IN_CMD MAKE_COMMAND('I','N')
00081 #define IP_CMD MAKE_COMMAND('I','P')
00082 #define IR_CMD MAKE_COMMAND('I','R')
00083 #define IW_CMD MAKE_COMMAND('I','W')
00084 #define LA_CMD MAKE_COMMAND('L','A')
00085 #define LB_CMD MAKE_COMMAND('L','B')
00086 #define LO_CMD MAKE_COMMAND('L','O')
00087 #define LT_CMD MAKE_COMMAND('L','T')
00088 #define MC_CMD MAKE_COMMAND('M','C')
00089 #define MG_CMD MAKE_COMMAND('M','G')
00090 #define NP_CMD MAKE_COMMAND('N','P')
00091 #define PA_CMD MAKE_COMMAND('P','A')
00092 #define PC_CMD MAKE_COMMAND('P','C')
00093 #define PD_CMD MAKE_COMMAND('P','D')
00094 #define PE_CMD MAKE_COMMAND('P','E')
00095 #define PG_CMD MAKE_COMMAND('P','G')
00096 #define PM_CMD MAKE_COMMAND('P','M')
00097 #define PP_CMD MAKE_COMMAND('P','P')
00098 #define PR_CMD MAKE_COMMAND('P','R')
00099 #define PS_CMD MAKE_COMMAND('P','S')
00100 #define PU_CMD MAKE_COMMAND('P','U')
00101 #define PW_CMD MAKE_COMMAND('P','W')
00102 #define RA_CMD MAKE_COMMAND('R','A')
00103 #define RO_CMD MAKE_COMMAND('R','O')
00104 #define RR_CMD MAKE_COMMAND('R','R')
00105 #define RT_CMD MAKE_COMMAND('R','T')
00106 #define SA_CMD MAKE_COMMAND('S','A')
00107 #define SC_CMD MAKE_COMMAND('S','C')
00108 #define SD_CMD MAKE_COMMAND('S','D')
00109 #define SI_CMD MAKE_COMMAND('S','I')
00110 #define SL_CMD MAKE_COMMAND('S','L')
00111 #define SM_CMD MAKE_COMMAND('S','M')
00112 #define SP_CMD MAKE_COMMAND('S','P')
00113 #define SR_CMD MAKE_COMMAND('S','R')
00114 #define SS_CMD MAKE_COMMAND('S','S')
00115 #define TR_CMD MAKE_COMMAND('T','R')
00116 #define UL_CMD MAKE_COMMAND('U','L')
00117 #define WG_CMD MAKE_COMMAND('W','G')
00118 #define WU_CMD MAKE_COMMAND('W','U')
00119
00124 typedef struct hpgs_reader_poly_point_st hpgs_reader_poly_point;
00125
00131 struct hpgs_reader_poly_point_st
00132 {
00133 hpgs_point p;
00134 int flag;
00135 };
00136
00137 typedef struct hpgs_reader_pcl_palette_st hpgs_reader_pcl_palette;
00138
00143 struct hpgs_reader_pcl_palette_st
00144 {
00145 hpgs_palette_color colors[256];
00146 hpgs_palette_color last_color;
00148 int cid_space;
00149 int cid_enc;
00150 int cid_bpi;
00151 int cid_bpc[3];
00152 };
00153
00154 typedef struct hpgs_reader_pcl_bitmap_font_st hpgs_reader_pcl_bitmap_font;
00155 typedef struct hpgs_reader_pcl_bitmap_character_st hpgs_reader_pcl_bitmap_character;
00156
00161 struct hpgs_reader_pcl_bitmap_font_st
00162 {
00163 int font_id;
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196 double pitch;
00198 double height;
00200 double baseline_position;
00201 int x_resolution;
00202 int y_resolution;
00204 hpgs_reader_pcl_bitmap_character *characters[256];
00205 };
00206
00211 struct hpgs_reader_pcl_bitmap_character_st {
00212
00213 int width;
00214 int height;
00215 int top_offset;
00216 int left_offset;
00217 int delta_x;
00218 int orientation;
00219
00220 hpgs_image *image;
00221 };
00222
00223 HPGS_INTERNAL_API void hpgs_reader_pcl_bitmap_font_destroy (hpgs_reader_pcl_bitmap_font *font);
00224 HPGS_INTERNAL_API void hpgs_reader_pcl_bitmap_character_destroy (hpgs_reader_pcl_bitmap_character *character);
00225
00226 HPGS_INTERNAL_API int hpgs_reader_pcl_bitmap_character_render(hpgs_reader *reader,
00227 const hpgs_reader_pcl_bitmap_font *font, int charcode);
00228
00235 struct hpgs_reader_st
00236 {
00237 hpgs_istream *in;
00238 hpgs_device *device;
00239 hpgs_device *plotsize_device;
00241 int current_page;
00243 int verbosity;
00245 double lw_factor;
00246
00248 double x_size,y_size;
00251 double frame_x,frame_y;
00252 hpgs_point P1;
00253 hpgs_point P2;
00254 hpgs_point delta_P;
00255 int rotation;
00257
00259 int sc_type;
00260 double sc_xmin;
00261 double sc_xmax;
00262 double sc_ymin;
00263 double sc_ymax;
00264 double sc_left;
00265 double sc_bottom;
00268 int rop3;
00269 hpgs_bool src_transparency;
00270 hpgs_bool pattern_transparency;
00272 hpgs_matrix world_matrix;
00275 double world_scale;
00277 hpgs_matrix page_matrix;
00281 double page_scale;
00283 hpgs_matrix total_matrix;
00285 double total_scale;
00287 int page_mode;
00289 double page_width;
00290 double page_height;
00291 double page_angle;
00292 double page_border;
00294 hpgs_bbox page_bbox;
00295 hpgs_bbox content_bbox;
00297 void *page_asset_ctxt;
00298 hpgs_reader_asset_func_t page_asset_func;
00300 void *frame_asset_ctxt;
00301 hpgs_reader_asset_func_t frame_asset_func;
00303
00305 int linetype_nsegs[17];
00306 float linetype_segs[17][20];
00309
00311 int npens;
00312 double *pen_widths;
00313 hpgs_color *pen_colors;
00316 hpgs_color min_color;
00317 hpgs_color max_color;
00319
00321 char label_term;
00322 int label_term_ignore;
00325 int polygon_mode;
00327
00329 hpgs_reader_poly_point *poly_buffer;
00330 int poly_buffer_size;
00331 int poly_buffer_alloc_size;
00334 int polygon_open;
00335 int pen_width_relative;
00336 int pen_down;
00337 int current_pen;
00338 int current_linetype;
00339 int absolute_plotting;
00340 int have_current_point;
00341 hpgs_point current_point;
00343 hpgs_point first_path_point;
00344 hpgs_point min_path_point;
00345 hpgs_point max_path_point;
00346 hpgs_point anchor_point;
00348 int current_ft;
00349 double ft3_angle;
00350 double ft3_spacing;
00351 double ft4_angle;
00352 double ft4_spacing;
00353 double ft10_level;
00355
00357 int default_encoding;
00358 int default_face;
00359 int default_spacing;
00360 double default_pitch;
00361 double default_height;
00362 int default_posture;
00363 int default_weight;
00366
00368 int alternate_encoding;
00369 int alternate_face;
00370 int alternate_spacing;
00371 double alternate_pitch;
00372 double alternate_height;
00373 int alternate_posture;
00374 int alternate_weight;
00377 int alternate_font;
00379
00381 hpgs_point cr_point;
00382 hpgs_point current_char_size;
00383 hpgs_point current_extra_space;
00384 double current_slant;
00385 int current_label_origin;
00386 int current_text_path;
00387 int current_text_line;
00388 double current_label_angle;
00391 double pcl_scale;
00392 double pcl_hmi;
00393 double pcl_vmi;
00394 hpgs_point pcl_point;
00396 hpgs_reader_pcl_bitmap_font **pcl_bitmap_fonts;
00397 size_t pcl_bitmap_fonts_alloc_size;
00398 size_t pcl_bitmap_fonts_size;
00400 int pcl_current_bitmap_font_id;
00401 hpgs_reader_pcl_bitmap_font *pcl_current_bitmap_font;
00402 hpgs_reader_pcl_bitmap_font *pcl_primary_bitmap_font;
00404 int pcl_current_character_code;
00406 hpgs_reader_pcl_palette **pcl_palettes;
00407 size_t pcl_n_palettes;
00408 int pcl_i_palette;
00410 int pcl_pattern;
00411 hpgs_palette_color pcl_foreground_color;
00413 int pcl_raster_mode;
00415 int pcl_raster_presentation;
00416 int pcl_raster_src_width;
00417 int pcl_raster_src_height;
00418 int pcl_raster_dest_width;
00419 int pcl_raster_dest_height;
00420 int pcl_raster_res;
00421 int pcl_raster_compression;
00422 int pcl_raster_y_offset;
00423 int pcl_raster_plane;
00424 int pcl_raster_line;
00426 unsigned char *pcl_raster_data[8];
00427 int pcl_raster_data_size;
00428 int pcl_raster_planes;
00431 hpgs_image *pcl_image;
00433
00434 int png_dump_count;
00435 char *png_dump_filename;
00437 int clipsave_depth;
00439 int last_byte;
00440 int bytes_ignored;
00441 int eoc;
00442 hpgs_bool interrupted;
00443 };
00444
00445 HPGS_INTERNAL_API int hpgs_reader_check_param_end(hpgs_reader *reader);
00446
00453 HPGS_INTERNAL_API int hpgs_reader_read_pcl_int(hpgs_reader *reader, int *x, int *sign);
00454
00461 HPGS_INTERNAL_API int hpgs_reader_read_int(hpgs_reader *reader, int *x);
00462
00469 HPGS_INTERNAL_API int hpgs_reader_read_double(hpgs_reader *reader, double *x);
00470 HPGS_INTERNAL_API int hpgs_reader_read_point(hpgs_reader *reader, hpgs_point *p, int xform);
00471
00478 HPGS_INTERNAL_API int hpgs_reader_read_new_string(hpgs_reader *reader, char *str);
00479 HPGS_INTERNAL_API int hpgs_reader_read_label_string(hpgs_reader *reader, char *str);
00480
00481 HPGS_INTERNAL_API void hpgs_reader_set_page_matrix (hpgs_reader *reader, const hpgs_bbox *bb);
00482 HPGS_INTERNAL_API void hpgs_reader_set_default_transformation (hpgs_reader *reader);
00483 HPGS_INTERNAL_API void hpgs_reader_set_default_state (hpgs_reader *reader);
00484 HPGS_INTERNAL_API void hpgs_reader_set_defaults (hpgs_reader *reader);
00485 HPGS_INTERNAL_API int hpgs_reader_set_plotsize (hpgs_reader *reader, double xs, double ys);
00486 HPGS_INTERNAL_API int hpgs_reader_showpage (hpgs_reader *reader, int ipage);
00487
00488 HPGS_INTERNAL_API void hpgs_reader_set_std_pen_colors(hpgs_reader *reader,
00489 int i0, int n);
00490
00491 HPGS_INTERNAL_API int hpgs_reader_checkpath(hpgs_reader *reader);
00492
00493 HPGS_INTERNAL_API int hpgs_reader_moveto(hpgs_reader *reader, hpgs_point *p);
00494 HPGS_INTERNAL_API int hpgs_reader_lineto(hpgs_reader *reader, hpgs_point *p);
00495 HPGS_INTERNAL_API int hpgs_reader_curveto(hpgs_reader *reader,
00496 hpgs_point *p1, hpgs_point *p2, hpgs_point *p3);
00497 HPGS_INTERNAL_API int hpgs_reader_stroke(hpgs_reader *reader);
00498 HPGS_INTERNAL_API int hpgs_reader_fill(hpgs_reader *reader, hpgs_bool winding);
00499 HPGS_INTERNAL_API int hpgs_reader_closepath(hpgs_reader *reader);
00500
00501 HPGS_INTERNAL_API int hpgs_reader_do_setpen(hpgs_reader *reader, int pen);
00502
00507 HPGS_INTERNAL_API int hpgs_device_setrgb_all(hpgs_device *dev, const hpgs_color *rgb);
00508
00509 HPGS_INTERNAL_API int hpgs_reader_label(hpgs_reader *reader,
00510 const char *str, int str_len,
00511 int face,
00512 int encoding,
00513 int posture,
00514 int weight,
00515 const hpgs_point *left_vec,
00516 const hpgs_point *up_vec,
00517 const hpgs_point *space_vec);
00518
00519 HPGS_INTERNAL_API int hpgs_device_label(hpgs_device *dev,
00520 hpgs_point *pos,
00521 const char *str, int str_len,
00522 int face,
00523 const char *encoding,
00524 int posture,
00525 int weight,
00526 const hpgs_point *left_vec,
00527 const hpgs_point *up_vec,
00528 const hpgs_point *space_vec);
00529
00530 typedef int (*hpgs_reader_hpglcmd_func_t)(hpgs_reader *reader);
00531
00532 HPGS_INTERNAL_API int hpgs_reader_do_PCL(hpgs_reader *reader, hpgs_bool take_pos);
00533 HPGS_INTERNAL_API int hpgs_reader_do_PJL(hpgs_reader *reader);
00534
00535 HPGS_INTERNAL_API int hpgs_reader_push_pcl_palette (hpgs_reader *reader);
00536 HPGS_INTERNAL_API int hpgs_reader_pop_pcl_palette (hpgs_reader *reader);
00537
00538 HPGS_INTERNAL_API int hpgs_reader_pcl_cmd_font_id (hpgs_reader *reader, int arg);
00539 HPGS_INTERNAL_API int hpgs_reader_pcl_cmd_font_header (hpgs_reader *reader, int arg);
00540 HPGS_INTERNAL_API int hpgs_reader_pcl_cmd_select_font_id (hpgs_reader *reader, int arg);
00541 HPGS_INTERNAL_API int hpgs_reader_pcl_cmd_character_definition (hpgs_reader *reader, int arg);
00542
00543 HPGS_INTERNAL_API int hpgs_reader_do_AA(hpgs_reader *reader);
00544 HPGS_INTERNAL_API int hpgs_reader_do_AC(hpgs_reader *reader);
00545 HPGS_INTERNAL_API int hpgs_reader_do_AD(hpgs_reader *reader);
00546 HPGS_INTERNAL_API int hpgs_reader_do_AR(hpgs_reader *reader);
00547 HPGS_INTERNAL_API int hpgs_reader_do_AT(hpgs_reader *reader);
00548 HPGS_INTERNAL_API int hpgs_reader_do_BP(hpgs_reader *reader);
00549 HPGS_INTERNAL_API int hpgs_reader_do_BR(hpgs_reader *reader);
00550 HPGS_INTERNAL_API int hpgs_reader_do_BZ(hpgs_reader *reader);
00551 HPGS_INTERNAL_API int hpgs_reader_do_CI(hpgs_reader *reader);
00552 HPGS_INTERNAL_API int hpgs_reader_do_CO(hpgs_reader *reader);
00553 HPGS_INTERNAL_API int hpgs_reader_do_CP(hpgs_reader *reader);
00554 HPGS_INTERNAL_API int hpgs_reader_do_CR(hpgs_reader *reader);
00555 HPGS_INTERNAL_API int hpgs_reader_do_DI(hpgs_reader *reader);
00556 HPGS_INTERNAL_API int hpgs_reader_do_DR(hpgs_reader *reader);
00557 HPGS_INTERNAL_API int hpgs_reader_do_DT(hpgs_reader *reader);
00558 HPGS_INTERNAL_API int hpgs_reader_do_DV(hpgs_reader *reader);
00559 HPGS_INTERNAL_API int hpgs_reader_do_EA(hpgs_reader *reader);
00560 HPGS_INTERNAL_API int hpgs_reader_do_EP(hpgs_reader *reader);
00561 HPGS_INTERNAL_API int hpgs_reader_do_ER(hpgs_reader *reader);
00562 HPGS_INTERNAL_API int hpgs_reader_do_ES(hpgs_reader *reader);
00563 HPGS_INTERNAL_API int hpgs_reader_do_EW(hpgs_reader *reader);
00564 HPGS_INTERNAL_API int hpgs_reader_do_FP(hpgs_reader *reader);
00565 HPGS_INTERNAL_API int hpgs_reader_do_FR(hpgs_reader *reader);
00566 HPGS_INTERNAL_API int hpgs_reader_do_FT(hpgs_reader *reader);
00567 HPGS_INTERNAL_API int hpgs_reader_do_IN(hpgs_reader *reader);
00568 HPGS_INTERNAL_API int hpgs_reader_do_IP(hpgs_reader *reader);
00569 HPGS_INTERNAL_API int hpgs_reader_do_IR(hpgs_reader *reader);
00570 HPGS_INTERNAL_API int hpgs_reader_do_IW(hpgs_reader *reader);
00571 HPGS_INTERNAL_API int hpgs_reader_do_LA(hpgs_reader *reader);
00572 HPGS_INTERNAL_API int hpgs_reader_do_LB(hpgs_reader *reader);
00573 HPGS_INTERNAL_API int hpgs_reader_do_LO(hpgs_reader *reader);
00574 HPGS_INTERNAL_API int hpgs_reader_do_LT(hpgs_reader *reader);
00575 HPGS_INTERNAL_API int hpgs_reader_do_MC(hpgs_reader *reader);
00576 HPGS_INTERNAL_API int hpgs_reader_do_MG(hpgs_reader *reader);
00577 HPGS_INTERNAL_API int hpgs_reader_do_NP(hpgs_reader *reader);
00578 HPGS_INTERNAL_API int hpgs_reader_do_PC(hpgs_reader *reader);
00579 HPGS_INTERNAL_API int hpgs_reader_do_PA(hpgs_reader *reader);
00580 HPGS_INTERNAL_API int hpgs_reader_do_PD(hpgs_reader *reader);
00581 HPGS_INTERNAL_API int hpgs_reader_do_PE(hpgs_reader *reader);
00582 HPGS_INTERNAL_API int hpgs_reader_do_PG(hpgs_reader *reader);
00583 HPGS_INTERNAL_API int hpgs_reader_do_PM(hpgs_reader *reader);
00584 HPGS_INTERNAL_API int hpgs_reader_do_PP(hpgs_reader *reader);
00585 HPGS_INTERNAL_API int hpgs_reader_do_PR(hpgs_reader *reader);
00586 HPGS_INTERNAL_API int hpgs_reader_do_PS(hpgs_reader *reader);
00587 HPGS_INTERNAL_API int hpgs_reader_do_PU(hpgs_reader *reader);
00588 HPGS_INTERNAL_API int hpgs_reader_do_PW(hpgs_reader *reader);
00589 HPGS_INTERNAL_API int hpgs_reader_do_RA(hpgs_reader *reader);
00590 HPGS_INTERNAL_API int hpgs_reader_do_RO(hpgs_reader *reader);
00591 HPGS_INTERNAL_API int hpgs_reader_do_RR(hpgs_reader *reader);
00592 HPGS_INTERNAL_API int hpgs_reader_do_RT(hpgs_reader *reader);
00593 HPGS_INTERNAL_API int hpgs_reader_do_SA(hpgs_reader *reader);
00594 HPGS_INTERNAL_API int hpgs_reader_do_SC(hpgs_reader *reader);
00595 HPGS_INTERNAL_API int hpgs_reader_do_SD(hpgs_reader *reader);
00596 HPGS_INTERNAL_API int hpgs_reader_do_SI(hpgs_reader *reader);
00597 HPGS_INTERNAL_API int hpgs_reader_do_SL(hpgs_reader *reader);
00598 HPGS_INTERNAL_API int hpgs_reader_do_SM(hpgs_reader *reader);
00599 HPGS_INTERNAL_API int hpgs_reader_do_SP(hpgs_reader *reader);
00600 HPGS_INTERNAL_API int hpgs_reader_do_SR(hpgs_reader *reader);
00601 HPGS_INTERNAL_API int hpgs_reader_do_SS(hpgs_reader *reader);
00602 HPGS_INTERNAL_API int hpgs_reader_do_TR(hpgs_reader *reader);
00603 HPGS_INTERNAL_API int hpgs_reader_do_UL(hpgs_reader *reader);
00604 HPGS_INTERNAL_API int hpgs_reader_do_WG(hpgs_reader *reader);
00605 HPGS_INTERNAL_API int hpgs_reader_do_WU(hpgs_reader *reader);
00606
00608
00609 #ifdef __cplusplus
00610 }
00611 #endif
00612
00613 #endif // ! __HPGS_READER_H__