diff options
Diffstat (limited to 'support/dktools/f2lpdf.c')
-rw-r--r-- | support/dktools/f2lpdf.c | 1493 |
1 files changed, 1493 insertions, 0 deletions
diff --git a/support/dktools/f2lpdf.c b/support/dktools/f2lpdf.c new file mode 100644 index 0000000000..45e44416e7 --- /dev/null +++ b/support/dktools/f2lpdf.c @@ -0,0 +1,1493 @@ +/* + WARNING: This file was generated by dkct. + 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: f2lpdf.ctr +*/ + +/* +Copyright (C) 2012-2017, Dirk Krause + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above opyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** @file f2lpdf.c The f2lpdf module. +*/ + + +#line 699 "f2lpdf.ctr" + +#include "dk3all.h" +#include "dk3bezcu.h" +#include "fig2lat.h" +#include "f2lud.h" +#include "f2lsvg.h" +#include "f2lpdf.h" +#include "dk3figto.h" +#if 0 +#include "dkt-version.h" +#endif +#include "dk4vers.h" +#include "dk3bmeo.h" +#include "dk3bm.h" +#include "dk3pdf.h" +#include "dk3bif.h" + + + + + +#line 719 "f2lpdf.ctr" + + + +/** Driver specific details for entire drawing. +*/ +typedef struct { + dk3_pdf_t *opdf; /**< Output PDF. */ + dk3_sto_t *sFonts; /**< Storage for fonts. */ + dk3_sto_it_t *iFonts; /**< Iterator for font storage. */ + dk3_sto_t *sImages; /**< Storage for image data. */ + dk3_sto_it_t *iImages; /**< Iterator for images storage. */ + char const *shortOutFile; /**< Short output file name. */ + unsigned long nFonts; /**< Number of fonts in sFonts. */ + unsigned long nImages; /**< Number of images in sImages. */ +} f2l_pdf_drawing_info_t; + + + + + + +/* ************************************************************************ */ +/* * * */ +/* * Tool functions. * */ +/* * * */ +/* ************************************************************************ */ + + +#line 743 "f2lpdf.ctr" + + + +/** Delete driver-specific details. + @param ptr Structure to delete. +*/ +static +void +f2lpdf_drawing_info_delete(f2l_pdf_drawing_info_t *ptr) +{ + f2l_text_handling_t *th; + f2l_image_t *im; + + +#line 756 "f2lpdf.ctr" + if(ptr) { + dk3_release(ptr->shortOutFile); + if(ptr->opdf) { + dk3pdf_close(ptr->opdf); + } ptr->opdf = NULL; + if(ptr->sFonts) { + if(ptr->iFonts) { + dk3sto_it_reset(ptr->iFonts); + while(NULL != (th = (f2l_text_handling_t *)dk3sto_it_next(ptr->iFonts))) + { + dk3_delete(th); + } + dk3sto_it_close(ptr->iFonts); + } + dk3sto_close(ptr->sFonts); + } ptr->sFonts = NULL; ptr->iFonts = NULL; + if(ptr->sImages) { + if(ptr->iImages) { + dk3sto_it_reset(ptr->iImages); + while(NULL != (im = (f2l_image_t *)dk3sto_it_next(ptr->iImages))) { + f2l_tool_image_delete(im); + } + dk3sto_it_close(ptr->iImages); + } + dk3sto_close(ptr->sImages); + } ptr->sImages = NULL; ptr->iImages = NULL; + ptr->nFonts = 0UL; + ptr->nImages = 0UL; + dk3_delete(ptr); + } + +#line 786 "f2lpdf.ctr" +} + + + +/** Create structure for driver-specific details. + @param job Job structure. + @param drw Drawing structure. + @return Pointer to new structure on success, NULL on error. +*/ +static +f2l_pdf_drawing_info_t * +f2lpdf_drawing_info_new( + f2l_job_t *job, + dk3_fig_drawing_t *drw +) +{ + f2l_pdf_drawing_info_t *back = NULL; + int ok = 0; /* Flag: No error. */ + + +#line 805 "f2lpdf.ctr" + if((job) && (drw)) { + back = dk3_new_app(f2l_pdf_drawing_info_t,1,job->app); + if(back) { + back->shortOutFile = NULL; + back->opdf = NULL; + back->sFonts = NULL; + back->iFonts = NULL; + back->sImages = NULL; + back->iImages = NULL; + back->nFonts = 0UL; + back->nImages = 0UL; + back->sFonts = dk3sto_open_app(job->app); + if(back->sFonts) { + dk3sto_set_comp(back->sFonts, dk3fig_tool_text_handling_compare, 0); + back->iFonts = dk3sto_it_open(back->sFonts); + if(back->iFonts) { + back->sImages = dk3sto_open_app(job->app); + if(back->sImages) { + dk3sto_set_comp(back->sImages, f2l_tool_compare_images, 0); + back->iImages = dk3sto_it_open(back->sImages); + if(back->iImages) { + back->opdf = dk3pdf_open_app(job->app); + if(back->opdf) { + ok = 1; + } + } + } + } + } + if(!(ok)) { + f2lpdf_drawing_info_delete(back); + back = NULL; + } + } else { + } + } + +#line 841 "f2lpdf.ctr" + return back; +} + + + +/* ************************************************************************ */ +/* * * */ +/* * PDF with LaTeX output driver. * */ +/* * This driver creates .tex/.pdf combinations to be included * */ +/* * in a .tex source. * */ +/* * * */ +/* ************************************************************************ */ + + +#line 851 "f2lpdf.ctr" + + + +/** Register image file name in pdi for later use. + @param job Job structure. + @param drw Drawing structure. + @param pdi PDF information structure. + @param fn Image file name to add. + @param li Line number of image object definition. + @return 1 on success, 0 on error. +*/ +static +f2l_image_t * +f2lpdf_register_image( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + f2l_pdf_drawing_info_t *pdi, + char const *fn, + unsigned long li +) +{ + dk3_ufi_t ufi; /* Unique file identifier. */ + f2l_image_t *back = NULL; /* Image information structure. */ + + if(dk3ufi_c8_get_app(&ufi, fn, job->app)) { + back = (f2l_image_t *)dk3sto_it_find_like(pdi->iImages, (void *)(&ufi), 1); + if(!(back)) { + back = f2l_tool_image_new(fn, job->app, li); + if(back) { + if(dk3sto_add(pdi->sImages, (void *)back)) { + back->imageNumber = pdi->nImages; + pdi->nImages += 1UL; + } else { + f2l_tool_image_delete(back); + back = NULL; + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 887 "f2lpdf.ctr" + } + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 890 "f2lpdf.ctr" + } + } + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 894 "f2lpdf.ctr" + } + return back; +} + + + +/** Add image XObject data to PDF. + @param job Job structure. + @param drw Drawing structure. + @param pdi PDF information structure. + @param im Image information to add. + @return 1 on success, 0 on error. +*/ +static +int +f2lpdf_add_image_to_pdf( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + f2l_pdf_drawing_info_t *pdi, + f2l_image_t *im +) +{ + dk3_bm_eps_options_t options; /* Options for PDF conversion. */ + dk3_bif_t *bif; /* Bitmap image file. */ + int back = 0; + + +#line 920 "f2lpdf.ctr" + bif = dk3bif_open_c8_filename_app( + im->filename, DK3_BIF_IMAGE_TYPE_UNKNOWN, job->app + ); + if(bif) { + dk3bmeo_init(&options); + options.app = job->app; + options.ip = 1; + options.jip = 0; + options.mode = DK3_BMEPS_MODE_PLACED_OBJECT; + options.szmode = DK3_BMEPS_SIZE_1_1; + +#line 930 "f2lpdf.ctr" + options.dr = DK3_BMEPS_DRIVER_PDF; + options.rbpc = 1; + options.dct = 1; + options.color = 1; + if(dk3bif_read_data(bif)) { + im->xo = dk3pdf_create_ixobject_progress(pdi->opdf,bif,&options,NULL,0,0); + im->width = dk3bif_get_width(bif); + im->height = dk3bif_get_height(bif); + im->xres = dk3bif_get_xres(bif); + im->yres = dk3bif_get_yres(bif); + if(im->xo) { + back = 1; + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 944 "f2lpdf.ctr" + } + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 947 "f2lpdf.ctr" + } + dk3bif_close(bif); + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 951 "f2lpdf.ctr" + } + + +#line 953 "f2lpdf.ctr" + return back; +} + + + +int +f2lpdf_pdf_with_tex_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver spec det. */ + dk3_fig_obj_t *pobj; /* Current object. */ + f2l_image_t *im; /* Current image. */ + dkChar const *oldsourcefile = NULL; /* Old source file. */ + unsigned long oldsourceline = 0UL; /* Old source line. */ + int back = 0; + int ff; /* Font flags. */ + + +#line 969 "f2lpdf.ctr" + pdi = f2lpdf_drawing_info_new(job, drw); + if(pdi) { + drw->dsd = (void *)pdi; + pdi->shortOutFile = dk3fig_tool_short_output_file_name(job->on2, job->app); + if(pdi->shortOutFile) { + back = 1; + dk3pdf_set_next_mediabox(pdi->opdf, 0L, job->lwidth, 0L, job->lheight); + oldsourcefile = dk3app_get_source_file(job->app); + oldsourceline = dk3app_get_source_line(job->app); + dk3sto_it_reset(drw->iobj); + while(NULL != (pobj = (dk3_fig_obj_t *)dk3sto_it_next(drw->iobj))) { + + +#line 981 "f2lpdf.ctr" + dk3app_set_source_line(job->app, pobj->li); + switch(pobj->ot) { + case DK3_FIG_OBJ_TEXT: { + ff = (pobj->dt).txt.ff; + if(!(ff & DK3_FIG_FONT_FLAG_HIDDEN)) { + +#line 986 "f2lpdf.ctr" + if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) { + +#line 987 "f2lpdf.ctr" + if(ff & DK3_FIG_FONT_FLAG_PS) { + +#line 988 "f2lpdf.ctr" + if(job->ntf) { + +#line 989 "f2lpdf.ctr" + pobj->dsd = (void *)f2l_tool_register_font( + pdi->sFonts, pdi->iFonts, &(pdi->nFonts), + (pobj->dt).txt.fo, (pobj->dt).txt.fs, job->app + ); + if(!(pobj->dsd)) { + back = 0; + +#line 995 "f2lpdf.ctr" + f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 996 "f2lpdf.ctr" + } + } else { + +#line 998 "f2lpdf.ctr" + } + } + } + } + } break; + case DK3_FIG_OBJ_POLYLINE: { + if(5 == pobj->st) { + +#line 1005 "f2lpdf.ctr" + pobj->dsd = + (void *)f2lpdf_register_image( + job, drw, pdi, (pobj->dt).pol.fn, pobj->li + ); + if(!(pobj->dsd)) { + back = 0; + f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1012 "f2lpdf.ctr" + } + } + } break; + } + } + dk3sto_it_reset(pdi->iImages); + while(NULL != (im = (f2l_image_t *)dk3sto_it_next(pdi->iImages))) { + if(!f2lpdf_add_image_to_pdf(job, drw, pdi, im)) { + +#line 1020 "f2lpdf.ctr" + back = 0; + f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1022 "f2lpdf.ctr" + } + } + dk3app_set_source_file(job->app, oldsourcefile); + dk3app_set_source_line(job->app, oldsourceline); + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1028 "f2lpdf.ctr" + } + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1031 "f2lpdf.ctr" + } + +#line 1032 "f2lpdf.ctr" + return back; +} + + + +void +f2lpdf_pdf_with_tex_end(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + if(drw->dsd) { + f2lpdf_drawing_info_delete((f2l_pdf_drawing_info_t *)(drw->dsd)); + drw->dsd = NULL; + } +} + + + +int +f2lpdf_pdf_with_tex_open_output_files(f2l_job_t *job) +{ + int back = 0; + job->of1 = dk3sf_fopen_app(job->on1, dkT("w"), job->app); + if(job->of1) { + job->of2 = dk3sf_fopen_app(job->on2, dkT("wb"), job->app); + if(job->of2) { + back = 1; + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1059 "f2lpdf.ctr" + } + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1062 "f2lpdf.ctr" + } + return back; +} + + + +void +f2lpdf_pdf_with_tex_close_output_files(f2l_job_t *job) +{ + if(job->of2) { + dk3sf_fclose_app(job->of2, job->app); + } + if(job->of1) { + dk3sf_fclose_app(job->of1, job->app); + } +} + + + +int +f2lpdf_pdf_with_tex_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int back = 0; + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + f2l_tool_start_tex_part( + job->of1, job, drw, pdi->shortOutFile, pdi->iFonts, pdi->nFonts + ); + if(dk3pdf_open_page_with_clip(pdi->opdf, 1)) { + back = 1; + } else { + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1096 "f2lpdf.ctr" + } + return back; +} + + + +void +f2lpdf_pdf_with_tex_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + f2l_tool_end_tex_part(job->of1); + dk3pdf_close_page(pdi->opdf); + if(!dk3pdf_write_file(pdi->opdf, job->of2)) { + /* ERROR: Failed to write PDF output file! */ + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1113 "f2lpdf.ctr" + } +} + + + +void +f2lpdf_pdf_with_tex_text_object( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double x, + double y +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + f2l_tool_text_object(job->of1, job, drw, obj, x, y, pdi->nFonts); + } +} + + + +void +f2lpdf_pdf_with_tex_image_object( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + dk3_bb_t *outbb, + int drawdir, + int *ec +) +{ + dk3_coordinates_transformation_t trans; /* Graphics state transform. */ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + f2l_image_t *im; /* Current image. */ + int res; /* Search result. */ + + +#line 1152 "f2lpdf.ctr" + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + im = (f2l_image_t *)(obj->dsd); + if((im) && (pdi)) { + +#line 1155 "f2lpdf.ctr" + if(im->xo) { + +#line 1156 "f2lpdf.ctr" + res = dk3bm_find_transformation( + &trans, outbb, drawdir, (double)(im->width), (double)(im->height), + im->xres, im->yres, ec + ); + if(res) { + +#line 1161 "f2lpdf.ctr" + res = dk3pdf_gsave(pdi->opdf); + if(!(res)) { + +#line 1163 "f2lpdf.ctr" + /* ERROR */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1166 "f2lpdf.ctr" + } + res = + dk3pdf_translate_double(pdi->opdf,trans.x_translate,trans.y_translate); + if(!(res)) { + +#line 1170 "f2lpdf.ctr" + /* ERROR */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1173 "f2lpdf.ctr" + } + if(trans.rot) { + res = dk3pdf_rotate_int(pdi->opdf, (90 * trans.rot)); + if(!(res)) { + +#line 1177 "f2lpdf.ctr" + /* ERROR */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1180 "f2lpdf.ctr" + } + } + res = dk3pdf_scale_double(pdi->opdf, trans.x_scale, trans.y_scale); + if(!(res)) { + +#line 1184 "f2lpdf.ctr" + /* ERROR */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1187 "f2lpdf.ctr" + } + res = dk3pdf_add_xobject_to_page(pdi->opdf, im->xo); + if(!(res)) { + +#line 1190 "f2lpdf.ctr" + /* ERROR */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1193 "f2lpdf.ctr" + } + res = dk3pdf_grestore(pdi->opdf); + if(!(res)) { + +#line 1196 "f2lpdf.ctr" + /* ERROR */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1199 "f2lpdf.ctr" + } + } else { + +#line 1201 "f2lpdf.ctr" + /* ERROR: Math error while searching transformation! */ + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 35); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_MATH); + +#line 1204 "f2lpdf.ctr" + } + } else { + +#line 1206 "f2lpdf.ctr" + } + } else { + +#line 1208 "f2lpdf.ctr" + } + +#line 1209 "f2lpdf.ctr" +} + + + +void +f2lpdf_pdf_with_tex_newpath( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + /* Do nothing, in PDF the moveto operator includes newpath. */ +} + + + +void +f2lpdf_pdf_with_tex_moveto( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double x, + double y +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_newpath_moveto(pdi->opdf, x, y); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1243 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_lineto( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double x, + double y +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Ouutput operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_lineto(pdi->opdf, x, y); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1267 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_curveto( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double xcs, + double ycs, + double xce, + double yce, + double xe, + double ye +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_curveto(pdi->opdf, xcs, ycs, xce, yce, xe, ye); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1294 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_closepath( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_closepath(pdi->opdf); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1316 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_fill( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_fill_eo(pdi->opdf); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1338 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_clip( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_clip_eo(pdi->opdf); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1360 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_stroke( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_stroke(pdi->opdf); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1382 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_gsave( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_gsave(pdi->opdf); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1404 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_grestore( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_grestore(pdi->opdf); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1426 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_setcolor( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double r, + double g, + double b +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_nonstroking_rgb(pdi->opdf, r, g, b); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1451 "f2lpdf.ctr" + } + res = dk3pdf_stroking_rgb(pdi->opdf, r, g, b); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1456 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_set_line_width( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double lw +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_set_linewidth(pdi->opdf, lw); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1479 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_set_line_style( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + int ls, + double sv, + double lw +) +{ + double xsv[32]; /* Strokes and gaps lengths. */ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + double ph; /* Phase. */ + double gw; /* Gap width. */ + size_t nsv; /* Number of elements xsv. */ + int res; /* Output operation result. */ + + ph = 0.0; + nsv = 0; + xsv[0] = 0.0; + gw = f2lto_find_gap_length(job, lw, sv); + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + switch(ls) { + case DK3_FIG_LS_DASH_TRIPLE_DOTTED: { + xsv[0] = sv; + xsv[1] = gw; + xsv[2] = lw; + xsv[3] = gw; + xsv[4] = lw; + xsv[5] = gw; + xsv[6] = lw; + xsv[7] = gw; + nsv = 8; + } break; + case DK3_FIG_LS_DASH_DOUBLE_DOTTED: { + xsv[0] = sv; + xsv[1] = gw; + xsv[2] = lw; + xsv[3] = gw; + xsv[4] = lw; + xsv[5] = gw; + nsv = 6; + } break; + case DK3_FIG_LS_DASH_DOTTED: { + xsv[0] = sv; + xsv[1] = gw; + xsv[2] = lw; + xsv[3] = gw; + nsv = 4; + } break; + case DK3_FIG_LS_DOTTED: { + xsv[0] = lw; xsv[1] = gw; + nsv = 2; + } break; + case DK3_FIG_LS_DASHED: { + xsv[0] = sv; xsv[1] = gw; + nsv = 2; + } break; + } + res = dk3pdf_set_line_dash(pdi->opdf, xsv, nsv, ph); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1549 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_set_line_end( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + int le +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_set_linecap(pdi->opdf, le); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1572 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_set_line_join( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + int lj +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_set_linejoin(pdi->opdf, lj); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1595 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_set_color_1( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_rgb_color_t *rgb +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_stroking_rgb(pdi->opdf, rgb->r, rgb->g, rgb->b); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1617 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_set_color_2( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_rgb_color_t *rgb +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); + if(pdi) { + res = dk3pdf_nonstroking_rgb(pdi->opdf, rgb->r, rgb->g, rgb->b); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1639 "f2lpdf.ctr" + } + } +} + + + +void +f2lpdf_pdf_with_tex_debug( + f2l_job_t *job, + char const *msg +) +{ + f2l_pdf_drawing_info_t *pdi; /* Driver specific details. */ + int res; /* Output operation result. */ + + pdi = (f2l_pdf_drawing_info_t *)((job->drw)->dsd); + if(pdi) { + res = dk3pdf_write_debug_line(pdi->opdf, msg); + if(!(res)) { + dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); + f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); + +#line 1660 "f2lpdf.ctr" + } + } +} + + + +/* ************************************************************************ */ +/* * * */ +/* * LaTeX with PDF output driver. * */ +/* * This driver combines .tex/.pdf combinations to be * */ +/* * processed with pdflatex directly. * */ +/* * * */ +/* ************************************************************************ */ + + +#line 1671 "f2lpdf.ctr" + + + +int +f2lpdf_tex_with_pdf_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + int back = 0; + back = f2lpdf_pdf_with_tex_initialize(job, drw); + return back; +} + + + +void +f2lpdf_tex_with_pdf_end(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + f2lpdf_pdf_with_tex_end(job, drw); +} + + + +int +f2lpdf_tex_with_pdf_open_output_files(f2l_job_t *job) +{ + int back = 0; + back = f2lpdf_pdf_with_tex_open_output_files(job); + return back; +} + + + +void +f2lpdf_tex_with_pdf_close_output_files(f2l_job_t *job) +{ + f2lpdf_pdf_with_tex_close_output_files(job); +} + + + +int +f2lpdf_tex_with_pdf_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + int back = 0; + f2l_tool_begin_latex_document(job->of1, job, drw); + back = f2lpdf_pdf_with_tex_start_processing(job, drw); + return back; +} + + + +void +f2lpdf_tex_with_pdf_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw) +{ + f2lpdf_pdf_with_tex_end_processing(job, drw); + f2l_tool_end_latex_document(job->of1, job, drw); +} + + + +void +f2lpdf_tex_with_pdf_text_object( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double x, + double y +) +{ + f2lpdf_pdf_with_tex_text_object(job, drw, obj, x, y); +} + + + +void +f2lpdf_tex_with_pdf_image_object( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + dk3_bb_t *outbb, + int drawdir, + int *ec +) +{ + f2lpdf_pdf_with_tex_image_object(job, drw, obj, outbb, drawdir, ec); +} + + + +void +f2lpdf_tex_with_pdf_newpath( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_newpath(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_moveto( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double x, + double y +) +{ + f2lpdf_pdf_with_tex_moveto(job, drw, obj, x, y); +} + + + +void +f2lpdf_tex_with_pdf_lineto( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double x, + double y +) +{ + f2lpdf_pdf_with_tex_lineto(job, drw, obj, x, y); +} + + + +void +f2lpdf_tex_with_pdf_curveto( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double xcs, + double ycs, + double xce, + double yce, + double xe, + double ye +) +{ + f2lpdf_pdf_with_tex_curveto(job, drw, obj, xcs, ycs, xce, yce, xe, ye); +} + + + +void +f2lpdf_tex_with_pdf_closepath( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_closepath(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_fill( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_fill(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_clip( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_clip(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_stroke( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_stroke(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_gsave( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_gsave(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_grestore( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj +) +{ + f2lpdf_pdf_with_tex_grestore(job, drw, obj); +} + + + +void +f2lpdf_tex_with_pdf_setcolor( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double r, + double g, + double b +) +{ + f2lpdf_pdf_with_tex_setcolor(job, drw, obj, r, g, b); +} + + + +void +f2lpdf_tex_with_pdf_set_line_width( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + double lw +) +{ + f2lpdf_pdf_with_tex_set_line_width(job, drw, obj, lw); +} + + + +void +f2lpdf_tex_with_pdf_set_line_style( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + int ls, + double sv, + double lw +) +{ + f2lpdf_pdf_with_tex_set_line_style(job, drw, obj, ls, sv, lw); +} + + + +void +f2lpdf_tex_with_pdf_set_line_end( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + int le +) +{ + f2lpdf_pdf_with_tex_set_line_end(job, drw, obj, le); +} + + + +void +f2lpdf_tex_with_pdf_set_line_join( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_fig_obj_t *obj, + int lj +) +{ + f2lpdf_pdf_with_tex_set_line_join(job, drw, obj, lj); +} + + + +void +f2lpdf_tex_with_pdf_set_color_1( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_rgb_color_t *rgb +) +{ + f2lpdf_pdf_with_tex_set_color_1(job, drw, rgb); +} + + + +void +f2lpdf_tex_with_pdf_set_color_2( + f2l_job_t *job, + dk3_fig_drawing_t *drw, + dk3_rgb_color_t *rgb +) +{ + f2lpdf_pdf_with_tex_set_color_2(job, drw, rgb); +} + + + +void +f2lpdf_tex_with_pdf_debug( + f2l_job_t *job, + char const *msg +) +{ + f2lpdf_pdf_with_tex_debug(job, msg); +} + |