summaryrefslogtreecommitdiff
path: root/support/dktools/dk4grpdf.c
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/dk4grpdf.c')
-rw-r--r--support/dktools/dk4grpdf.c3040
1 files changed, 0 insertions, 3040 deletions
diff --git a/support/dktools/dk4grpdf.c b/support/dktools/dk4grpdf.c
deleted file mode 100644
index f5b76e4797..0000000000
--- a/support/dktools/dk4grpdf.c
+++ /dev/null
@@ -1,3040 +0,0 @@
-/*
-Copyright (C) 2017-2020, Dirk Krause
-SPDX-License-Identifier: BSD-3-Clause
-*/
-
-/*
- WARNING: This file was generated by the dkct program (see
- http://dktools.sourceforge.net/ for details).
- Changes you make here will be lost if dkct is run again!
- You should modify the original source and run dkct on it.
- Original source: dk4grpdf.ctr
-*/
-
-/** @file dk4grpdf.c The dk4grpdf module.
-*/
-
-
-#line 8 "dk4grpdf.ctr"
-
-
-#ifdef DK4GRA_PDF_FORCE_UNCOMPRESSED
-#undef DK4GRA_PDF_FORCE_UNCOMPRESSED
-#endif
-
-/** Use for debugging purposes only to produce
- an uncompresse page contents data stream.
- Normally this should be defined to 0.
-*/
-#define DK4GRA_PDF_FORCE_UNCOMPRESSED 0
-
-
-
-#include "dk4conf.h"
-
-#if DK4_HAVE_MATH_H
-#ifndef MATH_H_INCLUDED
-#if DK4_ON_WINDOWS
-#ifndef _USE_MATH_DEFINES
-#define _USE_MATH_DEFINES 1
-#endif
-#endif
-#include <math.h>
-#define MATH_H_INCLUDED 1
-#endif
-#endif
-
-#ifndef DK4GRA_H_INCLUDED
-#include "dk4gra.h"
-#endif
-
-#ifndef GRA_H_INCLUDED
-#include "gra.h"
-#endif
-
-#ifndef DK4MAO8D_H_INCLUDED
-#include "dk4mao8d.h"
-#endif
-
-#ifndef DK4MAO8DNS_H_INCLUDED
-#include "dk4mao8dns.h"
-#endif
-
-#ifndef DK4UFIC_H_INCLUDED
-#include "dk4ufic.h"
-#endif
-
-#ifndef DK4STRD_H_INCLUDED
-#include "dk4strd.h"
-#endif
-
-#ifndef DK4STRM_H_INCLUDED
-#include "dk4strm.h"
-#endif
-
-#ifndef DK4STRMF_H_INCLUDED
-#include "dk4strmf.h"
-#endif
-
-#ifndef DK4STRMCO_H_INCLUDED
-#include "dk4strmco.h"
-#endif
-
-#ifndef DK4MEM_H_INCLUDED
-#include "dk4mem.h"
-#endif
-
-#if DK4_HAVE_ASSERT_H
-#ifndef ASSERT_H_INCLUDED
-#include <assert.h>
-#define ASSERT_H_INCLUDED 1
-#endif
-#endif
-
-
-
-
-#line 85 "dk4grpdf.ctr"
-
-
-/** PDF object position.
-*/
-typedef struct {
- size_t num; /**< Object number. */
- dk4_um_t pos; /**< Start position in output stream. */
-} dk4_gra_pdf_objpos_t;
-
-
-
-/** Constant text fragments used by module.
-*/
-static const char * const dk4_gra_pdf_c8_kw[] = {
-/* 0 */
-"\n",
-
-/* 1 */
-" ",
-
-/* 2 */
-"q\n",
-
-/* 3 */
-"Q\n",
-
-/* 4 */
-" m\n",
-
-/* 5 */
-" l\n",
-
-/* 6 */
-" c\n",
-
-/* 7 */
-"h\n",
-
-/* 8 */
-"S\n",
-
-/* 9 */
-"f\n",
-
-/* 10 */
-"f*\n",
-
-/* 11 */
-"B\n",
-
-/* 12 */
-"B*\n",
-
-/* 13 */
-"W n\n",
-
-/* 14 */
-"W* n\n",
-
-/* 15 */
-"1 g\n",
-
-/* 16 */
-"0 ",
-
-/* 17 */
-"0",
-
-/* 18 */
-" 0",
-
-/* 19 */
-" g\n",
-
-/* 20 */
-" G\n",
-
-/* 21 */
-" k\n",
-
-/* 22 */
-" K\n",
-
-/* 23 */
-" rg\n",
-
-/* 24 */
-" RG\n",
-
-/* 25 */
-" w\n",
-
-/* 26 */
-"0 J\n",
-
-/* 27 */
-"1 J\n",
-
-/* 28 */
-"2 J\n",
-
-/* 29 */
-"0 j\n",
-
-/* 30 */
-"1 j\n",
-
-/* 31 */
-"2 j\n",
-
-/* 32 */
-"[] 0 d\n",
-
-/* 33 */
-"[",
-
-/* 34 */
-"] ",
-
-/* 35 */
-" d\n",
-
-/* 36 */
-"%PDF-1.4\n",
-
-/* 37 */
-" 0 obj\n",
-
-/* 38 */
-"endobj\n",
-
-/* 39 */
-"<<\n",
-
-/* 40 */
-">>\n",
-
-/* 41 */
-"/Producer (libdk4gra, see http://sourceforge.net/p/dktools/wiki/Home/)\n",
-
-/* 42 */
-"/CreationDate (D:",
-
-/* 43 */
-"/ModDate (D:",
-
-/* 44 */
-")\n",
-
-/* 45 */
-"xref 0 ",
-
-/* 46 */
-"0000000000 65535 f\n",
-
-/* 47 */
-" 00000 n\n",
-
-/* 48 */
-"trailer\n<< /Size ",
-
-/* 49 */
-" /Info 1 0 R /Root 2 0 R >>\nstartxref\n",
-
-/* 50 */
-"\n%%EOF\n",
-
-/* 51 */
-"/Type /Catalog\n",
-
-/* 52 */
-"/Pages 3 0 R\n",
-
-/* 53 */
-"/Type /Pages\n",
-
-/* 54 */
-"/Count ",
-
-/* 55 */
-"/Kids [\n",
-
-/* 56 */
-"]\n",
-
-/* 57 */
-" 0 R\n",
-
-/* 58 */
-"/Type /Page\n",
-
-/* 59 */
-"/Parent 3 0 R\n",
-
-/* 60 */
-"/MediaBox [0 0 ",
-
-/* 61 */
-"/CropBox [0 0 ",
-
-/* 62 */
-"/Resources <<\n",
-
-/* 63 */
-"/ProcSet [/PDF /ImageB /ImageC]\n",
-
-/* 64 */
-"/XObject <<\n",
-
-/* 65 */
-"/Contents ",
-
-/* 66 */
-"/Length ",
-
-/* 67 */
-"/Filter /FlateDecode\n",
-
-/* 68 */
-"stream\n",
-
-/* 69 */
-"\nendstream\n",
-
-/* 70 */
-" cm\n",
-
-/* 71 */
-"/X",
-
-/* 72 */
-" Do\n",
-
-/* 73 */
-"/Type /XObject\n",
-
-/* 74 */
-"/Subtype /Image\n",
-
-/* 75 */
-"/Width ",
-
-/* 76 */
-"/Height ",
-
-/* 77 */
-"/BitsPerComponent ",
-
-/* 78 */
-"/ColorSpace /DeviceRGB\n",
-
-/* 79 */
-"/ColorSpace /DeviceGray\n",
-
-/* 80 */
-"/ColorSpace /DeviceCMYK\n",
-
-/* 81 */
-"/SMask ",
-
-/* 82 */
-"/Interpolate true\n",
-
-/* 83 */
-"/Filter /DCTDecode\n",
-
-/* 84 */
-" M\n",
-
-/* 85 */
-"/Decode [1 0 1 0 1 0 1 0]\n",
-
-/* 86 */
-"/Decode [1 0 1 0 1 0] \n",
-
-/* 87 */
-"/Decode [1 0 1 0] \n",
-
-/* 88 */
-"/Decode [1 0]\n",
-
-NULL
-
-
-#line 361 "dk4grpdf.ctr"
-};
-
-
-
-void
-dk4gra_pdf_i_outstream_kw(
- dk4_stream_t *os,
- size_t kwi,
- int *backptr,
- dk4_er_t *erp
-)
-{
-
-
-#line 374 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != os);
-#endif
- dk4gratool_stream_string(os, dk4_gra_pdf_c8_kw[kwi], backptr, erp);
-}
-
-
-
-void
-dk4gra_pdf_i_values_and_kw(
- dk4_stream_t *os,
- double *da,
- size_t szda,
- size_t kwi,
- int *backptr,
- dk4_er_t *erp
-)
-{
- size_t i;
-#if DK4_USE_ASSERT
- assert(NULL != os);
- assert(NULL != da);
- assert(0 < szda);
-#endif
- for (i = 0; i < szda; i++) {
- if (0 < i) {
- dk4gratool_stream_string(os, dk4_gra_pdf_c8_kw[1], backptr, erp);
- }
- if (0 == dk4ma_write_c8_double_no_sci_to_stream(
- os, da[i], DK4_GRA_EPSILON_COORDINATES, 0, 1, erp
- )
- ) {
- if (NULL != backptr) { *backptr = 0; }
- }
- }
- dk4gratool_stream_string(os, dk4_gra_pdf_c8_kw[kwi], backptr, erp);
-}
-
-
-
-/** Compare page structures by number or a page against a number.
- @param l Left page object.
- @param r Right page object or page number.
- @param cr Comparison criteria (0=page/page, 1=page/number).
- @return Comparison result.
-*/
-static
-int
-dk4gra_pdf_compare_pages_by_number(const void *l, const void *r, int cr)
-{
- const dk4_gra_pdf_page_t *pl;
- const dk4_gra_pdf_page_t *pr;
- const size_t *ppno;
-
- int back = 0;
- if (NULL != l) {
- if (NULL != r) {
- pl = (const dk4_gra_pdf_page_t *)l;
- switch (cr) {
- case 1: {
- ppno = (const size_t *)r;
- if (pl->pageno > *ppno) {
- back = 1;
- }
- else {
- if (pl->pageno < *ppno) {
- back = -1;
- }
- }
- } break;
- default : {
- pr = (const dk4_gra_pdf_page_t *)r;
- if (pl->pageno > pr->pageno) {
- back = 1;
- }
- else {
- if (pl->pageno < pr->pageno) {
- back = -1;
- }
- }
- } break;
- }
- }
- else {
- back = 1;
- }
- }
- else {
- if (NULL != r) {
- back = -1;
- }
- }
- return back;
-}
-
-
-
-int
-dk4gra_pdf_compare_used_xo(
- const void *l,
- const void *r,
- int cr
-#if DK4_HAVE_ATTRIBUTE_UNUSED
- __attribute__((unused))
-#endif
-)
-{
- const dk4_gra_pdf_img_xo_t *pl;
- const dk4_gra_pdf_img_xo_t *pr;
- int back = 0;
-
-#if !DK4_HAVE_ATTRIBUTE_UNUSED
- (void)cr;
-#endif
- if (NULL != l) {
- if (NULL != r) {
- pl = (const dk4_gra_pdf_img_xo_t *)l;
- pr = (const dk4_gra_pdf_img_xo_t *)r;
- if (pl->objno > pr->objno) {
- back = 1;
- }
- else {
- if (pl->objno < pr->objno) {
- back = -1;
- }
- }
- }
- else { back = 1; }
- }
- else {
- if (NULL != r) { back = -1; }
- }
- return back;
-}
-
-
-
-/** Compare two object positions by number.
- @param l Left object.
- @param r Right object.
- @param cr Comparison criteria (0=objpos/objpos, 1=objpos/number).
- @return Comparison result.
-*/
-static
-int
-dk4gra_pdf_compare_objpos(
- const void *l,
- const void *r,
- int cr
-)
-{
- const dk4_gra_pdf_objpos_t *pl;
- const dk4_gra_pdf_objpos_t *pr;
- const size_t *psz;
- int back = 0;
-
- if (NULL != l) {
- if (NULL != r) {
- pl = (const dk4_gra_pdf_objpos_t *)l;
- switch (cr) {
- case 1 : {
- psz = (const size_t *)r;
- if (pl->num > *psz) {
- back = 1;
- }
- else {
- if (pl->num < *psz) {
- back = -1;
- }
- }
- } break;
- default : {
- pr = (const dk4_gra_pdf_objpos_t *)r;
- if (pl->num > pr->num) {
- back = 1;
- }
- else {
- if (pl->num < pr->num) {
- back = -1;
- }
- }
- } break;
- }
- }
- else {
- back = 1;
- }
- }
- else {
- if (NULL != r) {
- back = -1;
- }
- }
- return back;
-}
-
-
-
-/** Check whether two XObjects are generated from the same file.
- @param pl Left object.
- @param pr Right object.
- @return Comparison result (0 for equality).
-*/
-static
-int
-dk4gra_pdf_xo_check_same_file(
- const dk4_gra_pdf_img_xo_t *pl,
- const dk4_gra_pdf_img_xo_t *pr
-)
-{
- int back = 0;
-
-
-#line 586 "dk4grpdf.ctr"
-
-
-#line 587 "dk4grpdf.ctr"
- if (0 != pl->hufi) {
- if (0 != pr->hufi) {
- back = dk4ufi_compare(&(pl->ufi), &(pr->ufi));
-
-
-#line 591 "dk4grpdf.ctr"
- }
- else {
-
-#line 593 "dk4grpdf.ctr"
- back = 1;
- }
- }
- else {
- if (0 != pr->hufi) {
-
-#line 598 "dk4grpdf.ctr"
- back = -1;
- }
- else {
- if (NULL != pl->fn) {
- if (NULL != pr->fn) {
- back = dk4str_pathcmp(pl->fn, pr->fn);
-
-
-#line 605 "dk4grpdf.ctr"
- }
- else {
- back = 1;
-
-#line 608 "dk4grpdf.ctr"
- }
- }
- else {
- if (NULL != pr->fn) {
- back = -1;
-
-#line 613 "dk4grpdf.ctr"
- }
- else {
-
-#line 615 "dk4grpdf.ctr"
- if (pl->objno > pr->objno) {
- back = 1;
- }
- else {
- if (pl->objno < pr->objno) {
- back = -1;
- }
- }
- }
- }
- }
- }
-
-
-#line 628 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-/** Compare two integer values.
- @param l Left value.
- @param r Right value.
- @return Comparison result.
-*/
-static
-int
-dk4gra_pdf_compare_int(int l, int r)
-{
- int back = 0;
- if (l > r) {
- back = 1;
- }
- else {
- if (l < r) { back = -1; }
- }
- return back;
-}
-
-
-
-/** Compare two XObjects whether or not they contain the same file
- and frame number using same conversion settings.
- @param l Left object.
- @param r Right object.
- @param cr Comparison criteria (ignored).
- @return Comparison result.
-*/
-static
-int
-dk4gra_pdf_compare_xo(
- const void *l,
- const void *r,
- int cr
-#if DK4_HAVE_ATTRIBUTE_UNUSED
- __attribute__((unused))
-#endif
-)
-{
- const dk4_gra_pdf_img_xo_t *pl;
- const dk4_gra_pdf_img_xo_t *pr;
- int back = 0;
-
-#if !DK4_HAVE_ATTRIBUTE_UNUSED
- (void)cr;
-#endif
-
-
-#line 680 "dk4grpdf.ctr"
- if (NULL != l) {
- if (NULL != r) {
- pl = (const dk4_gra_pdf_img_xo_t *)l;
- pr = (const dk4_gra_pdf_img_xo_t *)r;
- /*
- Check whether or not both XObjects use the same file
- */
- back = dk4gra_pdf_xo_check_same_file(pl, pr);
- /*
- If the same file is used for both XObjects, check
- whether the same settings are used
- */
- if (0 == back) {
- if (pl->fno > pr->fno) {
-
-#line 694 "dk4grpdf.ctr"
- back = 1;
- }
- else {
- if (pl->fno < pr->fno) {
-
-#line 698 "dk4grpdf.ctr"
- back = -1;
- }
- }
- }
- if (0 == back) {
- back = dk4gra_pdf_compare_int(pl->dct, pr->dct);
-
-
-#line 705 "dk4grpdf.ctr"
- }
- if (0 == back) {
- back = dk4gra_pdf_compare_int(pl->ipol, pr->ipol);
-
-
-#line 709 "dk4grpdf.ctr"
- }
- if (0 == back) {
- back = dk4gra_pdf_compare_int(pl->cs, pr->cs);
-
-
-#line 713 "dk4grpdf.ctr"
- }
- if (0 == back) {
- back = dk4gra_pdf_compare_int(pl->bpc, pr->bpc);
-
-
-#line 717 "dk4grpdf.ctr"
- }
- if (0 == back) {
- back = dk4gra_pdf_compare_int(pl->deci, pr->deci);
-
-
-#line 721 "dk4grpdf.ctr"
- }
- }
- else {
-
-#line 724 "dk4grpdf.ctr"
- back = 1;
- }
- }
- else {
- if (NULL != r) {
-
-#line 729 "dk4grpdf.ctr"
- back = -1;
- }
- }
-
-
-#line 733 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-/** Destroy XObject structure, release resources.
- @param puxo XObject structure to destroy.
-*/
-void
-dk4gra_pdf_xo_delete(
- dk4_gra_pdf_img_xo_t *puxo
-)
-{
-
-
-#line 747 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != puxo);
-#endif
- if (NULL != puxo) {
-
-#line 751 "dk4grpdf.ctr"
-
-
-#line 752 "dk4grpdf.ctr"
- if (NULL != puxo->i_mb) {
-
-
-#line 754 "dk4grpdf.ctr"
- dk4membuf_close(puxo->i_mb);
-
-
-#line 756 "dk4grpdf.ctr"
- } puxo->i_mb = NULL;
-
-
-#line 758 "dk4grpdf.ctr"
- if (NULL != puxo->m_mb) {
-
-
-#line 760 "dk4grpdf.ctr"
- dk4membuf_close(puxo->m_mb);
-
-
-#line 762 "dk4grpdf.ctr"
- } puxo->m_mb = NULL;
-
-
-#line 764 "dk4grpdf.ctr"
- if (NULL != puxo->fn) {
-
-
-#line 766 "dk4grpdf.ctr"
- dk4mem_free((void *)(puxo->fn));
-
-
-#line 768 "dk4grpdf.ctr"
- } puxo->fn = NULL;
-
-
-#line 770 "dk4grpdf.ctr"
- dk4mem_free(puxo);
-
-
-#line 772 "dk4grpdf.ctr"
- }
-
-
-#line 774 "dk4grpdf.ctr"
-}
-
-
-
-/** Destroy page structure, release resources.
- @param pptr Page to destroy.
-*/
-static
-void
-dk4gra_pgf_page_delete(
- dk4_gra_pdf_page_t *pptr
-)
-{
-
-
-#line 788 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != pptr);
-#endif
- if (NULL != pptr) {
-
-#line 792 "dk4grpdf.ctr"
- if (NULL != pptr->s_uxo) {
- if (NULL != pptr->i_uxo) {
- dk4sto_it_close(pptr->i_uxo);
- }
- dk4sto_close(pptr->s_uxo);
- } pptr->s_uxo = NULL; pptr->i_uxo = NULL;
- if (NULL != pptr->costrm) {
-
-
-#line 800 "dk4grpdf.ctr"
- dk4stream_close(pptr->costrm, NULL);
-
-
-#line 802 "dk4grpdf.ctr"
- } pptr->costrm = NULL;
- if (NULL != pptr->memstrm) {
-
-
-#line 805 "dk4grpdf.ctr"
- dk4stream_close(pptr->memstrm, NULL);
-
-
-#line 807 "dk4grpdf.ctr"
- } pptr->memstrm = NULL;
- if (NULL != pptr->membuf) {
-
-
-#line 810 "dk4grpdf.ctr"
- dk4membuf_close(pptr->membuf);
-
-
-#line 812 "dk4grpdf.ctr"
- } pptr->membuf = NULL;
- pptr->outstrm = NULL;
- dk4mem_free(pptr);
- }
-
-
-#line 817 "dk4grpdf.ctr"
-}
-
-
-
-/** Write path construction commands to output stream.
- @param os Output stream.
- @param gra Output structure.
- @param backptr Address of success variable to reset on errors.
- @param erp Error report, may be NULL.
-*/
-static
-void
-dk4gra_pdf_page_box_path(
- dk4_stream_t *os,
- dk4_gra_t *gra,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != os);
-#endif
- /* 0 0 newpathmoveto
- */
- dk4gra_pdf_i_outstream_kw(os, 16, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 17, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 4, backptr, erp);
-
- /* w 0 lineto */
- dk4gratool_stream_uint(os, gra->w, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 18, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 5, backptr, erp);
-
- /* w h lineto
- */
- dk4gratool_stream_uint(os, gra->w, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_uint(os, gra->h, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 5, backptr, erp);
-
- /* 0 h lineto
- */
- dk4gra_pdf_i_outstream_kw(os, 16, backptr, erp);
- dk4gratool_stream_uint(os, gra->h, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 5, backptr, erp);
-
- /* closepath
- */
- dk4gra_pdf_i_outstream_kw(os, 7, backptr, erp);
-}
-
-
-
-/** Create new page, allocate resources.
- @param pageno Page number of new page.
- @param flags Flags to open new page.
- @param erp Error report, may be NULL.
- @return Valid pointer on success, NULL on error.
-*/
-static
-dk4_gra_pdf_page_t *
-dk4gra_pdf_page_new(
- size_t pageno,
- dk4_gra_t *gra,
- int flags,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *back = NULL;
- int ok = 0;
-
-
-#line 889 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
-#if DK4GRA_PDF_FORCE_UNCOMPRESSED
- flags |= DK4_GRA_PAGE_FLAG_NOT_COMPRESSED;
-#endif
-
-
-#line 896 "dk4grpdf.ctr"
- back = dk4mem_new(dk4_gra_pdf_page_t,1,erp);
- if (NULL == back) {
- goto finished;
- }
- back->membuf = NULL;
- back->memstrm = NULL;
- back->costrm = NULL;
- back->outstrm = NULL;
- back->s_uxo = NULL;
- back->i_uxo = NULL;
- back->pageno = pageno;
- back->objno = 0;
- back->flags = flags;
-
-#line 909 "dk4grpdf.ctr"
- dk4gratool_initialize_attributes(&(back->attr));
- back->membuf = dk4membuf_open(erp);
- if (NULL == back->membuf) {
- goto finished;
- }
- back->memstrm = dk4stream_open_membuf_writer(back->membuf, erp);
- if (NULL == back->membuf) {
- goto finished;
- }
- if (0 != (flags & DK4_GRA_PAGE_FLAG_NOT_COMPRESSED)) {
-
-#line 919 "dk4grpdf.ctr"
- back->outstrm = back->memstrm;
- ok = 1;
- }
- else {
-
-#line 923 "dk4grpdf.ctr"
- back->costrm = dk4strmco_open(
- back->memstrm,
- DK4_STRMCO_PP_NONE, DK4_STRMCO_CO_FLATE, DK4_STRMCO_OE_NONE,
- 0, erp
- );
- if (NULL != back->costrm) {
- back->outstrm = back->costrm;
- ok = 1;
- }
- }
- if (1 == ok) {
- /* TODO: gsave */
- dk4gra_pdf_i_outstream_kw(back->outstrm, 2, &ok, erp);
- /* clip */
- if (0 == (flags & DK4_GRA_PAGE_FLAG_NO_CLIP)) {
- dk4gra_pdf_page_box_path(back->outstrm, gra, &ok, erp);
- dk4gra_pdf_i_outstream_kw(back->outstrm, 13, &ok, erp);
- }
- /* fill */
- if (0 == (flags & DK4_GRA_PAGE_FLAG_NO_BG)) {
- dk4gra_pdf_i_outstream_kw(back->outstrm, 15, &ok, erp);
- dk4gra_pdf_page_box_path(back->outstrm, gra, &ok, erp);
- dk4gra_pdf_i_outstream_kw(back->outstrm, 9, &ok, erp);
- }
- }
-
- finished:
- if ((NULL != back) && (0 == ok)) {
- dk4gra_pgf_page_delete(back);
- back = NULL;
- }
-
-
-#line 955 "dk4grpdf.ctr"
-
-
-#line 956 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-/** Change current fill or stroke color if necessary.
- @param os Output stream.
- @param cpactive Active color.
- @param cprequested Requested color.
- @param fill Flag: Fill color (0=stroke color).
- @param backptr Address of success variable to reset on errors.
- @param erp Error report, may be NULL.
-*/
-static
-void
-dk4gra_pdf_set_color_if_necessary(
- dk4_stream_t *os,
- dk4gra_col_t *cpactive,
- dk4gra_col_t *cprequested,
- int fill,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != os);
- assert(NULL != cpactive);
- assert(NULL != cprequested);
-#endif
- if (dk4gratool_colors_differ(cpactive, cprequested)) {
- switch (cprequested->what) {
- case DK4_GRA_COL_SPEC_GRAY : {
- dk4gratool_stream_double(
- os, cprequested->data.gray, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(
- os, ((0 != fill) ? (19) : (20)), backptr, erp
- );
- } break;
- case DK4_GRA_COL_SPEC_CMYK : {
- dk4gratool_stream_double(
- os, cprequested->data.cmyk.c, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(
- os, cprequested->data.cmyk.m, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(
- os, cprequested->data.cmyk.y, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(
- os, cprequested->data.cmyk.k, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(
- os, ((0 != fill) ? (21) : (22)), backptr, erp
- );
- } break;
- default : { /* RGB */
- dk4gratool_stream_double(
- os, cprequested->data.rgb.r, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(
- os, cprequested->data.rgb.g, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(
- os, cprequested->data.rgb.b, backptr, erp
- );
- dk4gra_pdf_i_outstream_kw(
- os, ((0 != fill) ? (23) : (24)), backptr, erp
- );
- } break;
- }
- dk4mem_cpy(cpactive, cprequested, sizeof(dk4gra_col_t), erp);
- }
-}
-
-
-
-/** Write dash setup to output stream.
- @param os Output stream.
- @param da Dash length array.
- @param szda Size of dash length array (number of elements).
- @param phase Phase for dash pattern.
- @param backptr Address of success variable to reset on errors.
- @param erp Error report, may be NULL.
-*/
-static
-void
-dk4gra_pdf_dash_out(
- dk4_stream_t *os,
- double *da,
- size_t szda,
- double phase,
- int *backptr,
- dk4_er_t *erp
-)
-{
- size_t i;
-#if DK4_USE_ASSERT
- assert(NULL != os);
- assert(NULL != da);
- assert(0 < szda);
-#endif
- dk4gra_pdf_i_outstream_kw(os, 33, backptr, erp);
- for (i = 0; i < szda; i++) {
- if (0 < i) {
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- }
- dk4gratool_stream_double(os, da[i], backptr, erp);
- }
- dk4gra_pdf_i_outstream_kw(os, 34, backptr, erp);
- dk4gratool_stream_double(os, phase, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 35, backptr, erp);
-}
-
-
-
-/** Begin a new object, save start position.
- @param os Output stream.
- @param gra Output structure.
- @param objno Number of new object.
- @param backptr Address of success variable to reset on errors.
- @param erp Error report, may be NULL.
-*/
-static
-void
-dk4gra_pdf_begin_object(
- dk4_stream_t *os,
- dk4_gra_t *gra,
- size_t objno,
- int *backptr,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_objpos_t *ppos = NULL;
- dk4_um_t position;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != os);
-#endif
- position = dk4stream_bytes_written(os);
- dk4gratool_stream_uint(os, objno, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 37, backptr, erp);
- ppos = dk4mem_new(dk4_gra_pdf_objpos_t,1,erp);
- if (NULL != ppos) {
- ppos->pos = position;
- ppos->num = objno;
- if (0 == dk4sto_add(gra->out.pdf.s_objpos, ppos, erp)) {
- dk4mem_free(ppos);
- if (NULL != backptr) { *backptr = 0; }
- }
- }
- else {
- if (NULL != backptr) { *backptr = 0; }
- }
-}
-
-
-
-/** End current object.
- @param os Output stream.
- @param backptr Address of success variable to reset on errors.
- @param erp Error report, may be NULL.
-*/
-static
-void
-dk4gra_pdf_end_object(
- dk4_stream_t *os,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != os);
-#endif
- dk4gra_pdf_i_outstream_kw(os, 38, backptr, erp);
-}
-
-
-
-/** Enumerate pages (assign object numbers to pages).
- @param gra Output structure.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-*/
-static
-int
-dk4gra_pdf_enumerate_pages(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 1;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- dk4sto_it_reset(gra->i_pages);
- do {
- bptr = (dk4_gra_pdf_page_t *)dk4sto_it_next(gra->i_pages);
- if (NULL != bptr) {
- /*
- If gsave was issued at start of stream, issue grestore now
- */
- if (0 == ((bptr->flags) & DK4_GRA_PAGE_FLAG_NO_CLIP)) {
- if (NULL != bptr->outstrm) {
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 3, &back, erp);
- }
- }
- bptr->outstrm = NULL;
- /*
- Close compressed stream
- */
- if (NULL != bptr->costrm) {
- if (0 == dk4stream_close(bptr->costrm, erp)) { back = 0; }
- }
- bptr->costrm = NULL;
- /*
- Close memory stream
- */
- if (NULL != bptr->memstrm) {
- if (0 == dk4stream_close(bptr->memstrm, erp)) { back = 0; }
- }
- bptr->memstrm = NULL;
- /*
- Assign object number
- */
- if ((SIZE_MAX - 1) > gra->out.pdf.nextobj) {
- bptr->objno = gra->out.pdf.nextobj;
- gra->out.pdf.nextobj += 2;
- }
- else {
- dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
- back = 0;
- }
- }
- } while ((1 == back) && (NULL != bptr));
- if (SIZE_MAX <= gra->out.pdf.nextobj) {
- dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
- back = 0;
- }
- return back;
-}
-
-
-
-static
-void
-dk4gra_pdf_one_xobject(
- dk4_stream_t *os,
- dk4_gra_t *gra,
- dk4_gra_pdf_img_xo_t *puxo,
- int *backptr,
- dk4_er_t *erp
-)
-{
- size_t szmb;
-
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != os);
- assert(NULL != puxo);
-#endif
- /* Image object
- */
- dk4gra_pdf_begin_object(os, gra, puxo->objno, backptr, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, backptr, erp);
- /* /Type /XObject */
- dk4gra_pdf_i_outstream_kw(os, 73, backptr, erp);
- /* /Subtype /Image */
- dk4gra_pdf_i_outstream_kw(os, 74, backptr, erp);
- /* /Width ... */
- dk4gra_pdf_i_outstream_kw(os, 75, backptr, erp);
- dk4gratool_stream_uint(os, puxo->width, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /Height ... */
- dk4gra_pdf_i_outstream_kw(os, 76, backptr, erp);
- dk4gratool_stream_uint(os, puxo->height, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /BitsPerComponent ... */
- dk4gra_pdf_i_outstream_kw(os, 77, backptr, erp);
- dk4gratool_stream_uint(os, puxo->bpc, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /ColorSpace ... */
- switch (puxo->cs) {
- case DK4_CS_CMYK : {
- dk4gra_pdf_i_outstream_kw(os, 80, backptr, erp);
- } break;
- case DK4_CS_GRAY : case DK4_CS_GRAY_ALPHA : {
- dk4gra_pdf_i_outstream_kw(os, 79, backptr, erp);
- } break;
- default : {
- dk4gra_pdf_i_outstream_kw(os, 78, backptr, erp);
- } break;
- }
- if ((0 != puxo->mobjno) && (NULL != puxo->m_mb)) {
- /* /SMask ... */
- dk4gra_pdf_i_outstream_kw(os, 81, backptr, erp);
- dk4gratool_stream_uint(os, puxo->mobjno, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 57, backptr, erp);
- }
- /* /Interpolate ... */
- if (0 != puxo->ipol) {
- dk4gra_pdf_i_outstream_kw(os, 82, backptr, erp);
- }
- /* /Filter ... */
- dk4gra_pdf_i_outstream_kw(os,((0 != puxo->dct) ? (83) : (67)),backptr,erp);
- /* /Length ... */
- dk4gra_pdf_i_outstream_kw(os, 66, backptr, erp);
-
-
-#line 1271 "dk4grpdf.ctr"
- if (0 == dk4membuf_size(&szmb, puxo->i_mb, erp)) {
- szmb = 0;
-
-#line 1273 "dk4grpdf.ctr"
- }
- dk4gratool_stream_uint(os, szmb, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- if (0 != puxo->deci) {
- switch (puxo->cs) {
- case DK4_CS_CMYK : {
- dk4gra_pdf_i_outstream_kw(os, 85, backptr, erp);
- } break;
- case DK4_CS_RGB_ALPHA : {
- dk4gra_pdf_i_outstream_kw(os, 85, backptr, erp);
- } break;
- case DK4_CS_RGB : {
- dk4gra_pdf_i_outstream_kw(os, 86, backptr, erp);
- } break;
- case DK4_CS_GRAY_ALPHA : {
- dk4gra_pdf_i_outstream_kw(os, 87, backptr, erp);
- } break;
- case DK4_CS_GRAY : {
- dk4gra_pdf_i_outstream_kw(os, 88, backptr, erp);
- } break;
- }
- }
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, backptr, erp);
- /* stream */
- dk4gra_pdf_i_outstream_kw(os, 68, backptr, erp);
- /* Memory buffer contents */
- if (0 == dk4membuf_to_stream(os, puxo->i_mb, erp)) {
- if (NULL != backptr) { *backptr = 0; }
- }
- /* endstream */
- dk4gra_pdf_i_outstream_kw(os, 69, backptr, erp);
- dk4gra_pdf_end_object(os, backptr, erp);
- /*
- Mask object, if available
- */
- if ((0 != puxo->mobjno) && (NULL != puxo->m_mb)) {
- dk4gra_pdf_begin_object(os, gra, puxo->mobjno, backptr, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, backptr, erp);
-
- /* /Type /XObject */
- dk4gra_pdf_i_outstream_kw(os, 73, backptr, erp);
- /* /Subtype /Image */
- dk4gra_pdf_i_outstream_kw(os, 74, backptr, erp);
- /* /Width ... */
- dk4gra_pdf_i_outstream_kw(os, 75, backptr, erp);
- dk4gratool_stream_uint(os, puxo->width, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /Height ... */
- dk4gra_pdf_i_outstream_kw(os, 76, backptr, erp);
- dk4gratool_stream_uint(os, puxo->height, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /BitsPerComponent ... */
- dk4gra_pdf_i_outstream_kw(os, 77, backptr, erp);
- dk4gratool_stream_uint(os, puxo->bpc, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /ColorSpace /DeviceGray */
- dk4gra_pdf_i_outstream_kw(os, 79, backptr, erp);
- /* /Filter /FlateDecode */
- dk4gra_pdf_i_outstream_kw(os, 67, backptr, erp);
- /* /Length ... */
-
-
-#line 1336 "dk4grpdf.ctr"
- if (0 == dk4membuf_size(&szmb, puxo->m_mb, erp)) {
- szmb = 0;
-
-#line 1338 "dk4grpdf.ctr"
- }
- dk4gra_pdf_i_outstream_kw(os, 66, backptr, erp);
- dk4gratool_stream_uint(os, szmb, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, backptr, erp);
- /* stream */
- dk4gra_pdf_i_outstream_kw(os, 68, backptr, erp);
- /* Memory buffer contents */
- if (0 == dk4membuf_to_stream(os, puxo->m_mb, erp)) {
- if (NULL != backptr) { *backptr = 0; }
- }
- /* endstream */
- dk4gra_pdf_i_outstream_kw(os, 69, backptr, erp);
- dk4gra_pdf_end_object(os, backptr, erp);
- }
-}
-
-
-
-static
-void
-dk4gra_pdf_one_page(
- dk4_stream_t *os,
- dk4_gra_t *gra,
- dk4_gra_pdf_page_t *bptr,
- int *backptr,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_img_xo_t *xo;
- size_t mbs = 0;
-
-
-#line 1371 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != os);
-#endif
- dk4gra_pdf_begin_object(os, gra, bptr->objno, backptr, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, backptr, erp);
- /* /Type /Page */
- dk4gra_pdf_i_outstream_kw(os, 58, backptr, erp);
- /* /Parent 3 0 R */
- dk4gra_pdf_i_outstream_kw(os, 59, backptr, erp);
- /* /MediaBox [ 0 0 595 842 ] */
- dk4gra_pdf_i_outstream_kw(os, 60, backptr, erp);
- dk4gratool_stream_uint(os, gra->w, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_uint(os, gra->h, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 56, backptr, erp);
- /* /CropBox [ 0 0 595 842 ] */
- dk4gra_pdf_i_outstream_kw(os, 61, backptr, erp);
- dk4gratool_stream_uint(os, gra->w, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_uint(os, gra->h, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 56, backptr, erp);
- /* /Resources << */
- dk4gra_pdf_i_outstream_kw(os, 62, backptr, erp);
- /* /ProcSet [ /PDF /ImageB /ImageC ] */
- dk4gra_pdf_i_outstream_kw(os, 63, backptr, erp);
- if ((NULL != bptr->s_uxo) && (NULL != bptr->i_uxo)) {
- dk4gra_pdf_i_outstream_kw(os, 64, backptr, erp);
- dk4sto_it_reset(bptr->i_uxo);
- do {
- xo = (dk4_gra_pdf_img_xo_t *)dk4sto_it_next(bptr->i_uxo);
- if (NULL != xo) {
- dk4gra_pdf_i_outstream_kw(os, 71, backptr, erp);
- dk4gratool_stream_uint(os, xo->objno, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_uint(os, xo->objno, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 57, backptr, erp);
- }
- } while (NULL != xo);
- dk4gra_pdf_i_outstream_kw(os, 40, backptr, erp);
- }
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, backptr, erp);
- /* /Contents 12 0 R */
- dk4gra_pdf_i_outstream_kw(os, 65, backptr, erp);
- dk4gratool_stream_uint(os, (bptr->objno + 1), 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 57, backptr, erp);
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, backptr, erp);
- dk4gra_pdf_end_object(os, backptr, erp);
-
- dk4gra_pdf_begin_object(os, gra, (bptr->objno + 1), backptr, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, backptr, erp);
- /* /Length ... */
-
-
-#line 1428 "dk4grpdf.ctr"
- if (0 == dk4membuf_size(&mbs, bptr->membuf, erp)) {
-
-
-#line 1430 "dk4grpdf.ctr"
- if (NULL != backptr) { *backptr = 0; }
- }
- dk4gra_pdf_i_outstream_kw(os, 66, backptr, erp);
- dk4gratool_stream_uint(os, mbs, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- /* /Filter ... */
-
-
-#line 1437 "dk4grpdf.ctr"
- if (0 == ((bptr->flags) & DK4_GRA_PAGE_FLAG_NOT_COMPRESSED)) {
- dk4gra_pdf_i_outstream_kw(os, 67, backptr, erp);
- }
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, backptr, erp);
- /* stream */
- dk4gra_pdf_i_outstream_kw(os, 68, backptr, erp);
- /* data */
- if (0 == dk4membuf_to_stream(os, bptr->membuf, erp)) {
- if (NULL != backptr) { *backptr = 0; }
- }
- /* endstream */
- dk4gra_pdf_i_outstream_kw(os, 69, backptr, erp);
- dk4gra_pdf_end_object(os, backptr, erp);
-
-
-#line 1452 "dk4grpdf.ctr"
-}
-
-
-
-static
-void
-dk4gra_pdf_xref_section(
- dk4_stream_t *os,
- dk4_gra_t *gra,
- int *backptr,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_objpos_t *objpos;
- dk4_um_t startxrefpos;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != os);
-#endif
- startxrefpos = dk4stream_bytes_written(os);
- dk4gra_pdf_i_outstream_kw(os, 45, backptr, erp);
- dk4gratool_stream_uint(os, gra->out.pdf.nextobj, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 46, backptr, erp);
- dk4sto_it_reset(gra->out.pdf.i_objpos);
- do {
- objpos = (dk4_gra_pdf_objpos_t *)dk4sto_it_next(gra->out.pdf.i_objpos);
- if (NULL != objpos) {
- dk4gratool_stream_uint(os, objpos->pos, 10, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 47, backptr, erp);
- }
- } while (NULL != objpos);
- dk4gra_pdf_i_outstream_kw(os, 48, backptr, erp);
- dk4gratool_stream_uint(os, gra->out.pdf.nextobj, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 49, backptr, erp);
- dk4gratool_stream_uint(os, startxrefpos, 0, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 50, backptr, erp);
-}
-
-
-/** Write PDF file.
- @param fout Output file, opened for binary write operations.
- @param gra Output structure.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-*/
-static
-int
-dk4gra_pdf_file(
- FILE *fout,
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- char timestamp[64];
- dk4_gra_pdf_img_xo_t *puxo;
- dk4_gra_pdf_page_t *bptr;
- dk4_stream_t *os = NULL;
- int back = 0;
-
-
-#line 1512 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != fout);
-#endif
- if (0 == dk4gra_pdf_timestamp(timestamp, sizeof(timestamp), erp)) {
- goto finished;
- }
- os = dk4stream_open_for_file(fout, DK4_STREAM_WRITE, 4096, 4096, erp);
- if (NULL == os) { goto finished; }
- back = dk4gra_pdf_enumerate_pages(gra, erp);
-
- /* PDF line at start of file
- */
- dk4gra_pdf_i_outstream_kw(os, 36, &back, erp);
-
- /* Object 1 is Info object.
- */
- dk4gra_pdf_begin_object(os, gra, 1, &back, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, &back, erp);
- /* /Producer (http://sourceforge.net/p/dktools/wiki/Home/) */
- dk4gra_pdf_i_outstream_kw(os, 41, &back, erp);
- /* /CreationDate (D:20170324235818) */
- dk4gra_pdf_i_outstream_kw(os, 42, &back, erp);
- if (0 == dk4stream_write_char_string(os, timestamp, erp)) { back = 0; }
- dk4gra_pdf_i_outstream_kw(os, 44, &back, erp);
- /* /ModDate (D:20170324235818) */
- dk4gra_pdf_i_outstream_kw(os, 43, &back, erp);
- if (0 == dk4stream_write_char_string(os, timestamp, erp)) { back = 0; }
- dk4gra_pdf_i_outstream_kw(os, 44, &back, erp);
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, &back, erp);
- dk4gra_pdf_end_object(os, &back, erp);
-
- /* Object 2 is Root object.
- */
- dk4gra_pdf_begin_object(os, gra, 2, &back, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, &back, erp);
- /* /Type /Catalog */
- dk4gra_pdf_i_outstream_kw(os, 51, &back, erp);
- /* /Pages 3 0 R */
- dk4gra_pdf_i_outstream_kw(os, 52, &back, erp);
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, &back, erp);
- dk4gra_pdf_end_object(os, &back, erp);
-
- /* Object 3 is Pages object.
- */
- dk4gra_pdf_begin_object(os, gra, 3, &back, erp);
- /* << */
- dk4gra_pdf_i_outstream_kw(os, 39, &back, erp);
- /* /Type /Pages */
- dk4gra_pdf_i_outstream_kw(os, 53, &back, erp);
- /* /Count ... */
- dk4gra_pdf_i_outstream_kw(os, 54, &back, erp);
- dk4gratool_stream_uint(os, gra->pages, 0, &back, erp);
- dk4gra_pdf_i_outstream_kw(os, 0, &back, erp);
- /* /Kids [ */
- dk4gra_pdf_i_outstream_kw(os, 55, &back, erp);
- dk4sto_it_reset(gra->i_pages);
- do {
- bptr = (dk4_gra_pdf_page_t *)dk4sto_it_next(gra->i_pages);
- if (NULL != bptr) {
- dk4gratool_stream_uint(os, bptr->objno, 0, &back, erp);
- dk4gra_pdf_i_outstream_kw(os, 57, &back, erp);
- }
- } while (NULL != bptr);
- /* ] */
- dk4gra_pdf_i_outstream_kw(os, 56, &back, erp);
- /* >> */
- dk4gra_pdf_i_outstream_kw(os, 40, &back, erp);
- dk4gra_pdf_end_object(os, &back, erp);
-
- /* XOjects for images
- */
-
-
-#line 1589 "dk4grpdf.ctr"
- dk4sto_it_reset(gra->out.pdf.i_imagno);
- do {
- puxo = (dk4_gra_pdf_img_xo_t *)dk4sto_it_next(gra->out.pdf.i_imagno);
- if (NULL != puxo) {
-
-
-#line 1594 "dk4grpdf.ctr"
- dk4gra_pdf_one_xobject(os, gra, puxo, &back, erp);
- }
- } while (NULL != puxo);
-
-
-#line 1598 "dk4grpdf.ctr"
-
- /* Pages and content streams
- */
- dk4sto_it_reset(gra->i_pages);
- do {
- bptr = (dk4_gra_pdf_page_t *)dk4sto_it_next(gra->i_pages);
- if (NULL != bptr) {
- dk4gra_pdf_one_page(os, gra, bptr, &back, erp);
- }
- } while (NULL != bptr);
-
- /* Finishing section (xref)
- */
- dk4gra_pdf_xref_section(os, gra, &back, erp);
-
- finished:
- if (NULL != os) { if (0 == dk4stream_close(os, erp)) { back = 0; } }
-
-
-#line 1616 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-void
-dk4gra_pdf_close(
- dk4_gra_t *gra
-)
-{
- dk4_gra_pdf_page_t *bptr;
- dk4_gra_pdf_img_xo_t *puxo;
- void *vptr;
-
-
-#line 1630 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- if (NULL == gra) {
- goto finished;
- }
-
- /* Release object positions
- */
- if (NULL != gra->out.pdf.s_objpos) {
- if (NULL != gra->out.pdf.i_objpos) {
- dk4sto_it_reset(gra->out.pdf.i_objpos);
- do {
- vptr = dk4sto_it_next(gra->out.pdf.i_objpos);
- if (NULL != vptr) {
- dk4mem_free(vptr);
- }
- } while (NULL != vptr);
- dk4sto_it_close(gra->out.pdf.i_objpos);
- }
- dk4sto_close(gra->out.pdf.s_objpos);
- }
- gra->out.pdf.s_objpos = NULL;
- gra->out.pdf.i_objpos = NULL;
-
- /* Release storage and iterator sorted by XObject object number
- */
- if (NULL != gra->out.pdf.s_imagno) {
- if (NULL != gra->out.pdf.i_imagno) {
- dk4sto_it_close(gra->out.pdf.i_imagno);
- }
- dk4sto_close(gra->out.pdf.s_imagno);
- }
- gra->out.pdf.s_imagno = NULL;
- gra->out.pdf.i_imagno = NULL;
-
- /* Release pages
- */
-
-
-#line 1669 "dk4grpdf.ctr"
- if (NULL != gra->s_pages) {
- if (NULL != gra->i_pages) {
- dk4sto_it_reset(gra->i_pages);
- do {
- bptr = (dk4_gra_pdf_page_t *)dk4sto_it_next(gra->i_pages);
- if (NULL != bptr) {
- dk4gra_pgf_page_delete(bptr);
- }
- } while(NULL != bptr);
- dk4sto_it_close(gra->i_pages);
- }
- dk4sto_close(gra->s_pages);
- }
- gra->s_pages = NULL;
- gra->i_pages = NULL;
- gra->curpg = NULL;
-
-
-#line 1686 "dk4grpdf.ctr"
-
- /* Release records for embedded images
- */
-
-
-#line 1690 "dk4grpdf.ctr"
- if (NULL != gra->out.pdf.s_images) {
- if (NULL != gra->out.pdf.i_images) {
- dk4sto_it_reset(gra->out.pdf.i_images);
- do {
- puxo = (dk4_gra_pdf_img_xo_t *)dk4sto_it_next(
- gra->out.pdf.i_images
- );
- if (NULL != puxo) {
-
-
-#line 1699 "dk4grpdf.ctr"
- dk4gra_pdf_xo_delete(puxo);
- }
- } while(NULL != puxo);
- dk4sto_it_close(gra->out.pdf.i_images);
- }
- dk4sto_close(gra->out.pdf.s_images);
- }
- gra->out.pdf.s_images = NULL;
- gra->out.pdf.i_images = NULL;
-
-
-#line 1709 "dk4grpdf.ctr"
-
- /* Release file name and output structure itself
- */
- dk4gratool_close(gra);
-
- finished:
-
-
-#line 1716 "dk4grpdf.ctr"
- return;
-}
-
-
-
-dk4_gra_t *
-dk4gra_pdf_open(
- const dkChar *fn,
- size_t w,
- size_t h,
- int docfl,
- dk4_er_t *erp
-)
-{
- dk4_gra_t *back = NULL;
- int ok = 0;
-
-
-#line 1733 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != fn);
-#endif
- /*
- Generic initialization
- */
- back = dk4gratool_open(fn, w, h, docfl, erp);
- if (NULL == back) {
- goto finished;
- }
- /* PDF specific initialization
- */
- back->out.pdf.s_imagno = NULL;
- back->out.pdf.i_imagno = NULL;
- back->out.pdf.s_images = NULL;
- back->out.pdf.i_images = NULL;
- back->out.pdf.s_objpos = NULL;
- back->out.pdf.i_objpos = NULL;
- back->out.pdf.nextobj = 4;
- back->out.pdf.unxo = 0;
- /*
- Pages container and iterator
- */
- back->s_pages = dk4sto_open(erp);
- if (NULL == back->s_pages) {
- goto finished;
- }
- (void)dk4sto_set_comp(back->s_pages, dk4gra_pdf_compare_pages_by_number, 0);
- back->i_pages = dk4sto_it_open(back->s_pages, erp);
- if (NULL == back->i_pages) {
- goto finished;
- }
- /*
- PDF XObject container and iterator for embedded images
- */
- back->out.pdf.s_images = dk4sto_open(erp);
- if (NULL == back->out.pdf.s_images) {
- goto finished;
- }
- (void)dk4sto_set_comp(back->out.pdf.s_images, dk4gra_pdf_compare_xo, 0);
- back->out.pdf.i_images = dk4sto_it_open(back->out.pdf.s_images, erp);
- if (NULL == back->out.pdf.i_images) {
- goto finished;
- }
- /* PDF XObject container and iterator sorted by object number
- */
- back->out.pdf.s_imagno = dk4sto_open(erp);
- if (NULL == back->out.pdf.s_imagno) {
- goto finished;
- }
- (void)dk4sto_set_comp(back->out.pdf.s_imagno,dk4gra_pdf_compare_used_xo,0);
- back->out.pdf.i_imagno = dk4sto_it_open(back->out.pdf.s_imagno, erp);
- if (NULL == back->out.pdf.i_imagno) {
- goto finished;
- }
- /* Storage and iterator for object start positions
- */
- back->out.pdf.s_objpos = dk4sto_open(erp);
- if (NULL == back->out.pdf.s_objpos) {
- goto finished;
- }
- (void)dk4sto_set_comp(back->out.pdf.s_objpos, dk4gra_pdf_compare_objpos, 0);
- back->out.pdf.i_objpos = dk4sto_it_open(back->out.pdf.s_objpos, erp);
- if (NULL == back->out.pdf.i_objpos) {
- goto finished;
- }
- /* Finally indicate success
- */
- ok = 1;
-
- /* Cleanup section, destroy object if errors occured
- */
- finished:
- if ((NULL != back) && (0 == ok)) {
- dk4gra_pdf_close(back);
- back = NULL;
- }
-
-
-#line 1811 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-int
-dk4gra_pdf_write_file_and_close(
- FILE *fout,
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
- assert(NULL != fout);
-#endif
- back = dk4gra_pdf_file(fout, gra, erp);
- dk4gra_pdf_close(gra);
- return back;
-}
-
-
-
-int
-dk4gra_pdf_page(
- dk4_gra_t *gra,
- int flags,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *curpg = NULL;
- int back = 0;
-
-
-#line 1845 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- /*
- Check number of pages already defined
- */
- if (SIZE_MAX == gra->pages) {
- dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW);
- goto finished;
- }
- curpg = dk4gra_pdf_page_new(gra->pages, gra, flags, erp);
- if (NULL == curpg) {
- goto finished;
- }
- if (0 == dk4sto_add(gra->s_pages, curpg, erp)) {
- dk4gra_pgf_page_delete(curpg);
- goto finished;
- }
- gra->curpg = curpg;
- gra->pages += 1;
- back = 1;
-
- finished:
-
-
-#line 1869 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-int
-dk4gra_pdf_gsave(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 2, &back, erp);
-
- finished:
- return back;
-}
-
-
-
-void
-dk4gra_pdf_i_gsave(
- dk4_gra_t *gra,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- if (0 == dk4gra_pdf_gsave(gra, erp)) {
- if (NULL != backptr) { *backptr = 0; }
- }
-}
-
-
-
-int
-dk4gra_pdf_grestore(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 3, &back, erp);
-
- finished:
- return back;
-}
-
-
-
-void
-dk4gra_pdf_i_grestore(
- dk4_gra_t *gra,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- if (0 == dk4gra_pdf_grestore(gra, erp)) {
- if (NULL != backptr) { *backptr = 0; }
- }
-}
-
-
-int
-dk4gra_pdf_set_line_width(
- dk4_gra_t *gra,
- double lw,
- dk4_er_t *erp
-)
-{
-
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.lw_requested = lw;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_line_style(
- dk4_gra_t *gra,
- int ls,
- double sv,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.ls_requested = ls;
- bptr->attr.sv_requested = sv;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_line_cap(
- dk4_gra_t *gra,
- int lc,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.lc_requested = lc;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_line_join(
- dk4_gra_t *gra,
- int lj,
- double ml,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-
-
-#line 2049 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
-
-#line 2054 "dk4grpdf.ctr"
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
-
-#line 2058 "dk4grpdf.ctr"
- bptr->attr.lj_requested = lj;
- bptr->attr.ml_requested = ml;
- if (1.0 > bptr->attr.ml_requested) {
-
-#line 2061 "dk4grpdf.ctr"
- bptr->attr.ml_requested = 1.0;
- back = 0;
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- }
-
- finished:
-
-
-#line 2068 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_fill_gray(
- dk4_gra_t *gra,
- double g,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.col_fill_requested.what = DK4_GRA_COL_SPEC_GRAY;
- bptr->attr.col_fill_requested.data.gray = g;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_fill_rgb(
- dk4_gra_t *gra,
- double r,
- double g,
- double b,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.col_fill_requested.what = DK4_GRA_COL_SPEC_RGB;
- bptr->attr.col_fill_requested.data.rgb.r = r;
- bptr->attr.col_fill_requested.data.rgb.g = g;
- bptr->attr.col_fill_requested.data.rgb.b = b;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_fill_cmyk(
- dk4_gra_t *gra,
- double c,
- double m,
- double y,
- double k,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.col_fill_requested.what = DK4_GRA_COL_SPEC_CMYK;
- bptr->attr.col_fill_requested.data.cmyk.c = c;
- bptr->attr.col_fill_requested.data.cmyk.m = m;
- bptr->attr.col_fill_requested.data.cmyk.y = y;
- bptr->attr.col_fill_requested.data.cmyk.k = k;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_stroke_gray(
- dk4_gra_t *gra,
- double g,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.col_stroke_requested.what = DK4_GRA_COL_SPEC_GRAY;
- bptr->attr.col_stroke_requested.data.gray = g;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_stroke_rgb(
- dk4_gra_t *gra,
- double r,
- double g,
- double b,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.col_stroke_requested.what = DK4_GRA_COL_SPEC_RGB;
- bptr->attr.col_stroke_requested.data.rgb.r = r;
- bptr->attr.col_stroke_requested.data.rgb.g = g;
- bptr->attr.col_stroke_requested.data.rgb.b = b;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_set_stroke_cmyk(
- dk4_gra_t *gra,
- double c,
- double m,
- double y,
- double k,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- bptr->attr.col_stroke_requested.what = DK4_GRA_COL_SPEC_CMYK;
- bptr->attr.col_stroke_requested.data.cmyk.c = c;
- bptr->attr.col_stroke_requested.data.cmyk.m = m;
- bptr->attr.col_stroke_requested.data.cmyk.y = y;
- bptr->attr.col_stroke_requested.data.cmyk.k = k;
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_prepare_fill(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_set_color_if_necessary(
- bptr->outstrm,
- &(bptr->attr.col_fill_active), &(bptr->attr.col_fill_requested),
- 1, &back, erp
- );
-
- finished:
- return back;
-}
-
-
-
-
-
-int
-dk4gra_pdf_prepare_stroke(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- double da[16];
- dk4_gra_pdf_page_t *bptr;
- double gw;
- int back = 0;
- int lwc = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
-
- /* Stroke color
- */
- dk4gra_pdf_set_color_if_necessary(
- bptr->outstrm,
- &(bptr->attr.col_stroke_active), &(bptr->attr.col_stroke_requested),
- 0, &back, erp
- );
-
- /* Line width
- */
- if (
- DK4_GRA_EPSILON_LINEWIDTH
- < fabs(bptr->attr.lw_active - bptr->attr.lw_requested)
- ) {
- dk4gratool_stream_double(
- bptr->outstrm, bptr->attr.lw_requested, &back, erp
- );
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 25, &back, erp);
- bptr->attr.lw_active = bptr->attr.lw_requested;
- lwc = 1;
- }
- /* Line style
- */
- lwc = dk4gratool_line_style_differs(
- bptr->attr.ls_active, bptr->attr.ls_requested,
- bptr->attr.sv_active, bptr->attr.sv_requested,
- lwc
- );
- if (0 != lwc) {
- gw = (bptr->attr.sv_requested + bptr->attr.lw_requested) / 2.0;
- if ((2.0 * bptr->attr.lw_requested) < gw) {
- gw = 2.0 * bptr->attr.lw_requested;
- }
- switch (bptr->attr.lc_requested) {
- case DK4_GRA_LC_ROUNDED : case DK4_GRA_LC_PROJECTING : {
- gw += bptr->attr.lw_requested;
- } break;
- }
- switch (bptr->attr.ls_requested) {
- case DK4_GRA_LS_DASH : {
- da[0] = bptr->attr.sv_requested;
- da[1] = gw;
- dk4gra_pdf_dash_out(
- bptr->outstrm, da, 2, (da[0] / 2.0), &back, erp
- );
- } break;
- case DK4_GRA_LS_DOT : {
- da[0] = da[1] = bptr->attr.lw_requested;
- dk4gra_pdf_dash_out(
- bptr->outstrm, da, 2, (da[0] / 2.0), &back, erp
- );
- } break;
- case DK4_GRA_LS_DASH_DOT : {
- da[0] = bptr->attr.sv_requested;
- da[1] = gw;
- da[2] = bptr->attr.lw_requested;
- da[3] = gw;
- dk4gra_pdf_dash_out(
- bptr->outstrm, da, 4, (da[0] / 2.0), &back, erp
- );
- } break;
- case DK4_GRA_LS_DASH_DOT_DOT : {
- da[0] = bptr->attr.sv_requested;
- da[1] = gw;
- da[2] = bptr->attr.lw_requested;
- da[3] = gw;
- da[4] = bptr->attr.lw_requested;
- da[5] = gw;
- dk4gra_pdf_dash_out(
- bptr->outstrm, da, 6, (da[0] / 2.0), &back, erp
- );
- } break;
- case DK4_GRA_LS_DASH_DOT_DOT_DOT : {
- da[0] = bptr->attr.sv_requested;
- da[1] = gw;
- da[2] = bptr->attr.lw_requested;
- da[3] = gw;
- da[4] = bptr->attr.lw_requested;
- da[5] = gw;
- da[6] = bptr->attr.lw_requested;
- da[7] = gw;
- dk4gra_pdf_dash_out(
- bptr->outstrm, da, 8, (da[0] / 2.0), &back, erp
- );
- } break;
- default : { /* solid */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 32, &back, erp);
- } break;
- }
- bptr->attr.ls_active = bptr->attr.ls_requested;
- bptr->attr.sv_active = bptr->attr.sv_requested;
- }
- /* Line cap
- */
- if (bptr->attr.lc_active != bptr->attr.lc_requested) {
- switch (bptr->attr.lc_requested) {
- case DK4_GRA_LC_ROUNDED : { /* 1 */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 27, &back, erp);
- } break;
- case DK4_GRA_LC_PROJECTING : { /* 2 */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 28, &back, erp);
- } break;
- default : { /* 0 */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 26, &back, erp);
- } break;
- }
- bptr->attr.lc_active = bptr->attr.lc_requested;
- }
- /* Line join
- */
- if (bptr->attr.lj_active != bptr->attr.lj_requested) {
- switch (bptr->attr.lj_requested) {
- case DK4_GRA_LJ_ROUNDED : { /* 1 */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 30, &back, erp);
- } break;
- case DK4_GRA_LJ_BEVELED : { /* 2 */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 31, &back, erp);
- } break;
- default : { /* 0 */
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 29, &back, erp);
- } break;
- }
- bptr->attr.lj_active = bptr->attr.lj_requested;
- }
- if (DK4_GRA_LJ_MITERED == bptr->attr.lj_active) {
- if (
- DK4_GRA_EPSILON_MITERLIMIT
- < fabs(bptr->attr.ml_active - bptr->attr.ml_requested)
- ) {
- dk4gra_pdf_i_values_and_kw(
- bptr->outstrm, &(bptr->attr.ml_requested), 1, 84, &back, erp
- );
- bptr->attr.ml_active = bptr->attr.ml_requested;
- }
- }
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_prepare_fill_and_stroke(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- back = dk4gra_pdf_prepare_fill(gra, erp);
- if (0 == dk4gra_pdf_prepare_stroke(gra, erp)) {
- back = 0;
- }
- return back;
-}
-
-
-
-int
-dk4gra_pdf_fill(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_outstream_kw(
- bptr->outstrm, ((0 != gra->eor) ? (10) : (9)), &back, erp
- );
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_stroke(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_outstream_kw(bptr->outstrm, 8, &back, erp);
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_fill_and_stroke(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_outstream_kw(
- bptr->outstrm, ((0 != gra->eor) ? (12) : (11)), &back, erp
- );
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_clip(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_outstream_kw(
- bptr->outstrm, ((0 != gra->eor) ? (14) : (13)), &back, erp
- );
-
- finished:
- return back;
-}
-
-
-
-static
-void
-dk4gra_pdf_i_newpath_moveto(
- dk4_stream_t *os,
- double x,
- double y,
- int *backptr,
- dk4_er_t *erp
-)
-{
-
-
-#line 2585 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != os);
-#endif
- dk4gratool_stream_double(os, x, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, y, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 4, backptr, erp);
-
-
-#line 2593 "dk4grpdf.ctr"
-}
-
-
-
-static
-void
-dk4gra_pdf_i_lineto(
- dk4_stream_t *os,
- double x,
- double y,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != os);
-#endif
- dk4gratool_stream_double(os, x, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, y, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 5, backptr, erp);
-}
-
-
-
-static
-void
-dk4gra_pdf_i_curveto(
- dk4_stream_t *os,
- double xc1,
- double yc1,
- double xc2,
- double yc2,
- double x,
- double y,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != os);
-#endif
- dk4gratool_stream_double(os, xc1, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, yc1, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, xc2, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, yc2, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, x, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 1, backptr, erp);
- dk4gratool_stream_double(os, y, backptr, erp);
- dk4gra_pdf_i_outstream_kw(os, 6, backptr, erp);
-}
-
-
-
-static
-void
-dk4gra_pdf_i_closepath(
- dk4_stream_t *os,
- int *backptr,
- dk4_er_t *erp
-)
-{
-#if DK4_USE_ASSERT
- assert(NULL != os);
-#endif
- dk4gra_pdf_i_outstream_kw(os, 7, backptr, erp);
-}
-
-
-
-int
-dk4gra_pdf_newpath_moveto(
- dk4_gra_t *gra,
- double x,
- double y,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-
-
-#line 2678 "dk4grpdf.ctr"
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
-
-
-#line 2683 "dk4grpdf.ctr"
- if (NULL == bptr->outstrm) {
-
-
-#line 2685 "dk4grpdf.ctr"
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
-
-
-#line 2690 "dk4grpdf.ctr"
- dk4gra_pdf_i_newpath_moveto(bptr->outstrm, x, y, &back, erp);
-
- finished:
-
-
-#line 2694 "dk4grpdf.ctr"
- return back;
-}
-
-
-
-int
-dk4gra_pdf_lineto(
- dk4_gra_t *gra,
- double x,
- double y,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_lineto(bptr->outstrm, x, y, &back, erp);
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_curveto(
- dk4_gra_t *gra,
- double xc1,
- double yc1,
- double xc2,
- double yc2,
- double x,
- double y,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_curveto(
- bptr->outstrm, xc1, yc1, xc2, yc2, x, y, &back, erp
- );
-
- finished:
- return back;
-}
-
-
-
-int
-dk4gra_pdf_closepath(
- dk4_gra_t *gra,
- dk4_er_t *erp
-)
-{
- dk4_gra_pdf_page_t *bptr;
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- if (NULL == bptr->outstrm) {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- goto finished;
- }
- back = 1;
- dk4gra_pdf_i_closepath(
- bptr->outstrm, &back, erp
- );
-
- finished:
- return back;
-}
-
-
-
-void
-dk4gra_pdf_save_attributes(
- dk4_gra_t *gra
-)
-{
- dk4_gra_pdf_page_t *bptr;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- dk4mem_cpy(
- &(bptr->catt),
- &(bptr->attr),
- sizeof(dk4gra_attributes_t),
- NULL
- );
-}
-
-
-
-void
-dk4gra_pdf_restore_attributes(
- dk4_gra_t *gra
-)
-{
- dk4_gra_pdf_page_t *bptr;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- dk4mem_cpy(
- &(bptr->attr),
- &(bptr->catt),
- sizeof(dk4gra_attributes_t),
- NULL
- );
-}
-
-
-
-void
-dk4gra_pdf_reset_attributes(
- dk4_gra_t *gra
-)
-{
- dk4_gra_pdf_page_t *bptr;
-#if DK4_USE_ASSERT
- assert(NULL != gra);
-#endif
- bptr = (dk4_gra_pdf_page_t *)(gra->curpg);
- dk4gratool_reset_active_attributes(&(bptr->attr));
-}
-
-
-/* vim: set ai sw=4 ts=4 : */