%% options copyright owner = Dirk Krause copyright year = 2012-2014 license = bsd %% header #ifdef __cplusplus extern "C" { #endif /** Driver initialization for pdf with tex driver. @param job Job structure. @param drw Drawing structure. @return 1 on success, 0 on error. */ int f2lpdf_pdf_with_tex_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Driver cleanup for pdf with tex driver. @param job Job structure. @param drw Drawing structure. */ void f2lpdf_pdf_with_tex_end(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Open output files for pdf with tex driver. @param job Job structure. @return 1 on success, 0 on error. */ int f2lpdf_pdf_with_tex_open_output_files(f2l_job_t *job); /** Close output files for pdf with tex driver. @param job Job structure. */ void f2lpdf_pdf_with_tex_close_output_files(f2l_job_t *job); /** Write start of output for pdf with tex driver. @param job Job structure. @param drw Drawing structure. @return 1 on success, 0 on error. */ int f2lpdf_pdf_with_tex_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Write end of output for pdf with tex driver. @param job Job structure. @param drw Drawing structure. */ void f2lpdf_pdf_with_tex_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Process one text object. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param x Point x. @param y Point y. */ 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 ); /** Process one image object. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param outbb Bounding box for image. @param drawdir Drawing direction. @param ec Pointer to error code variable, may be NULL. */ 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 ); /** Start new path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_newpath( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Move to point. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param x Point x. @param y Point y. */ void f2lpdf_pdf_with_tex_moveto( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, double x, double y ); /** Draw line to point. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param x Point x. @param y Point y. */ void f2lpdf_pdf_with_tex_lineto( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, double x, double y ); /** Draw curve to point. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param xcs Start control point y. @param ycs Start control point y. @param xce End control point x. @param yce End control point y. @param xe End point x. @param ye End point y. */ 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 ); /** Close path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_closepath( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Fill path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_fill( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Clip drawing operations to path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_clip( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Stroke path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_stroke( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Save graphics state. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_gsave( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Restore graphics state. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_pdf_with_tex_grestore( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Set color. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param r Red. @param g Green. @param b Blue. */ 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 ); /** Set line width. The line width is not set again if we already have a current line width equal to the new line width. @param job Job structure. @param drw Drawing structure. @param obj Fig object. @param lw New line width in output coordinates. */ void f2lpdf_pdf_with_tex_set_line_width( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, double lw ); /** Set line style. @param job Job structure. @param drw Drawing structure. @param obj Object to set up. @param ls Line style, see @ref dk3figlinestyles. @param sv Style value in output coordinates. @param lw Dot length in output coordinates. */ 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 ); /** Set line end. @param job Job structure. @param drw Drawing structure. @param obj Fig object. @param le Line end, see @ref dk3figlinecap. */ void f2lpdf_pdf_with_tex_set_line_end( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, int le ); /** Set line join. @param job Job structure. @param drw Drawing structure. @param obj Fig object. @param lj Line join style, see @ref dk3figlinejoin. */ void f2lpdf_pdf_with_tex_set_line_join( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, int lj ); /** Set current color or stroking color (PGF, PDF). @param job Job structure. @param drw Drawing structure. @param rgb New color value. */ void f2lpdf_pdf_with_tex_set_color_1( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_rgb_color_t *rgb ); /** Set non-stroking color (PGF, PDF). @param job Job structure. @param drw Drawing structure. @param rgb New color value. */ void f2lpdf_pdf_with_tex_set_color_2( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_rgb_color_t *rgb ); /** Set non-stroking color (PGF, PDF). @param job Job structure. @param drw Drawing structure. @param rgb New color value. */ void f2lpdf_pdf_with_tex_set_color_2( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_rgb_color_t *rgb ); /** Write debugging line to output file. @param job Job structure. @param msg Message to write to output file. */ void f2lpdf_pdf_with_tex_debug( f2l_job_t *job, char const *msg ); /** Driver initialization for tex with pdf driver. @param job Job structure. @param drw Drawing structure. @return 1 on success, 0 on error. */ int f2lpdf_tex_with_pdf_initialize(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Driver cleanup for tex with pdf driver. @param job Job structure. @param drw Drawing structure. */ void f2lpdf_tex_with_pdf_end(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Open output files for tex with pdf driver. @param job Job structure. @return 1 on success, 0 on error. */ int f2lpdf_tex_with_pdf_open_output_files(f2l_job_t *job); /** Close output files for tex with pdf driver. @param job Job structure. */ void f2lpdf_tex_with_pdf_close_output_files(f2l_job_t *job); /** Write start of output for tex with pdf driver. @param job Job structure. @param drw Drawing structure. @return 1 on success, 0 on error. */ int f2lpdf_tex_with_pdf_start_processing(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Write end of output for tex with pdf driver. @param job Job structure. @param drw Drawing structure. */ void f2lpdf_tex_with_pdf_end_processing(f2l_job_t *job, dk3_fig_drawing_t *drw); /** Process one text object. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param x Point x. @param y Point y. */ 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 ); /** Process one image object. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param outbb Bounding box for image. @param drawdir Drawing direction. @param ec Pointer to error code variable, may be NULL. */ 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 ); /** Start new path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_newpath( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Move to point. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param x Point x. @param y Point y. */ void f2lpdf_tex_with_pdf_moveto( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, double x, double y ); /** Draw line to point. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param x Point x. @param y Point 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 ); /** Draw curve to point. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param xcs Start control point y. @param ycs Start control point y. @param xce End control point x. @param yce End control point y. @param xe End point x. @param ye End point 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 ); /** Close path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_closepath( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Fill path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_fill( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Clip drawing operations to path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_clip( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Stroke path. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_stroke( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Save graphics state. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_gsave( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Restore graphics state. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. */ void f2lpdf_tex_with_pdf_grestore( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj ); /** Set color. @param job Job structure. @param drw Drawing structure. @param obj Current object to process. @param r Red. @param g Green. @param b Blue. */ 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 ); /** Set line width. The line width is not set again if we already have a current line width equal to the new line width. @param job Job structure. @param drw Drawing structure. @param obj Fig object. @param lw New line width in output coordinates. */ void f2lpdf_tex_with_pdf_set_line_width( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, double lw ); /** Set line style. @param job Job structure. @param drw Drawing structure. @param obj Object to set up. @param ls Line style, see @ref dk3figlinestyles. @param sv Style value in output coordinates. @param lw Dot length in output coordinates. */ 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 ); /** Set line end. @param job Job structure. @param drw Drawing structure. @param obj Fig object. @param le Line end, see @ref dk3figlinecap. */ void f2lpdf_tex_with_pdf_set_line_end( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, int le ); /** Set line join. @param job Job structure. @param drw Drawing structure. @param obj Fig object. @param lj Line join style, see @ref dk3figlinejoin. */ void f2lpdf_tex_with_pdf_set_line_join( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_fig_obj_t *obj, int lj ); /** Set current color or stroking color (PGF, PDF). @param job Job structure. @param drw Drawing structure. @param rgb New color value. */ void f2lpdf_tex_with_pdf_set_color_1( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_rgb_color_t *rgb ); /** Set non-stroking color (PGF, PDF). @param job Job structure. @param drw Drawing structure. @param rgb New color value. */ void f2lpdf_tex_with_pdf_set_color_2( f2l_job_t *job, dk3_fig_drawing_t *drw, dk3_rgb_color_t *rgb ); /** Write debugging line to output file. @param job Job structure. @param msg Message to write to output file. */ void f2lpdf_tex_with_pdf_debug( f2l_job_t *job, char const *msg ); #ifdef __cplusplus } #endif %% module #include "dk3all.h" #include "dk3bezcu.h" #include "fig2lat.h" #include "f2lud.h" #include "f2lsvg.h" #include "f2lpdf.h" #include "dk3figto.h" #include "dkt-version.h" #include "dk3bmeo.h" #include "dk3bm.h" #include "dk3pdf.h" #include "dk3bif.h" $!trace-include /** 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. $* /** 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; $? "+ f2lpdf_drawing_info_delete" 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); } $? "- f2lpdf_drawing_info_delete" } /** 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. */ $? "+ f2lpdf_drawing_info_new" 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 { } } $? "- f2lpdf_drawing_info_new %s", TR_PTR(back) return back; } $* PDF with LaTeX output driver. This driver creates .tex/.pdf combinations to be included in a .tex source. $* /** 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); $? ". exitcode" } } else { f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } } } else { f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } 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; $? "+ f2lpdf_add_image_to_pdf" 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; $? ". szmode = 1:1" 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); $? ". exitcode" } } else { f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } dk3bif_close(bif); } else { f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } $? "- f2lpdf_add_image_to_pdf %d", back 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. */ $? "+ f2lpdf_pdf_with_tex_initialize" 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))) { $? ". object found %d %d", pobj->ot, pobj->st 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)) { $? ". not hidden" if(!(ff & DK3_FIG_FONT_FLAG_SPECIAL)) { $? ". not special" if(ff & DK3_FIG_FONT_FLAG_PS) { $? ". PS font" if(job->ntf) { $? ". ntf" 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; $? "! reg txt" f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } } else { $? ". no ntf" } } } } } break; case DK3_FIG_OBJ_POLYLINE: { if(5 == pobj->st) { $? ". image" 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); $? ". exitcode" } } } 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)) { $? "! add img" back = 0; f2l_tool_set_exit_status(job,FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } } 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); $? ". exitcode" } } else { f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } $? "- f2lpdf_pdf_with_tex_initialize %d", back 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); $? ". exitcode" } } else { f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } 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); $? ". exitcode" } 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); $? ". exitcode" } } 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. */ $? "+ f2lpdf_pdf_with_tex_image_object" pdi = (f2l_pdf_drawing_info_t *)(drw->dsd); im = (f2l_image_t *)(obj->dsd); if((im) && (pdi)) { $? ". im and pdi ok" if(im->xo) { $? ". xo ok" res = dk3bm_find_transformation( &trans, outbb, drawdir, (double)(im->width), (double)(im->height), im->xres, im->yres, ec ); if(res) { $? ". transformation" res = dk3pdf_gsave(pdi->opdf); if(!(res)) { $? "! gsave" /* ERROR */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } res = dk3pdf_translate_double(pdi->opdf,trans.x_translate,trans.y_translate); if(!(res)) { $? "! translate" /* ERROR */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } if(trans.rot) { res = dk3pdf_rotate_int(pdi->opdf, (90 * trans.rot)); if(!(res)) { $? "! rotate" /* ERROR */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } } res = dk3pdf_scale_double(pdi->opdf, trans.x_scale, trans.y_scale); if(!(res)) { $? "! scale" /* ERROR */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } res = dk3pdf_add_xobject_to_page(pdi->opdf, im->xo); if(!(res)) { $? "! add xobject to page" /* ERROR */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } res = dk3pdf_grestore(pdi->opdf); if(!(res)) { $? "! grestore" /* ERROR */ dk3app_log_1(job->app, DK3_LL_ERROR, job->msg, 41); f2l_tool_set_exit_status(job, FIG2LAT_EXIT_ERROR_SYSTEM); $? ". exitcode" } } else { $? "! failed to find transformation" /* 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); $? ". exitcode" } } else { $? "! xo" } } else { $? "! im or pdi problem" } $? "- f2lpdf_pdf_with_tex_image_object" } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } 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); $? ". exitcode" } } } $* LaTeX with PDF output driver. This driver combines .tex/.pdf combinations to be processed with pdflatex directly. $* 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); }