summaryrefslogtreecommitdiffstats
path: root/kghostview/dscparse.h
diff options
context:
space:
mode:
Diffstat (limited to 'kghostview/dscparse.h')
-rw-r--r--kghostview/dscparse.h473
1 files changed, 0 insertions, 473 deletions
diff --git a/kghostview/dscparse.h b/kghostview/dscparse.h
deleted file mode 100644
index 10d2746c..00000000
--- a/kghostview/dscparse.h
+++ /dev/null
@@ -1,473 +0,0 @@
-/* Copyright (C) 2000-2001, Ghostgum Software Pty Ltd. All rights reserved.
-
- This file is part of GSview.
-
- This file is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
- to anyone for the consequences of using it or for whether it serves any
- particular purpose or works at all, unless he says so in writing. Refer
- to the GNU General Public Licence for full details.
-
- Everyone is granted permission to copy, modify and redistribute this
- file, but only under the conditions described in the GNU General
- Public Licence. A copy of this license is supposed to have been given
- to you along with this file so you can know your rights and
- responsibilities. It should be in a file named COPYING. Among other
- things, the copyright notice and this notice must be preserved on all
- copies.
-*/
-
-/* $Id$ */
-
-/* dscparse.h */
-/* Interface for the DSC parser. */
-
-#ifndef _DSCPARSE_H_
-#define _DSCPARSE_H_
-
-/* Some local types that may need modification */
-typedef bool GSBOOL;
-typedef unsigned long GSDWORD; /* must be at least 32 bits */
-typedef unsigned int GSWORD; /* must be at least 16 bits */
-
-#ifndef FALSE
-# define FALSE ((GSBOOL)0)
-# define TRUE ((GSBOOL)(!FALSE))
-#endif
-
-#ifndef dsc_private
-# ifdef private
-# define dsc_private private
-# else
-# define dsc_private static
-# endif
-#endif
-
-/* macros to allow conversion of function declarations to K&R */
-#ifndef P0
-#define P0() void
-#define P1(t1) t1
-#define P2(t1,t2) t1,t2
-#define P3(t1,t2,t3) t1,t2,t3
-#define P4(t1,t2,t3,t4) t1,t2,t3,t4
-#define P5(t1,t2,t3,t4,t5) t1,t2,t3,t4,t5
-#define P6(t1,t2,t3,t4,t5,t6) t1,t2,t3,t4,t5,t6
-#endif
-
-/* maximum legal length of lines in a DSC compliant file */
-#define DSC_LINE_LENGTH 255
-
-/* memory for strings is allocated in chunks of this length */
-#define CDSC_STRING_CHUNK 4096
-
-/* page array is allocated in chunks of this many pages */
-#define CDSC_PAGE_CHUNK 128
-
-/* buffer length for storing lines passed to dsc_scan_data() */
-/* must be at least 2 * DSC_LINE_LENGTH */
-/* We choose 8192 as twice the length passed to us by GSview */
-#define CDSC_DATA_LENGTH 8192
-
-/* Return codes from dsc_scan_data()
- * < 0 = error
- * >=0 = OK
- *
- * -1 = error, usually insufficient memory.
- * 0-9 = normal
- * 10-99 = internal codes, should not be seen.
- * 100-999 = identifier of last DSC comment processed.
- */
-
-typedef enum {
- CDSC_ERROR = -1, /* Fatal error, usually insufficient memory */
-
- CDSC_OK = 0, /* OK, no DSC comment found */
- CDSC_NOTDSC = 1, /* Not DSC, or DSC is being ignored */
-
-/* Any section */
- CDSC_UNKNOWNDSC = 100, /* DSC comment not recognised */
-
-/* Header section */
- CDSC_PSADOBE = 200, /* %!PS-Adobe- */
- CDSC_BEGINCOMMENTS = 201, /* %%BeginComments */
- CDSC_ENDCOMMENTS = 202, /* %%EndComments */
- CDSC_PAGES = 203, /* %%Pages: */
- CDSC_CREATOR = 204, /* %%Creator: */
- CDSC_CREATIONDATE = 205, /* %%CreationDate: */
- CDSC_TITLE = 206, /* %%Title: */
- CDSC_FOR = 207, /* %%For: */
- CDSC_LANGUAGELEVEL = 208, /* %%LanguageLevel: */
- CDSC_BOUNDINGBOX = 209, /* %%BoundingBox: */
- CDSC_ORIENTATION = 210, /* %%Orientation: */
- CDSC_PAGEORDER = 211, /* %%PageOrder: */
- CDSC_DOCUMENTMEDIA = 212, /* %%DocumentMedia: */
- CDSC_DOCUMENTPAPERSIZES = 213, /* %%DocumentPaperSizes: */
- CDSC_DOCUMENTPAPERFORMS = 214, /* %%DocumentPaperForms: */
- CDSC_DOCUMENTPAPERCOLORS = 215, /* %%DocumentPaperColors: */
- CDSC_DOCUMENTPAPERWEIGHTS = 216, /* %%DocumentPaperWeights: */
- CDSC_DOCUMENTDATA = 217, /* %%DocumentData: */
- CDSC_REQUIREMENTS = 218, /* IGNORED %%Requirements: */
- CDSC_DOCUMENTNEEDEDFONTS = 219, /* IGNORED %%DocumentNeededFonts: */
- CDSC_DOCUMENTSUPPLIEDFONTS = 220, /* IGNORED %%DocumentSuppliedFonts: */
- CDSC_HIRESBOUNDINGBOX = 221, /* %%HiResBoundingBox: */
- CDSC_CROPBOX = 222, /* %%CropBox: */
-
-/* Preview section */
- CDSC_BEGINPREVIEW = 301, /* %%BeginPreview */
- CDSC_ENDPREVIEW = 302, /* %%EndPreview */
-
-/* Defaults section */
- CDSC_BEGINDEFAULTS = 401, /* %%BeginDefaults */
- CDSC_ENDDEFAULTS = 402, /* %%EndDefaults */
-/* also %%PageMedia, %%PageOrientation, %%PageBoundingBox */
-
-/* Prolog section */
- CDSC_BEGINPROLOG = 501, /* %%BeginProlog */
- CDSC_ENDPROLOG = 502, /* %%EndProlog */
- CDSC_BEGINFONT = 503, /* IGNORED %%BeginFont */
- CDSC_ENDFONT = 504, /* IGNORED %%EndFont */
- CDSC_BEGINFEATURE = 505, /* IGNORED %%BeginFeature */
- CDSC_ENDFEATURE = 506, /* IGNORED %%EndFeature */
- CDSC_BEGINRESOURCE = 507, /* IGNORED %%BeginResource */
- CDSC_ENDRESOURCE = 508, /* IGNORED %%EndResource */
- CDSC_BEGINPROCSET = 509, /* IGNORED %%BeginProcSet */
- CDSC_ENDPROCSET = 510, /* IGNORED %%EndProcSet */
-
-/* Setup section */
- CDSC_BEGINSETUP = 601, /* %%BeginSetup */
- CDSC_ENDSETUP = 602, /* %%EndSetup */
- CDSC_FEATURE = 603, /* IGNORED %%Feature: */
- CDSC_PAPERCOLOR = 604, /* IGNORED %%PaperColor: */
- CDSC_PAPERFORM = 605, /* IGNORED %%PaperForm: */
- CDSC_PAPERWEIGHT = 606, /* IGNORED %%PaperWeight: */
- CDSC_PAPERSIZE = 607, /* %%PaperSize: */
-/* also %%Begin/EndFeature, %%Begin/EndResource */
-
-/* Page section */
- CDSC_PAGE = 700, /* %%Page: */
- CDSC_PAGETRAILER = 701, /* IGNORED %%PageTrailer */
- CDSC_BEGINPAGESETUP = 702, /* IGNORED %%BeginPageSetup */
- CDSC_ENDPAGESETUP = 703, /* IGNORED %%EndPageSetup */
- CDSC_PAGEMEDIA = 704, /* %%PageMedia: */
-/* also %%PaperColor, %%PaperForm, %%PaperWeight, %%PaperSize */
- CDSC_PAGEORIENTATION = 705, /* %%PageOrientation: */
- CDSC_PAGEBOUNDINGBOX = 706, /* %%PageBoundingBox: */
-/* also %%Begin/EndFont, %%Begin/EndFeature */
-/* also %%Begin/EndResource, %%Begin/EndProcSet */
- CDSC_INCLUDEFONT = 707, /* IGNORED %%IncludeFont: */
- CDSC_VIEWINGORIENTATION = 708, /* %%ViewingOrientation: */
-
-/* Trailer section */
- CDSC_TRAILER = 800, /* %%Trailer */
-/* also %%Pages, %%BoundingBox, %%Orientation, %%PageOrder, %%DocumentMedia */
-/* %%Page is recognised as an error */
-/* also %%DocumentNeededFonts, %%DocumentSuppliedFonts */
-
-/* End of File */
- CDSC_EOF = 900 /* %%EOF */
-} CDSC_RETURN_CODE;
-
-
-/* stored in dsc->preview */
-typedef enum {
- CDSC_NOPREVIEW = 0,
- CDSC_EPSI = 1,
- CDSC_TIFF = 2,
- CDSC_WMF = 3,
- CDSC_PICT = 4
-} CDSC_PREVIEW_TYPE;
-
-/* stored in dsc->page_order */
-typedef enum {
- CDSC_ORDER_UNKNOWN = 0,
- CDSC_ASCEND = 1,
- CDSC_DESCEND = 2,
- CDSC_SPECIAL = 3
-} CDSC_PAGE_ORDER;
-
-/* stored in dsc->page_orientation and dsc->page[pagenum-1].orientation */
-typedef enum {
- CDSC_ORIENT_UNKNOWN = 0,
- CDSC_PORTRAIT = 1,
- CDSC_LANDSCAPE = 2,
- CDSC_UPSIDEDOWN = 3,
- CDSC_SEASCAPE = 4
-} CDSC_ORIENTATION_ENUM;
-
-/* stored in dsc->document_data */
-typedef enum {
- CDSC_DATA_UNKNOWN = 0,
- CDSC_CLEAN7BIT = 1,
- CDSC_CLEAN8BIT = 2,
- CDSC_BINARY = 3
-} CDSC_DOCUMENT_DATA ;
-
-typedef struct CDSCBBOX_S {
- int llx;
- int lly;
- int urx;
- int ury;
-} CDSCBBOX;
-
-typedef struct CDSCFBBOX_S {
- float fllx;
- float flly;
- float furx;
- float fury;
-} CDSCFBBOX;
-
-typedef struct CDSCMEDIA_S {
- const char *name;
- float width; /* PostScript points */
- float height;
- float weight; /* GSM */
- const char *colour;
- const char *type;
- CDSCBBOX *mediabox; /* Used by GSview for PDF MediaBox */
-} CDSCMEDIA;
-
-#define CDSC_KNOWN_MEDIA 46
-extern const CDSCMEDIA dsc_known_media[CDSC_KNOWN_MEDIA];
-
-typedef struct CDSCCTM_S { /* used for %%ViewingOrientation */
- float xx;
- float xy;
- float yx;
- float yy;
- /* float ty; */
- /* float ty; */
-} CDSCCTM;
-
-typedef struct CDSCPAGE_S {
- int ordinal;
- const char *label;
- unsigned long begin;
- unsigned long end;
- unsigned int orientation;
- const CDSCMEDIA *media;
- CDSCBBOX *bbox; /* PageBoundingBox, also used by GSview for PDF CropBox */
- CDSCCTM *viewing_orientation;
-} CDSCPAGE;
-
-/* binary DOS EPS header */
-typedef struct CDSCDOSEPS_S {
- GSDWORD ps_begin;
- GSDWORD ps_length;
- GSDWORD wmf_begin;
- GSDWORD wmf_length;
- GSDWORD tiff_begin;
- GSDWORD tiff_length;
- GSWORD checksum;
-} CDSCDOSEPS;
-
-/* rather than allocated every string with malloc, we allocate
- * chunks of 4k and place the (usually) short strings in these
- * chunks.
- */
-typedef struct CDSCSTRING_S CDSCSTRING;
-struct CDSCSTRING_S {
- unsigned int index;
- unsigned int length;
- char *data;
- CDSCSTRING *next;
-};
-
-
-/* DSC error reporting */
-
-typedef enum {
- CDSC_MESSAGE_BBOX = 0,
- CDSC_MESSAGE_EARLY_TRAILER = 1,
- CDSC_MESSAGE_EARLY_EOF = 2,
- CDSC_MESSAGE_PAGE_IN_TRAILER = 3,
- CDSC_MESSAGE_PAGE_ORDINAL = 4,
- CDSC_MESSAGE_PAGES_WRONG = 5,
- CDSC_MESSAGE_EPS_NO_BBOX = 6,
- CDSC_MESSAGE_EPS_PAGES = 7,
- CDSC_MESSAGE_NO_MEDIA = 8,
- CDSC_MESSAGE_ATEND = 9,
- CDSC_MESSAGE_DUP_COMMENT = 10,
- CDSC_MESSAGE_DUP_TRAILER = 11,
- CDSC_MESSAGE_BEGIN_END = 12,
- CDSC_MESSAGE_BAD_SECTION = 13,
- CDSC_MESSAGE_LONG_LINE = 14,
- CDSC_MESSAGE_INCORRECT_USAGE = 15
-} CDSC_MESSAGE_ERROR;
-
-/* severity */
-typedef enum {
- CDSC_ERROR_INFORM = 0, /* Not an error */
- CDSC_ERROR_WARN = 1, /* Not a DSC error itself, */
- CDSC_ERROR_ERROR = 2 /* DSC error */
-} CDSC_MESSAGE_SEVERITY;
-
-/* response */
-typedef enum {
- CDSC_RESPONSE_OK = 0,
- CDSC_RESPONSE_CANCEL = 1,
- CDSC_RESPONSE_IGNORE_ALL = 2
-} CDSC_RESPONSE;
-
-extern const char * const dsc_message[];
-
-typedef struct CDSC_S CDSC;
-struct CDSC_S {
- /* public data */
- GSBOOL dsc; /* TRUE if DSC comments found */
- GSBOOL ctrld; /* TRUE if has CTRLD at start of stream */
- GSBOOL pjl; /* TRUE if has HP PJL at start of stream */
- GSBOOL epsf; /* TRUE if EPSF */
- GSBOOL pdf; /* TRUE if Portable Document Format */
- unsigned int preview; /* enum CDSC_PREVIEW_TYPE */
- char *dsc_version; /* first line of file */
- unsigned int language_level;
- unsigned int document_data; /* Clean7Bit, Clean8Bit, Binary */
- /* enum CDSC_DOCUMENT_DATA */
- /* DSC sections */
- unsigned long begincomments;
- unsigned long endcomments;
- unsigned long beginpreview;
- unsigned long endpreview;
- unsigned long begindefaults;
- unsigned long enddefaults;
- unsigned long beginprolog;
- unsigned long endprolog;
- unsigned long beginsetup;
- unsigned long endsetup;
- unsigned long begintrailer;
- unsigned long endtrailer;
- CDSCPAGE *page;
- unsigned int page_count; /* number of %%Page: pages in document */
- unsigned int page_pages; /* number of pages in document from %%Pages: */
- unsigned int page_order; /* enum CDSC_PAGE_ORDER */
- unsigned int page_orientation; /* the default page orientation */
- /* enum CDSC_ORIENTATION */
- CDSCCTM *viewing_orientation;
- unsigned int media_count; /* number of media items */
- CDSCMEDIA **media; /* the array of media */
- const CDSCMEDIA *page_media;/* the default page media */
- CDSCBBOX *bbox; /* the document bounding box */
- CDSCBBOX *page_bbox; /* the default page bounding box */
- CDSCDOSEPS *doseps; /* DOS binary header */
- char *dsc_title;
- char *dsc_creator;
- char *dsc_date;
- char *dsc_for;
-
- unsigned int max_error; /* highest error number that will be reported */
- const int *severity; /* array of severity values, one per error */
-
-
- /* private data */
- void *caller_data; /* pointer to be provided when calling */
- /* error and debug callbacks */
- int id; /* last DSC comment found */
- int scan_section; /* section currently being scanned */
- /* enum CDSC_SECTION */
-
- unsigned long doseps_end; /* ps_begin+ps_length, otherwise 0 */
- unsigned int page_chunk_length; /* number of pages allocated */
- unsigned long file_length; /* length of document */
- /* If provided we try to recognise %%Trailer and %%EOF */
- /* incorrectly embedded inside document. */
- /* Can be left set to default value of 0 */
- int skip_document; /* recursion level of %%BeginDocument: */
- int skip_bytes; /* #bytes to ignore from BeginData: */
- /* or DOSEPS preview section */
- int skip_lines; /* #lines to ignore from BeginData: */
- GSBOOL skip_pjl; /* TRUE if skip PJL until first PS comment */
- int begin_font_count; /* recursion level of %%BeginFont */
- int begin_feature_count; /* recursion level of %%BeginFeature */
- int begin_resource_count; /* recursion level of %%BeginResource */
- int begin_procset_count; /* recursion level of %%BeginProcSet */
-
- /* buffer for input */
- char data[CDSC_DATA_LENGTH];/* start of buffer */
- unsigned int data_length; /* length of data in buffer */
- unsigned int data_index; /* offset to next char in buffer */
- unsigned long data_offset; /* offset from start of document */
- /* to byte in data[0] */
- GSBOOL eof; /* TRUE if there is no more data */
-
- /* information about DSC line */
- char *line; /* pointer to last read DSC line */
- /* not null terminated */
- unsigned int line_length; /* number of characters in line */
- GSBOOL eol; /* TRUE if dsc_line contains EOL */
- GSBOOL last_cr; /* TRUE if last line ended in \r */
- /* check next time for \n */
- unsigned int line_count; /* line number */
- GSBOOL long_line; /* TRUE if found a line longer than 255 characters */
- char last_line[256]; /* previous DSC line, used for %%+ */
-
- /* more efficient string storage (for short strings) than malloc */
- CDSCSTRING *string_head; /* linked list head */
- CDSCSTRING *string; /* current list item */
-
- /* memory allocation routines */
- void *(*memalloc)(P2(size_t size, void *closure_data));
- void (*memfree)(P2(void *ptr, void *closure_data));
- void *mem_closure_data;
-
- /* function for printing debug messages */
- void (*debug_print_fn)(P2(void *caller_data, const char *str));
-
- /* function for reporting errors in DSC comments */
- int (*dsc_error_fn)(P5(void *caller_data, CDSC *dsc,
- unsigned int explanation, const char *line, unsigned int line_len));
-
- /* public data */
- /* Added 2001-10-01 */
- CDSCFBBOX *hires_bbox; /* the hires document bounding box */
- CDSCFBBOX *crop_box; /* the size of the trimmed page */
-};
-
-
-/* Public functions */
-
-/* Create and initialise DSC parser */
-CDSC *dsc_init(P1(void *caller_data));
-
-CDSC *dsc_init_with_alloc(P4(
- void *caller_data,
- void *(*memalloc)(size_t size, void *closure_data),
- void (*memfree)(void *ptr, void *closure_data),
- void *closure_data));
-
-/* Free the DSC parser */
-void dsc_free(P1(CDSC *dsc));
-
-/* Tell DSC parser how long document will be, to allow ignoring
- * of early %%Trailer and %%EOF. This is optional.
- */
-void dsc_set_length(P2(CDSC *dsc, unsigned long len));
-
-/* Process a buffer containing DSC comments and PostScript */
-int dsc_scan_data(P3(CDSC *dsc, const char *data, int len));
-
-/* All data has been processed, fixup any DSC errors */
-int dsc_fixup(P1(CDSC *dsc));
-
-/* Install error query function */
-void dsc_set_error_function(P2(CDSC *dsc,
- int (*dsc_error_fn)(P5(void *caller_data, CDSC *dsc,
- unsigned int explanation, const char *line, unsigned int line_len))));
-
-/* Install print function for debug messages */
-void dsc_set_debug_function(P2(CDSC *dsc,
- void (*debug_fn)(P2(void *caller_data, const char *str))));
-
-/* Print a message to debug output, if provided */
-void dsc_debug_print(P2(CDSC *dsc, const char *str));
-
-/* should be internal only functions, but made available to
- * GSview for handling PDF
- */
-int dsc_add_page(P3(CDSC *dsc, int ordinal, char *label));
-int dsc_add_media(P2(CDSC *dsc, CDSCMEDIA *media));
-int dsc_set_page_bbox(P6(CDSC *dsc, unsigned int page_number,
- int llx, int lly, int urx, int ury));
-
-#endif
-
-// vim:sw=4:sts=4:ts=8:noet