/* 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: dk4grpgi.ctr */ /** @file dk4grpgi.c The dk4grpgi module. */ #line 9 "dk4grpgi.ctr" #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 #define MATH_H_INCLUDED 1 #endif #endif #ifndef DK4UFI_H_INCLUDED #include "dk4ufi.h" #endif #ifndef DK4BIF_H_INCLUDED #include "dk4bif.h" #endif #ifndef DK4GRA_H_INCLUDED #include "dk4gra.h" #endif #ifndef GRA_H_INCLUDED #include "gra.h" #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #line 49 "dk4grpgi.ctr" /** Constant text fragments for PGF output. */ static const char * const dk4gra_pgf_img_kw[] = { /* 0 */ "\\begin{pgfscope}\n", /* 1 */ "\\end{pgfscope}\n", /* 2 */ "\\pgftransformshift{\\pgfpoint{", /* 3 */ "bp}{", /* 4 */ "bp}}\n", /* 5 */ "\\pgftransformrotate{", /* 6 */ "}\n", /* 7 */ "\\pgftransformxscale{", /* 8 */ "\\pgftransformyscale{", /* 9 */ "}\n", /* 10 */ "\\pgftext[left,base,at=\\pgfpointorigin]{\\pgfuseimage{PPPTim", /* 11 */ "}}\n", NULL }; int dk4gra_pgf_bif_fig_image( dk4_gra_t *gra, double *cotra, dk4_bif_t *bif, const dkChar *fn, int ifl, dk4_er_t *erp ) { dk4_gra_pgf_img_no_t to; /* Test object */ dk4_gra_pgf_img_no_t *tptr = NULL; /* Search existing or add new */ dk4_gra_pgf_page_t *bptr = NULL; /* Current page */ int back = 0; #line 87 "dk4grpgi.ctr" #if DK4_USE_ASSERT assert(NULL != gra); assert(NULL != bif); assert(NULL != cotra); assert(NULL != fn); #endif /* Check arguments */ if ((NULL == gra) || (NULL == cotra) || (NULL == bif) || (NULL == fn)) { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); goto finished; } bptr = (dk4_gra_pgf_page_t *)(gra->curpg); if (NULL == bptr->memstrm) { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); goto finished; } /* Check image file types, pdflatex can handle JPEG and PNG only */ switch (dk4bif_get_image_type(bif)) { case DK4_BIF_TYPE_NETPBM : case DK4_BIF_TYPE_TIFF : { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); goto finished; } break; } to.fn = (dkChar *)fn; to.hufi = dk4ufi_get(&(to.ufi), fn, erp); to.intp = ((0 != (DK4_GRA_IMG_FLAG_INTERPOLATION & ifl)) ? (1) : (0)); to.imgno = gra->out.pgf.n_images; if ( (0 != (DK4_GRA_IMG_FLAG_DCT & ifl)) && (DK4_BIF_TYPE_JPEG == bif->imgtype) ) { if (0 == (DK4_GRA_IMG_FLAG_DCT_INTERPOLATION & ifl)) { to.intp = 0; } } tptr = (dk4_gra_pgf_img_no_t *)dk4sto_it_find_like( gra->out.pgf.i_images, &to, 0 ); if (NULL == tptr) { if (SIZE_MAX > gra->out.pgf.n_images) { tptr = dk4gra_pgf_img_open( fn, gra->out.pgf.n_images, to.intp, erp ); if (NULL != tptr) { gra->out.pgf.n_images += (size_t)1U; if (0 != dk4sto_add(gra->out.pgf.s_images, tptr, erp)) { if (0 == dk4sto_add(gra->out.pgf.s_imagno, tptr, erp)) { tptr = NULL; } } else { dk4gra_pgf_img_close(tptr); } } } else { dk4error_set_simple_error_code(erp, DK4_E_MATH_OVERFLOW); } } if (NULL != tptr) { back = 1; /* begin pgfscope */ dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[0], &back, erp ); /* pgftransformshift */ if ( (DK4_GRA_EPSILON_COORDINATES < fabs(cotra[0])) || (DK4_GRA_EPSILON_COORDINATES < fabs(cotra[1])) ) { dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[2], &back, erp ); dk4gratool_stream_double(bptr->memstrm, cotra[0], &back, erp); dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[3], &back, erp ); dk4gratool_stream_double(bptr->memstrm, cotra[1], &back, erp); dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[4], &back, erp ); } /* pgftransformrotate */ if (DK4_GRA_EPSILON_COORDINATES < fabs(cotra[2])) { dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[5], &back, erp ); dk4gratool_stream_double(bptr->memstrm, cotra[2], &back, erp); dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[6], &back, erp ); } /* pgftransformxscale */ if (DK4_GRA_EPSILON_COORDINATES < fabs(cotra[3] - 1.0)) { dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[7], &back, erp ); dk4gratool_stream_double(bptr->memstrm, cotra[3], &back, erp); dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[9], &back, erp ); } /* pgftransformyscale */ if (DK4_GRA_EPSILON_COORDINATES < fabs(cotra[4] - 1.0)) { dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[8], &back, erp ); dk4gratool_stream_double(bptr->memstrm, cotra[4], &back, erp); dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[9], &back, erp ); } /* show image */ dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[10], &back, erp ); dk4gratool_stream_num_alpha(bptr->memstrm, tptr->imgno, &back, erp); dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[11], &back, erp ); /* end pgfscope */ dk4gratool_stream_string( bptr->memstrm, dk4gra_pgf_img_kw[1], &back, erp ); } finished: #line 219 "dk4grpgi.ctr" return back; } /* vim: set ai sw=4 ts=4 : */