diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2013-07-10 15:35:21 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2013-07-10 15:35:21 +0000 |
commit | 5545f2236f9abc704ba6cc442841363b0ac5eb1b (patch) | |
tree | f74b65e87bc2f6be84feb3d5b88915e66ee7b470 /Build/source/texk/dvipdfm-x/pdfdev.h | |
parent | 233c204ecbc43730d329352806a24be175ced0b3 (diff) |
dvipdfm-x: Continue merging dvipdfmx and xdvipdfmx
git-svn-id: svn://tug.org/texlive/trunk@31156 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/pdfdev.h')
-rw-r--r-- | Build/source/texk/dvipdfm-x/pdfdev.h | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/Build/source/texk/dvipdfm-x/pdfdev.h b/Build/source/texk/dvipdfm-x/pdfdev.h new file mode 100644 index 00000000000..f8a3a3f65b1 --- /dev/null +++ b/Build/source/texk/dvipdfm-x/pdfdev.h @@ -0,0 +1,235 @@ +/* + + This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. + + Copyright (C) 2002-2012 by Jin-Hwan Cho and Shunsaku Hirata, + the dvipdfmx project team. + + Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +*/ + +#ifndef _PDFDEV_H_ +#define _PDFDEV_H_ + +#include "numbers.h" +#include "pdfobj.h" +#include "pdfcolor.h" + +typedef signed long spt_t; + +typedef struct pdf_tmatrix +{ + double a, b, c, d, e, f; +} pdf_tmatrix; + +typedef struct pdf_rect +{ + double llx, lly, urx, ury; +} pdf_rect; + +typedef struct pdf_coord +{ + double x, y; +} pdf_coord; + +/* The name transform_info is misleading. + * I'll put this here for a moment... + */ +typedef struct +{ + /* Physical dimensions + * + * If those values are given, images will be scaled + * and/or shifted to fit within a box described by + * those values. + */ + double width; + double height; + double depth; + + pdf_tmatrix matrix; /* transform matrix */ + pdf_rect bbox; /* user_bbox */ + + int flags; +} transform_info; +#define INFO_HAS_USER_BBOX (1 << 0) +#define INFO_HAS_WIDTH (1 << 1) +#define INFO_HAS_HEIGHT (1 << 2) +#define INFO_DO_CLIP (1 << 3) +#define INFO_DO_HIDE (1 << 4) +extern void transform_info_clear (transform_info *info); + + +extern void pdf_dev_set_verbose (void); + +/* Not in spt_t. */ +extern int pdf_sprint_matrix (char *buf, const pdf_tmatrix *p); +extern int pdf_sprint_rect (char *buf, const pdf_rect *p); +extern int pdf_sprint_coord (char *buf, const pdf_coord *p); +extern int pdf_sprint_length (char *buf, double value); +extern int pdf_sprint_number (char *buf, double value); + +/* unit_conv: multiplier for input unit (spt_t) to bp conversion. + * precision: How many fractional digits preserved in output (not real + * accuracy control). + * is_bw: Ignore color related special instructions. + */ +extern void pdf_init_device (double unit_conv, int precision, int is_bw); +extern void pdf_close_device (void); + +/* returns 1.0/unit_conv */ +extern double dev_unit_dviunit (void); + +#if 0 +/* DVI interpreter knows text positioning in relative motion. + * However, pdf_dev_set_string() recieves text string with placement + * in absolute position in user space, and it convert absolute + * positioning back to relative positioning. It is quite wasteful. + * + * TeX using DVI register stack operation to do CR and then use down + * command for LF. DVI interpreter knows hint for current leading + * and others (raised or lowered), but they are mostly lost in + * pdf_dev_set_string(). + */ + +typedef struct +{ + int argc; + + struct { + int is_kern; /* kern or string */ + + spt_t kern; /* negative kern means space */ + + int offset; /* offset to sbuf */ + int length; /* length of string */ + } args[]; + + unsigned char sbuf[PDF_STRING_LEN_MAX]; + +} pdf_text_string; + +/* Something for handling raise, leading, etc. here. */ + +#endif + +/* Draw texts and rules: + * + * xpos, ypos, width, and height are all fixed-point numbers + * converted to big-points by multiplying unit_conv (dvi2pts). + * They must be position in the user space. + * + * ctype: + * 0 - input string is in multi-byte encoding. + * 1 - input string is in 8-bit encoding. + * 2 - input string is in 16-bit encoding. + */ +extern void pdf_dev_set_string (spt_t xpos, spt_t ypos, + const void *instr_ptr, int instr_len, + spt_t text_width, + int font_id, int ctype); +extern void pdf_dev_set_rule (spt_t xpos, spt_t ypos, + spt_t width, spt_t height); + +/* Place XObject */ +extern int pdf_dev_put_image (int xobj_id, + transform_info *p, double ref_x, double ref_y); + +/* The design_size and ptsize required by PK font support... + */ +extern int pdf_dev_locate_font (const char *font_name, spt_t ptsize); + +extern int pdf_dev_setfont (const char *font_name, spt_t ptsize); + +/* The following two routines are NOT WORKING. + * Dvipdfmx doesn't manage gstate well.. + */ +#ifdef XETEX +/* pdf_dev_translate() or pdf_dev_concat() should be used. */ +extern void pdf_dev_set_origin (double orig_x, double orig_y); +#endif +/* Always returns 1.0, please rename this. */ +extern double pdf_dev_scale (void); + +/* Access text state parameters. */ +#if 0 +extern int pdf_dev_currentfont (void); /* returns font_id */ +extern double pdf_dev_get_font_ptsize (int font_id); +#endif +extern int pdf_dev_get_font_wmode (int font_id); /* ps: special support want this (pTeX). */ + +/* Text composition (direction) mode + * This affects only when auto_rotate is enabled. + */ +extern int pdf_dev_get_dirmode (void); +extern void pdf_dev_set_dirmode (int dir_mode); + +/* Set rect to rectangle in device space. + * Unit conversion spt_t to bp and transformation applied within it. + */ +extern void pdf_dev_set_rect (pdf_rect *rect, + spt_t x_pos, spt_t y_pos, + spt_t width, spt_t height, spt_t depth); + +/* Accessor to various device parameters. + */ +#define PDF_DEV_PARAM_AUTOROTATE 1 +#define PDF_DEV_PARAM_COLORMODE 2 + +extern int pdf_dev_get_param (int param_type); +extern void pdf_dev_set_param (int param_type, int value); + +/* Text composition mode is ignored (always same as font's + * writing mode) and glyph rotation is not enabled if + * auto_rotate is unset. + */ +#define pdf_dev_set_autorotate(v) pdf_dev_set_param(PDF_DEV_PARAM_AUTOROTATE, (v)) +#define pdf_dev_set_colormode(v) pdf_dev_set_param(PDF_DEV_PARAM_COLORMODE, (v)) + +/* + * For pdf_doc, pdf_draw and others. + */ + +/* Force reselecting font and color: + * XFrom (content grabbing) and Metapost support want them. + */ +extern void pdf_dev_reset_fonts (void); + +#ifdef XETEX +extern void pdf_dev_reset_color (void); +extern void pdf_dev_set_color (pdf_color *color); +extern void pdf_dev_set_strokingcolor (pdf_color *color); +extern void pdf_dev_set_nonstrokingcolor (pdf_color *color); +#endif + +/* Initialization of transformation matrix with M and others. + * They are called within pdf_doc_begin_page() and pdf_doc_end_page(). + */ +extern void pdf_dev_bop (const pdf_tmatrix *M); +extern void pdf_dev_eop (void); + +/* Text is normal and line art is not normal in dvipdfmx. So we don't have + * begin_text (BT in PDF) and end_text (ET), but instead we have graphics_mode() + * to terminate text section. pdf_dev_flushpath() and others call this. + */ +extern void graphics_mode (void); + +extern void pdf_dev_get_coord(double *xpos, double *ypos); +extern void pdf_dev_push_coord(double xpos, double ypos); +extern void pdf_dev_pop_coord(void); + +#endif /* _PDFDEV_H_ */ |